diff --git a/.github/workflows/create-translation-pull-request-v4.yml b/.github/workflows/create-translation-pull-request-v4.yml index 434e1cceddf70..45eb10e652d78 100644 --- a/.github/workflows/create-translation-pull-request-v4.yml +++ b/.github/workflows/create-translation-pull-request-v4.yml @@ -1,4 +1,4 @@ -name: Create translation pull request +name: Create translation pull request J4 on: push: diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index e5b46e12a9a47..d95337516ba3a 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -2333,6 +2333,23 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false) '/libraries/vendor/cweagans/composer-patches/src/Patches.php', '/libraries/vendor/cweagans/composer-patches/tests/PatchEventTest.php', '/libraries/vendor/laminas/laminas-diactoros/PATCHES.txt', + // From 5.1.2 to 5.1.3 + '/libraries/vendor/joomla/application/rector.php', + '/libraries/vendor/joomla/console/.drone.jsonnet', + '/libraries/vendor/joomla/console/.drone.yml', + '/libraries/vendor/joomla/database/.drone.jsonnet', + '/libraries/vendor/joomla/database/.drone.yml', + '/libraries/vendor/joomla/database/phpunit.appveyor_sql2012sp1.xml.dist', + '/libraries/vendor/joomla/database/phpunit.appveyor_sql2014.xml.dist', + '/libraries/vendor/joomla/database/phpunit.appveyor_sql2017.xml.dist', + '/libraries/vendor/joomla/database/phpunit.mariadb.xml.dist', + '/libraries/vendor/joomla/database/phpunit.mysql.xml.dist', + '/libraries/vendor/joomla/database/phpunit.mysqli.xml.dist', + '/libraries/vendor/joomla/database/phpunit.pgsql.xml.dist', + '/libraries/vendor/joomla/database/phpunit.sqlite.xml.dist', + '/libraries/vendor/joomla/database/phpunit.sqlsrv.xml.dist', + '/libraries/vendor/joomla/session/.drone.jsonnet', + '/libraries/vendor/joomla/session/.drone.yml', // From 5.2.0-alpha2 to 5.2.0-alpha3 '/libraries/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/fonts/FontAwesome.otf', '/libraries/vendor/maximebf/debugbar/src/DebugBar/Resources/vendor/font-awesome/fonts/fontawesome-webfont.eot', diff --git a/administrator/components/com_installer/src/Model/InstallModel.php b/administrator/components/com_installer/src/Model/InstallModel.php index 6ad08571ad286..953e90d38fbf5 100644 --- a/administrator/components/com_installer/src/Model/InstallModel.php +++ b/administrator/components/com_installer/src/Model/InstallModel.php @@ -14,7 +14,6 @@ use Joomla\CMS\Event\Installer\BeforeInstallationEvent; use Joomla\CMS\Event\Installer\BeforeInstallerEvent; use Joomla\CMS\Factory; -use Joomla\CMS\Filesystem\File; use Joomla\CMS\Installer\Installer; use Joomla\CMS\Installer\InstallerHelper; use Joomla\CMS\Language\Text; @@ -23,6 +22,8 @@ use Joomla\CMS\Router\Route; use Joomla\CMS\Updater\Update; use Joomla\CMS\Uri\Uri; +use Joomla\Filesystem\Exception\FilesystemException; +use Joomla\Filesystem\File; use Joomla\Filesystem\Path; // phpcs:disable PSR1.Files.SideEffects @@ -327,7 +328,13 @@ protected function _getPackageFromUpload() $tmp_src = $userfile['tmp_name']; // Move uploaded file. - File::upload($tmp_src, $tmp_dest, false, true); + try { + File::upload($tmp_src, $tmp_dest, false, true); + } catch (FilesystemException $exception) { + Factory::getApplication()->enqueueMessage(Text::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR'), 'error'); + + return false; + } // Unpack the downloaded package file. $package = InstallerHelper::unpack($tmp_dest, true); diff --git a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php index f6fd1c7eac5a6..c686fc5d34263 100644 --- a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php +++ b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php @@ -12,9 +12,10 @@ use Joomla\CMS\Authentication\Authentication; use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Event\Extension\AfterJoomlaUpdateEvent; +use Joomla\CMS\Event\Extension\BeforeJoomlaUpdateEvent; use Joomla\CMS\Extension\ExtensionHelper; use Joomla\CMS\Factory; -use Joomla\CMS\Filesystem\File as FileCMS; use Joomla\CMS\Filter\InputFilter; use Joomla\CMS\Http\Http; use Joomla\CMS\Http\HttpFactory; @@ -30,6 +31,7 @@ use Joomla\CMS\User\UserHelper; use Joomla\CMS\Version; use Joomla\Database\ParameterType; +use Joomla\Filesystem\Exception\FilesystemException; use Joomla\Filesystem\File; use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; @@ -508,7 +510,11 @@ protected function downloadPackage($url, $target) // Make sure the target does not exist. if (is_file($target)) { - File::delete($target); + try { + File::delete($target); + } catch (FilesystemException $exception) { + return false; + } } // Download the package @@ -526,9 +532,9 @@ protected function downloadPackage($url, $target) $body = $result->body; // Write the file to disk - $result = File::write($target, $body); - - if (!$result) { + try { + File::write($target, $body); + } catch (FilesystemException $exception) { return false; } @@ -576,7 +582,7 @@ public function createUpdateFile($basename = null): bool $app = Factory::getApplication(); // Trigger event before joomla update. - $app->triggerEvent('onJoomlaBeforeUpdate'); + $app->getDispatcher()->dispatch('onJoomlaBeforeUpdate', new BeforeJoomlaUpdateEvent('onJoomlaBeforeUpdate')); // Get the absolute path to site's root. $siteroot = JPATH_SITE; @@ -611,14 +617,18 @@ public function createUpdateFile($basename = null): bool $configpath = JPATH_COMPONENT_ADMINISTRATOR . '/update.php'; if (is_file($configpath)) { - File::delete($configpath); + try { + File::delete($configpath); + } catch (FilesystemException $exception) { + return false; + } } // Write new file. First try with File. - $result = File::write($configpath, $data); - - // In case File failed but direct access could help. - if (!$result) { + try { + $result = File::write($configpath, $data); + } catch (FilesystemException $exception) { + // In case File failed but direct access could help. $fp = @fopen($configpath, 'wt'); if ($fp !== false) { @@ -882,25 +892,29 @@ public function cleanUp() $app = Factory::getApplication(); // Trigger event after joomla update. - $app->triggerEvent('onJoomlaAfterUpdate'); + // @TODO: The event dispatched twice, here and at the end of current method. One of it should be removed. + $app->getDispatcher()->dispatch('onJoomlaAfterUpdate', new AfterJoomlaUpdateEvent('onJoomlaAfterUpdate')); // Remove the update package. $tempdir = $app->get('tmp_path'); $file = $app->getUserState('com_joomlaupdate.file', null); - if (is_file($tempdir . '/' . $file)) { - File::delete($tempdir . '/' . $file); - } + try { + if (is_file($tempdir . '/' . $file)) { + File::delete($tempdir . '/' . $file); + } - // Remove the update.php file used in Joomla 4.0.3 and later. - if (is_file(JPATH_COMPONENT_ADMINISTRATOR . '/update.php')) { - File::delete(JPATH_COMPONENT_ADMINISTRATOR . '/update.php'); - } + // Remove the update.php file used in Joomla 4.0.3 and later. + if (is_file(JPATH_COMPONENT_ADMINISTRATOR . '/update.php')) { + File::delete(JPATH_COMPONENT_ADMINISTRATOR . '/update.php'); + } - // Remove joomla.xml from the site's root. - if (is_file(JPATH_ROOT . '/joomla.xml')) { - File::delete(JPATH_ROOT . '/joomla.xml'); + // Remove joomla.xml from the site's root. + if (is_file(JPATH_ROOT . '/joomla.xml')) { + File::delete(JPATH_ROOT . '/joomla.xml'); + } + } catch (FilesystemException $exception) { } // Unset the update filename from the session. @@ -909,7 +923,9 @@ public function cleanUp() $oldVersion = $app->getUserState('com_joomlaupdate.oldversion'); // Trigger event after joomla update. - $app->triggerEvent('onJoomlaAfterUpdate', [$oldVersion]); + $app->getDispatcher()->dispatch('onJoomlaAfterUpdate', new AfterJoomlaUpdateEvent('onJoomlaAfterUpdate', [ + 'oldVersion' => $oldVersion ?: '', + ])); $app->setUserState('com_joomlaupdate.oldversion', null); try { @@ -983,10 +999,10 @@ public function upload() $tmp_src = $userfile['tmp_name']; // Move uploaded file. - $result = FileCMS::upload($tmp_src, $tmp_dest, false, true); - - if (!$result) { - throw new \RuntimeException(Text::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR'), 500); + try { + File::upload($tmp_src, $tmp_dest, false); + } catch (FilesystemException $exception) { + throw new \RuntimeException(Text::_('COM_INSTALLER_MSG_INSTALL_WARNINSTALLUPLOADERROR'), 500, $exception); } Factory::getApplication()->setUserState('com_joomlaupdate.temp_file', $tmp_dest); @@ -1061,7 +1077,10 @@ public function removePackageFiles() foreach ($files as $file) { if ($file !== null && is_file($file)) { - File::delete($file); + try { + File::delete($file); + } catch (FilesystemException $exception) { + } } } } diff --git a/administrator/components/com_menus/src/Model/MenuModel.php b/administrator/components/com_menus/src/Model/MenuModel.php index 9b05b9774a87b..5b44c12ca7008 100644 --- a/administrator/components/com_menus/src/Model/MenuModel.php +++ b/administrator/components/com_menus/src/Model/MenuModel.php @@ -125,7 +125,7 @@ protected function populateState() * * @since 1.6 */ - public function &getItem($itemId = null) + public function getItem($itemId = null) { $itemId = (!empty($itemId)) ? $itemId : (int) $this->getState('menu.id'); diff --git a/administrator/components/com_messages/src/Model/ConfigModel.php b/administrator/components/com_messages/src/Model/ConfigModel.php index 692299e83bceb..13e914a1a9a2c 100644 --- a/administrator/components/com_messages/src/Model/ConfigModel.php +++ b/administrator/components/com_messages/src/Model/ConfigModel.php @@ -57,7 +57,7 @@ protected function populateState() * * @since 1.6 */ - public function &getItem() + public function getItem() { $item = new CMSObject(); $userid = (int) $this->getState('user.id'); diff --git a/administrator/components/com_modules/src/Model/PositionsModel.php b/administrator/components/com_modules/src/Model/PositionsModel.php index 9ac4e5cda7db3..4ca201ecb70ec 100644 --- a/administrator/components/com_modules/src/Model/PositionsModel.php +++ b/administrator/components/com_modules/src/Model/PositionsModel.php @@ -110,7 +110,7 @@ public function getItems() ->bind(':clientid', $clientId, ParameterType::INTEGER); if ($search) { - $search = '%' . str_replace(' ', '%', trim($search), true) . '%'; + $search = '%' . str_replace(' ', '%', trim($search)) . '%'; $query->where($db->quoteName('position') . ' LIKE :position') ->bind(':position', $search); } diff --git a/administrator/components/com_templates/src/Model/TemplateModel.php b/administrator/components/com_templates/src/Model/TemplateModel.php index 3f2fe024925a1..4b42757213d9a 100644 --- a/administrator/components/com_templates/src/Model/TemplateModel.php +++ b/administrator/components/com_templates/src/Model/TemplateModel.php @@ -625,7 +625,7 @@ protected function populateState() * * @since 1.6 */ - public function &getTemplate() + public function getTemplate() { if (empty($this->template)) { $pk = (int) $this->getState('extension.id'); diff --git a/administrator/components/com_templates/src/View/Template/HtmlView.php b/administrator/components/com_templates/src/View/Template/HtmlView.php index 330972012e8f2..63298e6630fa7 100644 --- a/administrator/components/com_templates/src/View/Template/HtmlView.php +++ b/administrator/components/com_templates/src/View/Template/HtmlView.php @@ -236,39 +236,9 @@ protected function addToolbar() // User is global SuperUser $isSuperUser = $user->authorise('core.admin'); - $explodeArray = explode('.', $this->fileName); - $ext = end($explodeArray); ToolbarHelper::title(Text::sprintf('COM_TEMPLATES_MANAGER_VIEW_TEMPLATE', ucfirst($this->template->name)), 'icon-code thememanager'); - // Only show file edit buttons for global SuperUser - if ($isSuperUser) { - // Add an Apply and save button - if ($this->type === 'file') { - $toolbar->apply('template.apply'); - $toolbar->save('template.save'); - } elseif ($this->type === 'image') { - // Add a Crop and Resize button - $toolbar->standardButton('crop', 'COM_TEMPLATES_BUTTON_CROP', 'template.cropImage') - ->listCheck(false) - ->icon('icon-crop'); - ToolbarHelper::modal('resizeModal', 'icon-expand', 'COM_TEMPLATES_BUTTON_RESIZE'); - } elseif ($this->type === 'archive') { - // Add an extract button - $toolbar->standardButton('extract', 'COM_TEMPLATES_BUTTON_EXTRACT_ARCHIVE', 'template.extractArchive') - ->listCheck(false) - ->icon('icon-chevron-down'); - } elseif ($this->type === 'home') { - // Add a copy/child template button - if (isset($this->template->xmldata->inheritable) && (string) $this->template->xmldata->inheritable === '1') { - ToolbarHelper::modal('childModal', 'icon-copy', 'COM_TEMPLATES_BUTTON_TEMPLATE_CHILD'); - } elseif (empty($this->template->xmldata->parent) && empty($this->template->xmldata->namespace)) { - // We can't copy parent templates nor namespaced templates - ToolbarHelper::modal('copyModal', 'icon-copy', 'COM_TEMPLATES_BUTTON_COPY_TEMPLATE'); - } - } - } - // Add a Template preview button if ($this->type === 'home') { $client = (int) $this->preview->client_id === 1 ? 'administrator/' : ''; @@ -278,6 +248,44 @@ protected function addToolbar() ->attributes(['target' => '_new']); } + // Only show file edit buttons for global SuperUser + if ($isSuperUser) { + switch ($this->type) { + case 'file': + $toolbar->apply('template.apply'); + $toolbar->save('template.save'); + $toolbar->cancel('template.close', 'COM_TEMPLATES_BUTTON_CLOSE_FILE'); + break; + + case 'image': + // Add a Crop and Resize button + $toolbar->standardButton('crop', 'COM_TEMPLATES_BUTTON_CROP', 'template.cropImage') + ->listCheck(false) + ->icon('icon-crop'); + ToolbarHelper::modal('resizeModal', 'icon-expand', 'COM_TEMPLATES_BUTTON_RESIZE'); + $toolbar->cancel('template.close', 'COM_TEMPLATES_BUTTON_CLOSE_FILE'); + break; + + case 'archive': + // Add an extract button + $toolbar->standardButton('extract', 'COM_TEMPLATES_BUTTON_EXTRACT_ARCHIVE', 'template.extractArchive') + ->listCheck(false) + ->icon('icon-chevron-down'); + break; + + case 'home': + // Add a copy/child template button + if (isset($this->template->xmldata->inheritable) && (string) $this->template->xmldata->inheritable === '1') { + ToolbarHelper::modal('childModal', 'icon-copy', 'COM_TEMPLATES_BUTTON_TEMPLATE_CHILD'); + } elseif (empty($this->template->xmldata->parent) && empty($this->template->xmldata->namespace)) { + // We can't copy parent templates nor namespaced templates + ToolbarHelper::modal('copyModal', 'icon-copy', 'COM_TEMPLATES_BUTTON_COPY_TEMPLATE'); + } + + break; + } + } + // Only show file manage buttons for global SuperUser if ($isSuperUser) { if ($this->type === 'home') { @@ -291,7 +299,7 @@ protected function addToolbar() ToolbarHelper::modal('renameModal', 'icon-sync', 'COM_TEMPLATES_BUTTON_RENAME_FILE'); // Add a Delete file Button - ToolbarHelper::modal('deleteModal', 'icon-times', 'COM_TEMPLATES_BUTTON_DELETE_FILE', 'btn-danger'); + ToolbarHelper::modal('deleteModal', 'icon-trash', 'COM_TEMPLATES_BUTTON_DELETE_FILE', 'btn-danger'); } } @@ -320,10 +328,8 @@ protected function addToolbar() ->listCheck(true); } - if ($this->type === 'home') { + if (!\in_array($this->type, ['image', 'file'])) { $toolbar->cancel('template.cancel'); - } else { - $toolbar->cancel('template.close', 'COM_TEMPLATES_BUTTON_CLOSE_FILE'); } $toolbar->divider(); diff --git a/administrator/language/en-GB/com_templates.ini b/administrator/language/en-GB/com_templates.ini index 8113e34f3106c..f6317ff857ebc 100644 --- a/administrator/language/en-GB/com_templates.ini +++ b/administrator/language/en-GB/com_templates.ini @@ -9,7 +9,7 @@ COM_TEMPLATES_ASSIGNED_1="Assigned to one menu item." COM_TEMPLATES_ASSIGNED_MORE="Assigned to %d menu items." COM_TEMPLATES_BUTTON_CHECK="Check Overrides" COM_TEMPLATES_BUTTON_CHECK_LIST_ENTRY="Mark Checked" -COM_TEMPLATES_BUTTON_CLOSE_FILE="Close File" +COM_TEMPLATES_BUTTON_CLOSE_FILE="Close" COM_TEMPLATES_BUTTON_COPY_FILE="Copy File" COM_TEMPLATES_BUTTON_COPY_TEMPLATE="Copy Template" COM_TEMPLATES_BUTTON_CREATE="Create" diff --git a/components/com_contact/src/Controller/ContactController.php b/components/com_contact/src/Controller/ContactController.php index a782ccae959c7..3f7b94cc8e718 100644 --- a/components/com_contact/src/Controller/ContactController.php +++ b/components/com_contact/src/Controller/ContactController.php @@ -283,7 +283,7 @@ private function _sendEmail($data, $contact, $emailCopyToSender) $mailer->addRecipient($contact->email_to); $mailer->setReplyTo($templateData['email'], $templateData['name']); $mailer->addTemplateData($templateData); - $mailer->addUnsafeTags(['name', 'email', 'body', 'customfields']); + $mailer->addUnsafeTags(['name', 'email', 'body']); $sent = $mailer->send(); // If we are supposed to copy the sender, do so. @@ -292,6 +292,7 @@ private function _sendEmail($data, $contact, $emailCopyToSender) $mailer->addRecipient($templateData['email']); $mailer->setReplyTo($templateData['email'], $templateData['name']); $mailer->addTemplateData($templateData); + $mailer->addUnsafeTags(['name', 'email', 'body']); $sent = $mailer->send(); } } catch (MailDisabledException | phpMailerException $exception) { diff --git a/components/com_contact/src/View/Contact/HtmlView.php b/components/com_contact/src/View/Contact/HtmlView.php index 2c2d192b76d32..bf5850a9eed4c 100644 --- a/components/com_contact/src/View/Contact/HtmlView.php +++ b/components/com_contact/src/View/Contact/HtmlView.php @@ -371,8 +371,10 @@ public function display($tpl = null) $this->contacts = &$contacts; $this->contactUser = $contactUser; - $model = $this->getModel(); - $model->hit(); + if (\in_array($app->getInput()->getMethod(), ['GET', 'POST'])) { + $model = $this->getModel(); + $model->hit(); + } $captchaSet = $item->params->get('captcha', $app->get('captcha', '0')); diff --git a/components/com_content/src/Controller/DisplayController.php b/components/com_content/src/Controller/DisplayController.php index 97d73f6e6fd2a..8f9bb4c3bd190 100644 --- a/components/com_content/src/Controller/DisplayController.php +++ b/components/com_content/src/Controller/DisplayController.php @@ -110,7 +110,7 @@ public function display($cachable = false, $urlparams = false) throw new \Exception(Text::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id), 403); } - if ($vName === 'article') { + if ($vName === 'article' && \in_array($this->input->getMethod(), ['GET', 'POST'])) { // Get/Create the model if ($model = $this->getModel($vName)) { if (ComponentHelper::getParams('com_content')->get('record_hits', 1) == 1) { diff --git a/components/com_content/src/View/Archive/HtmlView.php b/components/com_content/src/View/Archive/HtmlView.php index 526c502fda38d..343318bd64991 100644 --- a/components/com_content/src/View/Archive/HtmlView.php +++ b/components/com_content/src/View/Archive/HtmlView.php @@ -115,6 +115,7 @@ class HtmlView extends BaseHtmlView */ public function display($tpl = null) { + $app = Factory::getApplication(); $user = $this->getCurrentUser(); $state = $this->get('State'); $items = $this->get('Items'); @@ -219,6 +220,8 @@ public function display($tpl = null) $this->pagination = &$pagination; $this->pagination->setAdditionalUrlParam('month', $state->get('filter.month')); $this->pagination->setAdditionalUrlParam('year', $state->get('filter.year')); + $this->pagination->setAdditionalUrlParam('filter-search', $state->get('list.filter')); + $this->pagination->setAdditionalUrlParam('catid', $app->getInput()->get->get('catid', [], 'array')); $this->_prepareDocument(); diff --git a/components/com_finder/src/View/Search/HtmlView.php b/components/com_finder/src/View/Search/HtmlView.php index 0cebb3691cb45..ceb6f4f31b57f 100644 --- a/components/com_finder/src/View/Search/HtmlView.php +++ b/components/com_finder/src/View/Search/HtmlView.php @@ -154,6 +154,32 @@ public function display($tpl = null) // Flag indicates to not add limitstart=0 to URL $this->pagination->hideEmptyLimitstart = true; + $input = $app->getInput()->get; + + // Add additional parameters + $queryParameterList = [ + 'f' => 'int', + 't' => 'array', + 'q' => 'string', + 'l' => 'cmd', + 'd1' => 'string', + 'd2' => 'string', + 'w1' => 'string', + 'w2' => 'string', + 'o' => 'word', + 'od' => 'word', + ]; + + foreach ($queryParameterList as $parameter => $filter) { + $value = $input->get($parameter, null, $filter); + + if (\is_null($value)) { + continue; + } + + $this->pagination->setAdditionalUrlParam($parameter, $value); + } + // Check for errors. if (\count($errors = $this->get('Errors'))) { throw new GenericDataException(implode("\n", $errors), 500); diff --git a/components/com_newsfeeds/src/View/Newsfeed/HtmlView.php b/components/com_newsfeeds/src/View/Newsfeed/HtmlView.php index 9da806fa31207..cbaa8bd65021d 100644 --- a/components/com_newsfeeds/src/View/Newsfeed/HtmlView.php +++ b/components/com_newsfeeds/src/View/Newsfeed/HtmlView.php @@ -212,8 +212,10 @@ public function display($tpl = null) $item->tags->getItemTags('com_newsfeeds.newsfeed', $item->id); // Increment the hit counter of the newsfeed. - $model = $this->getModel(); - $model->hit(); + if (\in_array($app->getInput()->getMethod(), ['GET', 'POST'])) { + $model = $this->getModel(); + $model->hit(); + } $this->_prepareDocument(); diff --git a/components/com_tags/src/Controller/DisplayController.php b/components/com_tags/src/Controller/DisplayController.php index 7af87d11cdad9..b0979e2043f19 100644 --- a/components/com_tags/src/Controller/DisplayController.php +++ b/components/com_tags/src/Controller/DisplayController.php @@ -59,6 +59,7 @@ public function display($cachable = false, $urlparams = false) if ( $vName === 'tag' + && \in_array($this->input->getMethod(), ['GET', 'POST']) && ComponentHelper::getParams('com_tags')->get('record_hits', 1) == 1 && $model = $this->getModel($vName) ) { diff --git a/components/com_users/src/Model/RegistrationModel.php b/components/com_users/src/Model/RegistrationModel.php index ba68c842a02c5..2db462ffed2b0 100644 --- a/components/com_users/src/Model/RegistrationModel.php +++ b/components/com_users/src/Model/RegistrationModel.php @@ -559,6 +559,7 @@ public function register($temp) $mailer = new MailTemplate('com_users.registration.admin.new_notification', $app->getLanguage()->getTag()); $mailer->addTemplateData($data); $mailer->addRecipient($row->email); + $mailer->addUnsafeTags(['username', 'name']); $return = $mailer->send(); } catch (\Exception $exception) { try { diff --git a/installation/language/af-ZA/langmetadata.xml b/installation/language/af-ZA/langmetadata.xml index 23645d7bb7e7a..5127ff88b4705 100644 --- a/installation/language/af-ZA/langmetadata.xml +++ b/installation/language/af-ZA/langmetadata.xml @@ -1,8 +1,8 @@ Afrikaans (Suid-Afrika) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Afrikaans Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/ar-AA/langmetadata.xml b/installation/language/ar-AA/langmetadata.xml index 3289e5582a744..2ae20b060bcb0 100644 --- a/installation/language/ar-AA/langmetadata.xml +++ b/installation/language/ar-AA/langmetadata.xml @@ -1,8 +1,8 @@ Arabic (اللغة العربية) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Dr. Ashraf Damra (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/be-BY/langmetadata.xml b/installation/language/be-BY/langmetadata.xml index c12f0e6fe6d44..56465ce3b9c3e 100644 --- a/installation/language/be-BY/langmetadata.xml +++ b/installation/language/be-BY/langmetadata.xml @@ -1,8 +1,8 @@ Belarusian (Belarus) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla Belarus Community (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/bg-BG/langmetadata.xml b/installation/language/bg-BG/langmetadata.xml index ad1c53039237f..7aca9fc18ad0f 100644 --- a/installation/language/bg-BG/langmetadata.xml +++ b/installation/language/bg-BG/langmetadata.xml @@ -1,8 +1,8 @@ Bulgarian (bg-BG) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Bulgaria (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/ca-ES/langmetadata.xml b/installation/language/ca-ES/langmetadata.xml index 6d7c7635214b4..002690a77fe03 100644 --- a/installation/language/ca-ES/langmetadata.xml +++ b/installation/language/ca-ES/langmetadata.xml @@ -1,8 +1,8 @@ Catalan (ca-ES) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Catalan [ca-ES] Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/cs-CZ/langmetadata.xml b/installation/language/cs-CZ/langmetadata.xml index a103cd712a43d..3797a2dbe0622 100644 --- a/installation/language/cs-CZ/langmetadata.xml +++ b/installation/language/cs-CZ/langmetadata.xml @@ -1,8 +1,8 @@ Czech (Čeština) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Czech Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/cy-GB/langmetadata.xml b/installation/language/cy-GB/langmetadata.xml index 1ac2a1c7c2846..a4c0fd44baa48 100644 --- a/installation/language/cy-GB/langmetadata.xml +++ b/installation/language/cy-GB/langmetadata.xml @@ -1,8 +1,8 @@ Welsh (United Kingdom) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project - Welsh Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/da-DK/langmetadata.xml b/installation/language/da-DK/langmetadata.xml index 34d3d4dc78927..a184b8c57ccd2 100644 --- a/installation/language/da-DK/langmetadata.xml +++ b/installation/language/da-DK/langmetadata.xml @@ -1,8 +1,8 @@ Danish (Danmark) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Danish Translation Team (Transl.: Ronny Buelund) (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/el-GR/langmetadata.xml b/installation/language/el-GR/langmetadata.xml index fb837b319edc0..5e68ca6e7aec4 100644 --- a/installation/language/el-GR/langmetadata.xml +++ b/installation/language/el-GR/langmetadata.xml @@ -1,8 +1,8 @@ Greek (el-GR) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Ομάδα Μετάφρασης: joomla. gr (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/en-AU/langmetadata.xml b/installation/language/en-AU/langmetadata.xml index 187fdee5c90cb..4de668bb1238b 100644 --- a/installation/language/en-AU/langmetadata.xml +++ b/installation/language/en-AU/langmetadata.xml @@ -1,8 +1,8 @@ English (Australia) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/en-CA/langmetadata.xml b/installation/language/en-CA/langmetadata.xml index 7d2fed2a6cd5f..5d17cd73ba69e 100644 --- a/installation/language/en-CA/langmetadata.xml +++ b/installation/language/en-CA/langmetadata.xml @@ -1,8 +1,8 @@ English (Canada) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/en-NZ/langmetadata.xml b/installation/language/en-NZ/langmetadata.xml index 8de5cae77ca2f..cea856c006d9c 100644 --- a/installation/language/en-NZ/langmetadata.xml +++ b/installation/language/en-NZ/langmetadata.xml @@ -1,8 +1,8 @@ English (New Zealand) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/en-US/langmetadata.xml b/installation/language/en-US/langmetadata.xml index ce5cb7fb2b810..a492839110d79 100644 --- a/installation/language/en-US/langmetadata.xml +++ b/installation/language/en-US/langmetadata.xml @@ -1,8 +1,8 @@ English (United States) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/es-ES/langmetadata.xml b/installation/language/es-ES/langmetadata.xml index e63984d6a7214..10c37a883f6e7 100644 --- a/installation/language/es-ES/langmetadata.xml +++ b/installation/language/es-ES/langmetadata.xml @@ -1,8 +1,8 @@ Spanish (es-ES) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Spanish [es-ES] Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/et-EE/langmetadata.xml b/installation/language/et-EE/langmetadata.xml index ec724986994d3..06359ddf64da6 100644 --- a/installation/language/et-EE/langmetadata.xml +++ b/installation/language/et-EE/langmetadata.xml @@ -1,8 +1,8 @@ Estonian - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/eu-ES/langmetadata.xml b/installation/language/eu-ES/langmetadata.xml index e5aecf574d4d2..85fe06459d984 100644 --- a/installation/language/eu-ES/langmetadata.xml +++ b/installation/language/eu-ES/langmetadata.xml @@ -1,8 +1,8 @@ Basque - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Basque Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/fa-AF/langmetadata.xml b/installation/language/fa-AF/langmetadata.xml index 5444110184f84..bdd1c043b6b05 100644 --- a/installation/language/fa-AF/langmetadata.xml +++ b/installation/language/fa-AF/langmetadata.xml @@ -1,8 +1,8 @@ فارسی (دری) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 JoomlaPersian Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/fa-IR/langmetadata.xml b/installation/language/fa-IR/langmetadata.xml index c52a2a5e628a2..7f72ec4a78221 100644 --- a/installation/language/fa-IR/langmetadata.xml +++ b/installation/language/fa-IR/langmetadata.xml @@ -1,8 +1,8 @@ Persian (fa-IR) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Persian Translation Team: joomlafarsi.com (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/fi-FI/langmetadata.xml b/installation/language/fi-FI/langmetadata.xml index 6271d6861bea3..2b54e0e4a1f3a 100644 --- a/installation/language/fi-FI/langmetadata.xml +++ b/installation/language/fi-FI/langmetadata.xml @@ -1,8 +1,8 @@ Finnish (Finland) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Finnish translation team: Joomla.fi (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/fr-CA/langmetadata.xml b/installation/language/fr-CA/langmetadata.xml index 58b6832dfb838..39e1bfccbbf29 100644 --- a/installation/language/fr-CA/langmetadata.xml +++ b/installation/language/fr-CA/langmetadata.xml @@ -1,8 +1,8 @@ French (Canada) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project - French translation team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/fr-FR/langmetadata.xml b/installation/language/fr-FR/langmetadata.xml index b79f37df3fbc9..1146960a6474a 100644 --- a/installation/language/fr-FR/langmetadata.xml +++ b/installation/language/fr-FR/langmetadata.xml @@ -1,8 +1,8 @@ French (fr-FR) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project - French translation team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/he-IL/langmetadata.xml b/installation/language/he-IL/langmetadata.xml index b35a4fae62b3c..5d69d9d5adf98 100644 --- a/installation/language/he-IL/langmetadata.xml +++ b/installation/language/he-IL/langmetadata.xml @@ -1,8 +1,8 @@ Hebrew (Israel) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 פרוייקט ג'ומלה (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/hr-HR/langmetadata.xml b/installation/language/hr-HR/langmetadata.xml index 197434a18560b..6e901c75ca005 100644 --- a/installation/language/hr-HR/langmetadata.xml +++ b/installation/language/hr-HR/langmetadata.xml @@ -1,8 +1,8 @@ Croatian (Croatia) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Hrvatska team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/hu-HU/langmetadata.xml b/installation/language/hu-HU/langmetadata.xml index 675d04b83f2ba..22b82b25ca005 100644 --- a/installation/language/hu-HU/langmetadata.xml +++ b/installation/language/hu-HU/langmetadata.xml @@ -1,8 +1,8 @@ Hungarian (Magyar) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Magyarország (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/id-ID/langmetadata.xml b/installation/language/id-ID/langmetadata.xml index 9ef410398434b..a9cdc0c5aedc6 100644 --- a/installation/language/id-ID/langmetadata.xml +++ b/installation/language/id-ID/langmetadata.xml @@ -1,8 +1,8 @@ Bahasa Indonesia (id-ID) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Indonesia (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/it-IT/langmetadata.xml b/installation/language/it-IT/langmetadata.xml index 26b5b13f2a6ca..5ec7a7cd5bad8 100644 --- a/installation/language/it-IT/langmetadata.xml +++ b/installation/language/it-IT/langmetadata.xml @@ -1,8 +1,8 @@ Italiano (it-IT) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project (Italian Translation Team) (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/ja-JP/langmetadata.xml b/installation/language/ja-JP/langmetadata.xml index 3b61b147ac066..d48c68a79ce73 100644 --- a/installation/language/ja-JP/langmetadata.xml +++ b/installation/language/ja-JP/langmetadata.xml @@ -1,8 +1,8 @@ Japanese (Japan) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla!じゃぱん (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/ka-GE/langmetadata.xml b/installation/language/ka-GE/langmetadata.xml index 86ac4cde72203..1b7e110aedd5b 100644 --- a/installation/language/ka-GE/langmetadata.xml +++ b/installation/language/ka-GE/langmetadata.xml @@ -1,8 +1,8 @@ Georgian (Georgia) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Georgian Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/kk-KZ/langmetadata.xml b/installation/language/kk-KZ/langmetadata.xml index 68c76f6790892..3211c62d633b2 100644 --- a/installation/language/kk-KZ/langmetadata.xml +++ b/installation/language/kk-KZ/langmetadata.xml @@ -1,8 +1,8 @@ Kazakh (Kazakhstan) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Sarvarov Akylkerey (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/ko-KR/langmetadata.xml b/installation/language/ko-KR/langmetadata.xml index 3432b91586729..0bc090723bead 100644 --- a/installation/language/ko-KR/langmetadata.xml +++ b/installation/language/ko-KR/langmetadata.xml @@ -1,8 +1,8 @@ Korean (Republic of Korea) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! 프로젝트 (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/lt-LT/langmetadata.xml b/installation/language/lt-LT/langmetadata.xml index 0f7eedfc5b20c..6112043ba746d 100644 --- a/installation/language/lt-LT/langmetadata.xml +++ b/installation/language/lt-LT/langmetadata.xml @@ -1,8 +1,8 @@ Lietuvių (lt-LT) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Oskaras Jankauskas (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/lv-LV/langmetadata.xml b/installation/language/lv-LV/langmetadata.xml index d2598bebd0acc..3d4bdcfcc33f3 100644 --- a/installation/language/lv-LV/langmetadata.xml +++ b/installation/language/lv-LV/langmetadata.xml @@ -1,8 +1,8 @@ Latvian (Latvia) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Projekts (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/mk-MK/langmetadata.xml b/installation/language/mk-MK/langmetadata.xml index d5c2db1ab0e0e..1bf51193a97dd 100644 --- a/installation/language/mk-MK/langmetadata.xml +++ b/installation/language/mk-MK/langmetadata.xml @@ -1,8 +1,8 @@ Macedonian (mk-MK) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/nl-BE/langmetadata.xml b/installation/language/nl-BE/langmetadata.xml index ba79c4faef4e1..cfd312a555dec 100644 --- a/installation/language/nl-BE/langmetadata.xml +++ b/installation/language/nl-BE/langmetadata.xml @@ -1,8 +1,8 @@ Dutch (Belgium) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Dutch (BE) translation team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/nl-NL/langmetadata.xml b/installation/language/nl-NL/langmetadata.xml index 8d3f01ed07df5..584735ac70e65 100644 --- a/installation/language/nl-NL/langmetadata.xml +++ b/installation/language/nl-NL/langmetadata.xml @@ -1,8 +1,8 @@ Dutch (nl-NL) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Dutch Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/pl-PL/joomla.cli.ini b/installation/language/pl-PL/joomla.cli.ini new file mode 100644 index 0000000000000..e6f124ccdf4f7 --- /dev/null +++ b/installation/language/pl-PL/joomla.cli.ini @@ -0,0 +1,35 @@ +INSTL_ADMIN_EMAIL_DESC="Adres e-mail konta Super użytkownika" +INSTL_ADMIN_EMAIL_DESC_SHORT="Adres e-mail konta Super użytkownika" +INSTL_ADMIN_PASSWORD_DESC="Ustaw hasło konta Super użytkownika" +INSTL_ADMIN_PASSWORD_DESC_SHORT="Hasło konta Super użytkownika" +INSTL_ADMIN_USERNAME_DESC="Ustaw nazwę konta Super użytkownika" +INSTL_ADMIN_USERNAME_DESC_SHORT="Nazwa konta Super użytkownika" +INSTL_ADMIN_USER_DESC="Wpisz rzeczywistą nazwę użytkownika konta Super użytkownika" +INSTL_ADMIN_USER_DESC_SHORT="Rzeczywista nazwa użytkownika konta Super użytkownika" +INSTL_DATABASE_COULD_NOT_CONNECT="%s" +INSTL_DATABASE_ENCRYPTION_CA_LABEL="Ścieżka do pliku CA, aby zweryfikować szyfrowanie" +INSTL_DATABASE_ENCRYPTION_CA_LABEL_SHORT="Ścieżka do pliku CA, aby zweryfikować szyfrowanie" +INSTL_DATABASE_ENCRYPTION_CERT_LABEL="Ścieżka do certyfikatu SSL dla połączenia z bazą danych. Wymaga ustawienia szyfrowania na 2" +INSTL_DATABASE_ENCRYPTION_CERT_LABEL_SHORT="Ścieżka do certyfikatu SSL dla połączenia z bazą danych. Wymaga ustawienia szyfrowania na 2" +INSTL_DATABASE_ENCRYPTION_CIPHER_LABEL="Obsługiwany zestaw szyfrów (opcjonalnie)" +INSTL_DATABASE_ENCRYPTION_CIPHER_LABEL_SHORT="Obsługiwany zestaw szyfrów (opcjonalnie)" +INSTL_DATABASE_ENCRYPTION_KEY_LABEL="Klucz SSL dla połączenia z bazą danych. Wymaga ustawienia szyfrowania na 2" +INSTL_DATABASE_ENCRYPTION_KEY_LABEL_SHORT="Klucz SSL dla połączenia z bazą danych. Wymaga ustawienia szyfrowania na 2" +INSTL_DATABASE_ENCRYPTION_MODE_LABEL="Szyfrowanie połączenia z bazą danych. Wartości: 0=Brak, 1=Jednokierunkowe, 2=Dwukierunkowe" +INSTL_DATABASE_ENCRYPTION_MODE_LABEL_SHORT="Szyfrowanie połączenia z bazą danych. Wartości: 0=Brak, 1=Jednokierunkowe, 2=Dwukierunkowe" +INSTL_DATABASE_ENCRYPTION_VERIFY_SERVER_CERT_LABEL="Weryfikacja certyfikatu SSL dla połączenia z bazą danych. Wartości: 0=Nie, 1=Tak. Wymaga ustawienia szyfrowania na 1 lub 2." +INSTL_DATABASE_ENCRYPTION_VERIFY_SERVER_CERT_LABEL_SHORT="Weryfikacja certyfikatu SSL dla połączenia z bazą danych. Wartości: 0=Nie, 1=Tak. Wymaga ustawienia szyfrowania na 1 lub 2." +INSTL_DATABASE_HOST_DESC="Nazwa serwera bazy danych" +INSTL_DATABASE_HOST_DESC_SHORT="Nazwa serwera bazy danych" +INSTL_DATABASE_NAME_DESC="Nazwa bazy danych" +INSTL_DATABASE_NAME_DESC_SHORT="Nazwa bazy danych" +INSTL_DATABASE_PASSWORD_DESC="Hasło bazy danych" +INSTL_DATABASE_PASSWORD_DESC_SHORT="Hasło bazy danych" +INSTL_DATABASE_PREFIX_DESC="Przedrostek nazw tabel" +INSTL_DATABASE_PREFIX_DESC_SHORT="Przedrostek nazw tabel" +INSTL_DATABASE_TYPE_DESC="Typ bazy danych. Obsługiwane: mysql, mysqli, pgsql" +INSTL_DATABASE_TYPE_DESC_SHORT="Typ bazy danych. Obsługiwane przez Joomla: mysql (=MySQL (PDO)), mysqli (=MySQLi), pgsql (=PostgreSQL (PDO))" +INSTL_DATABASE_USER_DESC="Użytkownik bazy danych" +INSTL_DATABASE_USER_DESC_SHORT="Użytkownik bazy danych" +INSTL_SITE_NAME_DESC="Wpisz nazwę swojej witryny Joomla." +INSTL_SITE_NAME_DESC_SHORT="Nazwa witryny" \ No newline at end of file diff --git a/installation/language/pl-PL/langmetadata.xml b/installation/language/pl-PL/langmetadata.xml index 827a501a3e32f..4fb2b78584ef0 100644 --- a/installation/language/pl-PL/langmetadata.xml +++ b/installation/language/pl-PL/langmetadata.xml @@ -1,8 +1,8 @@ Polski (PL) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Projekt Joomla! (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/pt-BR/langmetadata.xml b/installation/language/pt-BR/langmetadata.xml index 1857e42bd7a5a..a046b7563dac1 100644 --- a/installation/language/pt-BR/langmetadata.xml +++ b/installation/language/pt-BR/langmetadata.xml @@ -1,8 +1,8 @@ Portuguese (Brazil) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Projeto Joomla! (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/pt-PT/langmetadata.xml b/installation/language/pt-PT/langmetadata.xml index 6c880e291e95c..15560e9fc4eec 100644 --- a/installation/language/pt-PT/langmetadata.xml +++ b/installation/language/pt-PT/langmetadata.xml @@ -1,8 +1,8 @@ Português (Portugal) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Comunidade JoomlaPortugal (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/ro-RO/langmetadata.xml b/installation/language/ro-RO/langmetadata.xml index 2e3059746a311..9ca62fa8d4723 100644 --- a/installation/language/ro-RO/langmetadata.xml +++ b/installation/language/ro-RO/langmetadata.xml @@ -1,8 +1,8 @@ Română (România) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Horia Negura - Quanta (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/sk-SK/langmetadata.xml b/installation/language/sk-SK/langmetadata.xml index e4bffe1937f6a..f75077745f5b8 100644 --- a/installation/language/sk-SK/langmetadata.xml +++ b/installation/language/sk-SK/langmetadata.xml @@ -1,8 +1,8 @@ Slovak (Slovakia) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Slovak translation team : Peter Michnica (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/sl-SI/langmetadata.xml b/installation/language/sl-SI/langmetadata.xml index 6347f0e74915c..a4f5243ff95fe 100644 --- a/installation/language/sl-SI/langmetadata.xml +++ b/installation/language/sl-SI/langmetadata.xml @@ -1,8 +1,8 @@ Slovenščina (Slovenija) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Slovenska prevajalska ekipa (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/sr-YU/langmetadata.xml b/installation/language/sr-YU/langmetadata.xml index df4fa58346935..92ad2459f2b93 100644 --- a/installation/language/sr-YU/langmetadata.xml +++ b/installation/language/sr-YU/langmetadata.xml @@ -1,8 +1,8 @@ Srpski (Republika Srbija) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Goran Nešić - UIX Web Design & Saša Matić Bardak.RS (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/sv-SE/langmetadata.xml b/installation/language/sv-SE/langmetadata.xml index b75446b0e8a84..b10b3e6ed9fa4 100644 --- a/installation/language/sv-SE/langmetadata.xml +++ b/installation/language/sv-SE/langmetadata.xml @@ -1,8 +1,8 @@ Swedish (Sweden) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Swedish Translation Team - SvenskJoomla (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/ta-IN/langmetadata.xml b/installation/language/ta-IN/langmetadata.xml index 3eea857034307..b9684530179c5 100644 --- a/installation/language/ta-IN/langmetadata.xml +++ b/installation/language/ta-IN/langmetadata.xml @@ -1,8 +1,8 @@ Tamil (India) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Ilagnayeru 'MIG' Manickam, Elango Samy Manim (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/th-TH/langmetadata.xml b/installation/language/th-TH/langmetadata.xml index 32df1271696fb..e8ffde89e5108 100644 --- a/installation/language/th-TH/langmetadata.xml +++ b/installation/language/th-TH/langmetadata.xml @@ -1,8 +1,8 @@ Thai (ภาษาไทย) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Thai Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/tr-TR/langmetadata.xml b/installation/language/tr-TR/langmetadata.xml index 6b4158f9c1787..8b0947285631a 100644 --- a/installation/language/tr-TR/langmetadata.xml +++ b/installation/language/tr-TR/langmetadata.xml @@ -1,8 +1,8 @@ Turkish (Turkey) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Türkiye (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/uk-UA/langmetadata.xml b/installation/language/uk-UA/langmetadata.xml index 8d53ee270b227..eca68e44c57c1 100644 --- a/installation/language/uk-UA/langmetadata.xml +++ b/installation/language/uk-UA/langmetadata.xml @@ -1,8 +1,8 @@ Ukrainian (uk-UA) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Denys Nosov (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/ur-PK/langmetadata.xml b/installation/language/ur-PK/langmetadata.xml index 2e3cf0542d53d..23c9421ec079b 100644 --- a/installation/language/ur-PK/langmetadata.xml +++ b/installation/language/ur-PK/langmetadata.xml @@ -1,8 +1,8 @@ Urdu (ur-PK) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Urdu Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/vi-VN/langmetadata.xml b/installation/language/vi-VN/langmetadata.xml index 49ec547e65644..4e33b344cdab6 100644 --- a/installation/language/vi-VN/langmetadata.xml +++ b/installation/language/vi-VN/langmetadata.xml @@ -1,8 +1,8 @@ Vietnamese (Vietnam) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla! Project (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/zh-CN/langmetadata.xml b/installation/language/zh-CN/langmetadata.xml index f9633f8158827..1c7c1e604f624 100644 --- a/installation/language/zh-CN/langmetadata.xml +++ b/installation/language/zh-CN/langmetadata.xml @@ -1,8 +1,8 @@ Chinese Simplified (China) - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 Joomla中文网 (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/installation/language/zh-TW/langmetadata.xml b/installation/language/zh-TW/langmetadata.xml index bc39d83ae446f..bf6f374c2828a 100644 --- a/installation/language/zh-TW/langmetadata.xml +++ b/installation/language/zh-TW/langmetadata.xml @@ -1,8 +1,8 @@ 正體中文 - 5.1.3 - 2024-07 + 5.1.4 + 2024-08 正體中文 Translation Team (C) 2005 Open Source Matters, Inc. GNU General Public License version 2 or later; see LICENSE.txt diff --git a/layouts/joomla/form/field/radiobasic.php b/layouts/joomla/form/field/radiobasic.php index c1688edbba5a6..c47d39d0e18ea 100644 --- a/layouts/joomla/form/field/radiobasic.php +++ b/layouts/joomla/form/field/radiobasic.php @@ -6,6 +6,9 @@ * * @copyright (C) 2016 Open Source Matters, Inc. * @license GNU General Public License version 2 or later; see LICENSE.txt + * + * @deprecated 5.2 will be moved to the b/c plugin in 6.0 and removed in 7.0 + * */ defined('_JEXEC') or die; diff --git a/libraries/src/Cache/Cache.php b/libraries/src/Cache/Cache.php index 74b68c072eeae..9f132ed019cc0 100644 --- a/libraries/src/Cache/Cache.php +++ b/libraries/src/Cache/Cache.php @@ -682,12 +682,12 @@ public static function makeId() // Platform defaults $defaulturlparams = [ - 'format' => 'WORD', - 'option' => 'WORD', - 'view' => 'WORD', - 'layout' => 'WORD', + 'format' => 'CMD', + 'option' => 'CMD', + 'view' => 'CMD', + 'layout' => 'CMD', 'tpl' => 'CMD', - 'id' => 'INT', + 'id' => 'STRING', ]; // Use platform defaults if parameter doesn't already exist. diff --git a/libraries/src/Event/CoreEventAware.php b/libraries/src/Event/CoreEventAware.php index 22a2a74c2b0f2..43593ec64b534 100644 --- a/libraries/src/Event/CoreEventAware.php +++ b/libraries/src/Event/CoreEventAware.php @@ -153,6 +153,8 @@ trait CoreEventAware 'onExtensionAfterSave' => Model\AfterSaveEvent::class, 'onExtensionAfterDelete' => Model\AfterDeleteEvent::class, 'onExtensionChangeState' => Model\BeforeChangeStateEvent::class, + 'onJoomlaBeforeUpdate' => Extension\BeforeJoomlaUpdateEvent::class, + 'onJoomlaAfterUpdate' => Extension\AfterJoomlaUpdateEvent::class, // Installer 'onInstallerAddInstallationTab' => Installer\AddInstallationTabEvent::class, 'onInstallerBeforeInstallation' => Installer\BeforeInstallationEvent::class, @@ -201,6 +203,8 @@ trait CoreEventAware 'onPageCacheSetCaching' => PageCache\SetCachingEvent::class, 'onPageCacheGetKey' => PageCache\GetKeyEvent::class, 'onPageCacheIsExcluded' => PageCache\IsExcludedEvent::class, + // Mail + 'onMailBeforeRendering' => Mail\BeforeRenderingMailTemplateEvent::class, ]; /** diff --git a/libraries/src/Event/Extension/AbstractJoomlaUpdateEvent.php b/libraries/src/Event/Extension/AbstractJoomlaUpdateEvent.php new file mode 100644 index 0000000000000..dd63377a7cd2b --- /dev/null +++ b/libraries/src/Event/Extension/AbstractJoomlaUpdateEvent.php @@ -0,0 +1,55 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\Extension; + +use Joomla\CMS\Event\AbstractImmutableEvent; +use Joomla\CMS\Event\ReshapeArgumentsAware; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Base class for Joomla Update events + * + * @since __DEPLOY_VERSION__ + */ +abstract class AbstractJoomlaUpdateEvent extends AbstractImmutableEvent +{ + use ReshapeArgumentsAware; + + /** + * The argument names, in order expected by legacy plugins. + * + * @var array + * + * @since __DEPLOY_VERSION__ + * @deprecated __DEPLOY_VERSION__ will be removed in 6.0 + */ + protected $legacyArgumentsOrder = []; + + /** + * Constructor. + * + * @param string $name The event name. + * @param array $arguments The event arguments. + * + * @since __DEPLOY_VERSION__ + */ + public function __construct($name, array $arguments = []) + { + // Reshape the arguments array to preserve b/c with legacy listeners + if ($this->legacyArgumentsOrder) { + $arguments = $this->reshapeArguments($arguments, $this->legacyArgumentsOrder); + } + + parent::__construct($name, $arguments); + } +} diff --git a/libraries/src/Event/Extension/AfterJoomlaUpdateEvent.php b/libraries/src/Event/Extension/AfterJoomlaUpdateEvent.php new file mode 100644 index 0000000000000..46672bbec59de --- /dev/null +++ b/libraries/src/Event/Extension/AfterJoomlaUpdateEvent.php @@ -0,0 +1,58 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\Extension; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Class for Joomla Update events + * + * @since __DEPLOY_VERSION__ + */ +class AfterJoomlaUpdateEvent extends AbstractJoomlaUpdateEvent +{ + /** + * The argument names, in order expected by legacy plugins. + * + * @var array + * + * @since __DEPLOY_VERSION__ + * @deprecated __DEPLOY_VERSION__ will be removed in 6.0 + */ + protected $legacyArgumentsOrder = ['oldVersion']; + + /** + * Pre-setter for the oldVersion argument. + * + * @param ?string $value The value to set + * + * @return string + * + * @since __DEPLOY_VERSION__ + */ + protected function onSetOldVersion(?string $value): string + { + return $value ?? ''; + } + + /** + * Getter for the oldVersion. + * + * @return string + * + * @since __DEPLOY_VERSION__ + */ + public function getOldVersion(): string + { + return $this->arguments['oldVersion'] ?? ''; + } +} diff --git a/libraries/src/Event/Extension/BeforeJoomlaUpdateEvent.php b/libraries/src/Event/Extension/BeforeJoomlaUpdateEvent.php new file mode 100644 index 0000000000000..635cee88ebc26 --- /dev/null +++ b/libraries/src/Event/Extension/BeforeJoomlaUpdateEvent.php @@ -0,0 +1,23 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\Extension; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Class for Joomla Update events + * + * @since __DEPLOY_VERSION__ + */ +class BeforeJoomlaUpdateEvent extends AbstractJoomlaUpdateEvent +{ +} diff --git a/libraries/src/Event/Mail/BeforeRenderingMailTemplateEvent.php b/libraries/src/Event/Mail/BeforeRenderingMailTemplateEvent.php new file mode 100644 index 0000000000000..438e0e9d30dff --- /dev/null +++ b/libraries/src/Event/Mail/BeforeRenderingMailTemplateEvent.php @@ -0,0 +1,30 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\Mail; + +/** + * Class for MailTemplate events + * Example: + * new BeforeRenderingMailTemplateEvent('onEventName', ['templateId' => 'com_example.template', 'subject' => $mailTemplateInstance]); + * + * @since __DEPLOY_VERSION__ + */ +class BeforeRenderingMailTemplateEvent extends MailTemplateEvent +{ + /** + * The argument names, in order expected by legacy plugins. + * + * @var array + * + * @since __DEPLOY_VERSION__ + * @deprecated __DEPLOY_VERSION__ will be removed in 6.0 + */ + protected $legacyArgumentsOrder = ['templateId', 'subject']; +} diff --git a/libraries/src/Event/Mail/MailTemplateEvent.php b/libraries/src/Event/Mail/MailTemplateEvent.php new file mode 100644 index 0000000000000..57719d3c40adc --- /dev/null +++ b/libraries/src/Event/Mail/MailTemplateEvent.php @@ -0,0 +1,146 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\CMS\Event\Mail; + +use Joomla\CMS\Event\AbstractImmutableEvent; +use Joomla\CMS\Event\ReshapeArgumentsAware; +use Joomla\CMS\Mail\MailTemplate; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Base class for MailTemplate events + * + * @since __DEPLOY_VERSION__ + */ +abstract class MailTemplateEvent extends AbstractImmutableEvent +{ + use ReshapeArgumentsAware; + + /** + * The argument names, in order expected by legacy plugins. + * + * @var array + * + * @since __DEPLOY_VERSION__ + * @deprecated __DEPLOY_VERSION__ will be removed in 6.0 + */ + protected $legacyArgumentsOrder = []; + + /** + * Constructor. + * + * @param string $name The event name. + * @param array $arguments The event arguments. + * + * @throws \BadMethodCallException + * + * @since __DEPLOY_VERSION__ + */ + public function __construct($name, array $arguments = []) + { + // Reshape the arguments array to preserve b/c with legacy listeners + if ($this->legacyArgumentsOrder) { + $arguments = $this->reshapeArguments($arguments, $this->legacyArgumentsOrder); + } + + parent::__construct($name, $arguments); + + if (!\array_key_exists('subject', $this->arguments)) { + throw new \BadMethodCallException("Argument 'subject' of event {$name} is required but has not been provided"); + } + + if (!\array_key_exists('templateId', $this->arguments)) { + throw new \BadMethodCallException("Argument 'templateId' of event {$name} is required but has not been provided"); + } + } + + /** + * Pre-Setter for the subject argument. + * + * @param MailTemplate $value The value to set + * + * @return MailTemplate + * + * @since __DEPLOY_VERSION__ + */ + protected function onSetSubject(MailTemplate $value): MailTemplate + { + return $value; + } + + /** + * Pre-getter for the subject argument. + * + * @param MailTemplate $value The value to set + * + * @return MailTemplate + * + * @since __DEPLOY_VERSION__ + */ + protected function onGetSubject(MailTemplate $value): MailTemplate + { + return $value; + } + + /** + * Pre-setter for the templateId argument. + * + * @param string $value The value to set + * + * @return string + * + * @since __DEPLOY_VERSION__ + */ + protected function onSetTemplateId(string $value): string + { + return $value; + } + + /** + * Pre-getter for the templateId argument. + * + * @param string $value The value to set + * + * @return string + * + * @since __DEPLOY_VERSION__ + */ + protected function onGetTemplateId(string $value): string + { + return $value; + } + + /** + * Getter for the subject argument. + * + * @return MailTemplate + * + * @since __DEPLOY_VERSION__ + */ + public function getTemplate(): MailTemplate + { + return $this->getArgument('subject'); + } + + /** + * Getter for the templateId argument. + * + * @return string + * + * @since __DEPLOY_VERSION__ + */ + public function getTemplateId(): string + { + return $this->getArgument('templateId'); + } +} diff --git a/libraries/src/Form/Field/RadiobasicField.php b/libraries/src/Form/Field/RadiobasicField.php index 1bcba1ae708ba..6ca0642b69ee3 100644 --- a/libraries/src/Form/Field/RadiobasicField.php +++ b/libraries/src/Form/Field/RadiobasicField.php @@ -17,7 +17,10 @@ * Form Field class for the Joomla Platform. * Provides radio button inputs using default styling * - * @since 4.0.0 + * @since 4.0.0 + * + * @deprecated 5.2 will be moved to the b/c plugin in 6.0 and removed in 7.0 + * Use \Joomla\CMS\Form\Field\RadioField instead */ class RadiobasicField extends ListField { diff --git a/libraries/src/Form/FormField.php b/libraries/src/Form/FormField.php index 645b8b06a59ec..c307df956279f 100644 --- a/libraries/src/Form/FormField.php +++ b/libraries/src/Form/FormField.php @@ -1123,7 +1123,7 @@ public function filter($value, $group = null, ?Registry $input = null) } if (\function_exists($filter)) { - return \call_user_func($filter, $value); + return $filter($value); } if ($this instanceof SubformField) { diff --git a/libraries/src/Log/Logger/FormattedtextLogger.php b/libraries/src/Log/Logger/FormattedtextLogger.php index a74fb082e641e..86e30ca99d110 100644 --- a/libraries/src/Log/Logger/FormattedtextLogger.php +++ b/libraries/src/Log/Logger/FormattedtextLogger.php @@ -10,11 +10,12 @@ namespace Joomla\CMS\Log\Logger; use Joomla\CMS\Factory; -use Joomla\CMS\Filesystem\File; use Joomla\CMS\Filesystem\Folder; use Joomla\CMS\Log\LogEntry; use Joomla\CMS\Log\Logger; use Joomla\CMS\Version; +use Joomla\Filesystem\Exception\FilesystemException; +use Joomla\Filesystem\File; use Joomla\Utilities\IpHelper; // phpcs:disable PSR1.Files.SideEffects @@ -136,8 +137,10 @@ public function __destruct() // Format all lines and write to file. $lines = array_map([$this, 'formatLine'], $this->deferredEntries); - if (!File::append($this->path, implode("\n", $lines) . "\n")) { - throw new \RuntimeException('Cannot write to log file.'); + try { + File::write($this->path, implode("\n", $lines) . "\n", false, true); + } catch (FilesystemException $exception) { + throw new \RuntimeException('Cannot write to log file.', 500, $exception); } } @@ -165,8 +168,10 @@ public function addEntry(LogEntry $entry) $line = $this->formatLine($entry); $line .= "\n"; - if (!File::append($this->path, $line)) { - throw new \RuntimeException('Cannot write to log file.'); + try { + File::write($this->path, $line, false, true); + } catch (FilesystemException $exception) { + throw new \RuntimeException('Cannot write to log file.', 500, $exception); } } } @@ -269,8 +274,10 @@ protected function initFile() // Build the log file header. $head = $this->generateFileHeader(); - if (!File::write($this->path, $head)) { - throw new \RuntimeException('Cannot write to log file.'); + try { + File::write($this->path, $head); + } catch (FilesystemException $exception) { + throw new \RuntimeException('Cannot write to log file.', 500, $exception); } } diff --git a/libraries/src/Mail/MailTemplate.php b/libraries/src/Mail/MailTemplate.php index 47b469207bd32..17bd3671c3bbb 100644 --- a/libraries/src/Mail/MailTemplate.php +++ b/libraries/src/Mail/MailTemplate.php @@ -10,6 +10,7 @@ namespace Joomla\CMS\Mail; use Joomla\CMS\Component\ComponentHelper; +use Joomla\CMS\Event\Mail\BeforeRenderingMailTemplateEvent; use Joomla\CMS\Factory; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; @@ -72,7 +73,7 @@ class MailTemplate /** * * @var string[] - * @since 5.2.0 + * @since 5.1.3 */ protected $unsafe_tags = []; @@ -224,7 +225,7 @@ public function addTemplateData($data, $plain = false) * * @return void * - * @since 5.2.0 + * @since 5.1.3 */ public function addUnsafeTags($tags) { @@ -290,7 +291,10 @@ public function send() $useLayout = $params->get('disable_htmllayout', $useLayout); } - $app->triggerEvent('onMailBeforeRendering', [$this->template_id, &$this]); + $app->getDispatcher()->dispatch('onMailBeforeRendering', new BeforeRenderingMailTemplateEvent( + 'onMailBeforeRendering', + ['templateId' => $this->template_id, 'subject' => $this] + )); $subject = $this->replaceTags(Text::_($mail->subject), $this->data); $this->mailer->setSubject($subject); @@ -342,11 +346,11 @@ public function send() $logo = $params->get('disable_logofile', 1) ? $logo : '' ; } - // Add the logo to the mail as inline attachement + // Add the logo to the mail as inline attachment if ($logo) { $logo = Path::check(JPATH_ROOT . '/' . HTMLHelper::_('cleanImageURL', $logo)->url); if (is_file(urldecode($logo))) { - # Attach the logo as inline attachement + # Attach the logo as inline attachment $this->mailer->addAttachment($logo, 'site-logo', 'base64', mime_content_type($logo), 'inline'); // We need only the cid for attached logo file diff --git a/libraries/src/Pagination/Pagination.php b/libraries/src/Pagination/Pagination.php index ccb184940b1cb..3882d7c703146 100644 --- a/libraries/src/Pagination/Pagination.php +++ b/libraries/src/Pagination/Pagination.php @@ -665,21 +665,27 @@ protected function _buildDataObject() // Platform defaults $defaultUrlParams = [ - 'format' => 'WORD', - 'option' => 'WORD', - 'view' => 'WORD', - 'layout' => 'WORD', - 'tpl' => 'CMD', - 'id' => 'INT', - 'Itemid' => 'INT', + 'format' => 'CMD', + 'option' => 'CMD', + 'controller' => 'CMD', + 'view' => 'CMD', + 'layout' => 'STRING', + 'task' => 'CMD', + 'template' => 'CMD', + 'templateStyle' => 'INT', + 'tmpl' => 'CMD', + 'tpl' => 'CMD', + 'id' => 'STRING', + 'Itemid' => 'INT', ]; // Prepare the routes $params = []; + $input = $this->app->getInput(); // Use platform defaults if parameter doesn't already exist. foreach ($defaultUrlParams as $param => $filter) { - $value = $this->app->input->get($param, null, $filter); + $value = $input->get($param, null, $filter); if ($value === null) { continue; diff --git a/plugins/extension/finder/src/Extension/Finder.php b/plugins/extension/finder/src/Extension/Finder.php index 2934ad9fd8aed..16ef01c32cfb2 100644 --- a/plugins/extension/finder/src/Extension/Finder.php +++ b/plugins/extension/finder/src/Extension/Finder.php @@ -10,11 +10,15 @@ namespace Joomla\Plugin\Extension\Finder\Extension; -use Joomla\CMS\Installer\Installer; +use Joomla\CMS\Event\Extension\AbstractExtensionEvent; +use Joomla\CMS\Event\Extension\AfterInstallEvent; +use Joomla\CMS\Event\Extension\AfterUninstallEvent; +use Joomla\CMS\Event\Extension\AfterUpdateEvent; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Component\Finder\Administrator\Indexer\Helper; use Joomla\Database\DatabaseAwareTrait; use Joomla\Database\ParameterType; +use Joomla\Event\SubscriberInterface; use Joomla\String\StringHelper; // phpcs:disable PSR1.Files.SideEffects @@ -26,22 +30,39 @@ * * @since 4.0.0 */ -final class Finder extends CMSPlugin +final class Finder extends CMSPlugin implements SubscriberInterface { use DatabaseAwareTrait; + /** + * Returns an array of events this subscriber will listen to. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + public static function getSubscribedEvents(): array + { + return [ + 'onExtensionAfterInstall' => 'onExtensionAfterInstall', + 'onExtensionAfterUpdate' => 'onExtensionAfterUpdate', + 'onExtensionAfterUninstall' => 'onExtensionAfterUninstall', + ]; + } + /** * Add common words to finder after language got installed * - * @param Installer $installer Installer object - * @param integer $eid Extension Identifier + * @param AfterInstallEvent $event Event instance. * * @return void * * @since 4.0.0 */ - public function onExtensionAfterInstall($installer, $eid) + public function onExtensionAfterInstall(AbstractExtensionEvent $event): void { + $eid = $event->getEid(); + if (!$eid) { return; } @@ -68,31 +89,32 @@ public function onExtensionAfterInstall($installer, $eid) /** * Add common words to finder after language got updated * - * @param Installer $installer Installer object - * @param integer $eid Extension identifier + * @param AfterUpdateEvent $event Event instance. * * @return void * * @since 4.0.0 */ - public function onExtensionAfterUpdate($installer, $eid) + public function onExtensionAfterUpdate(AfterUpdateEvent $event): void { - $this->onExtensionAfterInstall($installer, $eid); + $this->onExtensionAfterInstall($event); } /** * Remove common words to finder after language got uninstalled * - * @param Installer $installer Installer instance - * @param integer $eid Extension id - * @param boolean $removed Installation result + * @param AfterUninstallEvent $event Event instance. * * @return void * * @since 4.0.0 */ - public function onExtensionAfterUninstall($installer, $eid, $removed) + public function onExtensionAfterUninstall(AfterUninstallEvent $event): void { + $installer = $event->getInstaller(); + $eid = $event->getEid(); + $removed = $event->getRemoved(); + // Check that the language was successfully uninstalled. if ($eid && $removed && $installer->extension->type === 'language') { $this->removeCommonWords($installer->extension); diff --git a/plugins/extension/joomla/src/Extension/Joomla.php b/plugins/extension/joomla/src/Extension/Joomla.php index 46c49c0f7af1d..b98e8f8c8e875 100644 --- a/plugins/extension/joomla/src/Extension/Joomla.php +++ b/plugins/extension/joomla/src/Extension/Joomla.php @@ -10,11 +10,15 @@ namespace Joomla\Plugin\Extension\Joomla\Extension; +use Joomla\CMS\Event\Extension\AfterInstallEvent; +use Joomla\CMS\Event\Extension\AfterUninstallEvent; +use Joomla\CMS\Event\Extension\AfterUpdateEvent; use Joomla\CMS\Installer\Installer; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Database\DatabaseAwareTrait; use Joomla\Database\ParameterType; +use Joomla\Event\SubscriberInterface; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; @@ -25,7 +29,7 @@ * * @since 1.6 */ -final class Joomla extends CMSPlugin +final class Joomla extends CMSPlugin implements SubscriberInterface { use DatabaseAwareTrait; @@ -52,6 +56,22 @@ final class Joomla extends CMSPlugin */ protected $autoloadLanguage = true; + /** + * Returns an array of events this subscriber will listen to. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + public static function getSubscribedEvents(): array + { + return [ + 'onExtensionAfterInstall' => 'onExtensionAfterInstall', + 'onExtensionAfterUpdate' => 'onExtensionAfterUpdate', + 'onExtensionAfterUninstall' => 'onExtensionAfterUninstall', + ]; + } + /** * Adds an update site to the table if it doesn't exist. * @@ -138,17 +158,18 @@ private function addUpdateSite($name, $type, $location, $enabled, $extraQuery = /** * Handle post extension install update sites * - * @param Installer $installer Installer object - * @param integer $eid Extension Identifier + * @param AfterInstallEvent $event Event instance. * * @return void * * @since 1.6 */ - public function onExtensionAfterInstall($installer, $eid) + public function onExtensionAfterInstall(AfterInstallEvent $event): void { + $eid = $event->getEid(); + if ($eid) { - $this->installer = $installer; + $this->installer = $event->getInstaller(); $this->eid = (int) $eid; // After an install we only need to do update sites @@ -159,16 +180,17 @@ public function onExtensionAfterInstall($installer, $eid) /** * Handle extension uninstall * - * @param Installer $installer Installer instance - * @param integer $eid Extension id - * @param boolean $removed Installation result + * @param AfterUninstallEvent $event Event instance. * * @return void * * @since 1.6 */ - public function onExtensionAfterUninstall($installer, $eid, $removed) + public function onExtensionAfterUninstall(AfterUninstallEvent $event): void { + $eid = $event->getEid(); + $removed = $event->getRemoved(); + // If we have a valid extension ID and the extension was successfully uninstalled wipe out any // update sites for it if ($eid && $removed) { @@ -240,17 +262,18 @@ public function onExtensionAfterUninstall($installer, $eid, $removed) /** * After update of an extension * - * @param Installer $installer Installer object - * @param integer $eid Extension identifier + * @param AfterUpdateEvent $event Event instance. * * @return void * * @since 1.6 */ - public function onExtensionAfterUpdate($installer, $eid) + public function onExtensionAfterUpdate(AfterUpdateEvent $event): void { + $eid = $event->getEid(); + if ($eid) { - $this->installer = $installer; + $this->installer = $event->getInstaller(); $this->eid = (int) $eid; // Handle any update sites diff --git a/plugins/extension/namespacemap/src/Extension/NamespaceMap.php b/plugins/extension/namespacemap/src/Extension/NamespaceMap.php index 4dc2fb80c864f..c5e60266ad6c7 100644 --- a/plugins/extension/namespacemap/src/Extension/NamespaceMap.php +++ b/plugins/extension/namespacemap/src/Extension/NamespaceMap.php @@ -10,9 +10,12 @@ namespace Joomla\Plugin\Extension\NamespaceMap\Extension; -use Joomla\CMS\Installer\Installer; +use Joomla\CMS\Event\Extension\AfterInstallEvent; +use Joomla\CMS\Event\Extension\AfterUninstallEvent; +use Joomla\CMS\Event\Extension\AfterUpdateEvent; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Event\DispatcherInterface; +use Joomla\Event\SubscriberInterface; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; @@ -23,7 +26,7 @@ * * @since 4.0.0 */ -final class NamespaceMap extends CMSPlugin +final class NamespaceMap extends CMSPlugin implements SubscriberInterface { /** * The namespace map file creator @@ -50,20 +53,35 @@ public function __construct(DispatcherInterface $dispatcher, \JNamespacePsr4Map parent::__construct($dispatcher, $config); } + /** + * Returns an array of events this subscriber will listen to. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + public static function getSubscribedEvents(): array + { + return [ + 'onExtensionAfterInstall' => 'onExtensionAfterInstall', + 'onExtensionAfterUpdate' => 'onExtensionAfterUpdate', + 'onExtensionAfterUninstall' => 'onExtensionAfterUninstall', + ]; + } + /** * Update / Create map on extension install * - * @param Installer $installer Installer instance - * @param integer $eid Extension id + * @param AfterInstallEvent $event Event instance. * * @return void * * @since 4.0.0 */ - public function onExtensionAfterInstall($installer, $eid) + public function onExtensionAfterInstall(AfterInstallEvent $event): void { // Check that we have a valid extension - if ($eid) { + if ($event->getEid()) { // Update / Create new map $this->fileCreator->create(); } @@ -72,18 +90,16 @@ public function onExtensionAfterInstall($installer, $eid) /** * Update / Create map on extension uninstall * - * @param Installer $installer Installer instance - * @param integer $eid Extension id - * @param boolean $removed Installation result + * @param AfterUninstallEvent $event Event instance. * * @return void * * @since 4.0.0 */ - public function onExtensionAfterUninstall($installer, $eid, $removed) + public function onExtensionAfterUninstall(AfterUninstallEvent $event): void { // Check that we have a valid extension and that it has been removed - if ($eid && $removed) { + if ($event->getEid() && $event->getRemoved()) { // Update / Create new map $this->fileCreator->create(); } @@ -92,17 +108,16 @@ public function onExtensionAfterUninstall($installer, $eid, $removed) /** * Update map on extension update * - * @param Installer $installer Installer instance - * @param integer $eid Extension id + * @param AfterUpdateEvent $event Event instance. * * @return void * * @since 4.0.0 */ - public function onExtensionAfterUpdate($installer, $eid) + public function onExtensionAfterUpdate(AfterUpdateEvent $event): void { // Check that we have a valid extension - if ($eid) { + if ($event->getEid()) { // Update / Create new map $this->fileCreator->create(); } diff --git a/plugins/installer/override/src/Extension/Override.php b/plugins/installer/override/src/Extension/Override.php index af8a35ce45527..e2a10231d58d1 100644 --- a/plugins/installer/override/src/Extension/Override.php +++ b/plugins/installer/override/src/Extension/Override.php @@ -15,6 +15,7 @@ use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Database\DatabaseAwareTrait; use Joomla\Database\ParameterType; +use Joomla\Event\SubscriberInterface; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; @@ -25,7 +26,7 @@ * * @since 4.0.0 */ -final class Override extends CMSPlugin +final class Override extends CMSPlugin implements SubscriberInterface { use DatabaseAwareTrait; @@ -38,6 +39,25 @@ final class Override extends CMSPlugin */ protected $autoloadLanguage = true; + /** + * Returns an array of events this subscriber will listen to. + * + * @return array + * + * @since __DEPLOY_VERSION__ + */ + public static function getSubscribedEvents(): array + { + return [ + 'onExtensionBeforeUpdate' => 'onExtensionBeforeUpdate', + 'onExtensionAfterUpdate' => 'onExtensionAfterUpdate', + 'onJoomlaBeforeUpdate' => 'onJoomlaBeforeUpdate', + 'onJoomlaAfterUpdate' => 'onJoomlaAfterUpdate', + 'onInstallerBeforeInstaller' => 'onInstallerBeforeInstaller', + 'onInstallerAfterInstaller' => 'onInstallerAfterInstaller', + ]; + } + /** * Method to get com_templates model instance. * diff --git a/plugins/quickicon/phpversioncheck/src/Extension/PhpVersionCheck.php b/plugins/quickicon/phpversioncheck/src/Extension/PhpVersionCheck.php index f282cca9a3f94..69b27c005bb0e 100644 --- a/plugins/quickicon/phpversioncheck/src/Extension/PhpVersionCheck.php +++ b/plugins/quickicon/phpversioncheck/src/Extension/PhpVersionCheck.php @@ -137,15 +137,15 @@ private function getPhpSupport() ], '8.1' => [ 'security' => '2023-11-25', - 'eos' => '2024-11-25', + 'eos' => '2025-12-31', ], '8.2' => [ - 'security' => '2024-12-08', - 'eos' => '2025-12-08', + 'security' => '2024-12-31', + 'eos' => '2026-12-31', ], '8.3' => [ - 'security' => '2025-11-23', - 'eos' => '2026-11-23', + 'security' => '2025-12-31', + 'eos' => '2027-12-31', ], ];