diff --git a/openupgrade_scripts/scripts/website/16.0.1.0/end-migration.py b/openupgrade_scripts/scripts/website/16.0.1.0/end-migration.py new file mode 100644 index 000000000000..70aa0f085d1f --- /dev/null +++ b/openupgrade_scripts/scripts/website/16.0.1.0/end-migration.py @@ -0,0 +1,38 @@ +from openupgradelib import openupgrade +from openupgradelib.openupgrade_160 import convert_string_bootstrap_4to5 +from psycopg2.extras import Json + + +def boostrap_5_migration(env): + """Convert customized website views to Bootstrap 5.""" + backup_column = openupgrade.get_legacy_name("arch_db_bs4") + openupgrade.logged_query( + env.cr, f"ALTER TABLE ir_ui_view ADD COLUMN {backup_column} TEST" + ) + # Find views to convert + env.cr.execute( + """ + SELECT iuv.id, iuv.arch_db + FROM ir_ui_view iuv + WHERE iuv.type = 'qweb' + """ + ) + for id_, arch_db_ in env.cr.fetchall(): + if not arch_db_: + continue + new_arch = { + lang: convert_string_bootstrap_4to5(arch_db) + for lang, arch_db in arch_db_.items() + } + if new_arch != arch_db_: + env.cr.execute( + f"UPDATE ir_ui_view SET {backup_column} = arch_db WHERE id=%s", + (id_,), + ) + query = "UPDATE ir_ui_view SET arch_db = %s WHERE id = %s" + env.cr.execute(env.cr.mogrify(query, [Json(new_arch), id_]).decode()) + + +@openupgrade.migrate() +def migrate(env, version): + boostrap_5_migration(env) diff --git a/openupgrade_scripts/scripts/website/16.0.1.0/noupdate_changes.xml b/openupgrade_scripts/scripts/website/16.0.1.0/noupdate_changes.xml index fa82ca6ac091..c85596ab65dd 100644 --- a/openupgrade_scripts/scripts/website/16.0.1.0/noupdate_changes.xml +++ b/openupgrade_scripts/scripts/website/16.0.1.0/noupdate_changes.xml @@ -1,8 +1,5 @@ - - - /website/static/src/img/snippets_demo/s_picture.jpg diff --git a/openupgrade_scripts/scripts/website/16.0.1.0/post-migration.py b/openupgrade_scripts/scripts/website/16.0.1.0/post-migration.py new file mode 100644 index 000000000000..f0da611d290c --- /dev/null +++ b/openupgrade_scripts/scripts/website/16.0.1.0/post-migration.py @@ -0,0 +1,6 @@ +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data(env.cr, "website", "16.0.1.0/noupdate_changes.xml") diff --git a/openupgrade_scripts/scripts/website/16.0.1.0/pre-migration.py b/openupgrade_scripts/scripts/website/16.0.1.0/pre-migration.py new file mode 100644 index 000000000000..138b8f686a01 --- /dev/null +++ b/openupgrade_scripts/scripts/website/16.0.1.0/pre-migration.py @@ -0,0 +1,135 @@ +from lxml import etree +from openupgradelib import openupgrade + +_xmlids_renames = [ + ( + "website.group_website_publisher", + "website.group_website_restricted_editor", + ), + ( + "website_sale.menu_reporting", + "website.menu_reporting", + ), +] + +# delete xml xpath for odoo add it again +_xmlids_delete = [ + "website.website_configurator", + "website.website_menu", +] + + +def delete_constraint_website_visitor_partner_uniq(env): + openupgrade.delete_sql_constraint_safely( + env, + "website", + "website_visitor", + "partner_uniq", + ) + + +def _fill_partner_id_if_null(env): + openupgrade.logged_query( + env.cr, + """ + UPDATE website_visitor v + SET partner_id = p.id + FROM res_partner p + WHERE v.partner_id IS NULL + AND length(v.access_token) != 32 + AND p.id = CAST(v.access_token AS integer); + """, + ) + + +def _fill_language_ids_if_null(env): + openupgrade.logged_query( + env.cr, + """ + INSERT INTO website_lang_rel (website_id, lang_id) + SELECT w.id, w.default_lang_id + FROM website w + WHERE NOT EXISTS ( + SELECT 1 + FROM website_lang_rel wlr + WHERE wlr.website_id = w.id + ); + """, + ) + + +def _fill_homepage_url(env): + openupgrade.logged_query( + env.cr, + """ + ALTER TABLE website + ADD COLUMN IF NOT EXISTS homepage_url CHARACTER VARYING + """, + ) + openupgrade.logged_query( + env.cr, + """ + UPDATE website + SET homepage_url = website_page.url + FROM website_page + WHERE website_page.id = website.homepage_id + """, + ) + + +def _mig_s_progress_steps_contents(env): + """Adapt to the new expected format inserted "Steps" snippet.""" + views = ( + env["ir.ui.view"] + .with_context(active_test=False) + .search( + [ + ("arch_db", "ilike", '%data-snippet="s_process_steps"%'), + ("arch_db", "not ilike", '%s_process_steps_connector_line"%'), + ] + ) + ) + for view in views: + arch = etree.fromstring(view.arch_db) + step_els = arch.xpath("//section[hasclass('s_process_steps')]") + for step in step_els: + if step.get("data-vcss"): + continue + step.set( + "class", step.attrib.get("class") + " s_process_steps_connector_line" + ) + step.set("data-vcss", "001") + svg_defs = """ + + + + + + + + """ + step.insert(0, etree.fromstring(svg_defs)) + icon_els = step.xpath(".//div[hasclass('s_process_step_icon')]") + for icon in icon_els: + connector = """ + + + + """ + parent = icon.getparent() + parent.insert(parent.index(icon), etree.fromstring(connector)) + view.arch_db = env["ir.ui.view"]._pretty_arch(arch) + + +@openupgrade.migrate() +def migrate(env, version): + _fill_partner_id_if_null(env) + _fill_language_ids_if_null(env) + openupgrade.rename_xmlids(env.cr, _xmlids_renames) + openupgrade.delete_records_safely_by_xml_id(env, _xmlids_delete) + delete_constraint_website_visitor_partner_uniq(env) + _fill_homepage_url(env) + _mig_s_progress_steps_contents(env) diff --git a/openupgrade_scripts/scripts/website/16.0.1.0/upgrade_analysis_work.txt b/openupgrade_scripts/scripts/website/16.0.1.0/upgrade_analysis_work.txt new file mode 100644 index 000000000000..531bd2566c6a --- /dev/null +++ b/openupgrade_scripts/scripts/website/16.0.1.0/upgrade_analysis_work.txt @@ -0,0 +1,109 @@ +---Models in module 'website'--- +---Fields in module 'website'--- +website / theme.website.menu / mega_menu_classes (char) : NEW +website / theme.website.menu / mega_menu_content (html) : NEW +website / theme.website.menu / use_main_menu_as_parent (boolean): NEW hasdefault: default +website / theme.website.page / footer_visible (boolean) : NEW hasdefault: default +website / theme.website.page / header_color (char) : NEW +website / theme.website.page / header_overlay (boolean) : NEW +website / theme.website.page / header_visible (boolean) : NEW hasdefault: default +website / theme.website.page / is_published (boolean) : NEW +# NOTHING TO DO + +website / website / country_group_ids (many2many) : DEL relation: res.country.group +website / website / google_management_client_id (char): DEL +website / website / google_management_client_secret (char): DEL +# NOTHING TO DO: Lost features + +website / website / homepage_id (many2one) : DEL relation: website.page +website / website / homepage_url (char) : NEW +# DONE: pre-migration: Fill the URL + +website / website / language_ids (many2many) : now required +# DONE: pre-migration: Fill language_ids if null + +website / website / plausible_shared_key (char) : NEW +website / website / plausible_site (char) : NEW +website / website.menu / group_ids (many2many) : DEL relation: res.groups +website / website.page / cache_key_expr (char) : DEL +website / website.page / cache_time (integer) : DEL +website / website.visitor / _order : _order is now 'id DESC' ('last_connection_datetime DESC') +website / website.visitor / active (boolean) : DEL +website / website.visitor / name (char) : not stored anymore +website / website.visitor / name (char) : now related +# NOTHING TO DO: New features + +website / website.visitor / partner_id (many2one) : now a function +# DONE: pre-migration: Fill partner id if null + +---XML records in module 'website'--- +DEL ir.actions.act_url: website.start_configurator_act_url +NEW ir.actions.client: website.action_open_website_configurator +NEW ir.actions.client: website.website_configurator +NEW ir.actions.client: website.website_preview +NEW ir.actions.server: website.ir_actions_server_website_analytics +DEL ir.actions.server: website.ir_actions_server_website_google_analytics +NEW ir.asset: website.s_countdown_000_xml +NEW ir.asset: website.s_dynamic_snippet_000_xml +NEW ir.asset: website.s_dynamic_snippet_carousel_000_xml +NEW ir.asset: website.s_image_gallery_000_xml +NEW ir.asset: website.s_map_000_js +NEW ir.asset: website.s_process_steps_001_scss +NEW ir.asset: website.s_searchbar_000_xml +NEW ir.asset: website.s_social_media_000_scss +NEW ir.asset: website.s_website_form_xml +NEW ir.model.access: website.access_website_ir_ui_view_restricted_editor +DEL ir.model.access: website.access_website_ir_ui_view_publisher +# NOTHING TO DO + +NEW ir.model.constraint: website.constraint_website_domain_unique +# NOTHING TO DO + +DEL ir.model.constraint: website.constraint_website_visitor_partner_uniq +# DONE: pre-migration: drop constraint + +DEL ir.rule: website.website_menu (noupdate) +# DONE: pre-migration: safely delete + +NEW ir.ui.menu: website.custom_menu_edit_menu +NEW ir.ui.menu: website.menu_ace_editor +NEW ir.ui.menu: website.menu_content +NEW ir.ui.menu: website.menu_current_page +NEW ir.ui.menu: website.menu_edit_menu +NEW ir.ui.menu: website.menu_optimize_seo +NEW ir.ui.menu: website.menu_page_properties +# NOTHING TO DO + +NEW ir.ui.menu: website.menu_reporting [renamed from website_sale module] +# DONE: pre-migration: renamed + +NEW ir.ui.menu: website.menu_site +NEW ir.ui.menu: website.menu_website_analytics +NEW ir.ui.menu: website.menu_website_preview +DEL ir.ui.menu: website.menu_dashboard +DEL ir.ui.menu: website.menu_visitor_sub_menu +DEL ir.ui.menu: website.menu_website_google_analytics +NEW ir.ui.view: website.404_plausible +NEW ir.ui.view: website.iframefallback +NEW ir.ui.view: website.neutralize_ribbon +NEW ir.ui.view: website.res_config_settings_view_form_inherit_auth_signup +NEW ir.ui.view: website.s_process_steps_options +NEW ir.ui.view: website.s_social_media +NEW ir.ui.view: website.s_social_media_options +NEW ir.ui.view: website.website_page_properties_view_form +NEW ir.ui.view: website.website_pages_kanban_view +DEL ir.ui.view: website.compiled_assets_wysiwyg +DEL ir.ui.view: website.index_management +DEL ir.ui.view: website.list_website_pages +DEL ir.ui.view: website.one_page_line +DEL ir.ui.view: website.publish_short +DEL ir.ui.view: website.s_share_options +DEL ir.ui.view: website.snippet_options_header_brand +DEL ir.ui.view: website.user_navbar +DEL ir.ui.view: website.website_configurator +DEL ir.ui.view: website.website_publisher +# NOTHING TO DO + +NEW res.groups: website.group_website_restricted_editor +DEL res.groups: website.group_website_publisher +# DONE: pre-migration: rename group