diff --git a/addons/test_website_modules/tests/test_configurator.py b/addons/test_website_modules/tests/test_configurator.py index a4f8de827e0..5666929fbb3 100644 --- a/addons/test_website_modules/tests/test_configurator.py +++ b/addons/test_website_modules/tests/test_configurator.py @@ -27,7 +27,7 @@ class TestConfigurator(odoo.tests.HttpCase): {"id": 4, "label": "abortion clinic"}, {"id": 5, "label": "abrasives supplier"}, {"id": 6, "label": "abundant life church"}]} - elif '/api/website/1/configurator/recommended_themes' in endpoint: + elif '/api/website/2/configurator/recommended_themes' in endpoint: return [] elif '/api/website/1/configurator/custom_resources/' in endpoint: return { diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 9d2c829246d..bba49c8a7a6 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -333,11 +333,14 @@ class Website(models.Model): domain = [('name', '=like', 'theme%'), ('name', 'not in', ['theme_default', 'theme_common'])] client_themes = request.env['ir.module.module'].search(domain).mapped('name') client_themes_img = dict([(t, http.addons_manifest[t].get('images_preview_theme', {})) for t in client_themes]) - params = { - 'palette': palette, - 'client_themes': client_themes_img, - } - return self._website_api_rpc('/api/website/1/configurator/recommended_themes/%s' % industry_id, params) + themes_suggested = self._website_api_rpc( + '/api/website/2/configurator/recommended_themes/%s' % industry_id, + {'client_themes': client_themes_img} + ) + process_svg = self.env['website.configurator.feature']._process_svg + for theme in themes_suggested: + theme['svg'] = process_svg(theme['name'], palette, theme.pop('image_urls')) + return themes_suggested @api.model def configurator_skip(self): diff --git a/addons/website/models/website_configurator_feature.py b/addons/website/models/website_configurator_feature.py index 75aac966a1b..ce59015dd6f 100644 --- a/addons/website/models/website_configurator_feature.py +++ b/addons/website/models/website_configurator_feature.py @@ -1,8 +1,11 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from odoo import api, fields, models, _ +import re + +from odoo import api, fields, models, tools, _ from odoo.exceptions import ValidationError +from odoo.modules.module import get_resource_path class WebsiteConfiguratorFeature(models.Model): @@ -27,3 +30,35 @@ class WebsiteConfiguratorFeature(models.Model): def _check_module_xor_page_view(self): if bool(self.module_id) == bool(self.page_view_id): raise ValidationError(_("One and only one of the two fields 'page_view_id' and 'module_id' should be set")) + + @staticmethod + def _process_svg(theme, colors, image_mapping): + svg = None + preview_svg = get_resource_path(theme, 'static', 'description', theme + '.svg') + if not preview_svg: + return False + with tools.file_open(preview_svg, 'r') as file: + svg = file.read() + + default_colors = { + 'color1': '#3AADAA', + 'color2': '#7C6576', + 'color3': '#F6F6F6', + 'color4': '#FFFFFF', + 'color5': '#383E45', + 'menu': '#MENU_COLOR', + 'footer': '#FOOTER_COLOR', + } + color_mapping = {default_colors[color_key]: color_value for color_key, color_value in colors.items() if color_key in default_colors.keys()} + color_regex = '(?i)%s' % '|'.join('(%s)' % color for color in color_mapping.keys()) + image_regex = '(?i)%s' % '|'.join('(%s)' % image for image in image_mapping.keys()) + + def subber_maker(mapping): + def subber(match): + key = match.group() + return mapping[key] if key in mapping else key + return subber + + svg = re.sub(color_regex, subber_maker(color_mapping), svg) + svg = re.sub(image_regex, subber_maker(image_mapping), svg) + return svg