From 7556838bc2c33aeb62a6bf934b36bce51d4ad70f Mon Sep 17 00:00:00 2001 From: alikon Date: Sat, 8 Nov 2025 11:29:44 +0100 Subject: [PATCH 01/18] Backward Compatibility Module --- .../sql/updates/mysql/5.4.0.2025-11.08.sql | 4 ++ .../updates/postgresql/5.4.0-2025-11-08.sql | 4 ++ administrator/language/en-GB/mod_backward.ini | 8 +++ .../language/en-GB/mod_backward.sys.ini | 7 ++ .../modules/mod_backward/mod_backward.xml | 44 +++++++++++++ .../mod_backward/services/provider.php | 36 ++++++++++ .../src/Dispatcher/Dispatcher.php | 43 ++++++++++++ .../modules/mod_backward/tmpl/default.php | 24 +++++++ installation/sql/mysql/base.sql | 65 +++++++++--------- installation/sql/postgresql/base.sql | 66 ++++++++++--------- libraries/src/Extension/ExtensionHelper.php | 1 + 11 files changed, 241 insertions(+), 61 deletions(-) create mode 100644 administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql create mode 100644 administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql create mode 100644 administrator/language/en-GB/mod_backward.ini create mode 100644 administrator/language/en-GB/mod_backward.sys.ini create mode 100644 administrator/modules/mod_backward/mod_backward.xml create mode 100644 administrator/modules/mod_backward/services/provider.php create mode 100644 administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php create mode 100644 administrator/modules/mod_backward/tmpl/default.php diff --git a/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql b/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql new file mode 100644 index 0000000000000..db5ba5156c546 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql @@ -0,0 +1,4 @@ +INSERT INTO `#__modules` (`title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES +('Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); + +INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES (LAST_INSERT_ID(), 0); \ No newline at end of file diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql new file mode 100644 index 0000000000000..e43a167bcc7c4 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql @@ -0,0 +1,4 @@ +INSERT INTO "#__modules" ("title", "note", "content", "ordering", "position", "checked_out", "checked_out_time", "publish_up", "publish_down", "published", "module", "access", "showtitle", "params", "client_id", "language") VALUES +('Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); + +INSERT INTO "#__modules_menu" ("moduleid", "menuid") VALUES (currval(pg_get_serial_sequence('#__modules','id')), 0); \ No newline at end of file diff --git a/administrator/language/en-GB/mod_backward.ini b/administrator/language/en-GB/mod_backward.ini new file mode 100644 index 0000000000000..d95bddf94ed8d --- /dev/null +++ b/administrator/language/en-GB/mod_backward.ini @@ -0,0 +1,8 @@ +; Joomla! Project +; (C) 2025 Open Source Matters, Inc. +; License GNU General Public License version 2 or later; see LICENSE.txt +; Note : All ini files need to be saved as UTF-8 + +MOD_BACKWARD="Joomla! Backward Compatibility Information" +MOD_BACKWARD_TEXT="Backward:" +MOD_BACKWARD_XML_DESCRIPTION="This module displays the Joomla! Backward Compatibility plugins Information and is intended to be displayed in the 'status' position." \ No newline at end of file diff --git a/administrator/language/en-GB/mod_backward.sys.ini b/administrator/language/en-GB/mod_backward.sys.ini new file mode 100644 index 0000000000000..3f7c435a32a38 --- /dev/null +++ b/administrator/language/en-GB/mod_backward.sys.ini @@ -0,0 +1,7 @@ +; Joomla! Project +; (C) 2025 Open Source Matters, Inc. +; License GNU General Public License version 2 or later; see LICENSE.txt +; Note : All ini files need to be saved as UTF-8 + +MOD_BACKWARD="Joomla! Backward Compatibility Information" +MOD_BACKWARD_XML_DESCRIPTION="This module displays the Joomla! Backward Compatibility plugins Information and is intended to be displayed in the 'status' position." \ No newline at end of file diff --git a/administrator/modules/mod_backward/mod_backward.xml b/administrator/modules/mod_backward/mod_backward.xml new file mode 100644 index 0000000000000..987901e5e4d8e --- /dev/null +++ b/administrator/modules/mod_backward/mod_backward.xml @@ -0,0 +1,44 @@ + + + mod_backward + Joomla! Project + 2025-01 + (C) 2025 Open Source Matters, Inc. + GNU General Public License version 2 or later; see LICENSE.txt + admin@joomla.org + www.joomla.org + 1.0.0 + MOD_BACKWARD_XML_DESCRIPTION + Joomla\Module\Backward + + services + src + tmpl + + + language/en-GB/mod_backward.ini + language/en-GB/mod_backward.sys.ini + + + + +
+ + + +
+
+
+
diff --git a/administrator/modules/mod_backward/services/provider.php b/administrator/modules/mod_backward/services/provider.php new file mode 100644 index 0000000000000..14a3840acce4c --- /dev/null +++ b/administrator/modules/mod_backward/services/provider.php @@ -0,0 +1,36 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +\defined('_JEXEC') or die; + +use Joomla\CMS\Extension\Service\Provider\HelperFactory; +use Joomla\CMS\Extension\Service\Provider\Module; +use Joomla\CMS\Extension\Service\Provider\ModuleDispatcherFactory; +use Joomla\DI\Container; +use Joomla\DI\ServiceProviderInterface; + +return new class () implements ServiceProviderInterface { + /** + * Registers the service provider with a DI container. + * + * @param Container $container The DI container. + * + * @return void + * + * @since 5.1.0 + */ + public function register(Container $container) + { + $container->registerServiceProvider(new ModuleDispatcherFactory('\\Joomla\\Module\\Backward')); + $container->registerServiceProvider(new HelperFactory('\\Joomla\\Module\\Backward\\Administrator\\Helper')); + + $container->registerServiceProvider(new Module()); + } +}; diff --git a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php new file mode 100644 index 0000000000000..e8fb73c14e7b4 --- /dev/null +++ b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php @@ -0,0 +1,43 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\Module\Backward\Administrator\Dispatcher; + +use Joomla\CMS\Dispatcher\AbstractModuleDispatcher; +use Joomla\CMS\Plugin\PluginHelper; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Dispatcher class for mod_backword + * + * @since 5.4.0 + */ +class Dispatcher extends AbstractModuleDispatcher +{ + + /** + * Returns the layout data. + * + * @return array + * + * @since 5.4.0 + */ + protected function getLayoutData() + { + $data = parent::getLayoutData(); + $data['compat'] = PluginHelper::isEnabled('behaviour', 'compat'); + $data['compat6'] = PluginHelper::isEnabled('behaviour', 'compat6'); + + return $data; + } +} diff --git a/administrator/modules/mod_backward/tmpl/default.php b/administrator/modules/mod_backward/tmpl/default.php new file mode 100644 index 0000000000000..28f92ab5b37b1 --- /dev/null +++ b/administrator/modules/mod_backward/tmpl/default.php @@ -0,0 +1,24 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +defined('_JEXEC') or die; + +use Joomla\CMS\Language\Text; + +?> + +
+ +
+ + \ No newline at end of file diff --git a/installation/sql/mysql/base.sql b/installation/sql/mysql/base.sql index 5a3b514606ed1..f233f5a76e3f3 100644 --- a/installation/sql/mysql/base.sql +++ b/installation/sql/mysql/base.sql @@ -24,8 +24,9 @@ CREATE TABLE IF NOT EXISTS `#__assets` ( -- Dumping data for table `#__assets` -- + INSERT INTO `#__assets` (`id`, `parent_id`, `lft`, `rgt`, `level`, `name`, `title`, `rules`) VALUES -(1, 0, 0, 183, 0, 'root.1', 'Root Asset', '{"core.login.site":{"6":1,"2":1},"core.login.admin":{"6":1},"core.login.api":{"8":1},"core.login.offline":{"6":1},"core.admin":{"8":1},"core.manage":{"7":1},"core.create":{"6":1,"3":1},"core.delete":{"6":1},"core.edit":{"6":1,"4":1},"core.edit.state":{"6":1,"5":1},"core.edit.own":{"6":1,"3":1}}'), +(1, 0, 0, 185, 0, 'root.1', 'Root Asset', '{"core.login.site":{"6":1,"2":1},"core.login.admin":{"6":1},"core.login.api":{"8":1},"core.login.offline":{"6":1},"core.admin":{"8":1},"core.manage":{"7":1},"core.create":{"6":1,"3":1},"core.delete":{"6":1},"core.edit":{"6":1,"4":1},"core.edit.state":{"6":1,"5":1},"core.edit.own":{"6":1,"3":1}}'), (2, 1, 1, 2, 1, 'com_admin', 'com_admin', '{}'), (3, 1, 3, 6, 1, 'com_banners', 'com_banners', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), (4, 1, 7, 8, 1, 'com_cache', 'com_cache', '{"core.admin":{"7":1},"core.manage":{"7":1}}'), @@ -42,24 +43,24 @@ INSERT INTO `#__assets` (`id`, `parent_id`, `lft`, `rgt`, `level`, `name`, `titl (15, 1, 51, 52, 1, 'com_media', 'com_media', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1},"core.delete":{"5":1}}'), (16, 1, 53, 56, 1, 'com_menus', 'com_menus', '{"core.admin":{"7":1}}'), (17, 1, 57, 58, 1, 'com_messages', 'com_messages', '{"core.admin":{"7":1},"core.manage":{"7":1}}'), -(18, 1, 59, 132, 1, 'com_modules', 'com_modules', '{"core.admin":{"7":1}}'), -(19, 1, 133, 136, 1, 'com_newsfeeds', 'com_newsfeeds', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), -(20, 1, 137, 138, 1, 'com_plugins', 'com_plugins', '{"core.admin":{"7":1}}'), -(21, 1, 139, 140, 1, 'com_redirect', 'com_redirect', '{"core.admin":{"7":1}}'), -(23, 1, 141, 142, 1, 'com_templates', 'com_templates', '{"core.admin":{"7":1}}'), -(24, 1, 147, 150, 1, 'com_users', 'com_users', '{"core.admin":{"7":1}}'), -(26, 1, 151, 152, 1, 'com_wrapper', 'com_wrapper', '{}'), +(18, 1, 59, 134, 1, 'com_modules', 'com_modules', '{"core.admin":{"7":1}}'), +(19, 1, 135, 138, 1, 'com_newsfeeds', 'com_newsfeeds', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), +(20, 1, 139, 140, 1, 'com_plugins', 'com_plugins', '{"core.admin":{"7":1}}'), +(21, 1, 141, 142, 1, 'com_redirect', 'com_redirect', '{"core.admin":{"7":1}}'), +(23, 1, 143, 144, 1, 'com_templates', 'com_templates', '{"core.admin":{"7":1}}'), +(24, 1, 149, 152, 1, 'com_users', 'com_users', '{"core.admin":{"7":1}}'), +(26, 1, 153, 154, 1, 'com_wrapper', 'com_wrapper', '{}'), (27, 8, 18, 19, 2, 'com_content.category.2', 'Uncategorised', '{}'), (28, 3, 4, 5, 2, 'com_banners.category.3', 'Uncategorised', '{}'), (29, 7, 14, 15, 2, 'com_contact.category.4', 'Uncategorised', '{}'), -(30, 19, 134, 135, 2, 'com_newsfeeds.category.5', 'Uncategorised', '{}'), -(32, 24, 148, 149, 2, 'com_users.category.7', 'Uncategorised', '{}'), -(33, 1, 153, 154, 1, 'com_finder', 'com_finder', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), -(34, 1, 155, 156, 1, 'com_joomlaupdate', 'com_joomlaupdate', '{}'), -(35, 1, 157, 158, 1, 'com_tags', 'com_tags', '{}'), -(36, 1, 159, 160, 1, 'com_contenthistory', 'com_contenthistory', '{}'), -(37, 1, 161, 162, 1, 'com_ajax', 'com_ajax', '{}'), -(38, 1, 163, 164, 1, 'com_postinstall', 'com_postinstall', '{}'), +(30, 19, 136, 137, 2, 'com_newsfeeds.category.5', 'Uncategorised', '{}'), +(32, 24, 150, 151, 2, 'com_users.category.7', 'Uncategorised', '{}'), +(33, 1, 155, 156, 1, 'com_finder', 'com_finder', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), +(34, 1, 157, 158, 1, 'com_joomlaupdate', 'com_joomlaupdate', '{}'), +(35, 1, 159, 160, 1, 'com_tags', 'com_tags', '{}'), +(36, 1, 161, 162, 1, 'com_contenthistory', 'com_contenthistory', '{}'), +(37, 1, 163, 164, 1, 'com_ajax', 'com_ajax', '{}'), +(38, 1, 165, 166, 1, 'com_postinstall', 'com_postinstall', '{}'), (39, 18, 60, 61, 2, 'com_modules.module.1', 'Main Menu', '{}'), (40, 18, 62, 63, 2, 'com_modules.module.2', 'Login', '{}'), (41, 18, 64, 65, 2, 'com_modules.module.3', 'Popular Articles', '{}'), @@ -84,8 +85,8 @@ INSERT INTO `#__assets` (`id`, `parent_id`, `lft`, `rgt`, `level`, `name`, `titl (62, 56, 31, 32, 3, 'com_content.transition.5', 'FEATURE', '{}'), (63, 56, 33, 34, 3, 'com_content.transition.6', 'UNFEATURE', '{}'), (64, 56, 35, 36, 3, 'com_content.transition.7', 'PUBLISH_AND_FEATURE', '{}'), -(65, 1, 143, 144, 1, 'com_privacy', 'com_privacy', '{}'), -(66, 1, 145, 146, 1, 'com_actionlogs', 'com_actionlogs', '{}'), +(65, 1, 145, 146, 1, 'com_privacy', 'com_privacy', '{}'), +(66, 1, 147, 148, 1, 'com_actionlogs', 'com_actionlogs', '{}'), (67, 18, 76, 77, 2, 'com_modules.module.88', 'Latest Actions', '{}'), (68, 18, 78, 79, 2, 'com_modules.module.89', 'Privacy Dashboard', '{}'), (70, 18, 88, 89, 2, 'com_modules.module.103', 'Site', '{}'), @@ -107,16 +108,17 @@ INSERT INTO `#__assets` (`id`, `parent_id`, `lft`, `rgt`, `level`, `name`, `titl (87, 18, 124, 125, 2, 'com_modules.module.97', 'Recently Added Articles', '{}'), (88, 18, 126, 127, 2, 'com_modules.module.98', 'Logged-in Users', '{}'), (89, 18, 128, 129, 2, 'com_modules.module.90', 'Login Support', '{}'), -(90, 1, 165, 172, 1, 'com_scheduler', 'com_scheduler', '{}'), -(91, 1, 173, 174, 1, 'com_associations', 'com_associations', '{}'), -(92, 1, 175, 176, 1, 'com_categories', 'com_categories', '{}'), -(93, 1, 177, 178, 1, 'com_fields', 'com_fields', '{}'), -(94, 1, 179, 180, 1, 'com_workflow', 'com_workflow', '{}'), -(95, 1, 181, 182, 1, 'com_guidedtours', 'com_guidedtours', '{}'), +(90, 1, 167, 174, 1, 'com_scheduler', 'com_scheduler', '{}'), +(91, 1, 175, 176, 1, 'com_associations', 'com_associations', '{}'), +(92, 1, 177, 178, 1, 'com_categories', 'com_categories', '{}'), +(93, 1, 179, 180, 1, 'com_fields', 'com_fields', '{}'), +(94, 1, 181, 182, 1, 'com_workflow', 'com_workflow', '{}'), +(95, 1, 183, 184, 1, 'com_guidedtours', 'com_guidedtours', '{}'), (96, 18, 130, 131, 2, 'com_modules.module.109', 'Guided Tours', '{}'), -(97, 90, 166, 167, 2, 'com_scheduler.task.1', 'Rotate Logs', '{}'), -(98, 90, 168, 169, 2, 'com_scheduler.task.2', 'Session GC', '{}'), -(99, 90, 170, 171, 2, 'com_scheduler.task.3', 'Update Notification', '{}'); +(97, 90, 168, 169, 2, 'com_scheduler.task.1', 'Rotate Logs', '{}'), +(98, 90, 170, 171, 2, 'com_scheduler.task.2', 'Session GC', '{}'), +(99, 90, 172, 173, 2, 'com_scheduler.task.3', 'Update Notification', '{}'), +(100, 18, 132, 133, 2, 'com_modules.module.110', 'Backward Compatibility', '{}'); -- -------------------------------------------------------- @@ -252,7 +254,8 @@ INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, (0, 'mod_privacy_dashboard', 'module', 'mod_privacy_dashboard', '', 1, 1, 1, 0, 1, '', '{}', ''), (0, 'mod_submenu', 'module', 'mod_submenu', '', 1, 1, 1, 0, 1, '', '{}', ''), (0, 'mod_privacy_status', 'module', 'mod_privacy_status', '', 1, 1, 1, 0, 1, '', '{}', ''), -(0, 'mod_guidedtours', 'module', 'mod_guidedtours', '', 1, 1, 1, 0, 1, '', '{}', ''); +(0, 'mod_guidedtours', 'module', 'mod_guidedtours', '', 1, 1, 1, 0, 1, '', '{}', ''), +(0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', ''); -- Plugins INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES @@ -654,7 +657,8 @@ INSERT INTO `#__modules` (`id`, `asset_id`, `title`, `note`, `content`, `orderin (106, 83, 'Help Dashboard', '', '', 1, 'cpanel-help', NULL, NULL, 1, 'mod_submenu', 1, 0, '{"menutype":"*","preset":"help","layout":"_:default","moduleclass_sfx":"","style":"System-none","module_tag":"div","bootstrap_size":"12","header_tag":"h2","header_class":""}', 1, '*'), (107, 84, 'Privacy Requests', '', '', 1, 'cpanel-privacy', NULL, NULL, 1, 'mod_privacy_dashboard', 1, 1, '{"layout":"_:default","moduleclass_sfx":"","cache":1,"cache_time":900,"cachemode":"static","style":"0","module_tag":"div","bootstrap_size":"12","header_tag":"h2","header_class":""}', 1, '*'), (108, 85, 'Privacy Status', '', '', 1, 'cpanel-privacy', NULL, NULL, 1, 'mod_privacy_status', 1, 1, '{"layout":"_:default","moduleclass_sfx":"","cache":1,"cache_time":900,"cachemode":"static","style":"0","module_tag":"div","bootstrap_size":"12","header_tag":"h2","header_class":""}', 1, '*'), -(109, 96, 'Guided Tours', '', '', 1, 'status', NULL, NULL, 1, 'mod_guidedtours', 1, 1, '', 1, '*'); +(109, 96, 'Guided Tours', '', '', 1, 'status', NULL, NULL, 1, 'mod_guidedtours', 1, 1, '', 1, '*'), +(110, 100, 'Backward Compatibility', '', '', 1, 'status', NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); -- -------------------------------------------------------- @@ -711,7 +715,8 @@ INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES (106, 0), (107, 0), (108, 0), -(109, 0); +(109, 0), +(110, 0); -- -------------------------------------------------------- diff --git a/installation/sql/postgresql/base.sql b/installation/sql/postgresql/base.sql index bbff277f4c5b3..12ebd08439cbc 100644 --- a/installation/sql/postgresql/base.sql +++ b/installation/sql/postgresql/base.sql @@ -31,7 +31,7 @@ COMMENT ON COLUMN "#__assets"."rules" IS 'JSON encoded access control.'; -- INSERT INTO "#__assets" ("id", "parent_id", "lft", "rgt", "level", "name", "title", "rules") VALUES -(1, 0, 0, 183, 0, 'root.1', 'Root Asset', '{"core.login.site":{"6":1,"2":1},"core.login.admin":{"6":1},"core.login.api":{"8":1},"core.login.offline":{"6":1},"core.admin":{"8":1},"core.manage":{"7":1},"core.create":{"6":1,"3":1},"core.delete":{"6":1},"core.edit":{"6":1,"4":1},"core.edit.state":{"6":1,"5":1},"core.edit.own":{"6":1,"3":1}}'), +(1, 0, 0, 185, 0, 'root.1', 'Root Asset', '{"core.login.site":{"6":1,"2":1},"core.login.admin":{"6":1},"core.login.api":{"8":1},"core.login.offline":{"6":1},"core.admin":{"8":1},"core.manage":{"7":1},"core.create":{"6":1,"3":1},"core.delete":{"6":1},"core.edit":{"6":1,"4":1},"core.edit.state":{"6":1,"5":1},"core.edit.own":{"6":1,"3":1}}'), (2, 1, 1, 2, 1, 'com_admin', 'com_admin', '{}'), (3, 1, 3, 6, 1, 'com_banners', 'com_banners', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), (4, 1, 7, 8, 1, 'com_cache', 'com_cache', '{"core.admin":{"7":1},"core.manage":{"7":1}}'), @@ -48,24 +48,24 @@ INSERT INTO "#__assets" ("id", "parent_id", "lft", "rgt", "level", "name", "titl (15, 1, 51, 52, 1, 'com_media', 'com_media', '{"core.admin":{"7":1},"core.manage":{"6":1},"core.create":{"3":1},"core.delete":{"5":1}}'), (16, 1, 53, 56, 1, 'com_menus', 'com_menus', '{"core.admin":{"7":1}}'), (17, 1, 57, 58, 1, 'com_messages', 'com_messages', '{"core.admin":{"7":1},"core.manage":{"7":1}}'), -(18, 1, 59, 132, 1, 'com_modules', 'com_modules', '{"core.admin":{"7":1}}'), -(19, 1, 133, 136, 1, 'com_newsfeeds', 'com_newsfeeds', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), -(20, 1, 137, 138, 1, 'com_plugins', 'com_plugins', '{"core.admin":{"7":1}}'), -(21, 1, 139, 140, 1, 'com_redirect', 'com_redirect', '{"core.admin":{"7":1}}'), -(23, 1, 141, 142, 1, 'com_templates', 'com_templates', '{"core.admin":{"7":1}}'), -(24, 1, 147, 150, 1, 'com_users', 'com_users', '{"core.admin":{"7":1}}'), -(26, 1, 151, 152, 1, 'com_wrapper', 'com_wrapper', '{}'), +(18, 1, 59, 134, 1, 'com_modules', 'com_modules', '{"core.admin":{"7":1}}'), +(19, 1, 135, 138, 1, 'com_newsfeeds', 'com_newsfeeds', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), +(20, 1, 139, 140, 1, 'com_plugins', 'com_plugins', '{"core.admin":{"7":1}}'), +(21, 1, 141, 142, 1, 'com_redirect', 'com_redirect', '{"core.admin":{"7":1}}'), +(23, 1, 143, 144, 1, 'com_templates', 'com_templates', '{"core.admin":{"7":1}}'), +(24, 1, 149, 152, 1, 'com_users', 'com_users', '{"core.admin":{"7":1}}'), +(26, 1, 153, 154, 1, 'com_wrapper', 'com_wrapper', '{}'), (27, 8, 18, 19, 2, 'com_content.category.2', 'Uncategorised', '{}'), (28, 3, 4, 5, 2, 'com_banners.category.3', 'Uncategorised', '{}'), (29, 7, 14, 15, 2, 'com_contact.category.4', 'Uncategorised', '{}'), -(30, 19, 134, 135, 2, 'com_newsfeeds.category.5', 'Uncategorised', '{}'), -(32, 24, 148, 149, 2, 'com_users.category.7', 'Uncategorised', '{}'), -(33, 1, 153, 154, 1, 'com_finder', 'com_finder', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), -(34, 1, 155, 156, 1, 'com_joomlaupdate', 'com_joomlaupdate', '{}'), -(35, 1, 157, 158, 1, 'com_tags', 'com_tags', '{}'), -(36, 1, 159, 160, 1, 'com_contenthistory', 'com_contenthistory', '{}'), -(37, 1, 161, 162, 1, 'com_ajax', 'com_ajax', '{}'), -(38, 1, 163, 164, 1, 'com_postinstall', 'com_postinstall', '{}'), +(30, 19, 136, 137, 2, 'com_newsfeeds.category.5', 'Uncategorised', '{}'), +(32, 24, 150, 151, 2, 'com_users.category.7', 'Uncategorised', '{}'), +(33, 1, 155, 156, 1, 'com_finder', 'com_finder', '{"core.admin":{"7":1},"core.manage":{"6":1}}'), +(34, 1, 157, 158, 1, 'com_joomlaupdate', 'com_joomlaupdate', '{}'), +(35, 1, 159, 160, 1, 'com_tags', 'com_tags', '{}'), +(36, 1, 161, 162, 1, 'com_contenthistory', 'com_contenthistory', '{}'), +(37, 1, 163, 164, 1, 'com_ajax', 'com_ajax', '{}'), +(38, 1, 165, 166, 1, 'com_postinstall', 'com_postinstall', '{}'), (39, 18, 60, 61, 2, 'com_modules.module.1', 'Main Menu', '{}'), (40, 18, 62, 63, 2, 'com_modules.module.2', 'Login', '{}'), (41, 18, 64, 65, 2, 'com_modules.module.3', 'Popular Articles', '{}'), @@ -90,8 +90,8 @@ INSERT INTO "#__assets" ("id", "parent_id", "lft", "rgt", "level", "name", "titl (62, 56, 31, 32, 3, 'com_content.transition.5', 'FEATURE', '{}'), (63, 56, 33, 34, 3, 'com_content.transition.6', 'UNFEATURE', '{}'), (64, 56, 35, 36, 3, 'com_content.transition.7', 'PUBLISH_AND_FEATURE', '{}'), -(65, 1, 143, 144, 1, 'com_privacy', 'com_privacy', '{}'), -(66, 1, 145, 146, 1, 'com_actionlogs', 'com_actionlogs', '{}'), +(65, 1, 145, 146, 1, 'com_privacy', 'com_privacy', '{}'), +(66, 1, 147, 148, 1, 'com_actionlogs', 'com_actionlogs', '{}'), (67, 18, 76, 77, 2, 'com_modules.module.88', 'Latest Actions', '{}'), (68, 18, 78, 79, 2, 'com_modules.module.89', 'Privacy Dashboard', '{}'), (70, 18, 88, 89, 2, 'com_modules.module.103', 'Site', '{}'), @@ -113,18 +113,19 @@ INSERT INTO "#__assets" ("id", "parent_id", "lft", "rgt", "level", "name", "titl (87, 18, 124, 125, 2, 'com_modules.module.97', 'Recently Added Articles', '{}'), (88, 18, 126, 127, 2, 'com_modules.module.98', 'Logged-in Users', '{}'), (89, 18, 128, 129, 2, 'com_modules.module.90', 'Login Support', '{}'), -(90, 1, 165, 172, 1, 'com_scheduler', 'com_scheduler', '{}'), -(91, 1, 173, 174, 1, 'com_associations', 'com_associations', '{}'), -(92, 1, 175, 176, 1, 'com_categories', 'com_categories', '{}'), -(93, 1, 177, 178, 1, 'com_fields', 'com_fields', '{}'), -(94, 1, 179, 180, 1, 'com_workflow', 'com_workflow', '{}'), -(95, 1, 181, 182, 1, 'com_guidedtours', 'com_guidedtours', '{}'), +(90, 1, 167, 174, 1, 'com_scheduler', 'com_scheduler', '{}'), +(91, 1, 175, 176, 1, 'com_associations', 'com_associations', '{}'), +(92, 1, 177, 178, 1, 'com_categories', 'com_categories', '{}'), +(93, 1, 179, 180, 1, 'com_fields', 'com_fields', '{}'), +(94, 1, 181, 182, 1, 'com_workflow', 'com_workflow', '{}'), +(95, 1, 183, 184, 1, 'com_guidedtours', 'com_guidedtours', '{}'), (96, 18, 130, 131, 2, 'com_modules.module.109', 'Guided Tours', '{}'), -(97, 90, 166, 167, 2, 'com_scheduler.task.1', 'Rotate Logs', '{}'), -(98, 90, 168, 169, 2, 'com_scheduler.task.2', 'Session GC', '{}'), -(99, 90, 170, 171, 2, 'com_scheduler.task.3', 'Update Notification', '{}'); +(97, 90, 168, 169, 2, 'com_scheduler.task.1', 'Rotate Logs', '{}'), +(98, 90, 170, 171, 2, 'com_scheduler.task.2', 'Session GC', '{}'), +(99, 90, 172, 173, 2, 'com_scheduler.task.3', 'Update Notification', '{}'), +(100, 18, 132, 133, 2, 'com_modules.module.110', 'Backward Compatibility', '{}'); -SELECT setval('#__assets_id_seq', 100, false); +SELECT setval('#__assets_id_seq', 101, false); -- -- Table structure for table `#__extensions` @@ -258,7 +259,8 @@ INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", (0, 'mod_privacy_dashboard', 'module', 'mod_privacy_dashboard', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0), (0, 'mod_submenu', 'module', 'mod_submenu', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0), (0, 'mod_privacy_status', 'module', 'mod_privacy_status', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0), -(0, 'mod_guidedtours', 'module', 'mod_guidedtours', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0); +(0, 'mod_guidedtours', 'module', 'mod_guidedtours', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0), +(0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0); -- Plugins INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES @@ -678,7 +680,8 @@ INSERT INTO "#__modules" ("id", "asset_id", "title", "note", "content", "orderin (106, 83, 'Help Dashboard', '', '', 1, 'cpanel-help', NULL, NULL, 1, 'mod_submenu', 1, 0, '{"menutype":"*","preset":"help","layout":"_:default","moduleclass_sfx":"","style":"System-none","module_tag":"div","bootstrap_size":"12","header_tag":"h2","header_class":""}', 1, '*'), (107, 84, 'Privacy Requests', '', '', 1, 'cpanel-privacy', NULL, NULL, 1, 'mod_privacy_dashboard', 1, 1, '{"layout":"_:default","moduleclass_sfx":"","cache":1,"cache_time":900,"cachemode":"static","style":"0","module_tag":"div","bootstrap_size":"12","header_tag":"h2","header_class":""}', 1, '*'), (108, 85, 'Privacy Status', '', '', 1, 'cpanel-privacy', NULL, NULL, 1, 'mod_privacy_status', 1, 1, '{"layout":"_:default","moduleclass_sfx":"","cache":1,"cache_time":900,"cachemode":"static","style":"0","module_tag":"div","bootstrap_size":"12","header_tag":"h2","header_class":""}', 1, '*'), -(109, 96, 'Guided Tours', '', '', 1, 'status', NULL, NULL, 1, 'mod_guidedtours', 1, 1, '', 1, '*'); +(109, 96, 'Guided Tours', '', '', 1, 'status', NULL, NULL, 1, 'mod_guidedtours', 1, 1, '', 1, '*'), +(110, 100, 'Backward Compatibility', '', '', 1, 'status', NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); SELECT setval('#__modules_id_seq', 110, false); @@ -735,7 +738,8 @@ INSERT INTO "#__modules_menu" ("moduleid", "menuid") VALUES (106, 0), (107, 0), (108, 0), -(109, 0); +(109, 0), +(110, 0); -- -- Table structure for table `#__schemas` diff --git a/libraries/src/Extension/ExtensionHelper.php b/libraries/src/Extension/ExtensionHelper.php index 6182bf8008d5c..417d1ac1f712f 100644 --- a/libraries/src/Extension/ExtensionHelper.php +++ b/libraries/src/Extension/ExtensionHelper.php @@ -105,6 +105,7 @@ class ExtensionHelper ['library', 'phpass', '', 0], // Core module extensions - administrator + ['module', 'mod_backward', '', 1], ['module', 'mod_custom', '', 1], ['module', 'mod_feed', '', 1], ['module', 'mod_frontend', '', 1], From a7d3f521591197077c59aa97bbb33a3a4b559537 Mon Sep 17 00:00:00 2001 From: alikon Date: Sat, 8 Nov 2025 11:36:53 +0100 Subject: [PATCH 02/18] typo --- .../modules/mod_backward/src/Dispatcher/Dispatcher.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php index e8fb73c14e7b4..44558faf59ebc 100644 --- a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php +++ b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php @@ -18,7 +18,7 @@ // phpcs:enable PSR1.Files.SideEffects /** - * Dispatcher class for mod_backword + * Dispatcher class for mod_backward * * @since 5.4.0 */ From 24c86ddade8e69bd44e7e74e9ab4e2a1067a87f8 Mon Sep 17 00:00:00 2001 From: alikon Date: Sat, 8 Nov 2025 11:37:38 +0100 Subject: [PATCH 03/18] cs --- administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php | 1 - 1 file changed, 1 deletion(-) diff --git a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php index 44558faf59ebc..f45f121d7f49a 100644 --- a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php +++ b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php @@ -24,7 +24,6 @@ */ class Dispatcher extends AbstractModuleDispatcher { - /** * Returns the layout data. * From 2ce877a2ca97ba3ddc22d88db2d738bb33158cf9 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sat, 8 Nov 2025 12:01:14 +0100 Subject: [PATCH 04/18] Update sequence value for modules to 111 --- installation/sql/postgresql/base.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installation/sql/postgresql/base.sql b/installation/sql/postgresql/base.sql index 12ebd08439cbc..15d7d80c0aa16 100644 --- a/installation/sql/postgresql/base.sql +++ b/installation/sql/postgresql/base.sql @@ -683,7 +683,7 @@ INSERT INTO "#__modules" ("id", "asset_id", "title", "note", "content", "orderin (109, 96, 'Guided Tours', '', '', 1, 'status', NULL, NULL, 1, 'mod_guidedtours', 1, 1, '', 1, '*'), (110, 100, 'Backward Compatibility', '', '', 1, 'status', NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); -SELECT setval('#__modules_id_seq', 110, false); +SELECT setval('#__modules_id_seq', 111, false); -- -- Table structure for table `#__modules_menu` From 0f9af3efc5c99dff071fe69a88612f25afc3c2aa Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 08:54:19 +0100 Subject: [PATCH 05/18] phpstan phpstan Co-authored-by: Richard Fath --- administrator/modules/mod_backward/tmpl/default.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/administrator/modules/mod_backward/tmpl/default.php b/administrator/modules/mod_backward/tmpl/default.php index 28f92ab5b37b1..63fcd811a99d8 100644 --- a/administrator/modules/mod_backward/tmpl/default.php +++ b/administrator/modules/mod_backward/tmpl/default.php @@ -20,5 +20,4 @@ - - \ No newline at end of file + \ No newline at end of file From 033e41cc2ea7a00444ab3a11c40d334f95abb3dc Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 08:54:56 +0100 Subject: [PATCH 06/18] Update administrator/language/en-GB/mod_backward.ini Co-authored-by: Brian Teeman --- administrator/language/en-GB/mod_backward.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/language/en-GB/mod_backward.ini b/administrator/language/en-GB/mod_backward.ini index d95bddf94ed8d..691e8e9c05a53 100644 --- a/administrator/language/en-GB/mod_backward.ini +++ b/administrator/language/en-GB/mod_backward.ini @@ -5,4 +5,4 @@ MOD_BACKWARD="Joomla! Backward Compatibility Information" MOD_BACKWARD_TEXT="Backward:" -MOD_BACKWARD_XML_DESCRIPTION="This module displays the Joomla! Backward Compatibility plugins Information and is intended to be displayed in the 'status' position." \ No newline at end of file +MOD_BACKWARD_XML_DESCRIPTION="This module displays the which Joomla! Backward Compatibility plugins are enabled and is intended to be displayed in the 'status' position." \ No newline at end of file From 311fdc2b2bac4955b8410663c347a173157aec6d Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 08:55:17 +0100 Subject: [PATCH 07/18] Update administrator/language/en-GB/mod_backward.sys.ini Co-authored-by: Brian Teeman --- administrator/language/en-GB/mod_backward.sys.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/language/en-GB/mod_backward.sys.ini b/administrator/language/en-GB/mod_backward.sys.ini index 3f7c435a32a38..d5183129854e3 100644 --- a/administrator/language/en-GB/mod_backward.sys.ini +++ b/administrator/language/en-GB/mod_backward.sys.ini @@ -4,4 +4,4 @@ ; Note : All ini files need to be saved as UTF-8 MOD_BACKWARD="Joomla! Backward Compatibility Information" -MOD_BACKWARD_XML_DESCRIPTION="This module displays the Joomla! Backward Compatibility plugins Information and is intended to be displayed in the 'status' position." \ No newline at end of file +MOD_BACKWARD_XML_DESCRIPTION="This module displays the which Joomla! Backward Compatibility plugins are enabled and is intended to be displayed in the 'status' position." \ No newline at end of file From 06096ebfe36f7132be9459f4fdf2fabb1650fa63 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 08:55:30 +0100 Subject: [PATCH 08/18] Update administrator/modules/mod_backward/services/provider.php Co-authored-by: Brian Teeman --- administrator/modules/mod_backward/services/provider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/modules/mod_backward/services/provider.php b/administrator/modules/mod_backward/services/provider.php index 14a3840acce4c..4c36247f7033c 100644 --- a/administrator/modules/mod_backward/services/provider.php +++ b/administrator/modules/mod_backward/services/provider.php @@ -24,7 +24,7 @@ * * @return void * - * @since 5.1.0 + * @since __DEPLOY_VERSION__ */ public function register(Container $container) { From 504f605bcf00061028d711a9a58d3da48d767f94 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 08:55:42 +0100 Subject: [PATCH 09/18] Update administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php Co-authored-by: Brian Teeman --- .../modules/mod_backward/src/Dispatcher/Dispatcher.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php index f45f121d7f49a..7515ea5a26d7e 100644 --- a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php +++ b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php @@ -20,7 +20,7 @@ /** * Dispatcher class for mod_backward * - * @since 5.4.0 + * @since __DEPLOY_VERSION__ */ class Dispatcher extends AbstractModuleDispatcher { From d9ba4a95ab08204cc79c1a1c2cef66fa8cad8509 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 08:55:55 +0100 Subject: [PATCH 10/18] Update administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php Co-authored-by: Brian Teeman --- .../modules/mod_backward/src/Dispatcher/Dispatcher.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php index 7515ea5a26d7e..d2d905e83709c 100644 --- a/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php +++ b/administrator/modules/mod_backward/src/Dispatcher/Dispatcher.php @@ -29,7 +29,7 @@ class Dispatcher extends AbstractModuleDispatcher * * @return array * - * @since 5.4.0 + * @since __DEPLOY_VERSION__ */ protected function getLayoutData() { From dead98a85e0ef2b07e590a3d6bf827bda9f05359 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 08:56:10 +0100 Subject: [PATCH 11/18] Update administrator/modules/mod_backward/mod_backward.xml Co-authored-by: Brian Teeman --- administrator/modules/mod_backward/mod_backward.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/modules/mod_backward/mod_backward.xml b/administrator/modules/mod_backward/mod_backward.xml index 987901e5e4d8e..31354c3388db6 100644 --- a/administrator/modules/mod_backward/mod_backward.xml +++ b/administrator/modules/mod_backward/mod_backward.xml @@ -2,7 +2,7 @@ mod_backward Joomla! Project - 2025-01 + 2025-11 (C) 2025 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt admin@joomla.org From 66c48b8625f093e893c48216c657ff8ce4d7b59f Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 09:15:47 +0100 Subject: [PATCH 12/18] Add backward compatibility module and extension entries --- .../com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql b/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql index db5ba5156c546..7e594fac0e3b7 100644 --- a/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql +++ b/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql @@ -1,4 +1,7 @@ INSERT INTO `#__modules` (`title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES ('Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); -INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES (LAST_INSERT_ID(), 0); \ No newline at end of file +INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES (LAST_INSERT_ID(), 0); + +INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES +(0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0); From d057b8dd5f1a2db442dc1ec94b363b8c1200907a Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 09:18:01 +0100 Subject: [PATCH 13/18] Add backward compatibility module and extension entries --- .../com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql index e43a167bcc7c4..5d935c7b15da9 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql @@ -1,4 +1,7 @@ INSERT INTO "#__modules" ("title", "note", "content", "ordering", "position", "checked_out", "checked_out_time", "publish_up", "publish_down", "published", "module", "access", "showtitle", "params", "client_id", "language") VALUES ('Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); -INSERT INTO "#__modules_menu" ("moduleid", "menuid") VALUES (currval(pg_get_serial_sequence('#__modules','id')), 0); \ No newline at end of file +INSERT INTO "#__modules_menu" ("moduleid", "menuid") VALUES (currval(pg_get_serial_sequence('#__modules','id')), 0); + +INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES +(0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0); From 296a5ef6823e5db03509edc3856b250849db85d7 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 13:14:19 +0100 Subject: [PATCH 14/18] insert one time only --- .../sql/updates/mysql/5.4.0.2025-11.08.sql | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql b/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql index 7e594fac0e3b7..fbd9b164a3e52 100644 --- a/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql +++ b/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql @@ -1,7 +1,11 @@ -INSERT INTO `#__modules` (`title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES -('Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); +INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) +SELECT 0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0 +WHERE NOT EXISTS (SELECT * FROM `a#__extensions` e WHERE e.`type` = 'module' AND e.`element` = 'mod_backward' AND e.`name` = 'mod_backward' AND e.`client_id` = 1); -INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES (LAST_INSERT_ID(), 0); +INSERT INTO `#__modules` (`title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) +SELECT 'Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*' +WHERE NOT EXISTS (SELECT * FROM `#__modules` m WHERE m.`title` = 'Backward Compatibility' AND m.`position` = 'status' AND m.`module` = 'mod_backward' AND m.`client_id` = 1); -INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES -(0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0); +INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) +SELECT LAST_INSERT_ID(), 0 +WHERE NOT EXISTS (SELECT 1 FROM `#__modules_menu` WHERE `moduleid` = LAST_INSERT_ID() AND `menuid` = 0); From 4175e5fea4bb0bad976a23c26f2497859ca9039f Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 13:23:35 +0100 Subject: [PATCH 15/18] insert one time only --- .../sql/updates/postgresql/5.4.0-2025-11-08.sql | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql index 5d935c7b15da9..8c48aea399abb 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql @@ -1,7 +1,11 @@ -INSERT INTO "#__modules" ("title", "note", "content", "ordering", "position", "checked_out", "checked_out_time", "publish_up", "publish_down", "published", "module", "access", "showtitle", "params", "client_id", "language") VALUES -('Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*'); +INSERT INTO "#__modules" ("title", "note", "content", "ordering", "position", "checked_out", "checked_out_time", "publish_up", "publish_down", "published", "module", "access", "showtitle", "params", "client_id", "language") +SELECT 'Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*' +WHERE NOT EXISTS (SELECT * FROM "#__modules" m WHERE m."title" = 'Backward Compatibility' AND m."position" = 'status' AND m."module" = 'mod_backward' AND m."client_id" = 1); -INSERT INTO "#__modules_menu" ("moduleid", "menuid") VALUES (currval(pg_get_serial_sequence('#__modules','id')), 0); +INSERT INTO "#__modules_menu" ("moduleid", "menuid") +VALUES (currval(pg_get_serial_sequence('#__modules','id')), 0) +ON CONFLICT ("moduleid", "menuid") DO NOTHING; -INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES -(0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0); +INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") +SELECT 0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0 +WHERE NOT EXISTS (SELECT * FROM "#__extensions" e WHERE e."type" = 'module' AND e."element" = 'mod_backward' AND e."name" = 'mod_backward' AND e."client_id" = 1); From 3bb2c75d6ee6e38df04708cd28abe32effeb1cfd Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 13:24:28 +0100 Subject: [PATCH 16/18] Update administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql Co-authored-by: Richard Fath --- .../components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql b/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql index fbd9b164a3e52..96b2f4bda5149 100644 --- a/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql +++ b/administrator/components/com_admin/sql/updates/mysql/5.4.0.2025-11.08.sql @@ -1,6 +1,6 @@ INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) SELECT 0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0 -WHERE NOT EXISTS (SELECT * FROM `a#__extensions` e WHERE e.`type` = 'module' AND e.`element` = 'mod_backward' AND e.`name` = 'mod_backward' AND e.`client_id` = 1); +WHERE NOT EXISTS (SELECT * FROM `#__extensions` e WHERE e.`type` = 'module' AND e.`element` = 'mod_backward' AND e.`name` = 'mod_backward' AND e.`client_id` = 1); INSERT INTO `#__modules` (`title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) SELECT 'Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*' From acf9b0c48d1254f32120538857720ebaac1104d3 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 13:27:49 +0100 Subject: [PATCH 17/18] same order --- .../com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql index 8c48aea399abb..b2bf13bd071ae 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql @@ -1,3 +1,7 @@ +INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") +SELECT 0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0 +WHERE NOT EXISTS (SELECT * FROM "#__extensions" e WHERE e."type" = 'module' AND e."element" = 'mod_backward' AND e."name" = 'mod_backward' AND e."client_id" = 1); + INSERT INTO "#__modules" ("title", "note", "content", "ordering", "position", "checked_out", "checked_out_time", "publish_up", "publish_down", "published", "module", "access", "showtitle", "params", "client_id", "language") SELECT 'Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'mod_backward', 1, 1, '', 1, '*' WHERE NOT EXISTS (SELECT * FROM "#__modules" m WHERE m."title" = 'Backward Compatibility' AND m."position" = 'status' AND m."module" = 'mod_backward' AND m."client_id" = 1); @@ -5,7 +9,3 @@ WHERE NOT EXISTS (SELECT * FROM "#__modules" m WHERE m."title" = 'Backward Compa INSERT INTO "#__modules_menu" ("moduleid", "menuid") VALUES (currval(pg_get_serial_sequence('#__modules','id')), 0) ON CONFLICT ("moduleid", "menuid") DO NOTHING; - -INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") -SELECT 0, 'mod_backward', 'module', 'mod_backward', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0 -WHERE NOT EXISTS (SELECT * FROM "#__extensions" e WHERE e."type" = 'module' AND e."element" = 'mod_backward' AND e."name" = 'mod_backward' AND e."client_id" = 1); From 6eb4b56599326903b3aad99ddfb3f9d85a2ff8f4 Mon Sep 17 00:00:00 2001 From: Nicola Galgano Date: Sun, 9 Nov 2025 16:45:45 +0100 Subject: [PATCH 18/18] same as mysql --- .../com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql index b2bf13bd071ae..5426a42545107 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/5.4.0-2025-11-08.sql @@ -7,5 +7,9 @@ SELECT 'Backward Compatibility', '', '', 1, 'status', 0, NULL, NULL, NULL, 1, 'm WHERE NOT EXISTS (SELECT * FROM "#__modules" m WHERE m."title" = 'Backward Compatibility' AND m."position" = 'status' AND m."module" = 'mod_backward' AND m."client_id" = 1); INSERT INTO "#__modules_menu" ("moduleid", "menuid") -VALUES (currval(pg_get_serial_sequence('#__modules','id')), 0) -ON CONFLICT ("moduleid", "menuid") DO NOTHING; +SELECT currval(pg_get_serial_sequence('#__modules','id')), 0 +WHERE NOT EXISTS ( + SELECT 1 FROM "#__modules_menu" + WHERE "moduleid" = currval(pg_get_serial_sequence('#__modules','id')) AND "menuid" = 0 +); +