diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/constants.js b/packages/manager/apps/web/client/app/components/hosting-domain-offers/constants.js
index 6ddec4623374..3ef90ec57476 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/constants.js
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/constants.js
@@ -13,6 +13,12 @@ export const CATEGORIES_MAP = {
'hosting-performance-2': 'PERFORMANCE',
'hosting-performance-3': 'PERFORMANCE',
'hosting-performance-4': 'PERFORMANCE',
+ 'hosting-free-100M': 'FREE_100M',
+ 'hosting-starter': 'STARTER',
+ 'hosting-startup': 'STARTUP',
+ 'hosting-agency': 'AGENCY',
+ 'hosting-agency-plus': 'AGENCY_PLUS',
+ 'hosting-agency-max': 'AGENCY_MAX',
};
export const CLOUDWEB_OFFER = ['cloudweb1', 'cloudweb2', 'cloudweb3'];
@@ -30,6 +36,12 @@ export const VERSION_MAP = {
'hosting-performance-2': 'PERFORMANCE_2',
'hosting-performance-3': 'PERFORMANCE_3',
'hosting-performance-4': 'PERFORMANCE_4',
+ 'hosting-free-100M': 'FREE_100M',
+ 'hosting-starter': 'STARTER',
+ 'hosting-startup': 'STARTUP',
+ 'hosting-agency': 'AGENCY',
+ 'hosting-agency-plus': 'AGENCY_PLUS',
+ 'hosting-agency-max': 'AGENCY_MAX',
};
export const BADGES = {
@@ -47,6 +59,18 @@ export const NEW_OFFERS_PLAN_CODES = {
PERFORMANCE_4: 'hosting-performance-4',
};
+export const OFFERS_PLAN_CODES = {
+ FREE_100M: 'hosting-free-100M',
+ STARTER: 'hosting-starter',
+ PERSO: 'hosting-perso',
+ STARTUP: 'hosting-startup',
+ PRO: 'hosting-pro',
+ PERFORMANCE_1: 'hosting-performance-1',
+ AGENCY: 'hosting-agency',
+ AGENCY_PLUS: 'hosting-agency-plus',
+ AGENCY_MAX: 'hosting-agency-max',
+};
+
export const WEB_CLOUD_DB_VALUES = '512MB RAM - 8GB';
export default {
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/controller.js b/packages/manager/apps/web/client/app/components/hosting-domain-offers/controller.js
index 8533b3f2e7d0..9ab68fae29fb 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/controller.js
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/controller.js
@@ -6,6 +6,7 @@ import {
NEW_OFFERS_END_DATE,
BADGES,
NEW_OFFERS_PLAN_CODES,
+ OFFERS_PLAN_CODES,
CATEGORIES_MAP,
VERSION_MAP,
CLOUDWEB_OFFER,
@@ -15,10 +16,174 @@ import {
export default class WebComponentsHostingDomainOffersController {
/* @ngInject */
- constructor($translate, $filter) {
+ constructor($translate, $filter, ovhFeatureFlipping) {
this.$translate = $translate;
+ this.ovhFeatureFlipping = ovhFeatureFlipping;
const bytes = $filter('bytes');
+ this.OFFERS = {
+ FREE_100M: {
+ TECHNICALS: [
+ { prefix: 'sites', values: [1] },
+ { prefix: 'disk', values: ['100 Mo SSD'] },
+ { prefix: 'emailStorage', values: [1, '5 Go'] },
+ ],
+ SELECTORS: {
+ FREE_100M: {
+ planCode: OFFERS_PLAN_CODES.FREE_100M,
+ },
+ },
+ },
+ STARTER: {
+ TECHNICALS: [
+ { prefix: 'sites', values: [1] },
+ { prefix: 'nddFree', values: [1] },
+ { prefix: 'emailStorage', values: [2, '5 Go'] },
+ { prefix: 'disk', values: ['1 Go SSD'] },
+ { prefix: 'cms', values: [] },
+ ],
+ SELECTORS: {
+ STARTER: {
+ planCode: OFFERS_PLAN_CODES.STARTER,
+ },
+ },
+ },
+ PERSO: {
+ TECHNICALS: [
+ { prefix: 'sites', values: [5] },
+ { prefix: 'nddFree', values: [1] },
+ { prefix: 'emailStorage', values: [10, '5 Go'] },
+ { prefix: 'disk', values: ['100 Go SSD'] },
+ { prefix: 'cms', values: [] },
+ ],
+ SELECTORS: {
+ PERSO: {
+ planCode: OFFERS_PLAN_CODES.PERSO,
+ },
+ },
+ },
+ STARTUP: {
+ TECHNICALS: [
+ { prefix: 'vcores', values: ['< 1'] },
+ { prefix: 'ram', values: ['< 1 Go'] },
+ { prefix: 'backupIncluded', values: [] },
+ { prefix: 'uptime', values: ['99,9%'] },
+ { prefix: 'disk', values: ['100 Go SSD'] },
+ { prefix: 'sites', values: [5] },
+ { prefix: 'emailStorage', values: [10, '5 Go'] },
+ { prefix: 'dbs', values: [5, '1 Go'] },
+ { prefix: 'nddFree', values: [1] },
+ ],
+ SELECTORS: {
+ STARTUP: {
+ planCode: OFFERS_PLAN_CODES.STARTUP,
+ },
+ },
+ },
+ PRO: {
+ TECHNICALS: [
+ { prefix: 'vcores', values: [1] },
+ { prefix: 'ram', values: ['2 Go'] },
+ { prefix: 'backupIncluded', values: [] },
+ { prefix: 'uptime', values: ['99,9%'] },
+ { prefix: 'disk', values: ['250 Go SSD'] },
+ { prefix: 'sites', values: [100] },
+ { prefix: 'emailStorage', values: [100, '5 Go'] },
+ { prefix: 'dbs', values: [10, '2 Go'] },
+ { prefix: 'nddFree', values: [1] },
+ { prefix: 'cdn', values: [] },
+ ],
+ SELECTORS: {
+ PRO: {
+ planCode: OFFERS_PLAN_CODES.PRO,
+ },
+ },
+ },
+ PERFORMANCE: {
+ TECHNICALS: [
+ { prefix: 'vcores', values: [2] },
+ { prefix: 'ram', values: ['4 Go'] },
+ { prefix: 'backupIncluded', values: [] },
+ { prefix: 'uptime', values: ['99,9%'] },
+ { prefix: 'disk', values: ['500 Go'] },
+ { prefix: 'sites', values: [150] },
+ { prefix: 'emailStorage', values: [1000, '5 Go'] },
+ { prefix: 'dbs', values: [20, '2 Go'] },
+ { prefix: 'webcloudDb', values: [] },
+ { prefix: 'nddFree', values: [1] },
+ { prefix: 'cdn', values: [] },
+ ],
+ SELECTORS: {
+ PERFORMANCE_1: {
+ planCode: OFFERS_PLAN_CODES.PERFORMANCE_1,
+ },
+ },
+ },
+ AGENCY: {
+ TECHNICALS: [
+ { prefix: 'sites', values: [200] },
+ { prefix: 'disk', values: ['500 Go SSD'] },
+ { prefix: 'ram', values: ['8 Go'] },
+ { prefix: 'vcores', values: [6] },
+ { prefix: 'backupIncluded', values: [] },
+ { prefix: 'uptime', values: ['99,9%'] },
+ { prefix: 'userManagement', values: [] },
+ { prefix: 'emailStorage', values: [1000, '5 Go'] },
+ { prefix: 'dbs', values: [30, '2 Go'] },
+ { prefix: 'webcloudDb', values: [] },
+ { prefix: 'cdn', values: [] },
+ { prefix: 'git', values: [] },
+ ],
+ SELECTORS: {
+ AGENCY: {
+ planCode: OFFERS_PLAN_CODES.AGENCY,
+ },
+ },
+ },
+ AGENCY_PLUS: {
+ TECHNICALS: [
+ { prefix: 'sites', values: [500] },
+ { prefix: 'disk', values: ['700 Go SSD'] },
+ { prefix: 'ram', values: ['12 Go'] },
+ { prefix: 'vcores', values: [10] },
+ { prefix: 'backupIncluded', values: [] },
+ { prefix: 'uptime', values: ['99,9%'] },
+ { prefix: 'userManagement', values: [] },
+ { prefix: 'emailStorage', values: [1000, '5 Go'] },
+ { prefix: 'dbs', values: [40, '2 Go'] },
+ { prefix: 'webcloudDb', values: [] },
+ { prefix: 'cdn', values: [] },
+ { prefix: 'git', values: [] },
+ ],
+ SELECTORS: {
+ AGENCY_PLUS: {
+ planCode: OFFERS_PLAN_CODES.AGENCY_PLUS,
+ },
+ },
+ },
+ AGENCY_MAX: {
+ TECHNICALS: [
+ { prefix: 'sites', values: [3000] },
+ { prefix: 'disk', values: ['1 To SSD'] },
+ { prefix: 'ram', values: ['16 Go'] },
+ { prefix: 'vcores', values: [14] },
+ { prefix: 'backupIncluded', values: [] },
+ { prefix: 'uptime', values: ['99,9%'] },
+ { prefix: 'userManagement', values: [] },
+ { prefix: 'emailStorage', values: [1000, '5 Go'] },
+ { prefix: 'dbs', values: [50, '2 Go'] },
+ { prefix: 'webcloudDb', values: [] },
+ { prefix: 'cdn', values: [] },
+ { prefix: 'git', values: [] },
+ ],
+ SELECTORS: {
+ AGENCY_MAX: {
+ planCode: OFFERS_PLAN_CODES.AGENCY_MAX,
+ },
+ },
+ },
+ };
+
this.NEW_OFFERS = {
PERSO: {
TECHNICALS: [
@@ -89,7 +254,19 @@ export default class WebComponentsHostingDomainOffersController {
}
$onInit() {
- this.groupedOffers = this.buildOffersGroup();
+ return this.ovhFeatureFlipping
+ .checkFeatureAvailability(['web-hosting:change-offer'])
+ .then((featureAvailability) => {
+ this.useNewOffers = featureAvailability.isFeatureAvailable(
+ 'web-hosting:change-offer',
+ );
+ })
+ .catch(() => {
+ this.useNewOffers = false;
+ })
+ .finally(() => {
+ this.groupedOffers = this.buildOffersGroup();
+ });
}
static buildBadgeModel(type, className) {
@@ -193,7 +370,8 @@ export default class WebComponentsHostingDomainOffersController {
}
getNewOffer(offerCategory) {
- return this.NEW_OFFERS[offerCategory.toUpperCase()];
+ const offers = this.useNewOffers ? this.OFFERS : this.NEW_OFFERS;
+ return offers[offerCategory.toUpperCase()];
}
getOfferTechnicalsInfo(offerCategory) {
@@ -202,10 +380,13 @@ export default class WebComponentsHostingDomainOffersController {
let serviceDatas = values[1];
if (prefix === 'services' && !serviceDatas)
serviceDatas = WEB_CLOUD_DB_VALUES;
- return this.$translate.instant(
- `web_components_hosting_domain_offers_offer_${offerCategory}_technicals_${prefix}`,
- { value1: values[0], value2: serviceDatas },
- );
+ const key = this.useNewOffers
+ ? `web_components_hosting_domain_offers_${prefix}`
+ : `web_components_hosting_domain_offers_offer_${offerCategory}_technicals_${prefix}`;
+ return this.$translate.instant(key, {
+ value1: values[0],
+ value2: serviceDatas,
+ });
},
);
}
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_de_DE.json b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_de_DE.json
index 00eb6696dd5c..cb7ef2ac0b10 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_de_DE.json
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_de_DE.json
@@ -30,5 +30,22 @@
"web_components_hosting_domain_offers_offer_badge_current": "Derzeitiges Angebot",
"web_components_hosting_domain_offers_offer_select_version_placeholder": "Version auswählen",
"web_components_hosting_domain_offers_offer_select_version_performance": "{{coreNumber}} vCores, {{ramSize}} RAM",
- "web_components_hosting_domain_offers_offer_price": "{{priceValue}} zzgl. MwSt./Monat"
-}
\ No newline at end of file
+ "web_components_hosting_domain_offers_offer_price": "{{priceValue}} zzgl. MwSt./Monat",
+ "web_components_hosting_domain_offers_offer_agency": "Agentur",
+ "web_components_hosting_domain_offers_offer_agency_plus": "Agentur Plus",
+ "web_components_hosting_domain_offers_offer_agency_max": "Agentur Max",
+ "web_components_hosting_domain_offers_sites": "{{value1}} Seiten",
+ "web_components_hosting_domain_offers_disk": "{{value1}}",
+ "web_components_hosting_domain_offers_emailStorage": "{{value1}} E-Mails {{value2}}",
+ "web_components_hosting_domain_offers_cms": "CMS 1-Klick",
+ "web_components_hosting_domain_offers_nddFree": "{{value1}} NDD kostenlos",
+ "web_components_hosting_domain_offers_vcores": "{{value1}} vCore",
+ "web_components_hosting_domain_offers_ram": "{{value1}} RAM",
+ "web_components_hosting_domain_offers_backupIncluded": "Backup inklusive",
+ "web_components_hosting_domain_offers_uptime": "Uptime {{value1}}",
+ "web_components_hosting_domain_offers_dbs": "{{value1}} DB {{value2}}",
+ "web_components_hosting_domain_offers_webcloudDb": "WebCloud DB",
+ "web_components_hosting_domain_offers_cdn": "CDN",
+ "web_components_hosting_domain_offers_git": "GIT",
+ "web_components_hosting_domain_offers_userManagement": "Benutzerverwaltung"
+}
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_en_GB.json b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_en_GB.json
index 280fe8c773bf..52c51b54b34b 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_en_GB.json
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_en_GB.json
@@ -30,5 +30,22 @@
"web_components_hosting_domain_offers_offer_badge_current": "Current solution",
"web_components_hosting_domain_offers_offer_select_version_placeholder": "Choose a version",
"web_components_hosting_domain_offers_offer_select_version_performance": "{{coreNumber}} vCores, {{ramSize}} RAM",
- "web_components_hosting_domain_offers_offer_price": "{{priceValue}} ex. VAT/month"
-}
\ No newline at end of file
+ "web_components_hosting_domain_offers_offer_price": "{{priceValue}} ex. VAT/month",
+ "web_components_hosting_domain_offers_offer_agency": "Agency",
+ "web_components_hosting_domain_offers_offer_agency_plus": "Agency Plus",
+ "web_components_hosting_domain_offers_offer_agency_max": "Agency Max",
+ "web_components_hosting_domain_offers_sites": "{{value1}} Sites",
+ "web_components_hosting_domain_offers_disk": "{{value1}}",
+ "web_components_hosting_domain_offers_emailStorage": "{{value1}} emails {{value2}}",
+ "web_components_hosting_domain_offers_cms": "CMS 1click",
+ "web_components_hosting_domain_offers_nddFree": "{{value1}} free domain",
+ "web_components_hosting_domain_offers_vcores": "{{value1}} vCore",
+ "web_components_hosting_domain_offers_ram": "{{value1}} of RAM",
+ "web_components_hosting_domain_offers_backupIncluded": "Backup included",
+ "web_components_hosting_domain_offers_uptime": "Uptime {{value1}}",
+ "web_components_hosting_domain_offers_dbs": "{{value1}} database {{value2}}",
+ "web_components_hosting_domain_offers_webcloudDb": "WebCloud Database",
+ "web_components_hosting_domain_offers_cdn": "CDN",
+ "web_components_hosting_domain_offers_git": "GIT",
+ "web_components_hosting_domain_offers_userManagement": "User management"
+}
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_es_ES.json b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_es_ES.json
index 5a1ffc21d569..583fa18963de 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_es_ES.json
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_es_ES.json
@@ -30,5 +30,22 @@
"web_components_hosting_domain_offers_offer_badge_current": "Producto actual",
"web_components_hosting_domain_offers_offer_select_version_placeholder": "Elegir una versión",
"web_components_hosting_domain_offers_offer_select_version_performance": "{{coreNumber}} vCores, {{ramSize}} RAM",
- "web_components_hosting_domain_offers_offer_price": "{{priceValue}}/mes + IVA"
-}
\ No newline at end of file
+ "web_components_hosting_domain_offers_offer_price": "{{priceValue}}/mes + IVA",
+ "web_components_hosting_domain_offers_offer_agency": "Agencia",
+ "web_components_hosting_domain_offers_offer_agency_plus": "Agencia más",
+ "web_components_hosting_domain_offers_offer_agency_max": "Agencia máxima",
+ "web_components_hosting_domain_offers_sites": "{{value1}} Sitios",
+ "web_components_hosting_domain_offers_disk": "{{value1}}",
+ "web_components_hosting_domain_offers_emailStorage": "{{value1}} correos {{value2}}",
+ "web_components_hosting_domain_offers_cms": "CMS 1clic",
+ "web_components_hosting_domain_offers_nddFree": "{{value1}} ndd gratis",
+ "web_components_hosting_domain_offers_vcores": "{{value1}} vCore",
+ "web_components_hosting_domain_offers_ram": "{{value1}} de RAM",
+ "web_components_hosting_domain_offers_backupIncluded": "Backup incluido",
+ "web_components_hosting_domain_offers_uptime": "Uptime {{value1}}",
+ "web_components_hosting_domain_offers_dbs": "{{value1}} db {{value2}}",
+ "web_components_hosting_domain_offers_webcloudDb": "WebCloud DB",
+ "web_components_hosting_domain_offers_cdn": "CDN",
+ "web_components_hosting_domain_offers_git": "GIT",
+ "web_components_hosting_domain_offers_userManagement": "Gestión de usuario"
+}
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_fr_CA.json b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_fr_CA.json
index c7d7a4b740e7..f2454ee603c3 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_fr_CA.json
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_fr_CA.json
@@ -1,5 +1,9 @@
{
"web_components_hosting_domain_offers_offer_starter": "Starter",
+ "web_components_hosting_domain_offers_offer_agency": "Agence",
+ "web_components_hosting_domain_offers_offer_agency_plus": "Agence plus",
+ "web_components_hosting_domain_offers_offer_agency_max": "Agence max",
+
"web_components_hosting_domain_offers_offer_perso": "Perso",
"web_components_hosting_domain_offers_offer_perso_technicals_discs": "{{value1}} d'espace disque",
"web_components_hosting_domain_offers_offer_perso_technicals_emails": "{{value1}} adresses e-mail",
@@ -7,6 +11,7 @@
"web_components_hosting_domain_offers_offer_perso_technicals_multisite": "Multisites",
"web_components_hosting_domain_offers_offer_perso_technicals_ftp": "Accès FTP illimité",
"web_components_hosting_domain_offers_offer_perso_technicals_dbs": "{{value1}} × base de données MySQL {{value2}}",
+
"web_components_hosting_domain_offers_offer_pro": "Pro",
"web_components_hosting_domain_offers_offer_pro_technicals_discs": "{{value1}} d'espace disque",
"web_components_hosting_domain_offers_offer_pro_technicals_emails": "{{value1}} adresses e-mail",
@@ -14,6 +19,7 @@
"web_components_hosting_domain_offers_offer_pro_technicals_multisite": "Multisites",
"web_components_hosting_domain_offers_offer_pro_technicals_ssh": "Accès SSH illimité",
"web_components_hosting_domain_offers_offer_pro_technicals_dbs": "{{value1}} × base de données MySQL {{value2}}",
+
"web_components_hosting_domain_offers_offer_performance": "Performance",
"web_components_hosting_domain_offers_offer_performance_technicals_discs": "{{value1}} d'espace disque",
"web_components_hosting_domain_offers_offer_performance_technicals_emails": "{{value1}} adresses e-mail",
@@ -30,5 +36,19 @@
"web_components_hosting_domain_offers_offer_badge_current": "Offre actuelle",
"web_components_hosting_domain_offers_offer_select_version_placeholder": "Choisir une version",
"web_components_hosting_domain_offers_offer_select_version_performance": "{{coreNumber}} vCores, {{ramSize}} RAM",
- "web_components_hosting_domain_offers_offer_price": "{{priceValue}} HT/mois"
-}
\ No newline at end of file
+ "web_components_hosting_domain_offers_offer_price": "{{priceValue}} HT/mois",
+ "web_components_hosting_domain_offers_sites": "{{value1}} Sites",
+ "web_components_hosting_domain_offers_disk": "{{value1}}",
+ "web_components_hosting_domain_offers_emailStorage": "{{value1}} mails {{value2}}",
+ "web_components_hosting_domain_offers_cms": "CMS 1clic",
+ "web_components_hosting_domain_offers_nddFree": "{{value1}} ndd free",
+ "web_components_hosting_domain_offers_vcores": "{{value1}} vCore",
+ "web_components_hosting_domain_offers_ram": "{{value1}} de RAM",
+ "web_components_hosting_domain_offers_backupIncluded": "Backup inclus",
+ "web_components_hosting_domain_offers_uptime": "Uptime {{value1}}",
+ "web_components_hosting_domain_offers_dbs": "{{value1}} db {{value2}}",
+ "web_components_hosting_domain_offers_webcloudDb": "WebCloud DB",
+ "web_components_hosting_domain_offers_cdn": "CDN",
+ "web_components_hosting_domain_offers_git": "GIT",
+ "web_components_hosting_domain_offers_userManagement": "Gestion user"
+}
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_fr_FR.json b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_fr_FR.json
index c20eeeeb53f5..f2454ee603c3 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_fr_FR.json
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_fr_FR.json
@@ -1,5 +1,9 @@
{
"web_components_hosting_domain_offers_offer_starter": "Starter",
+ "web_components_hosting_domain_offers_offer_agency": "Agence",
+ "web_components_hosting_domain_offers_offer_agency_plus": "Agence plus",
+ "web_components_hosting_domain_offers_offer_agency_max": "Agence max",
+
"web_components_hosting_domain_offers_offer_perso": "Perso",
"web_components_hosting_domain_offers_offer_perso_technicals_discs": "{{value1}} d'espace disque",
"web_components_hosting_domain_offers_offer_perso_technicals_emails": "{{value1}} adresses e-mail",
@@ -32,5 +36,19 @@
"web_components_hosting_domain_offers_offer_badge_current": "Offre actuelle",
"web_components_hosting_domain_offers_offer_select_version_placeholder": "Choisir une version",
"web_components_hosting_domain_offers_offer_select_version_performance": "{{coreNumber}} vCores, {{ramSize}} RAM",
- "web_components_hosting_domain_offers_offer_price": "{{priceValue}} HT/mois"
+ "web_components_hosting_domain_offers_offer_price": "{{priceValue}} HT/mois",
+ "web_components_hosting_domain_offers_sites": "{{value1}} Sites",
+ "web_components_hosting_domain_offers_disk": "{{value1}}",
+ "web_components_hosting_domain_offers_emailStorage": "{{value1}} mails {{value2}}",
+ "web_components_hosting_domain_offers_cms": "CMS 1clic",
+ "web_components_hosting_domain_offers_nddFree": "{{value1}} ndd free",
+ "web_components_hosting_domain_offers_vcores": "{{value1}} vCore",
+ "web_components_hosting_domain_offers_ram": "{{value1}} de RAM",
+ "web_components_hosting_domain_offers_backupIncluded": "Backup inclus",
+ "web_components_hosting_domain_offers_uptime": "Uptime {{value1}}",
+ "web_components_hosting_domain_offers_dbs": "{{value1}} db {{value2}}",
+ "web_components_hosting_domain_offers_webcloudDb": "WebCloud DB",
+ "web_components_hosting_domain_offers_cdn": "CDN",
+ "web_components_hosting_domain_offers_git": "GIT",
+ "web_components_hosting_domain_offers_userManagement": "Gestion user"
}
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_it_IT.json b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_it_IT.json
index e3340d43e8f2..798e4fc77eb7 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_it_IT.json
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_it_IT.json
@@ -30,5 +30,22 @@
"web_components_hosting_domain_offers_offer_badge_current": "Soluzione corrente",
"web_components_hosting_domain_offers_offer_select_version_placeholder": "Scegliere una versione",
"web_components_hosting_domain_offers_offer_select_version_performance": "{{coreNumber}} vCore, {{ramSize}} RAM",
- "web_components_hosting_domain_offers_offer_price": "{{priceValue}} +IVA/mese"
-}
\ No newline at end of file
+ "web_components_hosting_domain_offers_offer_price": "{{priceValue}} +IVA/mese",
+ "web_components_hosting_domain_offers_offer_agency": "Agenzia",
+ "web_components_hosting_domain_offers_offer_agency_plus": "Agenzia plus",
+ "web_components_hosting_domain_offers_offer_agency_max": "Agenzia max",
+ "web_components_hosting_domain_offers_sites": "{{value1}} Siti",
+ "web_components_hosting_domain_offers_disk": "{{value1}}",
+ "web_components_hosting_domain_offers_emailStorage": "{{value1}} email {{value2}}",
+ "web_components_hosting_domain_offers_cms": "CMS 1clic",
+ "web_components_hosting_domain_offers_nddFree": "{{value1}} ndd free",
+ "web_components_hosting_domain_offers_vcores": "{{value1}} vCore",
+ "web_components_hosting_domain_offers_ram": "{{value1}} di RAM",
+ "web_components_hosting_domain_offers_backupIncluded": "Backup inclusi",
+ "web_components_hosting_domain_offers_uptime": "Uptime {{value1}}",
+ "web_components_hosting_domain_offers_dbs": "{{value1}} db {{value2}}",
+ "web_components_hosting_domain_offers_webcloudDb": "WebCloud DB",
+ "web_components_hosting_domain_offers_cdn": "CDN",
+ "web_components_hosting_domain_offers_git": "GIT",
+ "web_components_hosting_domain_offers_userManagement": "Gestione utente"
+}
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_pl_PL.json b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_pl_PL.json
index 2eabffbe533b..a67915438cfd 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_pl_PL.json
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_pl_PL.json
@@ -30,5 +30,22 @@
"web_components_hosting_domain_offers_offer_badge_current": "Aktualna oferta",
"web_components_hosting_domain_offers_offer_select_version_placeholder": "Wybierz wersję",
"web_components_hosting_domain_offers_offer_select_version_performance": "{{coreNumber}} vCores, {{ramSize}} RAM",
- "web_components_hosting_domain_offers_offer_price": "{{priceValue}} netto/m-c"
-}
\ No newline at end of file
+ "web_components_hosting_domain_offers_offer_price": "{{priceValue}} netto/m-c",
+ "web_components_hosting_domain_offers_offer_agency": "Agencja",
+ "web_components_hosting_domain_offers_offer_agency_plus": "Agencja plus",
+ "web_components_hosting_domain_offers_offer_agency_max": "Agencja max",
+ "web_components_hosting_domain_offers_sites": "{{value1}} Strony",
+ "web_components_hosting_domain_offers_disk": "{{value1}}",
+ "web_components_hosting_domain_offers_emailStorage": "{{value1}} maile {{value2}}",
+ "web_components_hosting_domain_offers_cms": "CMS 1klik",
+ "web_components_hosting_domain_offers_nddFree": "{{value1}} ndd free",
+ "web_components_hosting_domain_offers_vcores": "{{value1}} vCore",
+ "web_components_hosting_domain_offers_ram": "{{value1}} RAM",
+ "web_components_hosting_domain_offers_backupIncluded": "Backup wliczony",
+ "web_components_hosting_domain_offers_uptime": "Uptime {{value1}}",
+ "web_components_hosting_domain_offers_dbs": "{{value1}} db {{value2}}",
+ "web_components_hosting_domain_offers_webcloudDb": "WebCloud DB",
+ "web_components_hosting_domain_offers_cdn": "CDN",
+ "web_components_hosting_domain_offers_git": "GIT",
+ "web_components_hosting_domain_offers_userManagement": "Zarządzanie użytkownikami"
+}
diff --git a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_pt_PT.json b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_pt_PT.json
index a6be859398c0..ae4adc9d0d9f 100644
--- a/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_pt_PT.json
+++ b/packages/manager/apps/web/client/app/components/hosting-domain-offers/translations/Messages_pt_PT.json
@@ -30,5 +30,22 @@
"web_components_hosting_domain_offers_offer_badge_current": "Oferta atual",
"web_components_hosting_domain_offers_offer_select_version_placeholder": "Escolher uma versão",
"web_components_hosting_domain_offers_offer_select_version_performance": "{{coreNumber}} vCores, {{ramSize}} RAM",
- "web_components_hosting_domain_offers_offer_price": "{{priceValue}} /mês + IVA"
-}
\ No newline at end of file
+ "web_components_hosting_domain_offers_offer_price": "{{priceValue}} /mês + IVA",
+ "web_components_hosting_domain_offers_offer_agency": "Agência",
+ "web_components_hosting_domain_offers_offer_agency_plus": "Agência mais",
+ "web_components_hosting_domain_offers_offer_agency_max": "Agência máxima",
+ "web_components_hosting_domain_offers_sites": "{{value1}} Sites",
+ "web_components_hosting_domain_offers_disk": "{{value1}}",
+ "web_components_hosting_domain_offers_emailStorage": "{{value1}} e-mails {{value2}}",
+ "web_components_hosting_domain_offers_cms": "CMS 1clic",
+ "web_components_hosting_domain_offers_nddFree": "{{value1}} ndd grátis",
+ "web_components_hosting_domain_offers_vcores": "{{value1}} vCore",
+ "web_components_hosting_domain_offers_ram": "{{value1}} de RAM",
+ "web_components_hosting_domain_offers_backupIncluded": "Backup incluído",
+ "web_components_hosting_domain_offers_uptime": "Uptime {{value1}}",
+ "web_components_hosting_domain_offers_dbs": "{{value1}} db {{value2}}",
+ "web_components_hosting_domain_offers_webcloudDb": "WebCloud DB",
+ "web_components_hosting_domain_offers_cdn": "CDN",
+ "web_components_hosting_domain_offers_git": "GIT",
+ "web_components_hosting_domain_offers_userManagement": "Gestão de utilizador"
+}
diff --git a/packages/manager/apps/web/client/app/hosting/cdn/order/hosting-cdn-order.routing.js b/packages/manager/apps/web/client/app/hosting/cdn/order/hosting-cdn-order.routing.js
index d3e958e2992d..d93c8cb4bc53 100644
--- a/packages/manager/apps/web/client/app/hosting/cdn/order/hosting-cdn-order.routing.js
+++ b/packages/manager/apps/web/client/app/hosting/cdn/order/hosting-cdn-order.routing.js
@@ -165,30 +165,50 @@ export default /* @ngInject */ ($stateProvider) => {
workflowOptions: /* @ngInject */ (
catalog,
cdnProperties,
+ serviceInfo,
serviceName,
trackClick,
- ) => ({
- catalog,
- catalogItemTypeName: workflowConstants.CATALOG_ITEM_TYPE_NAMES.ADDON,
- onPricingSubmit: (pricing) => {
- trackClick({
- ...ORDER_CDN_TRACKING.PRICING.NEXT,
- name: ORDER_CDN_TRACKING.PRICING.NEXT.name.replace(
- /{{pricing}}/g,
- `${pricing.interval}M`,
- ),
- });
- },
- onValidateSubmit() {
- const newPlanCode = this.getPlanCode();
-
- trackClick('web::hosting::cdn::order::confirm');
- trackClick(`web_hosting_cdn_order::order::${newPlanCode}`);
- },
- productName: HOSTING_PRODUCT_NAME,
- serviceNameToAddProduct: serviceName,
- expressOrder: true,
- }),
+ ) => {
+ const renewPeriod = serviceInfo?.renew?.period;
+ const filteredCatalog =
+ renewPeriod != null
+ ? {
+ ...catalog,
+ addons: (catalog.addons || []).map((addon) => ({
+ ...addon,
+ pricings: (addon.pricings || []).filter(
+ (p) =>
+ !(p.capacities || []).includes(
+ pricingConstants.PRICING_CAPACITIES.RENEW,
+ ) || p.interval === renewPeriod,
+ ),
+ })),
+ }
+ : catalog;
+
+ return {
+ catalog: filteredCatalog,
+ catalogItemTypeName: workflowConstants.CATALOG_ITEM_TYPE_NAMES.ADDON,
+ onPricingSubmit: (pricing) => {
+ trackClick({
+ ...ORDER_CDN_TRACKING.PRICING.NEXT,
+ name: ORDER_CDN_TRACKING.PRICING.NEXT.name.replace(
+ /{{pricing}}/g,
+ `${pricing.interval}M`,
+ ),
+ });
+ },
+ onValidateSubmit() {
+ const newPlanCode = this.getPlanCode();
+
+ trackClick('web::hosting::cdn::order::confirm');
+ trackClick(`web_hosting_cdn_order::order::${newPlanCode}`);
+ },
+ productName: HOSTING_PRODUCT_NAME,
+ serviceNameToAddProduct: serviceName,
+ expressOrder: true,
+ };
+ },
trackClick: /* @ngInject */ (atInternet) => (hit) => {
atInternet.trackClick({
...hit,
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/hosting.controller.js b/packages/manager/apps/web/client/app/hosting/dashboard/hosting.controller.js
index ed5b0909d9a9..b86099c3b41b 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/hosting.controller.js
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/hosting.controller.js
@@ -71,6 +71,7 @@ export default class {
user,
userStatisticsLink,
userLogsLink,
+ isChangeOfferFeatureAvailable,
isWebsiteFeatureAvailable,
isOslToLdpFeatureAvailable,
HOSTING_STATUS,
@@ -140,6 +141,7 @@ export default class {
this.user = user;
this.userStatisticsLink = userStatisticsLink;
this.userLogsLink = userLogsLink;
+ this.isChangeOfferFeatureAvailable = isChangeOfferFeatureAvailable;
this.isOslToLdpFeatureAvailable = isOslToLdpFeatureAvailable;
this.DOMAIN_ORDER_URL = DOMAIN_ORDER_URL;
this.HOSTING_ORDER_URL = HOSTING_ORDER_URL;
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/hosting.html b/packages/manager/apps/web/client/app/hosting/dashboard/hosting.html
index a63d71d8a18f..ffca1a956459 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/hosting.html
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/hosting.html
@@ -180,6 +180,20 @@
data-ovh-alert-hide-remove-button
class="mt-4"
>
+
+
+
+
+
{
configurationSelected: true,
});
},
+ isChangeOfferFeatureAvailable: /* @ngInject */ (ovhFeatureFlipping) =>
+ ovhFeatureFlipping
+ .checkFeatureAvailability('web-hosting:change-offer')
+ .then((featureAvailability) =>
+ featureAvailability.isFeatureAvailable('web-hosting:change-offer'),
+ )
+ .catch(() => false),
isLocalSeoAvailable: /* @ngInject */ (availableOptions) =>
availableOptions.find(({ family }) => family === LOCAL_SEO_FAMILY),
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_de_DE.json b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_de_DE.json
index 724cdc52d38b..5cb99bd6e47d 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_de_DE.json
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_de_DE.json
@@ -1,4 +1,6 @@
{
+ "hosting_change_offer_banner": "Unsere Webhosting-Angebote entwickeln sich ab dem 1. Juni 2026 weiter. Entdecken Sie die Verbesserungen und Neuheiten, die enthalten sind.",
+ "hosting_change_offer_banner_link": "Mehr erfahren",
"hosting_change_offer_for_service": "Der Dienst ist für dieses Angebot nicht verfügbar.",
"hosting_change_offer_for_service_offer": "Dieser Dienst ist für das {{offer}} Angebot nicht verfügbar.",
"hosting_common_password_conditions": "Bitte beachten Sie, dass das Passwort nach folgenden Regeln vergeben werden muss:
- mindestens {{t0}} Zeichen
- höchstens {{t1}} Zeichen
- mindestens ein Großbuchstabe
- mindestens ein Kleinbuchstabe
- mindestens eine Zahl
- ausschließlich Zahlen und Buchstaben",
@@ -1127,6 +1129,16 @@
"hosting_order_upgrade_start_time_summary_today": "Update geplant für heute um {{time}}.",
"hosting_order_upgrade_start_time_summary_tomorrow": "Update geplant für morgen um {{time}}.",
"hosting_order_upgrade_no_contract": "Keine neuen Verträge zur Validierung vorhanden",
+ "hosting_order_upgrade_summary_empty": "Ihr Warenkorb ist leer",
+ "hosting_order_upgrade_summary_product": "Webhosting",
+ "hosting_order_upgrade_summary_product_lower": "Webhosting",
+ "hosting_order_upgrade_summary_duration": "Dauer",
+ "hosting_order_upgrade_summary_duration_value": "12 Monate",
+ "hosting_order_upgrade_summary_options": "Optionen",
+ "hosting_order_upgrade_summary_included": "Inklusive",
+ "hosting_order_upgrade_summary_total": "Summe",
+ "hosting_order_upgrade_summary_vat_period": "HT/12 Monate",
+ "hosting_order_upgrade_summary_cta": "Bestellung fortsetzen",
"hosting_migrate_my_ovh_org_success": "Die Migration Ihrer ovh.org-Domain wurde registriert. Sobald sie abgeschlossen ist, erhalten Sie eine E-Mail.",
"hosting_migrate_my_ovh_org_error": "Bei der Migration Ihrer OVH Domain ist ein Fehler aufgetreten.",
"hosting_tab_DATABASES_configuration_order_title_button_public": "Eine Datenbank bestellen",
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_en_GB.json b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_en_GB.json
index d21582dc7641..b414e351798e 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_en_GB.json
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_en_GB.json
@@ -1,4 +1,6 @@
{
+ "hosting_change_offer_banner": "Our web hosting offers will evolve from 1st June 2026. Discover the improvements and new features included.",
+ "hosting_change_offer_banner_link": "Find out more",
"hosting_change_offer_for_service": "This service is not available for this solution.",
"hosting_change_offer_for_service_offer": "This service is not accessible for the {{offer}} solution.",
"hosting_common_password_conditions": "Please note that the password must meet the following criteria:
- Minimum {{t0}} characters
- Maximum {{t1}} characters
- At least one capital letter
- At least one lower-case letter
- At least one number
- Must only contain letters and numbers",
@@ -1127,6 +1129,16 @@
"hosting_order_upgrade_start_time_summary_today": "Update scheduled at {{time}} today.",
"hosting_order_upgrade_start_time_summary_tomorrow": "Update scheduled at {{time}} tomorrow.",
"hosting_order_upgrade_no_contract": "No new contracts to validate",
+ "hosting_order_upgrade_summary_empty": "Your basket is empty.",
+ "hosting_order_upgrade_summary_product": "Web hosting",
+ "hosting_order_upgrade_summary_product_lower": "web hosting plan",
+ "hosting_order_upgrade_summary_duration": "Duration",
+ "hosting_order_upgrade_summary_duration_value": "12 months",
+ "hosting_order_upgrade_summary_options": "Options",
+ "hosting_order_upgrade_summary_included": "Included",
+ "hosting_order_upgrade_summary_total": "Total",
+ "hosting_order_upgrade_summary_vat_period": "Excl. VAT/12 months",
+ "hosting_order_upgrade_summary_cta": "Continue the order.",
"hosting_migrate_my_ovh_org_success": "Your ovh.org domain migration has been processed. You will receive an email when it is complete.",
"hosting_migrate_my_ovh_org_error": "An error has occurred migrating your ovh.org domain. ",
"hosting_tab_DATABASES_configuration_order_title_button_public": "Order a database",
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_es_ES.json b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_es_ES.json
index d22a89ec7f52..6b7f183a787f 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_es_ES.json
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_es_ES.json
@@ -1,4 +1,6 @@
{
+ "hosting_change_offer_banner": "Nuestras ofertas de alojamiento web evolucionarán a partir del 1 de junio de 2026. Descubrid las mejoras y las novedades incluidas.",
+ "hosting_change_offer_banner_link": "Más información",
"hosting_change_offer_for_service": "El servicio no está disponible para este producto.",
"hosting_change_offer_for_service_offer": "Este servicio no está disponible para la solución {{offer}}.",
"hosting_common_password_conditions": "Atención: La contraseña debe cumplir los siguientes criterios:
- mínimo {{t0}} caracteres
- máximo {{t1}} caracteres
- al menos una letra mayúscula
- al menos una letra minúscula
- al menos una cifra
- debe estar compuesto únicamente por cifras y letras",
@@ -1117,6 +1119,16 @@
"hosting_order_upgrade_start_time_summary_today": "Actualización prevista a las {{time}} hoy.",
"hosting_order_upgrade_start_time_summary_tomorrow": "Actualización prevista a las {{time}} mañana.",
"hosting_order_upgrade_no_contract": "No hay ningún contrato pendiente de validación.",
+ "hosting_order_upgrade_summary_empty": "Vuestro carrito está vacío.",
+ "hosting_order_upgrade_summary_product": "Web hosting",
+ "hosting_order_upgrade_summary_product_lower": "alojamiento web",
+ "hosting_order_upgrade_summary_duration": "Duración",
+ "hosting_order_upgrade_summary_duration_value": "12 meses",
+ "hosting_order_upgrade_summary_options": "Opciones",
+ "hosting_order_upgrade_summary_included": "Incluido",
+ "hosting_order_upgrade_summary_total": "Total",
+ "hosting_order_upgrade_summary_vat_period": "Sin IVA/12 meses",
+ "hosting_order_upgrade_summary_cta": "Continuar con el pedido",
"hosting_migrate_my_ovh_org_success": "Hemos recibido la solicitud de migración de su dominio .ovh.org. Recibirá una notificación por correo electrónico cuando haya finalizado.",
"hosting_migrate_my_ovh_org_error": "Se ha producido un error al migrar su dominio .ovh.org.",
"hosting_tab_DATABASES_configuration_order_title_button_public": "Contratar una base de datos",
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_fr_CA.json b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_fr_CA.json
index cc8c5a68a33d..f29e8f858345 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_fr_CA.json
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_fr_CA.json
@@ -1,4 +1,6 @@
{
+ "hosting_change_offer_banner": "Nos offres d'hébergement web évoluent à partir du 1er juin 2026. Découvrez les améliorations et les nouveautés incluses.",
+ "hosting_change_offer_banner_link": "En savoir plus",
"hosting_change_offer_for_service": "Ce service n'est pas accessible pour cette offre.",
"hosting_change_offer_for_service_offer": "Ce service n'est pas accessible pour l'offre {{offer}}.",
"hosting_common_password_conditions": "Attention, le mot de passe doit respecter les conditions suivantes :
- Minimum {{t0}} caractères
- Maximum {{t1}} caractères
- Au moins une lettre majuscule
- Au moins une lettre minuscule
- Au moins un chiffre
- Doit être composé uniquement de chiffres et de lettres",
@@ -1146,6 +1148,16 @@
"hosting_order_upgrade_start_time_summary_today": "Mise à jour prévue à {{time}} aujourd'hui.",
"hosting_order_upgrade_start_time_summary_tomorrow": "Mise à jour prévue à {{time}} demain.",
"hosting_order_upgrade_no_contract": "Pas de nouveaux contrats à valider",
+ "hosting_order_upgrade_summary_empty": "Votre panier est vide",
+ "hosting_order_upgrade_summary_product": "Hébergement Web",
+ "hosting_order_upgrade_summary_product_lower": "hébergement web",
+ "hosting_order_upgrade_summary_duration": "Durée",
+ "hosting_order_upgrade_summary_duration_value": "12 mois",
+ "hosting_order_upgrade_summary_options": "Options",
+ "hosting_order_upgrade_summary_included": "Inclus",
+ "hosting_order_upgrade_summary_total": "Total",
+ "hosting_order_upgrade_summary_vat_period": "HT/12 mois",
+ "hosting_order_upgrade_summary_cta": "Continuer la commande",
"hosting_migrate_my_ovh_org_success": "La migration de votre domaine ovh.org a bien été prise en compte. Vous recevrez un e-mail lorsqu'elle sera terminée.",
"hosting_migrate_my_ovh_org_error": "Une erreur est survenue lors de la migration de votre domaine ovh.org.",
"hosting_tab_DATABASES_configuration_order_title_button_public": "Commander une base de données",
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_fr_FR.json b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_fr_FR.json
index cc8c5a68a33d..f29e8f858345 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_fr_FR.json
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_fr_FR.json
@@ -1,4 +1,6 @@
{
+ "hosting_change_offer_banner": "Nos offres d'hébergement web évoluent à partir du 1er juin 2026. Découvrez les améliorations et les nouveautés incluses.",
+ "hosting_change_offer_banner_link": "En savoir plus",
"hosting_change_offer_for_service": "Ce service n'est pas accessible pour cette offre.",
"hosting_change_offer_for_service_offer": "Ce service n'est pas accessible pour l'offre {{offer}}.",
"hosting_common_password_conditions": "Attention, le mot de passe doit respecter les conditions suivantes :
- Minimum {{t0}} caractères
- Maximum {{t1}} caractères
- Au moins une lettre majuscule
- Au moins une lettre minuscule
- Au moins un chiffre
- Doit être composé uniquement de chiffres et de lettres",
@@ -1146,6 +1148,16 @@
"hosting_order_upgrade_start_time_summary_today": "Mise à jour prévue à {{time}} aujourd'hui.",
"hosting_order_upgrade_start_time_summary_tomorrow": "Mise à jour prévue à {{time}} demain.",
"hosting_order_upgrade_no_contract": "Pas de nouveaux contrats à valider",
+ "hosting_order_upgrade_summary_empty": "Votre panier est vide",
+ "hosting_order_upgrade_summary_product": "Hébergement Web",
+ "hosting_order_upgrade_summary_product_lower": "hébergement web",
+ "hosting_order_upgrade_summary_duration": "Durée",
+ "hosting_order_upgrade_summary_duration_value": "12 mois",
+ "hosting_order_upgrade_summary_options": "Options",
+ "hosting_order_upgrade_summary_included": "Inclus",
+ "hosting_order_upgrade_summary_total": "Total",
+ "hosting_order_upgrade_summary_vat_period": "HT/12 mois",
+ "hosting_order_upgrade_summary_cta": "Continuer la commande",
"hosting_migrate_my_ovh_org_success": "La migration de votre domaine ovh.org a bien été prise en compte. Vous recevrez un e-mail lorsqu'elle sera terminée.",
"hosting_migrate_my_ovh_org_error": "Une erreur est survenue lors de la migration de votre domaine ovh.org.",
"hosting_tab_DATABASES_configuration_order_title_button_public": "Commander une base de données",
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_it_IT.json b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_it_IT.json
index 834ecc336f26..fc88307f8019 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_it_IT.json
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_it_IT.json
@@ -1,4 +1,6 @@
{
+ "hosting_change_offer_banner": "Le nostre offerte di hosting web evolveranno a partire dal 1° giugno 2026. Scoprite i miglioramenti e le novità incluse.",
+ "hosting_change_offer_banner_link": "Scopri di più",
"hosting_change_offer_for_service": "Questo servizio non è disponibile per questa offerta. ",
"hosting_change_offer_for_service_offer": "Questo servizio non è disponibile per la soluzione {{offer}}.",
"hosting_common_password_conditions": "Attenzione, la password deve rispettare queste condizioni:
- minimo {{t0}} caratteri
- massimo {{t1}} caratteri
- Almeno una lettera maiuscola
- Almeno una lettera minuscola
- Almeno una cifra
- Deve essere composto esclusivamente da cifre e lettere",
@@ -1127,6 +1129,16 @@
"hosting_order_upgrade_start_time_summary_today": "Aggiornamento pianificato oggi alle {{time}}.",
"hosting_order_upgrade_start_time_summary_tomorrow": "Aggiornamento pianificato domani alle {{time}}.",
"hosting_order_upgrade_no_contract": "Nessun nuovo contratto da convalidare",
+ "hosting_order_upgrade_summary_empty": "Il vostro carrello è vuoto",
+ "hosting_order_upgrade_summary_product": "Hosting web",
+ "hosting_order_upgrade_summary_product_lower": "l’hosting Web",
+ "hosting_order_upgrade_summary_duration": "Durata",
+ "hosting_order_upgrade_summary_duration_value": "12 mesi",
+ "hosting_order_upgrade_summary_options": "Opzioni",
+ "hosting_order_upgrade_summary_included": "Incluso",
+ "hosting_order_upgrade_summary_total": "Totale",
+ "hosting_order_upgrade_summary_vat_period": "HT/12 mesi",
+ "hosting_order_upgrade_summary_cta": "Continua l'ordine",
"hosting_migrate_my_ovh_org_success": "La migrazione del tuo dominio ovh.org è stata presa in carico. Una volta completata, riceverai un'email.",
"hosting_migrate_my_ovh_org_error": "Si è verificato un errore durante la migrazione del tuo dominio ovh.org.",
"hosting_tab_DATABASES_configuration_order_title_button_public": "Ordinare un database",
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_pl_PL.json b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_pl_PL.json
index 9758ea97dfff..3ea881c2d934 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_pl_PL.json
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_pl_PL.json
@@ -1,4 +1,6 @@
{
+ "hosting_change_offer_banner": "Nasze oferty hostingu internetowego będą się rozwijać od 1 czerwca 2026 roku. Odkryj ulepszenia i nowości, które są w zestawie.",
+ "hosting_change_offer_banner_link": "Sprawdź",
"hosting_change_offer_for_service": "Ta usługa nie jest dostępna dla tej oferty.",
"hosting_change_offer_for_service_offer": "Ta usługa nie jest dostępna w ramach oferty {{offer}}.",
"hosting_common_password_conditions": "Uwaga: hasło musi spełniać następujące warunki:
- Minimalna liczba znaków: {{t0}}
- Maksymalna liczba znaków: {{t1}}
- Przynajmniej jedna wielka litera
- Przynajmniej jedna mała litera
- Przynajmniej jedna cyfra
- Może zawierać wyłącznie cyfry i litery",
@@ -1127,6 +1129,16 @@
"hosting_order_upgrade_start_time_summary_today": "Aktualizacja przewidziana dzisiaj o {{time}}.",
"hosting_order_upgrade_start_time_summary_tomorrow": "Aktualizacja przewidziana jutro o {{time}}.",
"hosting_order_upgrade_no_contract": "Brak nowych regulaminów do zatwierdzenia",
+ "hosting_order_upgrade_summary_empty": "Twój koszyk jest pusty",
+ "hosting_order_upgrade_summary_product": "Hosting",
+ "hosting_order_upgrade_summary_product_lower": "hosting internetowy",
+ "hosting_order_upgrade_summary_duration": "Czas trwania",
+ "hosting_order_upgrade_summary_duration_value": "12 miesięcy",
+ "hosting_order_upgrade_summary_options": "Opcje",
+ "hosting_order_upgrade_summary_included": "W cenie",
+ "hosting_order_upgrade_summary_total": "Razem",
+ "hosting_order_upgrade_summary_vat_period": "HT/12 miesięcy",
+ "hosting_order_upgrade_summary_cta": "Kontynuuj zamówienie",
"hosting_migrate_my_ovh_org_success": "Migracja Twojej domeny ovh.org została zarejestrowana. Po zakończeniu operacji otrzymasz e-mail.",
"hosting_migrate_my_ovh_org_error": "Wystąpił błąd podczas migracji Twojego konta ovh.org.",
"hosting_tab_DATABASES_configuration_order_title_button_public": "Zamów bazę danych",
diff --git a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_pt_PT.json b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_pt_PT.json
index f9da5cda617e..f5368b47c95a 100644
--- a/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_pt_PT.json
+++ b/packages/manager/apps/web/client/app/hosting/dashboard/translations/Messages_pt_PT.json
@@ -1,4 +1,6 @@
{
+ "hosting_change_offer_banner": "As nossas ofertas de alojamento web evoluem a partir de 1 de junho de 2026. Descubra as melhorias e as novidades incluídas.",
+ "hosting_change_offer_banner_link": "Saber mais",
"hosting_change_offer_for_service": "Este serviço não está disponível para esta oferta.",
"hosting_change_offer_for_service_offer": "Este serviço não está disponível para a oferta {{offer}}.",
"hosting_common_password_conditions": "Tenha em conta que a palavra-passe deve respeitar as seguintes condições:
- Mínimo de {{t0}} caracteres
- Máximo de {{t1}} caracteres
- Pelo menos uma letra maiúscula
- Pelo menos uma letra minúscula
- Pelo menos um número
- Deve ser composto unicamente por números e letras.",
@@ -1117,6 +1119,16 @@
"hosting_order_upgrade_start_time_summary_today": "Atualização prevista para hoje, às {{time}}.",
"hosting_order_upgrade_start_time_summary_tomorrow": "Atualização prevista para amanhã, às {{time}}.",
"hosting_order_upgrade_no_contract": "Sem novos contratos por validar",
+ "hosting_order_upgrade_summary_empty": "O seu carrinho está vazio",
+ "hosting_order_upgrade_summary_product": "Alojamento web",
+ "hosting_order_upgrade_summary_product_lower": "alojamento web",
+ "hosting_order_upgrade_summary_duration": "Duração",
+ "hosting_order_upgrade_summary_duration_value": "12 meses",
+ "hosting_order_upgrade_summary_options": "Opções",
+ "hosting_order_upgrade_summary_included": "Incluído",
+ "hosting_order_upgrade_summary_total": "Total",
+ "hosting_order_upgrade_summary_vat_period": "HT/12 meses",
+ "hosting_order_upgrade_summary_cta": "Continuar a encomenda",
"hosting_migrate_my_ovh_org_success": "A migração do seu domínio ovh.org foi registada com êxito. Receberá um e-mail assim que a operação estiver concluída.",
"hosting_migrate_my_ovh_org_error": "Ocorreu um erro aquando da migração do seu domínio ovh.org.",
"hosting_tab_DATABASES_configuration_order_title_button_public": "Encomendar uma base de dados",
diff --git a/packages/manager/apps/web/client/app/hosting/database/hosting-database.controller.js b/packages/manager/apps/web/client/app/hosting/database/hosting-database.controller.js
index 827ab2eadc86..7e4faa636be3 100644
--- a/packages/manager/apps/web/client/app/hosting/database/hosting-database.controller.js
+++ b/packages/manager/apps/web/client/app/hosting/database/hosting-database.controller.js
@@ -126,43 +126,46 @@ angular.module('App').controller(
this.loading.orderCapabilities = true;
});
}
-
-loadExtraSqlPerso() {
- return this.hostingDatabaseService
- .getExtraSqlPerso(this.hosting.serviceName)
- .then((result) => {
- const sqlPerso = result?.find((item) => item?.name === SQL_PERSO);
- const sqlPersoDelta =
- sqlPerso?.database && sqlPerso?.usage
- ? sqlPerso?.database - sqlPerso?.usage?.length
- : 0;
- this.emptySqlPerso = sqlPersoDelta > 0 ? [{
- id: SQL_PERSO,
- name: "sqlPerso",
- availableSlots: sqlPersoDelta,
- isIncluded: true,
- }] : [];
-
- this.extraSqlPerso = result?.filter(
- (item) => item?.name?.startsWith(EXTRA_SQL_PERSO_PREFIX),
- );
-
- this.emptyExtraSqlPerso = this.extraSqlPerso
- ?.map((item) => {
- const delta = item?.database - (item?.usage?.length || 0);
- return {
- id: item.id,
- name: item.serviceName,
- availableSlots: delta,
- isIncluded: false,
- usage: item?.usage,
- };
- })
- .filter((item) => item.availableSlots > 0);
- });
-}
+ loadExtraSqlPerso() {
+ return this.hostingDatabaseService
+ .getExtraSqlPerso(this.hosting.serviceName)
+ .then((result) => {
+ const sqlPerso = result?.find((item) => item?.name === SQL_PERSO);
+ const sqlPersoDelta =
+ sqlPerso?.database && sqlPerso?.usage
+ ? sqlPerso?.database - sqlPerso?.usage?.length
+ : 0;
+ this.emptySqlPerso =
+ sqlPersoDelta > 0
+ ? [
+ {
+ id: SQL_PERSO,
+ name: 'sqlPerso',
+ availableSlots: sqlPersoDelta,
+ isIncluded: true,
+ },
+ ]
+ : [];
+
+ this.extraSqlPerso = result?.filter((item) =>
+ item?.name?.startsWith(EXTRA_SQL_PERSO_PREFIX),
+ );
+ this.emptyExtraSqlPerso = this.extraSqlPerso
+ ?.map((item) => {
+ const delta = item?.database - (item?.usage?.length || 0);
+ return {
+ id: item.id,
+ name: item.serviceName,
+ availableSlots: delta,
+ isIncluded: false,
+ usage: item?.usage,
+ };
+ })
+ .filter((item) => item.availableSlots > 0);
+ });
+ }
static formatVersion(version) {
return (version || '').replace(/_/gi, '.');
@@ -350,10 +353,14 @@ loadExtraSqlPerso() {
}
onTerminateDatabaseSqlPerso(element) {
- return this.coreURLBuilder.buildURL('dedicated', `#/billing/autorenew/delete?serviceId=${element?.name}`, {
- selectedType: 'HOSTING_WEB_EXTRA_SQL_PERSO',
- });
-}
+ return this.coreURLBuilder.buildURL(
+ 'dedicated',
+ `#/billing/autorenew/delete?serviceId=${element?.name}`,
+ {
+ selectedType: 'HOSTING_WEB_EXTRA_SQL_PERSO',
+ },
+ );
+ }
onOrderDatabaseClick() {
this.trackClick(DATABASES_TRACKING.SELECT_LIST_ACTION_ORDER_DB);
diff --git a/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.component.js b/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.component.js
index 5dbb30b4141f..572f861f981b 100644
--- a/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.component.js
+++ b/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.component.js
@@ -7,6 +7,7 @@ export default {
template,
bindings: {
serviceName: '<',
+ serviceInfo: '<',
hosting: '<',
user: '<',
cart: '<',
diff --git a/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.controller.js b/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.controller.js
index 207a81430de2..c7938868b8ea 100644
--- a/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.controller.js
+++ b/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.controller.js
@@ -19,6 +19,22 @@ export default class HostingDatabaseOrderPublicCtrl {
}
$onInit() {
+ const renewPeriod = this.serviceInfo?.renew?.period;
+ if (renewPeriod != null && this.catalog) {
+ this.catalog = {
+ ...this.catalog,
+ addons: (this.catalog.addons || []).map((addon) => ({
+ ...addon,
+ pricings: (addon.pricings || []).filter(
+ (p) =>
+ !(p.capacities || []).includes(
+ pricingConstants.PRICING_CAPACITIES.RENEW,
+ ) || p.interval === renewPeriod,
+ ),
+ })),
+ };
+ }
+
const { catalog, catalogItemTypeName } = this.getRightCatalogConfig(true);
this.productOffers = {
pricingType: pricingConstants.PRICING_CAPACITIES.RENEW,
diff --git a/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.routing.js b/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.routing.js
index 914fc03d7de1..9dcb49b335b3 100644
--- a/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.routing.js
+++ b/packages/manager/apps/web/client/app/hosting/database/order/public/hosting-database-order-public.routing.js
@@ -14,6 +14,8 @@ export default /* @ngInject */ ($stateProvider) => {
goBack: /* @ngInject */ (goToDatabase) => goToDatabase,
hosting: /* @ngInject */ (Hosting, serviceName) =>
Hosting.getSelected(serviceName, true),
+ serviceInfo: /* @ngInject */ (Hosting, serviceName) =>
+ Hosting.getServiceInfos(serviceName),
onError: /* @ngInject */ ($translate, goBack) => (error) =>
goBack(
$translate.instant('ovhManagerHostingDatabaseOrderPublic_error', {
diff --git a/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.component.js b/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.component.js
index 9dd9b53ab79c..1e4c584b7bd2 100644
--- a/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.component.js
+++ b/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.component.js
@@ -10,6 +10,7 @@ export default {
dbCategories: '<',
privateSqlCatalog: '<',
hosting: '<',
+ serviceInfo: '<',
onError: '<',
onSuccess: '<',
},
diff --git a/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.controller.js b/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.controller.js
index 0410c16dc680..f4ff9dd70907 100644
--- a/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.controller.js
+++ b/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.controller.js
@@ -25,6 +25,30 @@ export default class PrivateSqlActivationController {
$onInit() {
this.preselectDbCategory = PRESELECTED_DB_CATEGORY;
+
+ const renewPeriod = this.serviceInfo?.renew?.period;
+ if (this.privateSqlCatalog) {
+ this.privateSqlCatalog = {
+ ...this.privateSqlCatalog,
+ addons: (this.privateSqlCatalog.addons || []).map((addon) => ({
+ ...addon,
+ pricings: (addon.pricings || [])
+ .filter(
+ (p) =>
+ renewPeriod == null ||
+ !(p.capacities || []).includes(
+ pricingConstants.PRICING_CAPACITIES.RENEW,
+ ) ||
+ p.interval === renewPeriod,
+ )
+ .map((p) => ({
+ ...p,
+ description: `${p.description}-${p.mode}-${p.interval}${p.intervalUnit}`,
+ })),
+ })),
+ };
+ }
+
const { catalog, catalogItemTypeName } = this.getRightCatalogConfig(true);
this.productOffers = {
pricingType: pricingConstants.PRICING_CAPACITIES.RENEW,
diff --git a/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.routing.js b/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.routing.js
index cfeb05b7bd44..481ced2fe594 100644
--- a/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.routing.js
+++ b/packages/manager/apps/web/client/app/hosting/database/private-sql-activation/private-sql-activation.routing.js
@@ -23,6 +23,8 @@ export default /* @ngInject */ ($stateProvider) => {
me: /* @ngInject */ (user) => user,
hosting: /* @ngInject */ ($transition$) =>
$transition$.params().productId,
+ serviceInfo: /* @ngInject */ (Hosting, hosting) =>
+ Hosting.getServiceInfos(hosting),
privateSqlCatalog: /* @ngInject */ (HostingDatabasePrivateSql, me) =>
HostingDatabasePrivateSql.getPrivateSqlCatalogForHosting(
me.ovhSubsidiary,
diff --git a/packages/manager/apps/web/client/app/hosting/general-informations/GENERAL_INFORMATIONS.controller.js b/packages/manager/apps/web/client/app/hosting/general-informations/GENERAL_INFORMATIONS.controller.js
index 7c30fb987797..a84510fd7f5a 100644
--- a/packages/manager/apps/web/client/app/hosting/general-informations/GENERAL_INFORMATIONS.controller.js
+++ b/packages/manager/apps/web/client/app/hosting/general-informations/GENERAL_INFORMATIONS.controller.js
@@ -8,7 +8,7 @@ import {
LANGUAGES_VERSIONS_GUIDE_URL,
} from './general-informations.constants';
import { HOSTING_CDN_ORDER_CDN_VERSION_V1 } from '../cdn/order/hosting-cdn-order.constant';
-import { NEW_OFFERS_NAME } from '../hosting.constants';
+import { OFFERS_NAME, NEW_OFFERS_NAME } from '../hosting.constants';
export default class HostingGeneralInformationsCtrl {
/* @ngInject */
@@ -33,6 +33,7 @@ export default class HostingGeneralInformationsCtrl {
HostingLocalSeo,
HostingRuntimes,
hostingSSLCertificate,
+ isChangeOfferFeatureAvailable,
OvhApiScreenshot,
user,
) {
@@ -56,6 +57,7 @@ export default class HostingGeneralInformationsCtrl {
this.HostingLocalSeo = HostingLocalSeo;
this.HostingRuntimes = HostingRuntimes;
this.hostingSSLCertificate = hostingSSLCertificate;
+ this.isChangeOfferFeatureAvailable = isChangeOfferFeatureAvailable;
this.OvhApiScreenshot = OvhApiScreenshot;
this.user = user;
this.Domain = Domain;
@@ -375,6 +377,12 @@ export default class HostingGeneralInformationsCtrl {
}
getOfferName(offer) {
+ if (this.isChangeOfferFeatureAvailable) {
+ const offerName = OFFERS_NAME[offer];
+ return this.$translate.instant(
+ offerName || `hosting_dashboard_service_offer_${offer}`,
+ );
+ }
const offerPrefix = NEW_OFFERS_NAME[offer];
const translateKey = offerPrefix
? `hostings_offer_${offerPrefix}`
diff --git a/packages/manager/apps/web/client/app/hosting/general-informations/general-informations.routing.js b/packages/manager/apps/web/client/app/hosting/general-informations/general-informations.routing.js
index 68e24b71b2bb..efdde47ad763 100644
--- a/packages/manager/apps/web/client/app/hosting/general-informations/general-informations.routing.js
+++ b/packages/manager/apps/web/client/app/hosting/general-informations/general-informations.routing.js
@@ -7,6 +7,14 @@ export default /* @ngInject */ ($stateProvider) => {
controllerAs: '$ctrl',
template,
resolve: {
+ isChangeOfferFeatureAvailable: /* @ngInject */ (ovhFeatureFlipping) =>
+ ovhFeatureFlipping
+ .checkFeatureAvailability('web-hosting:change-offer')
+ .then((featureAvailability) => {
+ return featureAvailability.isFeatureAvailable(
+ 'web-hosting:change-offer',
+ );
+ }),
breadcrumb: () => null,
},
});
diff --git a/packages/manager/apps/web/client/app/hosting/hosting.constants.js b/packages/manager/apps/web/client/app/hosting/hosting.constants.js
index 33a4ebc25524..b81eea96ed10 100644
--- a/packages/manager/apps/web/client/app/hosting/hosting.constants.js
+++ b/packages/manager/apps/web/client/app/hosting/hosting.constants.js
@@ -7,6 +7,18 @@ export const NEW_OFFERS_NAME = {
PERFORMANCE_4: 'performance_4',
};
+export const OFFERS_NAME = {
+ HOSTING_FREE_100_M: 'hosting-free-100M',
+ HOSTING_STARTER: 'hosting-starter',
+ HOSTING_PERSO: 'hosting-perso',
+ HOSTING_STARTUP: 'hosting-startup',
+ HOSTING_PRO: 'hosting-pro',
+ HOSTING_PERFORMANCE_1: 'hosting-performance-1',
+ HOSTING_AGENCY: 'hosting-agency',
+ HOSTING_AGENCY_PLUS: 'hosting-agency-plus',
+ HOSTING_AGENCY_MAX: 'hosting-agency-max',
+};
+
export const OFFERS_UNELIGIBLE_FOR_MODULE = [
'START_10_M',
'HOSTING_FREE_100_M',
diff --git a/packages/manager/apps/web/client/app/hosting/module/MODULE.html b/packages/manager/apps/web/client/app/hosting/module/MODULE.html
index 5540aa0054f8..6d5520858aff 100644
--- a/packages/manager/apps/web/client/app/hosting/module/MODULE.html
+++ b/packages/manager/apps/web/client/app/hosting/module/MODULE.html
@@ -25,7 +25,7 @@