From f52cbbf2ab694055dfa91914005997cecaf10d33 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Sat, 22 Feb 2025 10:02:57 +0100 Subject: [PATCH 01/11] Fix retrieval of update information after CMS release channel switches --- .../sql/updates/mysql/5.3.0-2025-02-22.sql | 3 + .../updates/postgresql/5.3.0-2025-02-22.sql | 3 + .../src/Controller/DisplayController.php | 3 +- .../src/Model/UpdateModel.php | 28 +++--- .../en-GB/plg_extension_joomlaupdate.ini | 7 ++ .../en-GB/plg_extension_joomlaupdate.sys.ini | 7 ++ .../extension/joomlaupdate/joomlaupdate.xml | 21 +++++ .../joomlaupdate/services/provider.php | 47 ++++++++++ .../src/Extension/Joomlaupdate.php | 86 +++++++++++++++++++ 9 files changed, 188 insertions(+), 17 deletions(-) create mode 100644 administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql create mode 100644 administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql create mode 100644 administrator/language/en-GB/plg_extension_joomlaupdate.ini create mode 100644 administrator/language/en-GB/plg_extension_joomlaupdate.sys.ini create mode 100644 plugins/extension/joomlaupdate/joomlaupdate.xml create mode 100644 plugins/extension/joomlaupdate/services/provider.php create mode 100644 plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php diff --git a/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql b/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql new file mode 100644 index 0000000000000..8506d1d1e0895 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql @@ -0,0 +1,3 @@ +-- Add plg_extension_joomlaupdate plugin +INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 3, 0); diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql b/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql new file mode 100644 index 0000000000000..259fb1a678855 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql @@ -0,0 +1,3 @@ +-- Add plg_extension_joomlaupdate module +INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 3, 0); diff --git a/administrator/components/com_joomlaupdate/src/Controller/DisplayController.php b/administrator/components/com_joomlaupdate/src/Controller/DisplayController.php index dba5f257ae347..2b509f3a4640f 100644 --- a/administrator/components/com_joomlaupdate/src/Controller/DisplayController.php +++ b/administrator/components/com_joomlaupdate/src/Controller/DisplayController.php @@ -76,8 +76,7 @@ public function display($cachable = false, $urlparams = false) $state->set('log_file', $this->app->get('log_path') . '/joomla_update.php'); } - // Perform update source preference check and refresh update information. - $model->applyUpdateSite(); + // Refresh update information. $model->refreshUpdates(); // Push the model into the view (as default). diff --git a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php index 332f076136a08..ae287b499d3f8 100644 --- a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php +++ b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php @@ -134,21 +134,19 @@ public function applyUpdateSite() $db->setQuery($query); $update_site = $db->loadObject(); - if ($update_site->location !== $updateURL || $update_site->type !== $updateType) { - // Modify the database record. - $update_site->last_check_timestamp = 0; - $update_site->location = $updateURL; - $update_site->type = $updateType; - $db->updateObject('#__update_sites', $update_site, 'update_site_id'); - - // Remove cached updates. - $query->clear() - ->delete($db->quoteName('#__updates')) - ->where($db->quoteName('extension_id') . ' = :id') - ->bind(':id', $id, ParameterType::INTEGER); - $db->setQuery($query); - $db->execute(); - } + // Modify the database record. + $update_site->last_check_timestamp = 0; + $update_site->location = $updateURL; + $update_site->type = $updateType; + $db->updateObject('#__update_sites', $update_site, 'update_site_id'); + + // Remove cached updates. + $query->clear() + ->delete($db->quoteName('#__updates')) + ->where($db->quoteName('extension_id') . ' = :id') + ->bind(':id', $id, ParameterType::INTEGER); + $db->setQuery($query); + $db->execute(); } /** diff --git a/administrator/language/en-GB/plg_extension_joomlaupdate.ini b/administrator/language/en-GB/plg_extension_joomlaupdate.ini new file mode 100644 index 0000000000000..d096ab9d96ad8 --- /dev/null +++ b/administrator/language/en-GB/plg_extension_joomlaupdate.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 + +PLG_EXTENSION_JOOMLAUPDATE="Extension - Joomla! Update" +PLG_EXTENSION_JOOMLAUPDATE_XML_DESCRIPTION="Purges the core updates after release channel changes." diff --git a/administrator/language/en-GB/plg_extension_joomlaupdate.sys.ini b/administrator/language/en-GB/plg_extension_joomlaupdate.sys.ini new file mode 100644 index 0000000000000..d096ab9d96ad8 --- /dev/null +++ b/administrator/language/en-GB/plg_extension_joomlaupdate.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 + +PLG_EXTENSION_JOOMLAUPDATE="Extension - Joomla! Update" +PLG_EXTENSION_JOOMLAUPDATE_XML_DESCRIPTION="Purges the core updates after release channel changes." diff --git a/plugins/extension/joomlaupdate/joomlaupdate.xml b/plugins/extension/joomlaupdate/joomlaupdate.xml new file mode 100644 index 0000000000000..6c95354b654ec --- /dev/null +++ b/plugins/extension/joomlaupdate/joomlaupdate.xml @@ -0,0 +1,21 @@ + + + plg_extension_joomlaupdate + Joomla! Project + 2025-02 + (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 + PLG_EXTENSION_JOOMLAUPDATE_XML_DESCRIPTION + Joomla\Plugin\Extension\Joomlaupdate + + services + src + + + language/en-GB/plg_extension_joomlaupdate.ini + language/en-GB/plg_extension_joomlaupdate.sys.ini + + diff --git a/plugins/extension/joomlaupdate/services/provider.php b/plugins/extension/joomlaupdate/services/provider.php new file mode 100644 index 0000000000000..6d3c3b47c309c --- /dev/null +++ b/plugins/extension/joomlaupdate/services/provider.php @@ -0,0 +1,47 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +\defined('_JEXEC') or die; + +use Joomla\CMS\Extension\PluginInterface; +use Joomla\CMS\Factory; +use Joomla\CMS\Plugin\PluginHelper; +use Joomla\DI\Container; +use Joomla\DI\ServiceProviderInterface; +use Joomla\Event\DispatcherInterface; +use Joomla\Plugin\Extension\Joomlaupdate\Extension\Joomlaupdate; + +return new class () implements ServiceProviderInterface { + /** + * Registers the service provider with a DI container. + * + * @param Container $container The DI container. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function register(Container $container) + { + $container->set( + PluginInterface::class, + function (Container $container) { + $plugin = new Joomlaupdate( + $container->get(DispatcherInterface::class), + (array) PluginHelper::getPlugin('extension', 'joomlaupdate') + ); + + $plugin->setApplication(Factory::getApplication()); + + return $plugin; + } + ); + } +}; diff --git a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php new file mode 100644 index 0000000000000..eb981e2d44f1c --- /dev/null +++ b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php @@ -0,0 +1,86 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\Plugin\Extension\Joomlaupdate\Extension; + +use Joomla\CMS\Event\Model\AfterSaveEvent; +use Joomla\CMS\Plugin\CMSPlugin; +use Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel; +use Joomla\Database\DatabaseAwareTrait; +use Joomla\Event\SubscriberInterface; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Joomla! main extension plugin. + * + * @since 1.6 + */ +final class Joomlaupdate extends CMSPlugin implements SubscriberInterface +{ + /** + * Load the language file on instantiation. + * + * @var boolean + * + * @since __DEPLOY_VERSION__ + */ + protected $autoloadLanguage = true; + + /** + * Returns an array of events this subscriber will listen to. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + public static function getSubscribedEvents(): array + { + return [ + 'onExtensionAfterSave' => 'onExtensionAfterSave' + ]; + } + + /** + * After update of an extension + * + * @param AfterSaveEvent $event Event instance. + * + * @return void + * + * @since __DEPLOY_VERSION__ + */ + public function onExtensionAfterSave(AfterSaveEvent $event): void + { + $context = $event->getContext(); + $item = $event->getItem(); + + if ($context !== 'com_config.component') { + return; + } + + if ($item->element !== 'com_joomlaupdate') { + return; + } + + /** @var UpdateModel $updateModel */ + $updateModel = $this->getApplication()->bootComponent('com_joomlaupdate') + ->getMVCFactory()->createModel('Update', 'Administrator', ['ignore_request' => true]); + + if (!$updateModel) { + return; + } + + $updateModel->applyUpdateSite(); + $updateModel->refreshUpdates(true); + } +} From 629f5c0556116bb9350de155849a8c2093794125 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Sat, 22 Feb 2025 10:08:36 +0100 Subject: [PATCH 02/11] remove fetch --- plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php index eb981e2d44f1c..b5a8448773c21 100644 --- a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php +++ b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php @@ -81,6 +81,5 @@ public function onExtensionAfterSave(AfterSaveEvent $event): void } $updateModel->applyUpdateSite(); - $updateModel->refreshUpdates(true); } } From af719c8445aa9ba170201d0d5d1ef9ed991c4898 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Sat, 22 Feb 2025 10:21:13 +0100 Subject: [PATCH 03/11] update sqls --- .../components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql | 2 +- .../com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql | 2 +- installation/sql/mysql/base.sql | 1 + installation/sql/postgresql/base.sql | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql b/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql index 8506d1d1e0895..4af4e98079381 100644 --- a/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql +++ b/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql @@ -1,3 +1,3 @@ -- Add plg_extension_joomlaupdate plugin INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES -(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 3, 0); +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 4, 0); diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql b/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql index 259fb1a678855..a6e5f66fa2ec7 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql @@ -1,3 +1,3 @@ -- Add plg_extension_joomlaupdate module INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES -(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 3, 0); +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 4, 0); diff --git a/installation/sql/mysql/base.sql b/installation/sql/mysql/base.sql index 534493dbc12f2..fb04b47fe4b0c 100644 --- a/installation/sql/mysql/base.sql +++ b/installation/sql/mysql/base.sql @@ -289,6 +289,7 @@ INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, (0, 'plg_extension_finder', 'plugin', 'finder', 'extension', 0, 1, 1, 0, 1, '', '', '', 1, 0), (0, 'plg_extension_joomla', 'plugin', 'joomla', 'extension', 0, 1, 1, 0, 1, '', '', '', 2, 0), (0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 1, 1, '', '{}', '', 3, 0), +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 4, 0), (0, 'plg_fields_calendar', 'plugin', 'calendar', 'fields', 0, 1, 1, 0, 1, '', '', '', 1, 0), (0, 'plg_fields_checkboxes', 'plugin', 'checkboxes', 'fields', 0, 1, 1, 0, 1, '', '', '', 2, 0), (0, 'plg_fields_color', 'plugin', 'color', 'fields', 0, 1, 1, 0, 1, '', '', '', 3, 0), diff --git a/installation/sql/postgresql/base.sql b/installation/sql/postgresql/base.sql index 663718b278dfb..c0ba7a8fc2098 100644 --- a/installation/sql/postgresql/base.sql +++ b/installation/sql/postgresql/base.sql @@ -295,6 +295,7 @@ INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", (0, 'plg_extension_finder', 'plugin', 'finder', 'extension', 0, 1, 1, 0, 1, '', '', '', 1, 0), (0, 'plg_extension_joomla', 'plugin', 'joomla', 'extension', 0, 1, 1, 0, 1, '', '', '', 2, 0), (0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 1, 1, '', '{}', '', 3, 0), +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 4, 0), (0, 'plg_fields_calendar', 'plugin', 'calendar', 'fields', 0, 1, 1, 0, 1, '', '', '', 1, 0), (0, 'plg_fields_checkboxes', 'plugin', 'checkboxes', 'fields', 0, 1, 1, 0, 1, '', '', '', 2, 0), (0, 'plg_fields_color', 'plugin', 'color', 'fields', 0, 1, 1, 0, 1, '', '', '', 3, 0), From a7c948e2cdb032fad9e51f5d0f493da4399e8c77 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Sat, 22 Feb 2025 10:26:24 +0100 Subject: [PATCH 04/11] fix comments --- .../extension/joomlaupdate/src/Extension/Joomlaupdate.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php index b5a8448773c21..db90783fe01f1 100644 --- a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php +++ b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php @@ -4,7 +4,7 @@ * @package Joomla.Plugin * @subpackage Extension.joomla * - * @copyright (C) 2010 Open Source Matters, Inc. + * @copyright (C) 2025 Open Source Matters, Inc. * @license GNU General Public License version 2 or later; see LICENSE.txt */ @@ -13,7 +13,6 @@ use Joomla\CMS\Event\Model\AfterSaveEvent; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel; -use Joomla\Database\DatabaseAwareTrait; use Joomla\Event\SubscriberInterface; // phpcs:disable PSR1.Files.SideEffects @@ -21,9 +20,9 @@ // phpcs:enable PSR1.Files.SideEffects /** - * Joomla! main extension plugin. + * The extension plugin for com_joomlaupdate * - * @since 1.6 + * @since __DEPLOY_VERSION__ */ final class Joomlaupdate extends CMSPlugin implements SubscriberInterface { From 257002e2c9e7b3049543aecb4e723b1a0f71917b Mon Sep 17 00:00:00 2001 From: David Jardin Date: Sat, 22 Feb 2025 10:52:36 +0100 Subject: [PATCH 05/11] Add plugin to core extensions list --- libraries/src/Extension/ExtensionHelper.php | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/src/Extension/ExtensionHelper.php b/libraries/src/Extension/ExtensionHelper.php index f17b506296849..8a04936cfcabc 100644 --- a/libraries/src/Extension/ExtensionHelper.php +++ b/libraries/src/Extension/ExtensionHelper.php @@ -208,6 +208,7 @@ class ExtensionHelper ['plugin', 'joomla', 'extension', 0], ['plugin', 'namespacemap', 'extension', 0], ['plugin', 'finder', 'extension', 0], + ['plugin', 'joomlaupdate', 'extension', 0], // Core plugin extensions - fields ['plugin', 'calendar', 'fields', 0], From e82c40129e9e4cd21536e89b77baf4ae8a1ef283 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Sat, 22 Feb 2025 11:34:01 +0100 Subject: [PATCH 06/11] cs fix --- plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php index db90783fe01f1..9c866172ebc19 100644 --- a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php +++ b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php @@ -45,7 +45,7 @@ final class Joomlaupdate extends CMSPlugin implements SubscriberInterface public static function getSubscribedEvents(): array { return [ - 'onExtensionAfterSave' => 'onExtensionAfterSave' + 'onExtensionAfterSave' => 'onExtensionAfterSave' ]; } @@ -61,7 +61,7 @@ public static function getSubscribedEvents(): array public function onExtensionAfterSave(AfterSaveEvent $event): void { $context = $event->getContext(); - $item = $event->getItem(); + $item = $event->getItem(); if ($context !== 'com_config.component') { return; From ce7c0f5fd071c9f33c3d7a94bfa0baea62b82cfa Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Sat, 22 Feb 2025 14:36:29 +0100 Subject: [PATCH 07/11] Fix PHPCS --- plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php index 9c866172ebc19..8514cbdce6153 100644 --- a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php +++ b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php @@ -45,7 +45,7 @@ final class Joomlaupdate extends CMSPlugin implements SubscriberInterface public static function getSubscribedEvents(): array { return [ - 'onExtensionAfterSave' => 'onExtensionAfterSave' + 'onExtensionAfterSave' => 'onExtensionAfterSave', ]; } From 4eb14391b62fc89751ba8ea06fbbd19460a4d861 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Sat, 22 Feb 2025 14:57:17 +0100 Subject: [PATCH 08/11] Apply suggestions from code review Co-authored-by: Richard Fath --- .../com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql | 2 +- .../com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql | 2 +- installation/sql/mysql/base.sql | 4 ++-- installation/sql/postgresql/base.sql | 4 ++-- libraries/src/Extension/ExtensionHelper.php | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql b/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql index 4af4e98079381..426e088ca8979 100644 --- a/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql +++ b/administrator/components/com_admin/sql/updates/mysql/5.3.0-2025-02-22.sql @@ -1,3 +1,3 @@ -- Add plg_extension_joomlaupdate plugin INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES -(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 4, 0); +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 0, 0); diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql b/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql index a6e5f66fa2ec7..4f319c1a92d2d 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/5.3.0-2025-02-22.sql @@ -1,3 +1,3 @@ -- Add plg_extension_joomlaupdate module INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES -(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 4, 0); +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 0, 0); diff --git a/installation/sql/mysql/base.sql b/installation/sql/mysql/base.sql index fb04b47fe4b0c..db5dc5cff4aaa 100644 --- a/installation/sql/mysql/base.sql +++ b/installation/sql/mysql/base.sql @@ -288,8 +288,8 @@ INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, (0, 'plg_editors_tinymce', 'plugin', 'tinymce', 'editors', 0, 1, 1, 0, 1, '', '{"configuration":{"toolbars":{"2":{"toolbar1":["bold","underline","strikethrough","|","undo","redo","|","bullist","numlist","|","pastetext"]},"1":{"menu":["edit","insert","view","format","table","tools"],"toolbar1":["bold","italic","underline","strikethrough","|","alignleft","aligncenter","alignright","alignjustify","|","blocks","|","bullist","numlist","|","outdent","indent","|","undo","redo","|","link","unlink","anchor","code","|","hr","table","|","subscript","superscript","|","charmap","pastetext","preview"]},"0":{"menu":["edit","insert","view","format","table","tools"],"toolbar1":["bold","italic","underline","strikethrough","|","alignleft","aligncenter","alignright","alignjustify","|","styles","|","blocks","fontfamily","fontsize","|","searchreplace","|","bullist","numlist","|","outdent","indent","|","undo","redo","|","link","unlink","anchor","image","|","code","|","forecolor","backcolor","|","fullscreen","|","table","|","subscript","superscript","|","charmap","emoticons","media","hr","ltr","rtl","|","cut","copy","paste","pastetext","|","visualchars","visualblocks","nonbreaking","blockquote","jtemplate","|","print","preview","codesample","insertdatetime","removeformat"]}},"setoptions":{"2":{"access":["1"],"skin":"0","skin_admin":"0","mobile":"0","drag_drop":"1","path":"","entity_encoding":"raw","lang_mode":"1","text_direction":"ltr","content_css":"1","content_css_custom":"","relative_urls":"1","newlines":"0","use_config_textfilters":"0","invalid_elements":"script,applet,iframe","valid_elements":"","extended_elements":"","resizing":"1","resize_horizontal":"1","element_path":"1","wordcount":"1","image_advtab":"0","advlist":"1","autosave":"1","contextmenu":"1","custom_plugin":"","custom_button":""},"1":{"access":["6","2"],"skin":"0","skin_admin":"0","mobile":"0","drag_drop":"1","path":"","entity_encoding":"raw","lang_mode":"1","text_direction":"ltr","content_css":"1","content_css_custom":"","relative_urls":"1","newlines":"0","use_config_textfilters":"0","invalid_elements":"script,applet,iframe","valid_elements":"","extended_elements":"","resizing":"1","resize_horizontal":"1","element_path":"1","wordcount":"1","image_advtab":"0","advlist":"1","autosave":"1","contextmenu":"1","custom_plugin":"","custom_button":""},"0":{"access":["7","4","8"],"skin":"0","skin_admin":"0","mobile":"0","drag_drop":"1","path":"","entity_encoding":"raw","lang_mode":"1","text_direction":"ltr","content_css":"1","content_css_custom":"","relative_urls":"1","newlines":"0","use_config_textfilters":"0","invalid_elements":"script,applet,iframe","valid_elements":"","extended_elements":"","resizing":"1","resize_horizontal":"1","element_path":"1","wordcount":"1","image_advtab":"1","advlist":"1","autosave":"1","contextmenu":"1","custom_plugin":"","custom_button":""}}},"sets_amount":3,"html_height":"550","html_width":"750"}', '', 3, 0), (0, 'plg_extension_finder', 'plugin', 'finder', 'extension', 0, 1, 1, 0, 1, '', '', '', 1, 0), (0, 'plg_extension_joomla', 'plugin', 'joomla', 'extension', 0, 1, 1, 0, 1, '', '', '', 2, 0), -(0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 1, 1, '', '{}', '', 3, 0), -(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 4, 0), +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 3, 0), +(0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 1, 1, '', '{}', '', 4, 0), (0, 'plg_fields_calendar', 'plugin', 'calendar', 'fields', 0, 1, 1, 0, 1, '', '', '', 1, 0), (0, 'plg_fields_checkboxes', 'plugin', 'checkboxes', 'fields', 0, 1, 1, 0, 1, '', '', '', 2, 0), (0, 'plg_fields_color', 'plugin', 'color', 'fields', 0, 1, 1, 0, 1, '', '', '', 3, 0), diff --git a/installation/sql/postgresql/base.sql b/installation/sql/postgresql/base.sql index c0ba7a8fc2098..9a16881110208 100644 --- a/installation/sql/postgresql/base.sql +++ b/installation/sql/postgresql/base.sql @@ -294,8 +294,8 @@ INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", (0, 'plg_editors_tinymce', 'plugin', 'tinymce', 'editors', 0, 1, 1, 0, 1, '', '{"configuration":{"toolbars":{"2":{"toolbar1":["bold","underline","strikethrough","|","undo","redo","|","bullist","numlist","|","pastetext"]},"1":{"menu":["edit","insert","view","format","table","tools"],"toolbar1":["bold","italic","underline","strikethrough","|","alignleft","aligncenter","alignright","alignjustify","|","blocks","|","bullist","numlist","|","outdent","indent","|","undo","redo","|","link","unlink","anchor","code","|","hr","table","|","subscript","superscript","|","charmap","pastetext","preview"]},"0":{"menu":["edit","insert","view","format","table","tools"],"toolbar1":["bold","italic","underline","strikethrough","|","alignleft","aligncenter","alignright","alignjustify","|","styles","|","blocks","fontfamily","fontsize","|","searchreplace","|","bullist","numlist","|","outdent","indent","|","undo","redo","|","link","unlink","anchor","image","|","code","|","forecolor","backcolor","|","fullscreen","|","table","|","subscript","superscript","|","charmap","emoticons","media","hr","ltr","rtl","|","cut","copy","paste","pastetext","|","visualchars","visualblocks","nonbreaking","blockquote","jtemplate","|","print","preview","codesample","insertdatetime","removeformat"]}},"setoptions":{"2":{"access":["1"],"skin":"0","skin_admin":"0","mobile":"0","drag_drop":"1","path":"","entity_encoding":"raw","lang_mode":"1","text_direction":"ltr","content_css":"1","content_css_custom":"","relative_urls":"1","newlines":"0","use_config_textfilters":"0","invalid_elements":"script,applet,iframe","valid_elements":"","extended_elements":"","resizing":"1","resize_horizontal":"1","element_path":"1","wordcount":"1","image_advtab":"0","advlist":"1","autosave":"1","contextmenu":"1","custom_plugin":"","custom_button":""},"1":{"access":["6","2"],"skin":"0","skin_admin":"0","mobile":"0","drag_drop":"1","path":"","entity_encoding":"raw","lang_mode":"1","text_direction":"ltr","content_css":"1","content_css_custom":"","relative_urls":"1","newlines":"0","use_config_textfilters":"0","invalid_elements":"script,applet,iframe","valid_elements":"","extended_elements":"","resizing":"1","resize_horizontal":"1","element_path":"1","wordcount":"1","image_advtab":"0","advlist":"1","autosave":"1","contextmenu":"1","custom_plugin":"","custom_button":""},"0":{"access":["7","4","8"],"skin":"0","skin_admin":"0","mobile":"0","drag_drop":"1","path":"","entity_encoding":"raw","lang_mode":"1","text_direction":"ltr","content_css":"1","content_css_custom":"","relative_urls":"1","newlines":"0","use_config_textfilters":"0","invalid_elements":"script,applet,iframe","valid_elements":"","extended_elements":"","resizing":"1","resize_horizontal":"1","element_path":"1","wordcount":"1","image_advtab":"1","advlist":"1","autosave":"1","contextmenu":"1","custom_plugin":"","custom_button":""}}},"sets_amount":3,"html_height":"550","html_width":"750"}', '', 3, 0), (0, 'plg_extension_finder', 'plugin', 'finder', 'extension', 0, 1, 1, 0, 1, '', '', '', 1, 0), (0, 'plg_extension_joomla', 'plugin', 'joomla', 'extension', 0, 1, 1, 0, 1, '', '', '', 2, 0), -(0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 1, 1, '', '{}', '', 3, 0), -(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 4, 0), +(0, 'plg_extension_joomlaupdate', 'plugin', 'joomlaupdate', 'extension', 0, 1, 1, 0, 1, '', '', '', 3, 0), +(0, 'plg_extension_namespacemap', 'plugin', 'namespacemap', 'extension', 0, 1, 1, 1, 1, '', '{}', '', 4, 0), (0, 'plg_fields_calendar', 'plugin', 'calendar', 'fields', 0, 1, 1, 0, 1, '', '', '', 1, 0), (0, 'plg_fields_checkboxes', 'plugin', 'checkboxes', 'fields', 0, 1, 1, 0, 1, '', '', '', 2, 0), (0, 'plg_fields_color', 'plugin', 'color', 'fields', 0, 1, 1, 0, 1, '', '', '', 3, 0), diff --git a/libraries/src/Extension/ExtensionHelper.php b/libraries/src/Extension/ExtensionHelper.php index 8a04936cfcabc..db4523844ab91 100644 --- a/libraries/src/Extension/ExtensionHelper.php +++ b/libraries/src/Extension/ExtensionHelper.php @@ -206,9 +206,9 @@ class ExtensionHelper // Core plugin extensions - extension ['plugin', 'joomla', 'extension', 0], + ['plugin', 'joomlaupdate', 'extension', 0], ['plugin', 'namespacemap', 'extension', 0], ['plugin', 'finder', 'extension', 0], - ['plugin', 'joomlaupdate', 'extension', 0], // Core plugin extensions - fields ['plugin', 'calendar', 'fields', 0], From eaa7a46378c60273ae2eab5e62dbbd050d7962c8 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Mon, 24 Feb 2025 09:36:16 +0100 Subject: [PATCH 09/11] fix params --- .../com_joomlaupdate/src/Model/UpdateModel.php | 12 ++++++------ libraries/src/Console/CoreUpdateChannelCommand.php | 2 +- .../joomlaupdate/src/Extension/Joomlaupdate.php | 9 ++++++++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php index ae287b499d3f8..0d47b1a0c5b3a 100644 --- a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php +++ b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php @@ -85,18 +85,18 @@ public function __construct($config = [], ?MVCFactoryInterface $factory = null) * * @since 2.5.4 */ - public function applyUpdateSite() + public function applyUpdateSite(?string $updateSource = null, ?string $updateURL = null) { - // Determine the intended update URL. $params = ComponentHelper::getParams('com_joomlaupdate'); + $updateSource = $updateSource ?: $params->get('updatesource', 'default'); + $updateURL = trim($updateURL ?: $params->get('customurl', 'default')); - switch ($params->get('updatesource', 'default')) { + // Determine the intended update URL. + switch ($updateSource) { case 'custom': // "Custom" // @todo: check if the customurl is valid and not just "not empty". - if (trim($params->get('customurl', '')) != '') { - $updateURL = trim($params->get('customurl', '')); - } else { + if ($updateURL === '') { Factory::getApplication()->enqueueMessage(Text::_('COM_JOOMLAUPDATE_CONFIG_UPDATESOURCE_CUSTOM_ERROR'), 'error'); return; diff --git a/libraries/src/Console/CoreUpdateChannelCommand.php b/libraries/src/Console/CoreUpdateChannelCommand.php index 31dba413e2490..bfc9a0b7e826b 100644 --- a/libraries/src/Console/CoreUpdateChannelCommand.php +++ b/libraries/src/Console/CoreUpdateChannelCommand.php @@ -142,7 +142,7 @@ protected function doExecute(InputInterface $input, OutputInterface $output): in /** @var UpdateModel $updatemodel */ $app = $this->getApplication(); $updatemodel = $app->bootComponent('com_joomlaupdate')->getMVCFactory($app)->createModel('Update', 'Administrator'); - $updatemodel->applyUpdateSite(); + $updatemodel->applyUpdateSite($channel); if ($channel == 'custom') { $symfonyStyle->success('The update channel for this site has been set to the custom url "' . $params->get('customurl') . '".'); diff --git a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php index 8514cbdce6153..3ac597a4a5e31 100644 --- a/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php +++ b/plugins/extension/joomlaupdate/src/Extension/Joomlaupdate.php @@ -14,6 +14,7 @@ use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Component\Joomlaupdate\Administrator\Model\UpdateModel; use Joomla\Event\SubscriberInterface; +use Joomla\Registry\Registry; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; @@ -79,6 +80,12 @@ public function onExtensionAfterSave(AfterSaveEvent $event): void return; } - $updateModel->applyUpdateSite(); + $params = new Registry($item->params); + + // Apply updated config + $updateModel->applyUpdateSite( + $params->get('updatesource'), + $params->get('customurl'), + ); } } From ff9b845fa2622082dd9cdcd7c212caa02a4dd0aa Mon Sep 17 00:00:00 2001 From: Richard Fath Date: Mon, 24 Feb 2025 12:08:25 +0100 Subject: [PATCH 10/11] Fix PHPCS --- .../components/com_joomlaupdate/src/Model/UpdateModel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php index 0d47b1a0c5b3a..8a5cb0aaa5878 100644 --- a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php +++ b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php @@ -87,9 +87,9 @@ public function __construct($config = [], ?MVCFactoryInterface $factory = null) */ public function applyUpdateSite(?string $updateSource = null, ?string $updateURL = null) { - $params = ComponentHelper::getParams('com_joomlaupdate'); + $params = ComponentHelper::getParams('com_joomlaupdate'); $updateSource = $updateSource ?: $params->get('updatesource', 'default'); - $updateURL = trim($updateURL ?: $params->get('customurl', 'default')); + $updateURL = trim($updateURL ?: $params->get('customurl', 'default')); // Determine the intended update URL. switch ($updateSource) { From 9498976bf191b234c936ce48f125874447b25312 Mon Sep 17 00:00:00 2001 From: David Jardin Date: Mon, 24 Feb 2025 12:44:41 +0100 Subject: [PATCH 11/11] Update administrator/components/com_joomlaupdate/src/Model/UpdateModel.php Co-authored-by: Richard Fath --- .../components/com_joomlaupdate/src/Model/UpdateModel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php index 8a5cb0aaa5878..6c35f4112cc54 100644 --- a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php +++ b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php @@ -89,7 +89,7 @@ public function applyUpdateSite(?string $updateSource = null, ?string $updateURL { $params = ComponentHelper::getParams('com_joomlaupdate'); $updateSource = $updateSource ?: $params->get('updatesource', 'default'); - $updateURL = trim($updateURL ?: $params->get('customurl', 'default')); + $updateURL = trim($updateURL ?: $params->get('customurl', '')); // Determine the intended update URL. switch ($updateSource) {