diff --git a/.drone.yml b/.drone.yml
index 4ec43d1fd15f0..16a432cf3fa42 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -56,6 +56,13 @@ steps:
- php -v
- ./libraries/vendor/bin/phpunit --testsuite Unit
+ - name: php82-unit
+ depends_on: [ phpcs ]
+ image: joomlaprojects/docker-images:php8.2
+ commands:
+ - php -v
+ - ./libraries/vendor/bin/phpunit --testsuite Unit
+
- name: php81-integration
depends_on: [ npm ]
image: joomlaprojects/docker-images:php8.1
@@ -365,6 +372,6 @@ trigger:
---
kind: signature
-hmac: 7d729d1bdab99cbf37d96324d129a7f3c7eca72a271c70af8755d99c0ae91142
+hmac: 6b06b1c7f407650fe98f0851dc865911f399422116fa4f250a52d01a556397ed
...
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000000000..fbb91302cfb5a
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,9 @@
+# Short array syntax change https://github.com/joomla/joomla-cms/pull/39616
+10f250f418851674c2e4104b6b39b9b665496544
+
+# Code style fixes from PHP CS fixer https://github.com/joomla/joomla-cms/pull/39745
+1e7527b60ec42032abe7bfb9c000bacf38f65845
+
+# PSR 12
+dd91072a956a19a43798515239892edd2b49ac7b
+e7f5cc182bb1cd39c7f085d529888ac4fa6fc77e
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 9aceb79e81cad..50b6393e5c76d 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -14,12 +14,12 @@ If it is a PR, include what the issue is, what the PR is addressing, testing ins
Please be patient as not all items will be tested immediately (remember, all bug testing for the Joomla! CMS is done by volunteers) and be receptive to feedback about your code.
#### Branches
-PRs should usually be made to the `4.2-dev` branch as this contains the most recent version of the code.
+PRs should usually be made to the `4.3-dev` branch as this contains the most recent version of the code.
There are other branches available which serve specific purposes.
| Branch | Purpose |
| ------ | ------- |
| 3.10-dev | Branch for the Joomla 3.x series. The 3.10 series release will now only include security patches. |
-| 4.2-dev | Branch for the current minor Joomla version.|
-| 4.3-dev | Branch for the next minor Joomla version. New features go into this branch. Commits to 4.2-dev will be applied to this branch as well. |
-| 5.0-dev | Branch for the next major Joomla version. |
+| 4.3-dev | Branch for the current minor Joomla version.|
+| 4.4-dev | Branch for the next minor Joomla version. Commits to 4.3-dev will be applied to this branch as well. |
+| 5.0-dev | Branch for the next major Joomla version. New features go into this branch. |
diff --git a/.github/workflows/create-translation-pull-request-v4.yml b/.github/workflows/create-translation-pull-request-v4.yml
index cbd7229c4e1bd..d149f3cb4d9fc 100644
--- a/.github/workflows/create-translation-pull-request-v4.yml
+++ b/.github/workflows/create-translation-pull-request-v4.yml
@@ -37,7 +37,7 @@ jobs:
git remote add upstream https://github.com/joomla/joomla-cms.git
git fetch upstream
git checkout --progress --force -B translation refs/remotes/origin/translation
- git merge upstream/4.2-dev
+ git merge upstream/4.3-dev
- name: Fetch and extract translations
run: |
@@ -74,4 +74,4 @@ jobs:
GITHUB_TOKEN: ${{ secrets.API_TOKEN_GITHUB }}
run: |
gh pr list -R joomla/joomla-cms --state open --author joomla-translation-bot -S "Translation Update" | grep -v "No pull" || \
- gh pr create --title "Translation Update" --body "Automatically created pull request based on core-translation repository changes" -R joomla/joomla-cms --base 4.2-dev
+ gh pr create --title "Translation Update" --body "Automatically created pull request based on core-translation repository changes" -R joomla/joomla-cms --base 4.3-dev
diff --git a/.phan/config.php b/.phan/config.php
index e8873f0ff8752..a4663fd197680 100644
--- a/.phan/config.php
+++ b/.phan/config.php
@@ -15,8 +15,8 @@
* default configuration. Command line arguments will be applied
* after this file is read.
*
- * @see https://github.com/phan/phan/wiki/Phan-Config-Settings for all configurable options
- * @see https://github.com/phan/phan/tree/v4/src/Phan/Config.php
+ * @link https://github.com/phan/phan/wiki/Phan-Config-Settings for all configurable options
+ * @link https://github.com/phan/phan/tree/v4/src/Phan/Config.php
*
* A Note About Paths
* ==================
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index 69c9a61acd05a..4c6103b5b360e 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -9,8 +9,8 @@
/**
* This is the configuration file for php-cs-fixer
*
- * @see https://github.com/FriendsOfPHP/PHP-CS-Fixer
- * @see https://mlocati.github.io/php-cs-fixer-configurator/#version:3.0
+ * @link https://github.com/FriendsOfPHP/PHP-CS-Fixer
+ * @link https://mlocati.github.io/php-cs-fixer-configurator/#version:3.0
*
*
* If you would like to run the automated clean up, then open a command line and type one of the commands below
@@ -78,6 +78,12 @@
'binary_operator_spaces' => ['operators' => ['=>' => 'align_single_space_minimal', '=' => 'align']],
// The "No break" comment in switch statements
'no_break_comment' => ['comment_text' => 'No break'],
+ // Remove unused imports
+ 'no_unused_imports' => true,
+ // Classes from the global namespace should not be imported
+ 'global_namespace_import' => ['import_classes' => false, 'import_constants' => false, 'import_functions' => false],
+ // Alpha order imports
+ 'ordered_imports' => ['imports_order' => ['class', 'function', 'const'], 'sort_algorithm' => 'alpha'],
]
)
->setFinder($finder);
diff --git a/administrator/components/com_actionlogs/src/Controller/ActionlogsController.php b/administrator/components/com_actionlogs/src/Controller/ActionlogsController.php
index 1d38d94cce466..fee0dc2470129 100644
--- a/administrator/components/com_actionlogs/src/Controller/ActionlogsController.php
+++ b/administrator/components/com_actionlogs/src/Controller/ActionlogsController.php
@@ -10,12 +10,10 @@
namespace Joomla\Component\Actionlogs\Administrator\Controller;
-use DateTimeZone;
-use Exception;
-use InvalidArgumentException;
use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Date\Date;
+use Joomla\CMS\Event\ActionLog\AfterLogExportEvent;
use Joomla\CMS\Input\Input;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\AdminController;
@@ -48,7 +46,7 @@ class ActionlogsController extends AdminController
*
* @since 3.9.0
*
- * @throws Exception
+ * @throws \Exception
*/
public function __construct($config = [], MVCFactoryInterface $factory = null, $app = null, $input = null)
{
@@ -64,7 +62,7 @@ public function __construct($config = [], MVCFactoryInterface $factory = null, $
*
* @since 3.9.0
*
- * @throws Exception
+ * @throws \Exception
*/
public function exportLogs()
{
@@ -89,7 +87,7 @@ public function exportLogs()
if (\count($data)) {
try {
$rows = ActionlogsHelper::getCsvData($data);
- } catch (InvalidArgumentException $exception) {
+ } catch (\InvalidArgumentException $exception) {
$this->setMessage(Text::_('COM_ACTIONLOGS_ERROR_COULD_NOT_EXPORT_DATA'), 'error');
$this->setRedirect(Route::_('index.php?option=com_actionlogs&view=actionlogs', false));
@@ -99,7 +97,7 @@ public function exportLogs()
// Destroy the iterator now
unset($data);
- $date = new Date('now', new DateTimeZone('UTC'));
+ $date = new Date('now', new \DateTimeZone('UTC'));
$filename = 'logs_' . $date->format('Y-m-d_His_T');
$csvDelimiter = ComponentHelper::getComponent('com_actionlogs')->getParams()->get('csv_delimiter', ',');
@@ -116,7 +114,7 @@ public function exportLogs()
}
fclose($output);
- $this->app->triggerEvent('onAfterLogExport', []);
+ $this->getDispatcher()->dispatch('onAfterLogExport', new AfterLogExportEvent('onAfterLogExport'));
$this->app->close();
} else {
$this->setMessage(Text::_('COM_ACTIONLOGS_NO_LOGS_TO_EXPORT'));
diff --git a/administrator/components/com_actionlogs/src/Controller/DisplayController.php b/administrator/components/com_actionlogs/src/Controller/DisplayController.php
index 3ff880b1ebeed..7493052e2de1c 100644
--- a/administrator/components/com_actionlogs/src/Controller/DisplayController.php
+++ b/administrator/components/com_actionlogs/src/Controller/DisplayController.php
@@ -17,7 +17,7 @@
// phpcs:enable PSR1.Files.SideEffects
/**
- * Plugins master display controller.
+ * Plugins display controller.
*
* @since 4.0.0
*/
diff --git a/administrator/components/com_actionlogs/src/Dispatcher/Dispatcher.php b/administrator/components/com_actionlogs/src/Dispatcher/Dispatcher.php
index 778d74d4b96fa..adfe2f4e5f0ff 100644
--- a/administrator/components/com_actionlogs/src/Dispatcher/Dispatcher.php
+++ b/administrator/components/com_actionlogs/src/Dispatcher/Dispatcher.php
@@ -18,14 +18,14 @@
// phpcs:enable PSR1.Files.SideEffects
/**
- * ComponentDispatcher class for com_admin
+ * ComponentDispatcher class for com_actionlogs
*
* @since 4.2.7
*/
class Dispatcher extends ComponentDispatcher
{
/**
- * com_admin does not require check permission, so we override checkAccess method and have it empty
+ * Method to check component access permission
*
* @return void
*
diff --git a/administrator/components/com_actionlogs/src/Field/LogtypeField.php b/administrator/components/com_actionlogs/src/Field/LogtypeField.php
index d55071386192f..6aae799f0c2b2 100644
--- a/administrator/components/com_actionlogs/src/Field/LogtypeField.php
+++ b/administrator/components/com_actionlogs/src/Field/LogtypeField.php
@@ -21,7 +21,7 @@
// phpcs:enable PSR1.Files.SideEffects
/**
- * Field to load a list of all users that have logged actions
+ * Field to load a list of all extensions that have logged actions
*
* @since 3.9.0
*/
diff --git a/administrator/components/com_actionlogs/src/Helper/ActionlogsHelper.php b/administrator/components/com_actionlogs/src/Helper/ActionlogsHelper.php
index 339f7ded1eab2..63c0543667a23 100644
--- a/administrator/components/com_actionlogs/src/Helper/ActionlogsHelper.php
+++ b/administrator/components/com_actionlogs/src/Helper/ActionlogsHelper.php
@@ -10,13 +10,12 @@
namespace Joomla\Component\Actionlogs\Administrator\Helper;
-use Generator;
use Joomla\CMS\Date\Date;
use Joomla\CMS\Factory;
-use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Object\CMSObject;
use Joomla\CMS\Router\Route;
+use Joomla\Filesystem\Path;
use Joomla\String\StringHelper;
// phpcs:disable PSR1.Files.SideEffects
@@ -44,13 +43,13 @@ class ActionlogsHelper
*
* @param array|\Traversable $data The logs data objects to be exported
*
- * @return Generator
+ * @return \Generator
*
* @since 3.9.0
*
* @throws \InvalidArgumentException
*/
- public static function getCsvData($data): Generator
+ public static function getCsvData($data): \Generator
{
if (!is_iterable($data)) {
throw new \InvalidArgumentException(
diff --git a/administrator/components/com_actionlogs/src/Model/ActionlogConfigModel.php b/administrator/components/com_actionlogs/src/Model/ActionlogConfigModel.php
index 1fc8fbd166782..9ff7c98f3dafb 100644
--- a/administrator/components/com_actionlogs/src/Model/ActionlogConfigModel.php
+++ b/administrator/components/com_actionlogs/src/Model/ActionlogConfigModel.php
@@ -11,7 +11,6 @@
namespace Joomla\Component\Actionlogs\Administrator\Model;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
-use stdClass;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
@@ -29,11 +28,11 @@ class ActionlogConfigModel extends BaseDatabaseModel
*
* @param string $context The context of the content
*
- * @return stdClass|null An object contains content type parameters, or null if not found
+ * @return \stdClass|null An object contains content type parameters, or null if not found
*
* @since 4.2.0
*/
- public function getLogContentTypeParams(string $context): ?stdClass
+ public function getLogContentTypeParams(string $context): ?\stdClass
{
$db = $this->getDatabase();
$query = $db->getQuery(true)
diff --git a/administrator/components/com_actionlogs/src/Model/ActionlogModel.php b/administrator/components/com_actionlogs/src/Model/ActionlogModel.php
index fbf7acd1f4ac2..53b4aeff79519 100644
--- a/administrator/components/com_actionlogs/src/Model/ActionlogModel.php
+++ b/administrator/components/com_actionlogs/src/Model/ActionlogModel.php
@@ -17,6 +17,8 @@
use Joomla\CMS\Mail\Exception\MailDisabledException;
use Joomla\CMS\Mail\MailTemplate;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
+use Joomla\CMS\User\UserFactoryAwareInterface;
+use Joomla\CMS\User\UserFactoryAwareTrait;
use Joomla\Component\Actionlogs\Administrator\Helper\ActionlogsHelper;
use Joomla\Utilities\IpHelper;
use PHPMailer\PHPMailer\Exception as phpMailerException;
@@ -30,8 +32,10 @@
*
* @since 3.9.0
*/
-class ActionlogModel extends BaseDatabaseModel
+class ActionlogModel extends BaseDatabaseModel implements UserFactoryAwareInterface
{
+ use UserFactoryAwareTrait;
+
/**
* Function to add logs to the database
* This method adds a record to #__action_logs contains (message_language_key, message, date, context, user)
@@ -45,9 +49,13 @@ class ActionlogModel extends BaseDatabaseModel
*
* @since 3.9.0
*/
- public function addLog($messages, $messageLanguageKey, $context, $userId = null)
+ public function addLog($messages, $messageLanguageKey, $context, $userId = 0)
{
- $user = Factory::getUser($userId);
+ if (!is_numeric($userId)) {
+ @trigger_error(sprintf('User ID must be an integer in %s.', __METHOD__), E_USER_DEPRECATED);
+ }
+
+ $user = $userId ? $this->getUserFactory()->loadUserById($userId) : $this->getCurrentUser();
$db = $this->getDatabase();
$date = Factory::getDate();
$params = ComponentHelper::getComponent('com_actionlogs')->getParams();
diff --git a/administrator/components/com_actionlogs/src/Model/ActionlogsModel.php b/administrator/components/com_actionlogs/src/Model/ActionlogsModel.php
index fbdea7913fd13..8a523aa2dbfb0 100644
--- a/administrator/components/com_actionlogs/src/Model/ActionlogsModel.php
+++ b/administrator/components/com_actionlogs/src/Model/ActionlogsModel.php
@@ -10,10 +10,9 @@
namespace Joomla\Component\Actionlogs\Administrator\Model;
-use DateTimeZone;
-use Exception;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Date\Date;
+use Joomla\CMS\Event\ActionLog\AfterLogPurgeEvent;
use Joomla\CMS\Factory;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
@@ -22,7 +21,6 @@
use Joomla\Database\DatabaseQuery;
use Joomla\Database\ParameterType;
use Joomla\Utilities\ArrayHelper;
-use RuntimeException;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
@@ -42,7 +40,7 @@ class ActionlogsModel extends ListModel
*
* @since 3.9.0
*
- * @throws Exception
+ * @throws \Exception
*/
public function __construct($config = [])
{
@@ -71,7 +69,7 @@ public function __construct($config = [])
*
* @since 3.9.0
*
- * @throws Exception
+ * @throws \Exception
*/
protected function populateState($ordering = 'a.id', $direction = 'desc')
{
@@ -85,7 +83,7 @@ protected function populateState($ordering = 'a.id', $direction = 'desc')
*
* @since 3.9.0
*
- * @throws Exception
+ * @throws \Exception
*/
protected function getListQuery()
{
@@ -174,7 +172,7 @@ protected function getListQuery()
*
* @since 3.9.0
*
- * @throws Exception
+ * @throws \Exception
*/
private function buildDateRange($range)
{
@@ -212,7 +210,7 @@ private function buildDateRange($range)
$dStart->setTime(0, 0, 0);
// Now change the timezone back to UTC.
- $tz = new DateTimeZone('GMT');
+ $tz = new \DateTimeZone('GMT');
$dStart->setTimezone($tz);
break;
}
@@ -341,13 +339,13 @@ public function delete(&$pks)
try {
$db->execute();
- } catch (RuntimeException $e) {
+ } catch (\RuntimeException $e) {
$this->setError($e->getMessage());
return false;
}
- Factory::getApplication()->triggerEvent('onAfterLogPurge', []);
+ $this->getDispatcher()->dispatch('onAfterLogPurge', new AfterLogPurgeEvent('onAfterLogPurge'));
return true;
}
@@ -363,11 +361,11 @@ public function purge()
{
try {
$this->getDatabase()->truncateTable('#__action_logs');
- } catch (Exception $e) {
+ } catch (\Exception $e) {
return false;
}
- Factory::getApplication()->triggerEvent('onAfterLogPurge', []);
+ $this->getDispatcher()->dispatch('onAfterLogPurge', new AfterLogPurgeEvent('onAfterLogPurge'));
return true;
}
diff --git a/administrator/components/com_actionlogs/src/Plugin/ActionLogPlugin.php b/administrator/components/com_actionlogs/src/Plugin/ActionLogPlugin.php
index 87ad75ea15785..5a8ef46738ca5 100644
--- a/administrator/components/com_actionlogs/src/Plugin/ActionLogPlugin.php
+++ b/administrator/components/com_actionlogs/src/Plugin/ActionLogPlugin.php
@@ -10,7 +10,6 @@
namespace Joomla\Component\Actionlogs\Administrator\Plugin;
-use Joomla\CMS\Factory;
use Joomla\CMS\Plugin\CMSPlugin;
// phpcs:disable PSR1.Files.SideEffects
@@ -64,7 +63,7 @@ abstract class ActionLogPlugin extends CMSPlugin
*/
protected function addLog($messages, $messageLanguageKey, $context, $userId = null)
{
- $user = Factory::getUser();
+ $user = $this->app->getIdentity();
foreach ($messages as $index => $message) {
if (!\array_key_exists('userid', $message)) {
diff --git a/administrator/components/com_actionlogs/src/View/Actionlogs/HtmlView.php b/administrator/components/com_actionlogs/src/View/Actionlogs/HtmlView.php
index 31aa54c168ddb..9084f4eab2005 100644
--- a/administrator/components/com_actionlogs/src/View/Actionlogs/HtmlView.php
+++ b/administrator/components/com_actionlogs/src/View/Actionlogs/HtmlView.php
@@ -10,7 +10,6 @@
namespace Joomla\Component\Actionlogs\Administrator\View\Actionlogs;
-use Exception;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Form\Form;
use Joomla\CMS\Language\Text;
@@ -98,7 +97,7 @@ class HtmlView extends BaseHtmlView
*
* @since 3.9.0
*
- * @throws Exception
+ * @throws \Exception
*/
public function display($tpl = null)
{
diff --git a/administrator/components/com_admin/postinstall/behindproxy.php b/administrator/components/com_admin/postinstall/behindproxy.php
index 47e27d57dfcf0..35594f72b4b07 100644
--- a/administrator/components/com_admin/postinstall/behindproxy.php
+++ b/administrator/components/com_admin/postinstall/behindproxy.php
@@ -9,9 +9,9 @@
*/
use Joomla\CMS\Factory;
-use Joomla\CMS\Filesystem\Path;
use Joomla\CMS\Language\Text;
use Joomla\Filesystem\File;
+use Joomla\Filesystem\Path;
use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;
diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php
index 1c18197af42d5..3f5cf6cb4d666 100644
--- a/administrator/components/com_admin/script.php
+++ b/administrator/components/com_admin/script.php
@@ -10,16 +10,19 @@
* @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace
*/
+use Joomla\CMS\Application\ApplicationHelper;
+use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Extension\ExtensionHelper;
use Joomla\CMS\Factory;
+use Joomla\CMS\Filesystem\File;
use Joomla\CMS\Filesystem\Folder;
use Joomla\CMS\Installer\Installer;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Table\Table;
-use Joomla\Component\Fields\Administrator\Model\FieldModel;
+use Joomla\CMS\Uri\Uri;
use Joomla\Database\ParameterType;
-use Joomla\Filesystem\File;
+use Joomla\Registry\Registry;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
@@ -90,8 +93,8 @@ public function update($installer)
// Informational log only
}
- // Uninstall plugins before removing their files and folders
- $this->uninstallEosPlugin();
+ // Uninstall extensions before removing their files and folders
+ $this->uninstallExtensions();
// This needs to stay for 2.5 update compatibility
$this->deleteUnexistingFiles();
@@ -205,50 +208,201 @@ protected function updateDatabaseMysql()
}
/**
- * Uninstall the 3.10 EOS plugin
+ * Uninstall extensions and optionally migrate their parameters when
+ * updating from a version older than 5.0.1.
*
* @return void
*
- * @since 4.0.0
+ * @since 5.0.0
*/
- protected function uninstallEosPlugin()
+ protected function uninstallExtensions()
{
+ // Don't uninstall extensions when not updating from a version older than 5.0.1
+ if (empty($this->fromVersion) || version_compare($this->fromVersion, '5.0.1', 'ge')) {
+ return true;
+ }
+
+ $extensions = [
+ /**
+ * Define here the extensions to be uninstalled and optionally migrated on update.
+ * For each extension, specify an associative array with following elements (key => value):
+ * 'type' => Field `type` in the `#__extensions` table
+ * 'element' => Field `element` in the `#__extensions` table
+ * 'folder' => Field `folder` in the `#__extensions` table
+ * 'client_id' => Field `client_id` in the `#__extensions` table
+ * 'pre_function' => Name of an optional migration function to be called before
+ * uninstalling, `null` if not used.
+ */
+ ['type' => 'plugin', 'element' => 'demotasks', 'folder' => 'task', 'client_id' => 0, 'pre_function' => null],
+ ['type' => 'plugin', 'element' => 'compat', 'folder' => 'system', 'client_id' => 0, 'pre_function' => 'migrateCompatPlugin'],
+ ['type' => 'plugin', 'element' => 'logrotation', 'folder' => 'system', 'client_id' => 0, 'pre_function' => 'migrateLogRotationPlugin'],
+ ['type' => 'plugin', 'element' => 'recaptcha', 'folder' => 'captcha', 'client_id' => 0, 'pre_function' => null],
+ ['type' => 'plugin', 'element' => 'updatenotification', 'folder' => 'system', 'client_id' => 0, 'pre_function' => 'migrateUpdatenotificationPlugin'],
+ ];
+
$db = Factory::getDbo();
- // Check if the plg_quickicon_eos310 plugin is present
- $extensionId = $db->setQuery(
- $db->getQuery(true)
- ->select('extension_id')
- ->from('#__extensions')
- ->where('name = ' . $db->quote('plg_quickicon_eos310'))
- )->loadResult();
+ foreach ($extensions as $extension) {
+ $row = $db->setQuery(
+ $db->getQuery(true)
+ ->select('*')
+ ->from($db->quoteName('#__extensions'))
+ ->where($db->quoteName('type') . ' = ' . $db->quote($extension['type']))
+ ->where($db->quoteName('element') . ' = ' . $db->quote($extension['element']))
+ ->where($db->quoteName('folder') . ' = ' . $db->quote($extension['folder']))
+ ->where($db->quoteName('client_id') . ' = ' . $db->quote($extension['client_id']))
+ )->loadObject();
+
+ // Skip migrating and uninstalling if the extension doesn't exist
+ if (!$row) {
+ continue;
+ }
- // Skip uninstalling if it doesn't exist
- if (!$extensionId) {
- return;
+ // If there is a function for migration to be called before uninstalling, call it
+ if ($extension['pre_function'] && method_exists($this, $extension['pre_function'])) {
+ $this->{$extension['pre_function']}($row);
+ }
+
+ try {
+ $db->transactionStart();
+
+ // Unlock and unprotect the plugin so we can uninstall it
+ $db->setQuery(
+ $db->getQuery(true)
+ ->update($db->quoteName('#__extensions'))
+ ->set($db->quoteName('locked') . ' = 0')
+ ->set($db->quoteName('protected') . ' = 0')
+ ->where($db->quoteName('extension_id') . ' = :extension_id')
+ ->bind(':extension_id', $row->extension_id, ParameterType::INTEGER)
+ )->execute();
+
+ // Uninstall the plugin
+ $installer = new Installer();
+ $installer->setDatabase($db);
+ $installer->uninstall($extension['type'], $row->extension_id);
+
+ $db->transactionCommit();
+ } catch (\Exception $e) {
+ $db->transactionRollback();
+ echo Text::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
';
+ throw $e;
+ }
}
+ }
- try {
- $db->transactionStart();
+ /**
+ * Migrate plugin parameters of obsolete compat system plugin to compat behaviour plugin
+ *
+ * @param \stdClass $rowOld Object with the obsolete plugin's record in the `#__extensions` table
+ *
+ * @return void
+ *
+ * @since 5.0.0
+ */
+ private function migrateCompatPlugin($rowOld)
+ {
+ $db = Factory::getDbo();
- // Unprotect the plugin so we can uninstall it
- $db->setQuery(
- $db->getQuery(true)
- ->update('#__extensions')
- ->set('protected = 0')
- ->where($db->quoteName('extension_id') . ' = ' . $extensionId)
- )->execute();
+ $db->setQuery(
+ $db->getQuery(true)
+ ->update($db->quoteName('#__extensions'))
+ ->set($db->quoteName('enabled') . ' = :enabled')
+ ->set($db->quoteName('params') . ' = :params')
+ ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
+ ->where($db->quoteName('element') . ' = ' . $db->quote('compat'))
+ ->where($db->quoteName('folder') . ' = ' . $db->quote('behaviour'))
+ ->where($db->quoteName('client_id') . ' = 0')
+ ->bind(':enabled', $rowOld->enabled, ParameterType::INTEGER)
+ ->bind(':params', $rowOld->params)
+ )->execute();
+ }
+
+ /**
+ * This method is for migration for old logrotation system plugin migration to task.
+ *
+ * @param \stdClass $data Object with the extension's record in the `#__extensions` table
+ *
+ * @return void
+ *
+ * @since __DEPLOY_VERSION__
+ */
+ private function migrateLogRotationPlugin($data)
+ {
+ if (!$data->enabled) {
+ return;
+ }
- // Uninstall the plugin
- $installer = new Installer();
- $installer->setDatabase($db);
- $installer->uninstall('plugin', $extensionId);
+ /** @var SchedulerComponent $component */
+ $component = Factory::getApplication()->bootComponent('com_scheduler');
+
+ /** @var TaskModel $model */
+ $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);
+
+ // Get the timeout, as configured in plg_system_logrotation
+ $params = new Registry($data->params);
+ $cachetimeout = (int) $params->get('cachetimeout', 30);
+ $lastrun = (int) $params->get('lastrun', time());
+
+ $task = [
+ 'title' => 'RotateLogs',
+ 'type' => 'rotation.logs',
+ 'execution_rules' => [
+ 'rule-type' => 'interval-days',
+ 'interval-days' => $cachetimeout,
+ 'exec-time' => gmdate('H:i', $lastrun),
+ 'exec-day' => gmdate('d'),
+ ],
+ 'state' => 1,
+ 'params' => [
+ 'logstokeep' => $params->get('logstokeep', 1),
+ ],
+ ];
+ $model->save($task);
+ }
- $db->transactionCommit();
- } catch (\Exception $e) {
- $db->transactionRollback();
- throw $e;
+ /**
+ * This method is for migration for old updatenotification system plugin migration to task.
+ *
+ * @param \stdClass $data Object with the extension's record in the `#__extensions` table
+ *
+ * @return void
+ *
+ * @since __DEPLOY_VERSION__
+ */
+ private function migrateUpdatenotificationPlugin($data)
+ {
+ if (!$data->enabled) {
+ return;
}
+
+ // Get the timeout for Joomla! updates, as configured in com_installer's component parameters
+ $component = ComponentHelper::getComponent('com_installer');
+ $paramsc = $component->getParams();
+ $cachetimeout = (int) $paramsc->get('cachetimeout', 6);
+ $params = new Registry($data->params);
+ $lastrun = (int) $params->get('lastrun', time());
+
+ /** @var SchedulerComponent $component */
+ $component = Factory::getApplication()->bootComponent('com_scheduler');
+
+ /** @var TaskModel $model */
+ $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);
+ $task = [
+ 'title' => 'UpdateNotification',
+ 'type' => 'update.notification',
+ 'execution_rules' => [
+ 'rule-type' => 'interval-hours',
+ 'interval-hours' => $cachetimeout,
+ 'exec-time' => gmdate('H:i', $lastrun),
+ 'exec-day' => gmdate('d'),
+ ],
+ 'state' => 1,
+ 'params' => [
+ 'email' => $params->get('email', ''),
+ 'language_override' => $params->get('language_override', ''),
+ ],
+ ];
+ $model->save($task);
}
/**
@@ -380,6 +534,10 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-10.sql',
'/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-28.sql',
'/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-29.sql',
+ '/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-03-31.sql',
+ '/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-03.sql',
+ '/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-20.sql',
+ '/administrator/components/com_admin/sql/updates/mysql/4.4.0-2023-05-08.sql',
'/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-03-05.sql',
'/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-05-15.sql',
'/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-07-19.sql',
@@ -439,29 +597,33 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-10.sql',
'/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-28.sql',
'/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-29.sql',
+ '/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-03-31.sql',
+ '/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-03.sql',
+ '/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-20.sql',
+ '/administrator/components/com_admin/sql/updates/postgresql/4.4.0-2023-05-08.sql',
'/libraries/src/Schema/ChangeItem/SqlsrvChangeItem.php',
- '/libraries/vendor/beberlei/assert/LICENSE',
'/libraries/vendor/beberlei/assert/lib/Assert/Assert.php',
'/libraries/vendor/beberlei/assert/lib/Assert/Assertion.php',
'/libraries/vendor/beberlei/assert/lib/Assert/AssertionChain.php',
'/libraries/vendor/beberlei/assert/lib/Assert/AssertionFailedException.php',
+ '/libraries/vendor/beberlei/assert/lib/Assert/functions.php',
'/libraries/vendor/beberlei/assert/lib/Assert/InvalidArgumentException.php',
'/libraries/vendor/beberlei/assert/lib/Assert/LazyAssertion.php',
'/libraries/vendor/beberlei/assert/lib/Assert/LazyAssertionException.php',
- '/libraries/vendor/beberlei/assert/lib/Assert/functions.php',
+ '/libraries/vendor/beberlei/assert/LICENSE',
'/libraries/vendor/google/recaptcha/ARCHITECTURE.md',
'/libraries/vendor/jfcherng/php-color-output/src/helpers.php',
'/libraries/vendor/joomla/ldap/LICENSE',
'/libraries/vendor/joomla/ldap/src/LdapClient.php',
+ '/libraries/vendor/laminas/laminas-zendframework-bridge/config/replacements.php',
'/libraries/vendor/laminas/laminas-zendframework-bridge/COPYRIGHT.md',
'/libraries/vendor/laminas/laminas-zendframework-bridge/LICENSE.md',
- '/libraries/vendor/laminas/laminas-zendframework-bridge/config/replacements.php',
+ '/libraries/vendor/laminas/laminas-zendframework-bridge/src/autoload.php',
'/libraries/vendor/laminas/laminas-zendframework-bridge/src/Autoloader.php',
'/libraries/vendor/laminas/laminas-zendframework-bridge/src/ConfigPostProcessor.php',
'/libraries/vendor/laminas/laminas-zendframework-bridge/src/Module.php',
'/libraries/vendor/laminas/laminas-zendframework-bridge/src/Replacements.php',
'/libraries/vendor/laminas/laminas-zendframework-bridge/src/RewriteRules.php',
- '/libraries/vendor/laminas/laminas-zendframework-bridge/src/autoload.php',
'/libraries/vendor/lcobucci/jwt/compat/class-aliases.php',
'/libraries/vendor/lcobucci/jwt/compat/json-exception-polyfill.php',
'/libraries/vendor/lcobucci/jwt/compat/lcobucci-clock-polyfill.php',
@@ -479,6 +641,8 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/libraries/vendor/lcobucci/jwt/src/Signer/Keychain.php',
'/libraries/vendor/lcobucci/jwt/src/ValidationData.php',
'/libraries/vendor/nyholm/psr7/LICENSE',
+ '/libraries/vendor/nyholm/psr7/phpstan-baseline.neon',
+ '/libraries/vendor/nyholm/psr7/psalm.baseline.xml',
'/libraries/vendor/nyholm/psr7/src/Factory/HttplugFactory.php',
'/libraries/vendor/nyholm/psr7/src/Factory/Psr17Factory.php',
'/libraries/vendor/nyholm/psr7/src/MessageTrait.php',
@@ -487,22 +651,16 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/libraries/vendor/nyholm/psr7/src/Response.php',
'/libraries/vendor/nyholm/psr7/src/ServerRequest.php',
'/libraries/vendor/nyholm/psr7/src/Stream.php',
+ '/libraries/vendor/nyholm/psr7/src/StreamTrait.php',
'/libraries/vendor/nyholm/psr7/src/UploadedFile.php',
'/libraries/vendor/nyholm/psr7/src/Uri.php',
- '/libraries/vendor/php-http/message-factory/LICENSE',
- '/libraries/vendor/php-http/message-factory/puli.json',
- '/libraries/vendor/php-http/message-factory/src/MessageFactory.php',
- '/libraries/vendor/php-http/message-factory/src/RequestFactory.php',
- '/libraries/vendor/php-http/message-factory/src/ResponseFactory.php',
- '/libraries/vendor/php-http/message-factory/src/StreamFactory.php',
- '/libraries/vendor/php-http/message-factory/src/UriFactory.php',
'/libraries/vendor/psr/log/Psr/Log/AbstractLogger.php',
'/libraries/vendor/psr/log/Psr/Log/InvalidArgumentException.php',
- '/libraries/vendor/psr/log/Psr/Log/LogLevel.php',
'/libraries/vendor/psr/log/Psr/Log/LoggerAwareInterface.php',
'/libraries/vendor/psr/log/Psr/Log/LoggerAwareTrait.php',
'/libraries/vendor/psr/log/Psr/Log/LoggerInterface.php',
'/libraries/vendor/psr/log/Psr/Log/LoggerTrait.php',
+ '/libraries/vendor/psr/log/Psr/Log/LogLevel.php',
'/libraries/vendor/psr/log/Psr/Log/NullLogger.php',
'/libraries/vendor/ramsey/uuid/LICENSE',
'/libraries/vendor/ramsey/uuid/src/BinaryUtils.php',
@@ -527,6 +685,7 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/libraries/vendor/ramsey/uuid/src/Exception/UnsatisfiedDependencyException.php',
'/libraries/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php',
'/libraries/vendor/ramsey/uuid/src/FeatureSet.php',
+ '/libraries/vendor/ramsey/uuid/src/functions.php',
'/libraries/vendor/ramsey/uuid/src/Generator/CombGenerator.php',
'/libraries/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php',
'/libraries/vendor/ramsey/uuid/src/Generator/MtRandGenerator.php',
@@ -551,7 +710,6 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/libraries/vendor/ramsey/uuid/src/UuidFactory.php',
'/libraries/vendor/ramsey/uuid/src/UuidFactoryInterface.php',
'/libraries/vendor/ramsey/uuid/src/UuidInterface.php',
- '/libraries/vendor/ramsey/uuid/src/functions.php',
'/libraries/vendor/spomky-labs/base64url/LICENSE',
'/libraries/vendor/spomky-labs/base64url/src/Base64Url.php',
'/libraries/vendor/spomky-labs/cbor-php/src/ByteStringWithChunkObject.php',
@@ -610,6 +768,28 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/libraries/vendor/web-auth/metadata-service/src/Version.php',
'/libraries/vendor/web-auth/webauthn-lib/src/Server.php',
'/libraries/vendor/web-token/jwt-signature-algorithm-rsa/RSA.php',
+ '/media/com_templates/js/admin-template-compare-es5.js',
+ '/media/com_templates/js/admin-template-compare-es5.min.js',
+ '/media/com_templates/js/admin-template-compare-es5.min.js.gz',
+ '/media/com_templates/js/admin-template-compare.js',
+ '/media/com_templates/js/admin-template-compare.min.js',
+ '/media/com_templates/js/admin-template-compare.min.js.gz',
+ '/media/com_users/js/admin-users-mail-es5.js',
+ '/media/com_users/js/admin-users-mail-es5.min.js',
+ '/media/com_users/js/admin-users-mail-es5.min.js.gz',
+ '/media/com_users/js/admin-users-mail.js',
+ '/media/com_users/js/admin-users-mail.min.js',
+ '/media/com_users/js/admin-users-mail.min.js.gz',
+ '/media/vendor/fontawesome-free/scss/_larger.scss',
+ '/media/vendor/fontawesome-free/webfonts/fa-brands-400.eot',
+ '/media/vendor/fontawesome-free/webfonts/fa-brands-400.svg',
+ '/media/vendor/fontawesome-free/webfonts/fa-brands-400.woff',
+ '/media/vendor/fontawesome-free/webfonts/fa-regular-400.eot',
+ '/media/vendor/fontawesome-free/webfonts/fa-regular-400.svg',
+ '/media/vendor/fontawesome-free/webfonts/fa-regular-400.woff',
+ '/media/vendor/fontawesome-free/webfonts/fa-solid-900.eot',
+ '/media/vendor/fontawesome-free/webfonts/fa-solid-900.svg',
+ '/media/vendor/fontawesome-free/webfonts/fa-solid-900.woff',
'/media/vendor/tinymce/plugins/bbcode/index.js',
'/media/vendor/tinymce/plugins/bbcode/plugin.js',
'/media/vendor/tinymce/plugins/bbcode/plugin.min.js',
@@ -658,6 +838,10 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/media/vendor/tinymce/plugins/tabfocus/plugin.js',
'/media/vendor/tinymce/plugins/tabfocus/plugin.min.js',
'/media/vendor/tinymce/plugins/tabfocus/plugin.min.js.gz',
+ '/media/vendor/tinymce/plugins/template/index.js',
+ '/media/vendor/tinymce/plugins/template/plugin.js',
+ '/media/vendor/tinymce/plugins/template/plugin.min.js',
+ '/media/vendor/tinymce/plugins/template/plugin.min.js.gz',
'/media/vendor/tinymce/plugins/textcolor/index.js',
'/media/vendor/tinymce/plugins/textcolor/plugin.js',
'/media/vendor/tinymce/plugins/textcolor/plugin.min.js',
@@ -694,6 +878,1122 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/plugins/system/webauthn/src/Hotfix/AndroidKeyAttestationStatementSupport.php',
'/plugins/system/webauthn/src/Hotfix/FidoU2FAttestationStatementSupport.php',
'/plugins/system/webauthn/src/Hotfix/Server.php',
+ // From 5.0.0-alpha1 to 5.0.0-alpha2
+ '/libraries/vendor/jfcherng/php-diff/src/languages/readme.txt',
+ '/media/com_actionlogs/js/admin-actionlogs-default-es5.js',
+ '/media/com_actionlogs/js/admin-actionlogs-default-es5.min.js',
+ '/media/com_actionlogs/js/admin-actionlogs-default-es5.min.js.gz',
+ '/media/com_admin/js/admin-help-es5.js',
+ '/media/com_admin/js/admin-help-es5.min.js',
+ '/media/com_admin/js/admin-help-es5.min.js.gz',
+ '/media/com_associations/js/admin-associations-default-es5.js',
+ '/media/com_associations/js/admin-associations-default-es5.min.js',
+ '/media/com_associations/js/admin-associations-default-es5.min.js.gz',
+ '/media/com_associations/js/admin-associations-modal-es5.js',
+ '/media/com_associations/js/admin-associations-modal-es5.min.js',
+ '/media/com_associations/js/admin-associations-modal-es5.min.js.gz',
+ '/media/com_associations/js/associations-edit-es5.js',
+ '/media/com_associations/js/associations-edit-es5.min.js',
+ '/media/com_associations/js/associations-edit-es5.min.js.gz',
+ '/media/com_banners/js/admin-banner-edit-es5.js',
+ '/media/com_banners/js/admin-banner-edit-es5.min.js',
+ '/media/com_banners/js/admin-banner-edit-es5.min.js.gz',
+ '/media/com_cache/js/admin-cache-default-es5.js',
+ '/media/com_cache/js/admin-cache-default-es5.min.js',
+ '/media/com_cache/js/admin-cache-default-es5.min.js.gz',
+ '/media/com_categories/js/shared-categories-accordion-es5.js',
+ '/media/com_categories/js/shared-categories-accordion-es5.min.js',
+ '/media/com_categories/js/shared-categories-accordion-es5.min.js.gz',
+ '/media/com_config/js/config-default-es5.js',
+ '/media/com_config/js/config-default-es5.min.js',
+ '/media/com_config/js/config-default-es5.min.js.gz',
+ '/media/com_config/js/config-filters-es5.js',
+ '/media/com_config/js/config-filters-es5.min.js',
+ '/media/com_config/js/config-filters-es5.min.js.gz',
+ '/media/com_config/js/modules-default-es5.js',
+ '/media/com_config/js/modules-default-es5.min.js',
+ '/media/com_config/js/modules-default-es5.min.js.gz',
+ '/media/com_config/js/templates-default-es5.js',
+ '/media/com_config/js/templates-default-es5.min.js',
+ '/media/com_config/js/templates-default-es5.min.js.gz',
+ '/media/com_contact/js/admin-contacts-modal-es5.js',
+ '/media/com_contact/js/admin-contacts-modal-es5.min.js',
+ '/media/com_contact/js/admin-contacts-modal-es5.min.js.gz',
+ '/media/com_contact/js/contacts-list-es5.js',
+ '/media/com_contact/js/contacts-list-es5.min.js',
+ '/media/com_contact/js/contacts-list-es5.min.js.gz',
+ '/media/com_content/js/admin-article-pagebreak-es5.js',
+ '/media/com_content/js/admin-article-pagebreak-es5.min.js',
+ '/media/com_content/js/admin-article-pagebreak-es5.min.js.gz',
+ '/media/com_content/js/admin-article-readmore-es5.js',
+ '/media/com_content/js/admin-article-readmore-es5.min.js',
+ '/media/com_content/js/admin-article-readmore-es5.min.js.gz',
+ '/media/com_content/js/admin-articles-default-batch-footer-es5.js',
+ '/media/com_content/js/admin-articles-default-batch-footer-es5.min.js',
+ '/media/com_content/js/admin-articles-default-batch-footer-es5.min.js.gz',
+ '/media/com_content/js/admin-articles-default-stage-footer-es5.js',
+ '/media/com_content/js/admin-articles-default-stage-footer-es5.min.js',
+ '/media/com_content/js/admin-articles-default-stage-footer-es5.min.js.gz',
+ '/media/com_content/js/admin-articles-modal-es5.js',
+ '/media/com_content/js/admin-articles-modal-es5.min.js',
+ '/media/com_content/js/admin-articles-modal-es5.min.js.gz',
+ '/media/com_content/js/articles-list-es5.js',
+ '/media/com_content/js/articles-list-es5.min.js',
+ '/media/com_content/js/articles-list-es5.min.js.gz',
+ '/media/com_content/js/articles-status-es5.js',
+ '/media/com_content/js/articles-status-es5.min.js',
+ '/media/com_content/js/articles-status-es5.min.js.gz',
+ '/media/com_content/js/form-edit-es5.js',
+ '/media/com_content/js/form-edit-es5.min.js',
+ '/media/com_content/js/form-edit-es5.min.js.gz',
+ '/media/com_contenthistory/js/admin-compare-compare-es5.js',
+ '/media/com_contenthistory/js/admin-compare-compare-es5.min.js',
+ '/media/com_contenthistory/js/admin-compare-compare-es5.min.js.gz',
+ '/media/com_contenthistory/js/admin-history-modal-es5.js',
+ '/media/com_contenthistory/js/admin-history-modal-es5.min.js',
+ '/media/com_contenthistory/js/admin-history-modal-es5.min.js.gz',
+ '/media/com_contenthistory/js/admin-history-versions-es5.js',
+ '/media/com_contenthistory/js/admin-history-versions-es5.min.js',
+ '/media/com_contenthistory/js/admin-history-versions-es5.min.js.gz',
+ '/media/com_cpanel/js/admin-add_module-es5.js',
+ '/media/com_cpanel/js/admin-add_module-es5.min.js',
+ '/media/com_cpanel/js/admin-add_module-es5.min.js.gz',
+ '/media/com_cpanel/js/admin-cpanel-default-es5.js',
+ '/media/com_cpanel/js/admin-cpanel-default-es5.min.js',
+ '/media/com_cpanel/js/admin-cpanel-default-es5.min.js.gz',
+ '/media/com_cpanel/js/admin-system-loader-es5.js',
+ '/media/com_cpanel/js/admin-system-loader-es5.min.js',
+ '/media/com_cpanel/js/admin-system-loader-es5.min.js.gz',
+ '/media/com_fields/js/admin-field-changecontext-es5.js',
+ '/media/com_fields/js/admin-field-changecontext-es5.min.js',
+ '/media/com_fields/js/admin-field-changecontext-es5.min.js.gz',
+ '/media/com_fields/js/admin-field-edit-es5.js',
+ '/media/com_fields/js/admin-field-edit-es5.min.js',
+ '/media/com_fields/js/admin-field-edit-es5.min.js.gz',
+ '/media/com_fields/js/admin-field-typehaschanged-es5.js',
+ '/media/com_fields/js/admin-field-typehaschanged-es5.min.js',
+ '/media/com_fields/js/admin-field-typehaschanged-es5.min.js.gz',
+ '/media/com_fields/js/admin-fields-default-batch-es5.js',
+ '/media/com_fields/js/admin-fields-default-batch-es5.min.js',
+ '/media/com_fields/js/admin-fields-default-batch-es5.min.js.gz',
+ '/media/com_fields/js/admin-fields-modal-es5.js',
+ '/media/com_fields/js/admin-fields-modal-es5.min.js',
+ '/media/com_fields/js/admin-fields-modal-es5.min.js.gz',
+ '/media/com_finder/js/debug-es5.js',
+ '/media/com_finder/js/debug-es5.min.js',
+ '/media/com_finder/js/debug-es5.min.js.gz',
+ '/media/com_finder/js/filters-es5.js',
+ '/media/com_finder/js/filters-es5.min.js',
+ '/media/com_finder/js/filters-es5.min.js.gz',
+ '/media/com_finder/js/finder-edit-es5.js',
+ '/media/com_finder/js/finder-edit-es5.min.js',
+ '/media/com_finder/js/finder-edit-es5.min.js.gz',
+ '/media/com_finder/js/finder-es5.js',
+ '/media/com_finder/js/finder-es5.min.js',
+ '/media/com_finder/js/finder-es5.min.js.gz',
+ '/media/com_finder/js/indexer-es5.js',
+ '/media/com_finder/js/indexer-es5.min.js',
+ '/media/com_finder/js/indexer-es5.min.js.gz',
+ '/media/com_finder/js/maps-es5.js',
+ '/media/com_finder/js/maps-es5.min.js',
+ '/media/com_finder/js/maps-es5.min.js.gz',
+ '/media/com_installer/js/changelog-es5.js',
+ '/media/com_installer/js/changelog-es5.min.js',
+ '/media/com_installer/js/changelog-es5.min.js.gz',
+ '/media/com_installer/js/installer-es5.js',
+ '/media/com_installer/js/installer-es5.min.js',
+ '/media/com_installer/js/installer-es5.min.js.gz',
+ '/media/com_joomlaupdate/js/admin-update-default-es5.js',
+ '/media/com_joomlaupdate/js/admin-update-default-es5.min.js',
+ '/media/com_joomlaupdate/js/admin-update-default-es5.min.js.gz',
+ '/media/com_joomlaupdate/js/default-es5.js',
+ '/media/com_joomlaupdate/js/default-es5.min.js',
+ '/media/com_joomlaupdate/js/default-es5.min.js.gz',
+ '/media/com_languages/js/admin-language-edit-change-flag-es5.js',
+ '/media/com_languages/js/admin-language-edit-change-flag-es5.min.js',
+ '/media/com_languages/js/admin-language-edit-change-flag-es5.min.js.gz',
+ '/media/com_languages/js/admin-override-edit-refresh-searchstring-es5.js',
+ '/media/com_languages/js/admin-override-edit-refresh-searchstring-es5.min.js',
+ '/media/com_languages/js/admin-override-edit-refresh-searchstring-es5.min.js.gz',
+ '/media/com_languages/js/overrider-es5.js',
+ '/media/com_languages/js/overrider-es5.min.js',
+ '/media/com_languages/js/overrider-es5.min.js.gz',
+ '/media/com_mails/js/admin-email-template-edit-es5.js',
+ '/media/com_mails/js/admin-email-template-edit-es5.min.js',
+ '/media/com_mails/js/admin-email-template-edit-es5.min.js.gz',
+ '/media/com_media/js/edit-images-es5.js',
+ '/media/com_media/js/edit-images-es5.min.js',
+ '/media/com_media/js/edit-images-es5.min.js.gz',
+ '/media/com_media/js/media-manager-es5.js',
+ '/media/com_media/js/media-manager-es5.min.js',
+ '/media/com_media/js/media-manager-es5.min.js.gz',
+ '/media/com_menus/js/admin-item-edit-es5.js',
+ '/media/com_menus/js/admin-item-edit-es5.min.js',
+ '/media/com_menus/js/admin-item-edit-es5.min.js.gz',
+ '/media/com_menus/js/admin-item-edit_container-es5.js',
+ '/media/com_menus/js/admin-item-edit_container-es5.min.js',
+ '/media/com_menus/js/admin-item-edit_container-es5.min.js.gz',
+ '/media/com_menus/js/admin-item-edit_modules-es5.js',
+ '/media/com_menus/js/admin-item-edit_modules-es5.min.js',
+ '/media/com_menus/js/admin-item-edit_modules-es5.min.js.gz',
+ '/media/com_menus/js/admin-item-modal-es5.js',
+ '/media/com_menus/js/admin-item-modal-es5.min.js',
+ '/media/com_menus/js/admin-item-modal-es5.min.js.gz',
+ '/media/com_menus/js/admin-items-modal-es5.js',
+ '/media/com_menus/js/admin-items-modal-es5.min.js',
+ '/media/com_menus/js/admin-items-modal-es5.min.js.gz',
+ '/media/com_menus/js/admin-menus-default-es5.js',
+ '/media/com_menus/js/admin-menus-default-es5.min.js',
+ '/media/com_menus/js/admin-menus-default-es5.min.js.gz',
+ '/media/com_menus/js/default-batch-body-es5.js',
+ '/media/com_menus/js/default-batch-body-es5.min.js',
+ '/media/com_menus/js/default-batch-body-es5.min.js.gz',
+ '/media/com_modules/js/admin-module-edit-es5.js',
+ '/media/com_modules/js/admin-module-edit-es5.min.js',
+ '/media/com_modules/js/admin-module-edit-es5.min.js.gz',
+ '/media/com_modules/js/admin-module-edit_assignment-es5.js',
+ '/media/com_modules/js/admin-module-edit_assignment-es5.min.js',
+ '/media/com_modules/js/admin-module-edit_assignment-es5.min.js.gz',
+ '/media/com_modules/js/admin-module-search-es5.js',
+ '/media/com_modules/js/admin-module-search-es5.min.js',
+ '/media/com_modules/js/admin-module-search-es5.min.js.gz',
+ '/media/com_modules/js/admin-modules-modal-es5.js',
+ '/media/com_modules/js/admin-modules-modal-es5.min.js',
+ '/media/com_modules/js/admin-modules-modal-es5.min.js.gz',
+ '/media/com_modules/js/admin-select-modal-es5.js',
+ '/media/com_modules/js/admin-select-modal-es5.min.js',
+ '/media/com_modules/js/admin-select-modal-es5.min.js.gz',
+ '/media/com_scheduler/js/admin-view-run-test-task-es5.js',
+ '/media/com_scheduler/js/admin-view-run-test-task-es5.min.js',
+ '/media/com_scheduler/js/admin-view-run-test-task-es5.min.js.gz',
+ '/media/com_scheduler/js/admin-view-select-task-search-es5.js',
+ '/media/com_scheduler/js/admin-view-select-task-search-es5.min.js',
+ '/media/com_scheduler/js/admin-view-select-task-search-es5.min.js.gz',
+ '/media/com_scheduler/js/scheduler-config-es5.js',
+ '/media/com_scheduler/js/scheduler-config-es5.min.js',
+ '/media/com_scheduler/js/scheduler-config-es5.min.js.gz',
+ '/media/com_tags/js/tag-default-es5.js',
+ '/media/com_tags/js/tag-default-es5.min.js',
+ '/media/com_tags/js/tag-default-es5.min.js.gz',
+ '/media/com_tags/js/tag-list-es5.js',
+ '/media/com_tags/js/tag-list-es5.min.js',
+ '/media/com_tags/js/tag-list-es5.min.js.gz',
+ '/media/com_tags/js/tags-default-es5.js',
+ '/media/com_tags/js/tags-default-es5.min.js',
+ '/media/com_tags/js/tags-default-es5.min.js.gz',
+ '/media/com_templates/js/admin-template-compare-es5.js',
+ '/media/com_templates/js/admin-template-compare-es5.min.js',
+ '/media/com_templates/js/admin-template-compare-es5.min.js.gz',
+ '/media/com_templates/js/admin-template-toggle-assignment-es5.js',
+ '/media/com_templates/js/admin-template-toggle-assignment-es5.min.js',
+ '/media/com_templates/js/admin-template-toggle-assignment-es5.min.js.gz',
+ '/media/com_templates/js/admin-template-toggle-switch-es5.js',
+ '/media/com_templates/js/admin-template-toggle-switch-es5.min.js',
+ '/media/com_templates/js/admin-template-toggle-switch-es5.min.js.gz',
+ '/media/com_templates/js/admin-templates-default-es5.js',
+ '/media/com_templates/js/admin-templates-default-es5.min.js',
+ '/media/com_templates/js/admin-templates-default-es5.min.js.gz',
+ '/media/com_users/js/admin-users-groups-es5.js',
+ '/media/com_users/js/admin-users-groups-es5.min.js',
+ '/media/com_users/js/admin-users-groups-es5.min.js.gz',
+ '/media/com_users/js/admin-users-mail-es5.js',
+ '/media/com_users/js/admin-users-mail-es5.min.js',
+ '/media/com_users/js/admin-users-mail-es5.min.js.gz',
+ '/media/com_users/js/two-factor-focus-es5.js',
+ '/media/com_users/js/two-factor-focus-es5.min.js',
+ '/media/com_users/js/two-factor-focus-es5.min.js.gz',
+ '/media/com_users/js/two-factor-list-es5.js',
+ '/media/com_users/js/two-factor-list-es5.min.js',
+ '/media/com_users/js/two-factor-list-es5.min.js.gz',
+ '/media/com_workflow/js/admin-items-workflow-buttons-es5.js',
+ '/media/com_workflow/js/admin-items-workflow-buttons-es5.min.js',
+ '/media/com_workflow/js/admin-items-workflow-buttons-es5.min.js.gz',
+ '/media/com_wrapper/js/iframe-height-es5.js',
+ '/media/com_wrapper/js/iframe-height-es5.min.js',
+ '/media/com_wrapper/js/iframe-height-es5.min.js.gz',
+ '/media/layouts/js/joomla/form/field/category-change-es5.js',
+ '/media/layouts/js/joomla/form/field/category-change-es5.min.js',
+ '/media/layouts/js/joomla/form/field/category-change-es5.min.js.gz',
+ '/media/layouts/js/joomla/html/batch/batch-copymove-es5.js',
+ '/media/layouts/js/joomla/html/batch/batch-copymove-es5.min.js',
+ '/media/layouts/js/joomla/html/batch/batch-copymove-es5.min.js.gz',
+ '/media/mod_login/js/admin-login-es5.js',
+ '/media/mod_login/js/admin-login-es5.min.js',
+ '/media/mod_login/js/admin-login-es5.min.js.gz',
+ '/media/mod_menu/js/admin-menu-es5.js',
+ '/media/mod_menu/js/admin-menu-es5.min.js',
+ '/media/mod_menu/js/admin-menu-es5.min.js.gz',
+ '/media/mod_menu/js/menu-es5.js',
+ '/media/mod_menu/js/menu-es5.min.js',
+ '/media/mod_menu/js/menu-es5.min.js.gz',
+ '/media/mod_multilangstatus/js/admin-multilangstatus-es5.js',
+ '/media/mod_multilangstatus/js/admin-multilangstatus-es5.min.js',
+ '/media/mod_multilangstatus/js/admin-multilangstatus-es5.min.js.gz',
+ '/media/mod_quickicon/js/quickicon-es5.js',
+ '/media/mod_quickicon/js/quickicon-es5.min.js',
+ '/media/mod_quickicon/js/quickicon-es5.min.js.gz',
+ '/media/mod_sampledata/js/sampledata-process-es5.js',
+ '/media/mod_sampledata/js/sampledata-process-es5.min.js',
+ '/media/mod_sampledata/js/sampledata-process-es5.min.js.gz',
+ '/media/plg_captcha_recaptcha/js/recaptcha-es5.js',
+ '/media/plg_captcha_recaptcha/js/recaptcha-es5.min.js',
+ '/media/plg_captcha_recaptcha/js/recaptcha-es5.min.js.gz',
+ '/media/plg_captcha_recaptcha_invisible/js/recaptcha-es5.js',
+ '/media/plg_captcha_recaptcha_invisible/js/recaptcha-es5.min.js',
+ '/media/plg_captcha_recaptcha_invisible/js/recaptcha-es5.min.js.gz',
+ '/media/plg_editors_codemirror/js/joomla-editor-codemirror-es5.js',
+ '/media/plg_editors_codemirror/js/joomla-editor-codemirror-es5.min.js',
+ '/media/plg_editors_codemirror/js/joomla-editor-codemirror-es5.min.js.gz',
+ '/media/plg_editors_none/js/joomla-editor-none-es5.js',
+ '/media/plg_editors_none/js/joomla-editor-none-es5.min.js',
+ '/media/plg_editors_none/js/joomla-editor-none-es5.min.js.gz',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/plugin-es5.js',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/plugin-es5.min.js',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/plugin-es5.min.js.gz',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source-es5.js',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source-es5.min.js',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source-es5.min.js.gz',
+ '/media/plg_editors_tinymce/js/tinymce-builder-es5.js',
+ '/media/plg_editors_tinymce/js/tinymce-builder-es5.min.js',
+ '/media/plg_editors_tinymce/js/tinymce-builder-es5.min.js.gz',
+ '/media/plg_editors_tinymce/js/tinymce-es5.js',
+ '/media/plg_editors_tinymce/js/tinymce-es5.min.js',
+ '/media/plg_editors_tinymce/js/tinymce-es5.min.js.gz',
+ '/media/plg_installer_folderinstaller/js/folderinstaller-es5.js',
+ '/media/plg_installer_folderinstaller/js/folderinstaller-es5.min.js',
+ '/media/plg_installer_folderinstaller/js/folderinstaller-es5.min.js.gz',
+ '/media/plg_installer_packageinstaller/js/packageinstaller-es5.js',
+ '/media/plg_installer_packageinstaller/js/packageinstaller-es5.min.js',
+ '/media/plg_installer_packageinstaller/js/packageinstaller-es5.min.js.gz',
+ '/media/plg_installer_urlinstaller/js/urlinstaller-es5.js',
+ '/media/plg_installer_urlinstaller/js/urlinstaller-es5.min.js',
+ '/media/plg_installer_urlinstaller/js/urlinstaller-es5.min.js.gz',
+ '/media/plg_installer_webinstaller/js/client-es5.js',
+ '/media/plg_installer_webinstaller/js/client-es5.min.js',
+ '/media/plg_installer_webinstaller/js/client-es5.min.js.gz',
+ '/media/plg_media-action_crop/js/crop-es5.js',
+ '/media/plg_media-action_crop/js/crop-es5.min.js',
+ '/media/plg_media-action_crop/js/crop-es5.min.js.gz',
+ '/media/plg_media-action_resize/js/resize-es5.js',
+ '/media/plg_media-action_resize/js/resize-es5.min.js',
+ '/media/plg_media-action_resize/js/resize-es5.min.js.gz',
+ '/media/plg_media-action_rotate/js/rotate-es5.js',
+ '/media/plg_media-action_rotate/js/rotate-es5.min.js',
+ '/media/plg_media-action_rotate/js/rotate-es5.min.js.gz',
+ '/media/plg_multifactorauth_totp/js/setup-es5.js',
+ '/media/plg_multifactorauth_totp/js/setup-es5.min.js',
+ '/media/plg_multifactorauth_totp/js/setup-es5.min.js.gz',
+ '/media/plg_multifactorauth_webauthn/js/webauthn-es5.js',
+ '/media/plg_multifactorauth_webauthn/js/webauthn-es5.min.js',
+ '/media/plg_multifactorauth_webauthn/js/webauthn-es5.min.js.gz',
+ '/media/plg_quickicon_eos/js/snooze-es5.js',
+ '/media/plg_quickicon_eos/js/snooze-es5.min.js',
+ '/media/plg_quickicon_eos/js/snooze-es5.min.js.gz',
+ '/media/plg_quickicon_extensionupdate/js/extensionupdatecheck-es5.js',
+ '/media/plg_quickicon_extensionupdate/js/extensionupdatecheck-es5.min.js',
+ '/media/plg_quickicon_extensionupdate/js/extensionupdatecheck-es5.min.js.gz',
+ '/media/plg_quickicon_joomlaupdate/js/jupdatecheck-es5.js',
+ '/media/plg_quickicon_joomlaupdate/js/jupdatecheck-es5.min.js',
+ '/media/plg_quickicon_joomlaupdate/js/jupdatecheck-es5.min.js.gz',
+ '/media/plg_quickicon_overridecheck/js/overridecheck-es5.js',
+ '/media/plg_quickicon_overridecheck/js/overridecheck-es5.min.js',
+ '/media/plg_quickicon_overridecheck/js/overridecheck-es5.min.js.gz',
+ '/media/plg_quickicon_privacycheck/js/privacycheck-es5.js',
+ '/media/plg_quickicon_privacycheck/js/privacycheck-es5.min.js',
+ '/media/plg_quickicon_privacycheck/js/privacycheck-es5.min.js.gz',
+ '/media/plg_system_debug/js/debug-es5.js',
+ '/media/plg_system_debug/js/debug-es5.min.js',
+ '/media/plg_system_debug/js/debug-es5.min.js.gz',
+ '/media/plg_system_guidedtours/js/guidedtours-es5.js',
+ '/media/plg_system_guidedtours/js/guidedtours-es5.min.js',
+ '/media/plg_system_guidedtours/js/guidedtours-es5.min.js.gz',
+ '/media/plg_system_jooa11y/js/jooa11y-es5.js',
+ '/media/plg_system_jooa11y/js/jooa11y-es5.min.js',
+ '/media/plg_system_jooa11y/js/jooa11y-es5.min.js.gz',
+ '/media/plg_system_schedulerunner/js/run-schedule-es5.js',
+ '/media/plg_system_schedulerunner/js/run-schedule-es5.min.js',
+ '/media/plg_system_schedulerunner/js/run-schedule-es5.min.js.gz',
+ '/media/plg_system_shortcut/js/shortcut-es5.js',
+ '/media/plg_system_shortcut/js/shortcut-es5.min.js',
+ '/media/plg_system_shortcut/js/shortcut-es5.min.js.gz',
+ '/media/plg_system_stats/js/stats-es5.js',
+ '/media/plg_system_stats/js/stats-es5.min.js',
+ '/media/plg_system_stats/js/stats-es5.min.js.gz',
+ '/media/plg_system_stats/js/stats-message-es5.js',
+ '/media/plg_system_stats/js/stats-message-es5.min.js',
+ '/media/plg_system_stats/js/stats-message-es5.min.js.gz',
+ '/media/plg_system_webauthn/js/login-es5.js',
+ '/media/plg_system_webauthn/js/login-es5.min.js',
+ '/media/plg_system_webauthn/js/login-es5.min.js.gz',
+ '/media/plg_system_webauthn/js/management-es5.js',
+ '/media/plg_system_webauthn/js/management-es5.min.js',
+ '/media/plg_system_webauthn/js/management-es5.min.js.gz',
+ '/media/plg_user_token/js/token-es5.js',
+ '/media/plg_user_token/js/token-es5.min.js',
+ '/media/plg_user_token/js/token-es5.min.js.gz',
+ '/media/system/js/core-es5.js',
+ '/media/system/js/core-es5.min.js',
+ '/media/system/js/core-es5.min.js.gz',
+ '/media/system/js/draggable-es5.js',
+ '/media/system/js/draggable-es5.min.js',
+ '/media/system/js/draggable-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-color-slider-es5.js',
+ '/media/system/js/fields/joomla-field-color-slider-es5.min.js',
+ '/media/system/js/fields/joomla-field-color-slider-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-fancy-select-es5.js',
+ '/media/system/js/fields/joomla-field-fancy-select-es5.min.js',
+ '/media/system/js/fields/joomla-field-fancy-select-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-media-es5.js',
+ '/media/system/js/fields/joomla-field-media-es5.min.js',
+ '/media/system/js/fields/joomla-field-media-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-module-order-es5.js',
+ '/media/system/js/fields/joomla-field-module-order-es5.min.js',
+ '/media/system/js/fields/joomla-field-module-order-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-permissions-es5.js',
+ '/media/system/js/fields/joomla-field-permissions-es5.min.js',
+ '/media/system/js/fields/joomla-field-permissions-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-send-test-mail-es5.js',
+ '/media/system/js/fields/joomla-field-send-test-mail-es5.min.js',
+ '/media/system/js/fields/joomla-field-send-test-mail-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-simple-color-es5.js',
+ '/media/system/js/fields/joomla-field-simple-color-es5.min.js',
+ '/media/system/js/fields/joomla-field-simple-color-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-subform-es5.js',
+ '/media/system/js/fields/joomla-field-subform-es5.min.js',
+ '/media/system/js/fields/joomla-field-subform-es5.min.js.gz',
+ '/media/system/js/fields/joomla-field-user-es5.js',
+ '/media/system/js/fields/joomla-field-user-es5.min.js',
+ '/media/system/js/fields/joomla-field-user-es5.min.js.gz',
+ '/media/system/js/fields/joomla-media-select-es5.js',
+ '/media/system/js/fields/joomla-media-select-es5.min.js',
+ '/media/system/js/fields/joomla-media-select-es5.min.js.gz',
+ '/media/system/js/fields/passwordstrength-es5.js',
+ '/media/system/js/fields/passwordstrength-es5.min.js',
+ '/media/system/js/fields/passwordstrength-es5.min.js.gz',
+ '/media/system/js/fields/passwordview-es5.js',
+ '/media/system/js/fields/passwordview-es5.min.js',
+ '/media/system/js/fields/passwordview-es5.min.js.gz',
+ '/media/system/js/fields/select-colour-es5.js',
+ '/media/system/js/fields/select-colour-es5.min.js',
+ '/media/system/js/fields/select-colour-es5.min.js.gz',
+ '/media/system/js/fields/validate-es5.js',
+ '/media/system/js/fields/validate-es5.min.js',
+ '/media/system/js/fields/validate-es5.min.js.gz',
+ '/media/system/js/highlight-es5.js',
+ '/media/system/js/highlight-es5.min.js',
+ '/media/system/js/highlight-es5.min.js.gz',
+ '/media/system/js/inlinehelp-es5.js',
+ '/media/system/js/inlinehelp-es5.min.js',
+ '/media/system/js/inlinehelp-es5.min.js.gz',
+ '/media/system/js/joomla-core-loader-es5.js',
+ '/media/system/js/joomla-core-loader-es5.min.js',
+ '/media/system/js/joomla-core-loader-es5.min.js.gz',
+ '/media/system/js/joomla-hidden-mail-es5.js',
+ '/media/system/js/joomla-hidden-mail-es5.min.js',
+ '/media/system/js/joomla-hidden-mail-es5.min.js.gz',
+ '/media/system/js/joomla-toolbar-button-es5.js',
+ '/media/system/js/joomla-toolbar-button-es5.min.js',
+ '/media/system/js/joomla-toolbar-button-es5.min.js.gz',
+ '/media/system/js/keepalive-es5.js',
+ '/media/system/js/keepalive-es5.min.js',
+ '/media/system/js/keepalive-es5.min.js.gz',
+ '/media/system/js/list-view-es5.js',
+ '/media/system/js/list-view-es5.min.js',
+ '/media/system/js/list-view-es5.min.js.gz',
+ '/media/system/js/messages-es5.js',
+ '/media/system/js/messages-es5.min.js',
+ '/media/system/js/messages-es5.min.js.gz',
+ '/media/system/js/multiselect-es5.js',
+ '/media/system/js/multiselect-es5.min.js',
+ '/media/system/js/multiselect-es5.min.js.gz',
+ '/media/system/js/searchtools-es5.js',
+ '/media/system/js/searchtools-es5.min.js',
+ '/media/system/js/searchtools-es5.min.js.gz',
+ '/media/system/js/showon-es5.js',
+ '/media/system/js/showon-es5.min.js',
+ '/media/system/js/showon-es5.min.js.gz',
+ '/media/system/js/table-columns-es5.js',
+ '/media/system/js/table-columns-es5.min.js',
+ '/media/system/js/table-columns-es5.min.js.gz',
+ '/media/templates/administrator/atum/js/template-es5.js',
+ '/media/templates/administrator/atum/js/template-es5.min.js',
+ '/media/templates/administrator/atum/js/template-es5.min.js.gz',
+ '/media/templates/site/cassiopeia/js/mod_menu/menu-metismenu-es5.js',
+ '/media/templates/site/cassiopeia/js/mod_menu/menu-metismenu-es5.min.js',
+ '/media/templates/site/cassiopeia/js/mod_menu/menu-metismenu-es5.min.js.gz',
+ '/media/vendor/bootstrap/js/bootstrap-es5.js',
+ '/media/vendor/bootstrap/js/bootstrap-es5.min.js',
+ '/media/vendor/bootstrap/js/bootstrap-es5.min.js.gz',
+ '/media/vendor/joomla-custom-elements/js/joomla-alert-es5.js',
+ '/media/vendor/joomla-custom-elements/js/joomla-alert-es5.min.js',
+ '/media/vendor/joomla-custom-elements/js/joomla-alert-es5.min.js.gz',
+ '/media/vendor/joomla-custom-elements/js/joomla-tab-es5.js',
+ '/media/vendor/joomla-custom-elements/js/joomla-tab-es5.min.js',
+ '/media/vendor/joomla-custom-elements/js/joomla-tab-es5.min.js.gz',
+ '/media/vendor/mediaelement/js/mediaelement-flash-audio-ogg.swf',
+ '/media/vendor/mediaelement/js/mediaelement-flash-audio.swf',
+ '/media/vendor/mediaelement/js/mediaelement-flash-video-hls.swf',
+ '/media/vendor/mediaelement/js/mediaelement-flash-video-mdash.swf',
+ '/media/vendor/mediaelement/js/mediaelement-flash-video.swf',
+ '/plugins/editors-xtd/pagebreak/pagebreak.php',
+ // From 5.0.0-alpha2 to 5.0.0-alpha3
+ '/libraries/classmap.php',
+ '/libraries/extensions.classmap.php',
+ '/media/vendor/codemirror/addon/comment/comment.js',
+ '/media/vendor/codemirror/addon/comment/comment.min.js',
+ '/media/vendor/codemirror/addon/comment/comment.min.js.gz',
+ '/media/vendor/codemirror/addon/comment/continuecomment.js',
+ '/media/vendor/codemirror/addon/comment/continuecomment.min.js',
+ '/media/vendor/codemirror/addon/comment/continuecomment.min.js.gz',
+ '/media/vendor/codemirror/addon/dialog/dialog.css',
+ '/media/vendor/codemirror/addon/dialog/dialog.js',
+ '/media/vendor/codemirror/addon/dialog/dialog.min.js',
+ '/media/vendor/codemirror/addon/dialog/dialog.min.js.gz',
+ '/media/vendor/codemirror/addon/display/autorefresh.js',
+ '/media/vendor/codemirror/addon/display/autorefresh.min.js',
+ '/media/vendor/codemirror/addon/display/autorefresh.min.js.gz',
+ '/media/vendor/codemirror/addon/display/fullscreen.css',
+ '/media/vendor/codemirror/addon/display/fullscreen.js',
+ '/media/vendor/codemirror/addon/display/fullscreen.min.js',
+ '/media/vendor/codemirror/addon/display/fullscreen.min.js.gz',
+ '/media/vendor/codemirror/addon/display/panel.js',
+ '/media/vendor/codemirror/addon/display/panel.min.js',
+ '/media/vendor/codemirror/addon/display/panel.min.js.gz',
+ '/media/vendor/codemirror/addon/display/placeholder.js',
+ '/media/vendor/codemirror/addon/display/placeholder.min.js',
+ '/media/vendor/codemirror/addon/display/placeholder.min.js.gz',
+ '/media/vendor/codemirror/addon/display/rulers.js',
+ '/media/vendor/codemirror/addon/display/rulers.min.js',
+ '/media/vendor/codemirror/addon/display/rulers.min.js.gz',
+ '/media/vendor/codemirror/addon/edit/closebrackets.js',
+ '/media/vendor/codemirror/addon/edit/closebrackets.min.js',
+ '/media/vendor/codemirror/addon/edit/closebrackets.min.js.gz',
+ '/media/vendor/codemirror/addon/edit/closetag.js',
+ '/media/vendor/codemirror/addon/edit/closetag.min.js',
+ '/media/vendor/codemirror/addon/edit/closetag.min.js.gz',
+ '/media/vendor/codemirror/addon/edit/continuelist.js',
+ '/media/vendor/codemirror/addon/edit/continuelist.min.js',
+ '/media/vendor/codemirror/addon/edit/continuelist.min.js.gz',
+ '/media/vendor/codemirror/addon/edit/matchbrackets.js',
+ '/media/vendor/codemirror/addon/edit/matchbrackets.min.js',
+ '/media/vendor/codemirror/addon/edit/matchbrackets.min.js.gz',
+ '/media/vendor/codemirror/addon/edit/matchtags.js',
+ '/media/vendor/codemirror/addon/edit/matchtags.min.js',
+ '/media/vendor/codemirror/addon/edit/matchtags.min.js.gz',
+ '/media/vendor/codemirror/addon/edit/trailingspace.js',
+ '/media/vendor/codemirror/addon/edit/trailingspace.min.js',
+ '/media/vendor/codemirror/addon/edit/trailingspace.min.js.gz',
+ '/media/vendor/codemirror/addon/fold/brace-fold.js',
+ '/media/vendor/codemirror/addon/fold/brace-fold.min.js',
+ '/media/vendor/codemirror/addon/fold/brace-fold.min.js.gz',
+ '/media/vendor/codemirror/addon/fold/comment-fold.js',
+ '/media/vendor/codemirror/addon/fold/comment-fold.min.js',
+ '/media/vendor/codemirror/addon/fold/comment-fold.min.js.gz',
+ '/media/vendor/codemirror/addon/fold/foldcode.js',
+ '/media/vendor/codemirror/addon/fold/foldcode.min.js',
+ '/media/vendor/codemirror/addon/fold/foldcode.min.js.gz',
+ '/media/vendor/codemirror/addon/fold/foldgutter.css',
+ '/media/vendor/codemirror/addon/fold/foldgutter.js',
+ '/media/vendor/codemirror/addon/fold/foldgutter.min.js',
+ '/media/vendor/codemirror/addon/fold/foldgutter.min.js.gz',
+ '/media/vendor/codemirror/addon/fold/indent-fold.js',
+ '/media/vendor/codemirror/addon/fold/indent-fold.min.js',
+ '/media/vendor/codemirror/addon/fold/indent-fold.min.js.gz',
+ '/media/vendor/codemirror/addon/fold/markdown-fold.js',
+ '/media/vendor/codemirror/addon/fold/markdown-fold.min.js',
+ '/media/vendor/codemirror/addon/fold/markdown-fold.min.js.gz',
+ '/media/vendor/codemirror/addon/fold/xml-fold.js',
+ '/media/vendor/codemirror/addon/fold/xml-fold.min.js',
+ '/media/vendor/codemirror/addon/fold/xml-fold.min.js.gz',
+ '/media/vendor/codemirror/addon/hint/anyword-hint.js',
+ '/media/vendor/codemirror/addon/hint/anyword-hint.min.js',
+ '/media/vendor/codemirror/addon/hint/anyword-hint.min.js.gz',
+ '/media/vendor/codemirror/addon/hint/css-hint.js',
+ '/media/vendor/codemirror/addon/hint/css-hint.min.js',
+ '/media/vendor/codemirror/addon/hint/css-hint.min.js.gz',
+ '/media/vendor/codemirror/addon/hint/html-hint.js',
+ '/media/vendor/codemirror/addon/hint/html-hint.min.js',
+ '/media/vendor/codemirror/addon/hint/html-hint.min.js.gz',
+ '/media/vendor/codemirror/addon/hint/javascript-hint.js',
+ '/media/vendor/codemirror/addon/hint/javascript-hint.min.js',
+ '/media/vendor/codemirror/addon/hint/javascript-hint.min.js.gz',
+ '/media/vendor/codemirror/addon/hint/show-hint.css',
+ '/media/vendor/codemirror/addon/hint/show-hint.js',
+ '/media/vendor/codemirror/addon/hint/show-hint.min.js',
+ '/media/vendor/codemirror/addon/hint/show-hint.min.js.gz',
+ '/media/vendor/codemirror/addon/hint/sql-hint.js',
+ '/media/vendor/codemirror/addon/hint/sql-hint.min.js',
+ '/media/vendor/codemirror/addon/hint/sql-hint.min.js.gz',
+ '/media/vendor/codemirror/addon/hint/xml-hint.js',
+ '/media/vendor/codemirror/addon/hint/xml-hint.min.js',
+ '/media/vendor/codemirror/addon/hint/xml-hint.min.js.gz',
+ '/media/vendor/codemirror/addon/lint/coffeescript-lint.js',
+ '/media/vendor/codemirror/addon/lint/coffeescript-lint.min.js',
+ '/media/vendor/codemirror/addon/lint/coffeescript-lint.min.js.gz',
+ '/media/vendor/codemirror/addon/lint/css-lint.js',
+ '/media/vendor/codemirror/addon/lint/css-lint.min.js',
+ '/media/vendor/codemirror/addon/lint/css-lint.min.js.gz',
+ '/media/vendor/codemirror/addon/lint/html-lint.js',
+ '/media/vendor/codemirror/addon/lint/html-lint.min.js',
+ '/media/vendor/codemirror/addon/lint/html-lint.min.js.gz',
+ '/media/vendor/codemirror/addon/lint/javascript-lint.js',
+ '/media/vendor/codemirror/addon/lint/javascript-lint.min.js',
+ '/media/vendor/codemirror/addon/lint/javascript-lint.min.js.gz',
+ '/media/vendor/codemirror/addon/lint/json-lint.js',
+ '/media/vendor/codemirror/addon/lint/json-lint.min.js',
+ '/media/vendor/codemirror/addon/lint/json-lint.min.js.gz',
+ '/media/vendor/codemirror/addon/lint/lint.css',
+ '/media/vendor/codemirror/addon/lint/lint.js',
+ '/media/vendor/codemirror/addon/lint/lint.min.js',
+ '/media/vendor/codemirror/addon/lint/lint.min.js.gz',
+ '/media/vendor/codemirror/addon/lint/yaml-lint.js',
+ '/media/vendor/codemirror/addon/lint/yaml-lint.min.js',
+ '/media/vendor/codemirror/addon/lint/yaml-lint.min.js.gz',
+ '/media/vendor/codemirror/addon/merge/merge.css',
+ '/media/vendor/codemirror/addon/merge/merge.js',
+ '/media/vendor/codemirror/addon/merge/merge.min.js',
+ '/media/vendor/codemirror/addon/merge/merge.min.js.gz',
+ '/media/vendor/codemirror/addon/mode/loadmode.js',
+ '/media/vendor/codemirror/addon/mode/loadmode.min.js',
+ '/media/vendor/codemirror/addon/mode/loadmode.min.js.gz',
+ '/media/vendor/codemirror/addon/mode/multiplex.js',
+ '/media/vendor/codemirror/addon/mode/multiplex.min.js',
+ '/media/vendor/codemirror/addon/mode/multiplex.min.js.gz',
+ '/media/vendor/codemirror/addon/mode/multiplex_test.js',
+ '/media/vendor/codemirror/addon/mode/multiplex_test.min.js',
+ '/media/vendor/codemirror/addon/mode/multiplex_test.min.js.gz',
+ '/media/vendor/codemirror/addon/mode/overlay.js',
+ '/media/vendor/codemirror/addon/mode/overlay.min.js',
+ '/media/vendor/codemirror/addon/mode/overlay.min.js.gz',
+ '/media/vendor/codemirror/addon/mode/simple.js',
+ '/media/vendor/codemirror/addon/mode/simple.min.js',
+ '/media/vendor/codemirror/addon/mode/simple.min.js.gz',
+ '/media/vendor/codemirror/addon/runmode/colorize.js',
+ '/media/vendor/codemirror/addon/runmode/colorize.min.js',
+ '/media/vendor/codemirror/addon/runmode/colorize.min.js.gz',
+ '/media/vendor/codemirror/addon/runmode/runmode-standalone.js',
+ '/media/vendor/codemirror/addon/runmode/runmode-standalone.min.js',
+ '/media/vendor/codemirror/addon/runmode/runmode-standalone.min.js.gz',
+ '/media/vendor/codemirror/addon/runmode/runmode.js',
+ '/media/vendor/codemirror/addon/runmode/runmode.min.js',
+ '/media/vendor/codemirror/addon/runmode/runmode.min.js.gz',
+ '/media/vendor/codemirror/addon/runmode/runmode.node.js',
+ '/media/vendor/codemirror/addon/runmode/runmode.node.min.js',
+ '/media/vendor/codemirror/addon/runmode/runmode.node.min.js.gz',
+ '/media/vendor/codemirror/addon/scroll/annotatescrollbar.js',
+ '/media/vendor/codemirror/addon/scroll/annotatescrollbar.min.js',
+ '/media/vendor/codemirror/addon/scroll/annotatescrollbar.min.js.gz',
+ '/media/vendor/codemirror/addon/scroll/scrollpastend.js',
+ '/media/vendor/codemirror/addon/scroll/scrollpastend.min.js',
+ '/media/vendor/codemirror/addon/scroll/scrollpastend.min.js.gz',
+ '/media/vendor/codemirror/addon/scroll/simplescrollbars.css',
+ '/media/vendor/codemirror/addon/scroll/simplescrollbars.js',
+ '/media/vendor/codemirror/addon/scroll/simplescrollbars.min.js',
+ '/media/vendor/codemirror/addon/scroll/simplescrollbars.min.js.gz',
+ '/media/vendor/codemirror/addon/search/jump-to-line.js',
+ '/media/vendor/codemirror/addon/search/jump-to-line.min.js',
+ '/media/vendor/codemirror/addon/search/jump-to-line.min.js.gz',
+ '/media/vendor/codemirror/addon/search/match-highlighter.js',
+ '/media/vendor/codemirror/addon/search/match-highlighter.min.js',
+ '/media/vendor/codemirror/addon/search/match-highlighter.min.js.gz',
+ '/media/vendor/codemirror/addon/search/matchesonscrollbar.css',
+ '/media/vendor/codemirror/addon/search/matchesonscrollbar.js',
+ '/media/vendor/codemirror/addon/search/matchesonscrollbar.min.js',
+ '/media/vendor/codemirror/addon/search/matchesonscrollbar.min.js.gz',
+ '/media/vendor/codemirror/addon/search/search.js',
+ '/media/vendor/codemirror/addon/search/search.min.js',
+ '/media/vendor/codemirror/addon/search/search.min.js.gz',
+ '/media/vendor/codemirror/addon/search/searchcursor.js',
+ '/media/vendor/codemirror/addon/search/searchcursor.min.js',
+ '/media/vendor/codemirror/addon/search/searchcursor.min.js.gz',
+ '/media/vendor/codemirror/addon/selection/active-line.js',
+ '/media/vendor/codemirror/addon/selection/active-line.min.js',
+ '/media/vendor/codemirror/addon/selection/active-line.min.js.gz',
+ '/media/vendor/codemirror/addon/selection/mark-selection.js',
+ '/media/vendor/codemirror/addon/selection/mark-selection.min.js',
+ '/media/vendor/codemirror/addon/selection/mark-selection.min.js.gz',
+ '/media/vendor/codemirror/addon/selection/selection-pointer.js',
+ '/media/vendor/codemirror/addon/selection/selection-pointer.min.js',
+ '/media/vendor/codemirror/addon/selection/selection-pointer.min.js.gz',
+ '/media/vendor/codemirror/addon/tern/tern.css',
+ '/media/vendor/codemirror/addon/tern/tern.js',
+ '/media/vendor/codemirror/addon/tern/tern.min.js',
+ '/media/vendor/codemirror/addon/tern/tern.min.js.gz',
+ '/media/vendor/codemirror/addon/tern/worker.js',
+ '/media/vendor/codemirror/addon/tern/worker.min.js',
+ '/media/vendor/codemirror/addon/tern/worker.min.js.gz',
+ '/media/vendor/codemirror/addon/wrap/hardwrap.js',
+ '/media/vendor/codemirror/addon/wrap/hardwrap.min.js',
+ '/media/vendor/codemirror/addon/wrap/hardwrap.min.js.gz',
+ '/media/vendor/codemirror/keymap/emacs.js',
+ '/media/vendor/codemirror/keymap/emacs.min.js',
+ '/media/vendor/codemirror/keymap/emacs.min.js.gz',
+ '/media/vendor/codemirror/keymap/sublime.js',
+ '/media/vendor/codemirror/keymap/sublime.min.js',
+ '/media/vendor/codemirror/keymap/sublime.min.js.gz',
+ '/media/vendor/codemirror/keymap/vim.js',
+ '/media/vendor/codemirror/keymap/vim.min.js',
+ '/media/vendor/codemirror/keymap/vim.min.js.gz',
+ '/media/vendor/codemirror/lib/addons.css',
+ '/media/vendor/codemirror/lib/addons.js',
+ '/media/vendor/codemirror/lib/addons.min.js',
+ '/media/vendor/codemirror/lib/addons.min.js.gz',
+ '/media/vendor/codemirror/lib/codemirror.css',
+ '/media/vendor/codemirror/lib/codemirror.js',
+ '/media/vendor/codemirror/lib/codemirror.min.js',
+ '/media/vendor/codemirror/lib/codemirror.min.js.gz',
+ '/media/vendor/codemirror/mode/apl/apl.js',
+ '/media/vendor/codemirror/mode/apl/apl.min.js',
+ '/media/vendor/codemirror/mode/apl/apl.min.js.gz',
+ '/media/vendor/codemirror/mode/asciiarmor/asciiarmor.js',
+ '/media/vendor/codemirror/mode/asciiarmor/asciiarmor.min.js',
+ '/media/vendor/codemirror/mode/asciiarmor/asciiarmor.min.js.gz',
+ '/media/vendor/codemirror/mode/asn.1/asn.1.js',
+ '/media/vendor/codemirror/mode/asn.1/asn.1.min.js',
+ '/media/vendor/codemirror/mode/asn.1/asn.1.min.js.gz',
+ '/media/vendor/codemirror/mode/asterisk/asterisk.js',
+ '/media/vendor/codemirror/mode/asterisk/asterisk.min.js',
+ '/media/vendor/codemirror/mode/asterisk/asterisk.min.js.gz',
+ '/media/vendor/codemirror/mode/brainfuck/brainfuck.js',
+ '/media/vendor/codemirror/mode/brainfuck/brainfuck.min.js',
+ '/media/vendor/codemirror/mode/brainfuck/brainfuck.min.js.gz',
+ '/media/vendor/codemirror/mode/clike/clike.js',
+ '/media/vendor/codemirror/mode/clike/clike.min.js',
+ '/media/vendor/codemirror/mode/clike/clike.min.js.gz',
+ '/media/vendor/codemirror/mode/clojure/clojure.js',
+ '/media/vendor/codemirror/mode/clojure/clojure.min.js',
+ '/media/vendor/codemirror/mode/clojure/clojure.min.js.gz',
+ '/media/vendor/codemirror/mode/cmake/cmake.js',
+ '/media/vendor/codemirror/mode/cmake/cmake.min.js',
+ '/media/vendor/codemirror/mode/cmake/cmake.min.js.gz',
+ '/media/vendor/codemirror/mode/cobol/cobol.js',
+ '/media/vendor/codemirror/mode/cobol/cobol.min.js',
+ '/media/vendor/codemirror/mode/cobol/cobol.min.js.gz',
+ '/media/vendor/codemirror/mode/coffeescript/coffeescript.js',
+ '/media/vendor/codemirror/mode/coffeescript/coffeescript.min.js',
+ '/media/vendor/codemirror/mode/coffeescript/coffeescript.min.js.gz',
+ '/media/vendor/codemirror/mode/commonlisp/commonlisp.js',
+ '/media/vendor/codemirror/mode/commonlisp/commonlisp.min.js',
+ '/media/vendor/codemirror/mode/commonlisp/commonlisp.min.js.gz',
+ '/media/vendor/codemirror/mode/crystal/crystal.js',
+ '/media/vendor/codemirror/mode/crystal/crystal.min.js',
+ '/media/vendor/codemirror/mode/crystal/crystal.min.js.gz',
+ '/media/vendor/codemirror/mode/css/css.js',
+ '/media/vendor/codemirror/mode/css/css.min.js',
+ '/media/vendor/codemirror/mode/css/css.min.js.gz',
+ '/media/vendor/codemirror/mode/cypher/cypher.js',
+ '/media/vendor/codemirror/mode/cypher/cypher.min.js',
+ '/media/vendor/codemirror/mode/cypher/cypher.min.js.gz',
+ '/media/vendor/codemirror/mode/d/d.js',
+ '/media/vendor/codemirror/mode/d/d.min.js',
+ '/media/vendor/codemirror/mode/d/d.min.js.gz',
+ '/media/vendor/codemirror/mode/dart/dart.js',
+ '/media/vendor/codemirror/mode/dart/dart.min.js',
+ '/media/vendor/codemirror/mode/dart/dart.min.js.gz',
+ '/media/vendor/codemirror/mode/diff/diff.js',
+ '/media/vendor/codemirror/mode/diff/diff.min.js',
+ '/media/vendor/codemirror/mode/diff/diff.min.js.gz',
+ '/media/vendor/codemirror/mode/django/django.js',
+ '/media/vendor/codemirror/mode/django/django.min.js',
+ '/media/vendor/codemirror/mode/django/django.min.js.gz',
+ '/media/vendor/codemirror/mode/dockerfile/dockerfile.js',
+ '/media/vendor/codemirror/mode/dockerfile/dockerfile.min.js',
+ '/media/vendor/codemirror/mode/dockerfile/dockerfile.min.js.gz',
+ '/media/vendor/codemirror/mode/dtd/dtd.js',
+ '/media/vendor/codemirror/mode/dtd/dtd.min.js',
+ '/media/vendor/codemirror/mode/dtd/dtd.min.js.gz',
+ '/media/vendor/codemirror/mode/dylan/dylan.js',
+ '/media/vendor/codemirror/mode/dylan/dylan.min.js',
+ '/media/vendor/codemirror/mode/dylan/dylan.min.js.gz',
+ '/media/vendor/codemirror/mode/ebnf/ebnf.js',
+ '/media/vendor/codemirror/mode/ebnf/ebnf.min.js',
+ '/media/vendor/codemirror/mode/ebnf/ebnf.min.js.gz',
+ '/media/vendor/codemirror/mode/ecl/ecl.js',
+ '/media/vendor/codemirror/mode/ecl/ecl.min.js',
+ '/media/vendor/codemirror/mode/ecl/ecl.min.js.gz',
+ '/media/vendor/codemirror/mode/eiffel/eiffel.js',
+ '/media/vendor/codemirror/mode/eiffel/eiffel.min.js',
+ '/media/vendor/codemirror/mode/eiffel/eiffel.min.js.gz',
+ '/media/vendor/codemirror/mode/elm/elm.js',
+ '/media/vendor/codemirror/mode/elm/elm.min.js',
+ '/media/vendor/codemirror/mode/elm/elm.min.js.gz',
+ '/media/vendor/codemirror/mode/erlang/erlang.js',
+ '/media/vendor/codemirror/mode/erlang/erlang.min.js',
+ '/media/vendor/codemirror/mode/erlang/erlang.min.js.gz',
+ '/media/vendor/codemirror/mode/factor/factor.js',
+ '/media/vendor/codemirror/mode/factor/factor.min.js',
+ '/media/vendor/codemirror/mode/factor/factor.min.js.gz',
+ '/media/vendor/codemirror/mode/fcl/fcl.js',
+ '/media/vendor/codemirror/mode/fcl/fcl.min.js',
+ '/media/vendor/codemirror/mode/fcl/fcl.min.js.gz',
+ '/media/vendor/codemirror/mode/forth/forth.js',
+ '/media/vendor/codemirror/mode/forth/forth.min.js',
+ '/media/vendor/codemirror/mode/forth/forth.min.js.gz',
+ '/media/vendor/codemirror/mode/fortran/fortran.js',
+ '/media/vendor/codemirror/mode/fortran/fortran.min.js',
+ '/media/vendor/codemirror/mode/fortran/fortran.min.js.gz',
+ '/media/vendor/codemirror/mode/gas/gas.js',
+ '/media/vendor/codemirror/mode/gas/gas.min.js',
+ '/media/vendor/codemirror/mode/gas/gas.min.js.gz',
+ '/media/vendor/codemirror/mode/gfm/gfm.js',
+ '/media/vendor/codemirror/mode/gfm/gfm.min.js',
+ '/media/vendor/codemirror/mode/gfm/gfm.min.js.gz',
+ '/media/vendor/codemirror/mode/gherkin/gherkin.js',
+ '/media/vendor/codemirror/mode/gherkin/gherkin.min.js',
+ '/media/vendor/codemirror/mode/gherkin/gherkin.min.js.gz',
+ '/media/vendor/codemirror/mode/go/go.js',
+ '/media/vendor/codemirror/mode/go/go.min.js',
+ '/media/vendor/codemirror/mode/go/go.min.js.gz',
+ '/media/vendor/codemirror/mode/groovy/groovy.js',
+ '/media/vendor/codemirror/mode/groovy/groovy.min.js',
+ '/media/vendor/codemirror/mode/groovy/groovy.min.js.gz',
+ '/media/vendor/codemirror/mode/haml/haml.js',
+ '/media/vendor/codemirror/mode/haml/haml.min.js',
+ '/media/vendor/codemirror/mode/haml/haml.min.js.gz',
+ '/media/vendor/codemirror/mode/handlebars/handlebars.js',
+ '/media/vendor/codemirror/mode/handlebars/handlebars.min.js',
+ '/media/vendor/codemirror/mode/handlebars/handlebars.min.js.gz',
+ '/media/vendor/codemirror/mode/haskell-literate/haskell-literate.js',
+ '/media/vendor/codemirror/mode/haskell-literate/haskell-literate.min.js',
+ '/media/vendor/codemirror/mode/haskell-literate/haskell-literate.min.js.gz',
+ '/media/vendor/codemirror/mode/haskell/haskell.js',
+ '/media/vendor/codemirror/mode/haskell/haskell.min.js',
+ '/media/vendor/codemirror/mode/haskell/haskell.min.js.gz',
+ '/media/vendor/codemirror/mode/haxe/haxe.js',
+ '/media/vendor/codemirror/mode/haxe/haxe.min.js',
+ '/media/vendor/codemirror/mode/haxe/haxe.min.js.gz',
+ '/media/vendor/codemirror/mode/htmlembedded/htmlembedded.js',
+ '/media/vendor/codemirror/mode/htmlembedded/htmlembedded.min.js',
+ '/media/vendor/codemirror/mode/htmlembedded/htmlembedded.min.js.gz',
+ '/media/vendor/codemirror/mode/htmlmixed/htmlmixed.js',
+ '/media/vendor/codemirror/mode/htmlmixed/htmlmixed.min.js',
+ '/media/vendor/codemirror/mode/htmlmixed/htmlmixed.min.js.gz',
+ '/media/vendor/codemirror/mode/http/http.js',
+ '/media/vendor/codemirror/mode/http/http.min.js',
+ '/media/vendor/codemirror/mode/http/http.min.js.gz',
+ '/media/vendor/codemirror/mode/idl/idl.js',
+ '/media/vendor/codemirror/mode/idl/idl.min.js',
+ '/media/vendor/codemirror/mode/idl/idl.min.js.gz',
+ '/media/vendor/codemirror/mode/javascript/javascript.js',
+ '/media/vendor/codemirror/mode/javascript/javascript.min.js',
+ '/media/vendor/codemirror/mode/javascript/javascript.min.js.gz',
+ '/media/vendor/codemirror/mode/jinja2/jinja2.js',
+ '/media/vendor/codemirror/mode/jinja2/jinja2.min.js',
+ '/media/vendor/codemirror/mode/jinja2/jinja2.min.js.gz',
+ '/media/vendor/codemirror/mode/jsx/jsx.js',
+ '/media/vendor/codemirror/mode/jsx/jsx.min.js',
+ '/media/vendor/codemirror/mode/jsx/jsx.min.js.gz',
+ '/media/vendor/codemirror/mode/julia/julia.js',
+ '/media/vendor/codemirror/mode/julia/julia.min.js',
+ '/media/vendor/codemirror/mode/julia/julia.min.js.gz',
+ '/media/vendor/codemirror/mode/livescript/livescript.js',
+ '/media/vendor/codemirror/mode/livescript/livescript.min.js',
+ '/media/vendor/codemirror/mode/livescript/livescript.min.js.gz',
+ '/media/vendor/codemirror/mode/lua/lua.js',
+ '/media/vendor/codemirror/mode/lua/lua.min.js',
+ '/media/vendor/codemirror/mode/lua/lua.min.js.gz',
+ '/media/vendor/codemirror/mode/markdown/markdown.js',
+ '/media/vendor/codemirror/mode/markdown/markdown.min.js',
+ '/media/vendor/codemirror/mode/markdown/markdown.min.js.gz',
+ '/media/vendor/codemirror/mode/mathematica/mathematica.js',
+ '/media/vendor/codemirror/mode/mathematica/mathematica.min.js',
+ '/media/vendor/codemirror/mode/mathematica/mathematica.min.js.gz',
+ '/media/vendor/codemirror/mode/mbox/mbox.js',
+ '/media/vendor/codemirror/mode/mbox/mbox.min.js',
+ '/media/vendor/codemirror/mode/mbox/mbox.min.js.gz',
+ '/media/vendor/codemirror/mode/meta.js',
+ '/media/vendor/codemirror/mode/meta.min.js',
+ '/media/vendor/codemirror/mode/meta.min.js.gz',
+ '/media/vendor/codemirror/mode/mirc/mirc.js',
+ '/media/vendor/codemirror/mode/mirc/mirc.min.js',
+ '/media/vendor/codemirror/mode/mirc/mirc.min.js.gz',
+ '/media/vendor/codemirror/mode/mllike/mllike.js',
+ '/media/vendor/codemirror/mode/mllike/mllike.min.js',
+ '/media/vendor/codemirror/mode/mllike/mllike.min.js.gz',
+ '/media/vendor/codemirror/mode/modelica/modelica.js',
+ '/media/vendor/codemirror/mode/modelica/modelica.min.js',
+ '/media/vendor/codemirror/mode/modelica/modelica.min.js.gz',
+ '/media/vendor/codemirror/mode/mscgen/mscgen.js',
+ '/media/vendor/codemirror/mode/mscgen/mscgen.min.js',
+ '/media/vendor/codemirror/mode/mscgen/mscgen.min.js.gz',
+ '/media/vendor/codemirror/mode/mumps/mumps.js',
+ '/media/vendor/codemirror/mode/mumps/mumps.min.js',
+ '/media/vendor/codemirror/mode/mumps/mumps.min.js.gz',
+ '/media/vendor/codemirror/mode/nginx/nginx.js',
+ '/media/vendor/codemirror/mode/nginx/nginx.min.js',
+ '/media/vendor/codemirror/mode/nginx/nginx.min.js.gz',
+ '/media/vendor/codemirror/mode/nsis/nsis.js',
+ '/media/vendor/codemirror/mode/nsis/nsis.min.js',
+ '/media/vendor/codemirror/mode/nsis/nsis.min.js.gz',
+ '/media/vendor/codemirror/mode/ntriples/ntriples.js',
+ '/media/vendor/codemirror/mode/ntriples/ntriples.min.js',
+ '/media/vendor/codemirror/mode/ntriples/ntriples.min.js.gz',
+ '/media/vendor/codemirror/mode/octave/octave.js',
+ '/media/vendor/codemirror/mode/octave/octave.min.js',
+ '/media/vendor/codemirror/mode/octave/octave.min.js.gz',
+ '/media/vendor/codemirror/mode/oz/oz.js',
+ '/media/vendor/codemirror/mode/oz/oz.min.js',
+ '/media/vendor/codemirror/mode/oz/oz.min.js.gz',
+ '/media/vendor/codemirror/mode/pascal/pascal.js',
+ '/media/vendor/codemirror/mode/pascal/pascal.min.js',
+ '/media/vendor/codemirror/mode/pascal/pascal.min.js.gz',
+ '/media/vendor/codemirror/mode/pegjs/pegjs.js',
+ '/media/vendor/codemirror/mode/pegjs/pegjs.min.js',
+ '/media/vendor/codemirror/mode/pegjs/pegjs.min.js.gz',
+ '/media/vendor/codemirror/mode/perl/perl.js',
+ '/media/vendor/codemirror/mode/perl/perl.min.js',
+ '/media/vendor/codemirror/mode/perl/perl.min.js.gz',
+ '/media/vendor/codemirror/mode/php/php.js',
+ '/media/vendor/codemirror/mode/php/php.min.js',
+ '/media/vendor/codemirror/mode/php/php.min.js.gz',
+ '/media/vendor/codemirror/mode/pig/pig.js',
+ '/media/vendor/codemirror/mode/pig/pig.min.js',
+ '/media/vendor/codemirror/mode/pig/pig.min.js.gz',
+ '/media/vendor/codemirror/mode/powershell/powershell.js',
+ '/media/vendor/codemirror/mode/powershell/powershell.min.js',
+ '/media/vendor/codemirror/mode/powershell/powershell.min.js.gz',
+ '/media/vendor/codemirror/mode/properties/properties.js',
+ '/media/vendor/codemirror/mode/properties/properties.min.js',
+ '/media/vendor/codemirror/mode/properties/properties.min.js.gz',
+ '/media/vendor/codemirror/mode/protobuf/protobuf.js',
+ '/media/vendor/codemirror/mode/protobuf/protobuf.min.js',
+ '/media/vendor/codemirror/mode/protobuf/protobuf.min.js.gz',
+ '/media/vendor/codemirror/mode/pug/pug.js',
+ '/media/vendor/codemirror/mode/pug/pug.min.js',
+ '/media/vendor/codemirror/mode/pug/pug.min.js.gz',
+ '/media/vendor/codemirror/mode/puppet/puppet.js',
+ '/media/vendor/codemirror/mode/puppet/puppet.min.js',
+ '/media/vendor/codemirror/mode/puppet/puppet.min.js.gz',
+ '/media/vendor/codemirror/mode/python/python.js',
+ '/media/vendor/codemirror/mode/python/python.min.js',
+ '/media/vendor/codemirror/mode/python/python.min.js.gz',
+ '/media/vendor/codemirror/mode/q/q.js',
+ '/media/vendor/codemirror/mode/q/q.min.js',
+ '/media/vendor/codemirror/mode/q/q.min.js.gz',
+ '/media/vendor/codemirror/mode/r/r.js',
+ '/media/vendor/codemirror/mode/r/r.min.js',
+ '/media/vendor/codemirror/mode/r/r.min.js.gz',
+ '/media/vendor/codemirror/mode/rpm/changes/index.html',
+ '/media/vendor/codemirror/mode/rpm/rpm.js',
+ '/media/vendor/codemirror/mode/rpm/rpm.min.js',
+ '/media/vendor/codemirror/mode/rpm/rpm.min.js.gz',
+ '/media/vendor/codemirror/mode/rst/rst.js',
+ '/media/vendor/codemirror/mode/rst/rst.min.js',
+ '/media/vendor/codemirror/mode/rst/rst.min.js.gz',
+ '/media/vendor/codemirror/mode/ruby/ruby.js',
+ '/media/vendor/codemirror/mode/ruby/ruby.min.js',
+ '/media/vendor/codemirror/mode/ruby/ruby.min.js.gz',
+ '/media/vendor/codemirror/mode/rust/rust.js',
+ '/media/vendor/codemirror/mode/rust/rust.min.js',
+ '/media/vendor/codemirror/mode/rust/rust.min.js.gz',
+ '/media/vendor/codemirror/mode/sas/sas.js',
+ '/media/vendor/codemirror/mode/sas/sas.min.js',
+ '/media/vendor/codemirror/mode/sas/sas.min.js.gz',
+ '/media/vendor/codemirror/mode/sass/sass.js',
+ '/media/vendor/codemirror/mode/sass/sass.min.js',
+ '/media/vendor/codemirror/mode/sass/sass.min.js.gz',
+ '/media/vendor/codemirror/mode/scheme/scheme.js',
+ '/media/vendor/codemirror/mode/scheme/scheme.min.js',
+ '/media/vendor/codemirror/mode/scheme/scheme.min.js.gz',
+ '/media/vendor/codemirror/mode/shell/shell.js',
+ '/media/vendor/codemirror/mode/shell/shell.min.js',
+ '/media/vendor/codemirror/mode/shell/shell.min.js.gz',
+ '/media/vendor/codemirror/mode/sieve/sieve.js',
+ '/media/vendor/codemirror/mode/sieve/sieve.min.js',
+ '/media/vendor/codemirror/mode/sieve/sieve.min.js.gz',
+ '/media/vendor/codemirror/mode/slim/slim.js',
+ '/media/vendor/codemirror/mode/slim/slim.min.js',
+ '/media/vendor/codemirror/mode/slim/slim.min.js.gz',
+ '/media/vendor/codemirror/mode/smalltalk/smalltalk.js',
+ '/media/vendor/codemirror/mode/smalltalk/smalltalk.min.js',
+ '/media/vendor/codemirror/mode/smalltalk/smalltalk.min.js.gz',
+ '/media/vendor/codemirror/mode/smarty/smarty.js',
+ '/media/vendor/codemirror/mode/smarty/smarty.min.js',
+ '/media/vendor/codemirror/mode/smarty/smarty.min.js.gz',
+ '/media/vendor/codemirror/mode/solr/solr.js',
+ '/media/vendor/codemirror/mode/solr/solr.min.js',
+ '/media/vendor/codemirror/mode/solr/solr.min.js.gz',
+ '/media/vendor/codemirror/mode/soy/soy.js',
+ '/media/vendor/codemirror/mode/soy/soy.min.js',
+ '/media/vendor/codemirror/mode/soy/soy.min.js.gz',
+ '/media/vendor/codemirror/mode/sparql/sparql.js',
+ '/media/vendor/codemirror/mode/sparql/sparql.min.js',
+ '/media/vendor/codemirror/mode/sparql/sparql.min.js.gz',
+ '/media/vendor/codemirror/mode/spreadsheet/spreadsheet.js',
+ '/media/vendor/codemirror/mode/spreadsheet/spreadsheet.min.js',
+ '/media/vendor/codemirror/mode/spreadsheet/spreadsheet.min.js.gz',
+ '/media/vendor/codemirror/mode/sql/sql.js',
+ '/media/vendor/codemirror/mode/sql/sql.min.js',
+ '/media/vendor/codemirror/mode/sql/sql.min.js.gz',
+ '/media/vendor/codemirror/mode/stex/stex.js',
+ '/media/vendor/codemirror/mode/stex/stex.min.js',
+ '/media/vendor/codemirror/mode/stex/stex.min.js.gz',
+ '/media/vendor/codemirror/mode/stylus/stylus.js',
+ '/media/vendor/codemirror/mode/stylus/stylus.min.js',
+ '/media/vendor/codemirror/mode/stylus/stylus.min.js.gz',
+ '/media/vendor/codemirror/mode/swift/swift.js',
+ '/media/vendor/codemirror/mode/swift/swift.min.js',
+ '/media/vendor/codemirror/mode/swift/swift.min.js.gz',
+ '/media/vendor/codemirror/mode/tcl/tcl.js',
+ '/media/vendor/codemirror/mode/tcl/tcl.min.js',
+ '/media/vendor/codemirror/mode/tcl/tcl.min.js.gz',
+ '/media/vendor/codemirror/mode/textile/textile.js',
+ '/media/vendor/codemirror/mode/textile/textile.min.js',
+ '/media/vendor/codemirror/mode/textile/textile.min.js.gz',
+ '/media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.css',
+ '/media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.js',
+ '/media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.min.js',
+ '/media/vendor/codemirror/mode/tiddlywiki/tiddlywiki.min.js.gz',
+ '/media/vendor/codemirror/mode/tiki/tiki.css',
+ '/media/vendor/codemirror/mode/tiki/tiki.js',
+ '/media/vendor/codemirror/mode/tiki/tiki.min.js',
+ '/media/vendor/codemirror/mode/tiki/tiki.min.js.gz',
+ '/media/vendor/codemirror/mode/toml/toml.js',
+ '/media/vendor/codemirror/mode/toml/toml.min.js',
+ '/media/vendor/codemirror/mode/toml/toml.min.js.gz',
+ '/media/vendor/codemirror/mode/tornado/tornado.js',
+ '/media/vendor/codemirror/mode/tornado/tornado.min.js',
+ '/media/vendor/codemirror/mode/tornado/tornado.min.js.gz',
+ '/media/vendor/codemirror/mode/troff/troff.js',
+ '/media/vendor/codemirror/mode/troff/troff.min.js',
+ '/media/vendor/codemirror/mode/troff/troff.min.js.gz',
+ '/media/vendor/codemirror/mode/ttcn-cfg/ttcn-cfg.js',
+ '/media/vendor/codemirror/mode/ttcn-cfg/ttcn-cfg.min.js',
+ '/media/vendor/codemirror/mode/ttcn-cfg/ttcn-cfg.min.js.gz',
+ '/media/vendor/codemirror/mode/ttcn/ttcn.js',
+ '/media/vendor/codemirror/mode/ttcn/ttcn.min.js',
+ '/media/vendor/codemirror/mode/ttcn/ttcn.min.js.gz',
+ '/media/vendor/codemirror/mode/turtle/turtle.js',
+ '/media/vendor/codemirror/mode/turtle/turtle.min.js',
+ '/media/vendor/codemirror/mode/turtle/turtle.min.js.gz',
+ '/media/vendor/codemirror/mode/twig/twig.js',
+ '/media/vendor/codemirror/mode/twig/twig.min.js',
+ '/media/vendor/codemirror/mode/twig/twig.min.js.gz',
+ '/media/vendor/codemirror/mode/vb/vb.js',
+ '/media/vendor/codemirror/mode/vb/vb.min.js',
+ '/media/vendor/codemirror/mode/vb/vb.min.js.gz',
+ '/media/vendor/codemirror/mode/vbscript/vbscript.js',
+ '/media/vendor/codemirror/mode/vbscript/vbscript.min.js',
+ '/media/vendor/codemirror/mode/vbscript/vbscript.min.js.gz',
+ '/media/vendor/codemirror/mode/velocity/velocity.js',
+ '/media/vendor/codemirror/mode/velocity/velocity.min.js',
+ '/media/vendor/codemirror/mode/velocity/velocity.min.js.gz',
+ '/media/vendor/codemirror/mode/verilog/verilog.js',
+ '/media/vendor/codemirror/mode/verilog/verilog.min.js',
+ '/media/vendor/codemirror/mode/verilog/verilog.min.js.gz',
+ '/media/vendor/codemirror/mode/vhdl/vhdl.js',
+ '/media/vendor/codemirror/mode/vhdl/vhdl.min.js',
+ '/media/vendor/codemirror/mode/vhdl/vhdl.min.js.gz',
+ '/media/vendor/codemirror/mode/vue/vue.js',
+ '/media/vendor/codemirror/mode/vue/vue.min.js',
+ '/media/vendor/codemirror/mode/vue/vue.min.js.gz',
+ '/media/vendor/codemirror/mode/wast/wast.js',
+ '/media/vendor/codemirror/mode/wast/wast.min.js',
+ '/media/vendor/codemirror/mode/wast/wast.min.js.gz',
+ '/media/vendor/codemirror/mode/webidl/webidl.js',
+ '/media/vendor/codemirror/mode/webidl/webidl.min.js',
+ '/media/vendor/codemirror/mode/webidl/webidl.min.js.gz',
+ '/media/vendor/codemirror/mode/xml/xml.js',
+ '/media/vendor/codemirror/mode/xml/xml.min.js',
+ '/media/vendor/codemirror/mode/xml/xml.min.js.gz',
+ '/media/vendor/codemirror/mode/xquery/xquery.js',
+ '/media/vendor/codemirror/mode/xquery/xquery.min.js',
+ '/media/vendor/codemirror/mode/xquery/xquery.min.js.gz',
+ '/media/vendor/codemirror/mode/yacas/yacas.js',
+ '/media/vendor/codemirror/mode/yacas/yacas.min.js',
+ '/media/vendor/codemirror/mode/yacas/yacas.min.js.gz',
+ '/media/vendor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js',
+ '/media/vendor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.min.js',
+ '/media/vendor/codemirror/mode/yaml-frontmatter/yaml-frontmatter.min.js.gz',
+ '/media/vendor/codemirror/mode/yaml/yaml.js',
+ '/media/vendor/codemirror/mode/yaml/yaml.min.js',
+ '/media/vendor/codemirror/mode/yaml/yaml.min.js.gz',
+ '/media/vendor/codemirror/mode/z80/z80.js',
+ '/media/vendor/codemirror/mode/z80/z80.min.js',
+ '/media/vendor/codemirror/mode/z80/z80.min.js.gz',
+ '/media/vendor/codemirror/theme/3024-day.css',
+ '/media/vendor/codemirror/theme/3024-night.css',
+ '/media/vendor/codemirror/theme/abbott.css',
+ '/media/vendor/codemirror/theme/abcdef.css',
+ '/media/vendor/codemirror/theme/ambiance-mobile.css',
+ '/media/vendor/codemirror/theme/ambiance.css',
+ '/media/vendor/codemirror/theme/ayu-dark.css',
+ '/media/vendor/codemirror/theme/ayu-mirage.css',
+ '/media/vendor/codemirror/theme/base16-dark.css',
+ '/media/vendor/codemirror/theme/base16-light.css',
+ '/media/vendor/codemirror/theme/bespin.css',
+ '/media/vendor/codemirror/theme/blackboard.css',
+ '/media/vendor/codemirror/theme/cobalt.css',
+ '/media/vendor/codemirror/theme/colorforth.css',
+ '/media/vendor/codemirror/theme/darcula.css',
+ '/media/vendor/codemirror/theme/dracula.css',
+ '/media/vendor/codemirror/theme/duotone-dark.css',
+ '/media/vendor/codemirror/theme/duotone-light.css',
+ '/media/vendor/codemirror/theme/eclipse.css',
+ '/media/vendor/codemirror/theme/elegant.css',
+ '/media/vendor/codemirror/theme/erlang-dark.css',
+ '/media/vendor/codemirror/theme/gruvbox-dark.css',
+ '/media/vendor/codemirror/theme/hopscotch.css',
+ '/media/vendor/codemirror/theme/icecoder.css',
+ '/media/vendor/codemirror/theme/idea.css',
+ '/media/vendor/codemirror/theme/isotope.css',
+ '/media/vendor/codemirror/theme/juejin.css',
+ '/media/vendor/codemirror/theme/lesser-dark.css',
+ '/media/vendor/codemirror/theme/liquibyte.css',
+ '/media/vendor/codemirror/theme/lucario.css',
+ '/media/vendor/codemirror/theme/material-darker.css',
+ '/media/vendor/codemirror/theme/material-ocean.css',
+ '/media/vendor/codemirror/theme/material-palenight.css',
+ '/media/vendor/codemirror/theme/material.css',
+ '/media/vendor/codemirror/theme/mbo.css',
+ '/media/vendor/codemirror/theme/mdn-like.css',
+ '/media/vendor/codemirror/theme/midnight.css',
+ '/media/vendor/codemirror/theme/monokai.css',
+ '/media/vendor/codemirror/theme/moxer.css',
+ '/media/vendor/codemirror/theme/neat.css',
+ '/media/vendor/codemirror/theme/neo.css',
+ '/media/vendor/codemirror/theme/night.css',
+ '/media/vendor/codemirror/theme/nord.css',
+ '/media/vendor/codemirror/theme/oceanic-next.css',
+ '/media/vendor/codemirror/theme/panda-syntax.css',
+ '/media/vendor/codemirror/theme/paraiso-dark.css',
+ '/media/vendor/codemirror/theme/paraiso-light.css',
+ '/media/vendor/codemirror/theme/pastel-on-dark.css',
+ '/media/vendor/codemirror/theme/railscasts.css',
+ '/media/vendor/codemirror/theme/rubyblue.css',
+ '/media/vendor/codemirror/theme/seti.css',
+ '/media/vendor/codemirror/theme/shadowfox.css',
+ '/media/vendor/codemirror/theme/solarized.css',
+ '/media/vendor/codemirror/theme/ssms.css',
+ '/media/vendor/codemirror/theme/the-matrix.css',
+ '/media/vendor/codemirror/theme/tomorrow-night-bright.css',
+ '/media/vendor/codemirror/theme/tomorrow-night-eighties.css',
+ '/media/vendor/codemirror/theme/ttcn.css',
+ '/media/vendor/codemirror/theme/twilight.css',
+ '/media/vendor/codemirror/theme/vibrant-ink.css',
+ '/media/vendor/codemirror/theme/xq-dark.css',
+ '/media/vendor/codemirror/theme/xq-light.css',
+ '/media/vendor/codemirror/theme/yeti.css',
+ '/media/vendor/codemirror/theme/yonce.css',
+ '/media/vendor/codemirror/theme/zenburn.css',
+ '/plugins/editors/codemirror/fonts.json',
+ '/plugins/editors/codemirror/layouts/editors/codemirror/element.php',
+ '/plugins/editors/codemirror/layouts/editors/codemirror/styles.php',
+ '/plugins/editors/codemirror/src/Field/FontsField.php',
+ // From 5.0.0-alpha3 to 5.0.0-alpha4
+ '/libraries/src/Event/Application/DeamonForkEvent.php',
+ '/libraries/src/Event/Application/DeamonReceiveSignalEvent.php',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/plugin.js',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/plugin.min.js',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/plugin.min.js.gz',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source.css',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source.html',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source.js',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source.min.css',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source.min.css.gz',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source.min.js',
+ '/media/plg_editors_tinymce/js/plugins/highlighter/source.min.js.gz',
+ '/media/plg_system_compat/es5.asset.json',
];
$folders = [
@@ -706,6 +2006,7 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/media/vendor/tinymce/plugins/toc',
'/media/vendor/tinymce/plugins/textpattern',
'/media/vendor/tinymce/plugins/textcolor',
+ '/media/vendor/tinymce/plugins/template',
'/media/vendor/tinymce/plugins/tabfocus',
'/media/vendor/tinymce/plugins/spellchecker',
'/media/vendor/tinymce/plugins/print',
@@ -745,9 +2046,6 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/libraries/vendor/ramsey',
'/libraries/vendor/psr/log/Psr/Log',
'/libraries/vendor/psr/log/Psr',
- '/libraries/vendor/php-http/message-factory/src',
- '/libraries/vendor/php-http/message-factory',
- '/libraries/vendor/php-http',
'/libraries/vendor/nyholm/psr7/src/Factory',
'/libraries/vendor/nyholm/psr7/src',
'/libraries/vendor/nyholm/psr7',
@@ -766,6 +2064,155 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false)
'/libraries/vendor/beberlei',
'/administrator/components/com_admin/sql/others/mysql',
'/administrator/components/com_admin/sql/others',
+ // From 5.0.0-alpha2 to 5.0.0-alpha3
+ '/plugins/editors/codemirror/src/Field',
+ '/media/vendor/codemirror/theme',
+ '/media/vendor/codemirror/mode/z80',
+ '/media/vendor/codemirror/mode/yaml-frontmatter',
+ '/media/vendor/codemirror/mode/yaml',
+ '/media/vendor/codemirror/mode/yacas',
+ '/media/vendor/codemirror/mode/xquery',
+ '/media/vendor/codemirror/mode/xml',
+ '/media/vendor/codemirror/mode/webidl',
+ '/media/vendor/codemirror/mode/wast',
+ '/media/vendor/codemirror/mode/vue',
+ '/media/vendor/codemirror/mode/vhdl',
+ '/media/vendor/codemirror/mode/verilog',
+ '/media/vendor/codemirror/mode/velocity',
+ '/media/vendor/codemirror/mode/vbscript',
+ '/media/vendor/codemirror/mode/vb',
+ '/media/vendor/codemirror/mode/twig',
+ '/media/vendor/codemirror/mode/turtle',
+ '/media/vendor/codemirror/mode/ttcn-cfg',
+ '/media/vendor/codemirror/mode/ttcn',
+ '/media/vendor/codemirror/mode/troff',
+ '/media/vendor/codemirror/mode/tornado',
+ '/media/vendor/codemirror/mode/toml',
+ '/media/vendor/codemirror/mode/tiki',
+ '/media/vendor/codemirror/mode/tiddlywiki',
+ '/media/vendor/codemirror/mode/textile',
+ '/media/vendor/codemirror/mode/tcl',
+ '/media/vendor/codemirror/mode/swift',
+ '/media/vendor/codemirror/mode/stylus',
+ '/media/vendor/codemirror/mode/stex',
+ '/media/vendor/codemirror/mode/sql',
+ '/media/vendor/codemirror/mode/spreadsheet',
+ '/media/vendor/codemirror/mode/sparql',
+ '/media/vendor/codemirror/mode/soy',
+ '/media/vendor/codemirror/mode/solr',
+ '/media/vendor/codemirror/mode/smarty',
+ '/media/vendor/codemirror/mode/smalltalk',
+ '/media/vendor/codemirror/mode/slim',
+ '/media/vendor/codemirror/mode/sieve',
+ '/media/vendor/codemirror/mode/shell',
+ '/media/vendor/codemirror/mode/scheme',
+ '/media/vendor/codemirror/mode/sass',
+ '/media/vendor/codemirror/mode/sas',
+ '/media/vendor/codemirror/mode/rust',
+ '/media/vendor/codemirror/mode/ruby',
+ '/media/vendor/codemirror/mode/rst',
+ '/media/vendor/codemirror/mode/rpm/changes',
+ '/media/vendor/codemirror/mode/rpm',
+ '/media/vendor/codemirror/mode/r',
+ '/media/vendor/codemirror/mode/q',
+ '/media/vendor/codemirror/mode/python',
+ '/media/vendor/codemirror/mode/puppet',
+ '/media/vendor/codemirror/mode/pug',
+ '/media/vendor/codemirror/mode/protobuf',
+ '/media/vendor/codemirror/mode/properties',
+ '/media/vendor/codemirror/mode/powershell',
+ '/media/vendor/codemirror/mode/pig',
+ '/media/vendor/codemirror/mode/php',
+ '/media/vendor/codemirror/mode/perl',
+ '/media/vendor/codemirror/mode/pegjs',
+ '/media/vendor/codemirror/mode/pascal',
+ '/media/vendor/codemirror/mode/oz',
+ '/media/vendor/codemirror/mode/octave',
+ '/media/vendor/codemirror/mode/ntriples',
+ '/media/vendor/codemirror/mode/nsis',
+ '/media/vendor/codemirror/mode/nginx',
+ '/media/vendor/codemirror/mode/mumps',
+ '/media/vendor/codemirror/mode/mscgen',
+ '/media/vendor/codemirror/mode/modelica',
+ '/media/vendor/codemirror/mode/mllike',
+ '/media/vendor/codemirror/mode/mirc',
+ '/media/vendor/codemirror/mode/mbox',
+ '/media/vendor/codemirror/mode/mathematica',
+ '/media/vendor/codemirror/mode/markdown',
+ '/media/vendor/codemirror/mode/lua',
+ '/media/vendor/codemirror/mode/livescript',
+ '/media/vendor/codemirror/mode/julia',
+ '/media/vendor/codemirror/mode/jsx',
+ '/media/vendor/codemirror/mode/jinja2',
+ '/media/vendor/codemirror/mode/javascript',
+ '/media/vendor/codemirror/mode/idl',
+ '/media/vendor/codemirror/mode/http',
+ '/media/vendor/codemirror/mode/htmlmixed',
+ '/media/vendor/codemirror/mode/htmlembedded',
+ '/media/vendor/codemirror/mode/haxe',
+ '/media/vendor/codemirror/mode/haskell-literate',
+ '/media/vendor/codemirror/mode/haskell',
+ '/media/vendor/codemirror/mode/handlebars',
+ '/media/vendor/codemirror/mode/haml',
+ '/media/vendor/codemirror/mode/groovy',
+ '/media/vendor/codemirror/mode/go',
+ '/media/vendor/codemirror/mode/gherkin',
+ '/media/vendor/codemirror/mode/gfm',
+ '/media/vendor/codemirror/mode/gas',
+ '/media/vendor/codemirror/mode/fortran',
+ '/media/vendor/codemirror/mode/forth',
+ '/media/vendor/codemirror/mode/fcl',
+ '/media/vendor/codemirror/mode/factor',
+ '/media/vendor/codemirror/mode/erlang',
+ '/media/vendor/codemirror/mode/elm',
+ '/media/vendor/codemirror/mode/eiffel',
+ '/media/vendor/codemirror/mode/ecl',
+ '/media/vendor/codemirror/mode/ebnf',
+ '/media/vendor/codemirror/mode/dylan',
+ '/media/vendor/codemirror/mode/dtd',
+ '/media/vendor/codemirror/mode/dockerfile',
+ '/media/vendor/codemirror/mode/django',
+ '/media/vendor/codemirror/mode/diff',
+ '/media/vendor/codemirror/mode/dart',
+ '/media/vendor/codemirror/mode/d',
+ '/media/vendor/codemirror/mode/cypher',
+ '/media/vendor/codemirror/mode/css',
+ '/media/vendor/codemirror/mode/crystal',
+ '/media/vendor/codemirror/mode/commonlisp',
+ '/media/vendor/codemirror/mode/coffeescript',
+ '/media/vendor/codemirror/mode/cobol',
+ '/media/vendor/codemirror/mode/cmake',
+ '/media/vendor/codemirror/mode/clojure',
+ '/media/vendor/codemirror/mode/clike',
+ '/media/vendor/codemirror/mode/brainfuck',
+ '/media/vendor/codemirror/mode/asterisk',
+ '/media/vendor/codemirror/mode/asn.1',
+ '/media/vendor/codemirror/mode/asciiarmor',
+ '/media/vendor/codemirror/mode/apl',
+ '/media/vendor/codemirror/mode',
+ '/media/vendor/codemirror/lib',
+ '/media/vendor/codemirror/keymap',
+ '/media/vendor/codemirror/addon/wrap',
+ '/media/vendor/codemirror/addon/tern',
+ '/media/vendor/codemirror/addon/selection',
+ '/media/vendor/codemirror/addon/search',
+ '/media/vendor/codemirror/addon/scroll',
+ '/media/vendor/codemirror/addon/runmode',
+ '/media/vendor/codemirror/addon/mode',
+ '/media/vendor/codemirror/addon/merge',
+ '/media/vendor/codemirror/addon/lint',
+ '/media/vendor/codemirror/addon/hint',
+ '/media/vendor/codemirror/addon/fold',
+ '/media/vendor/codemirror/addon/edit',
+ '/media/vendor/codemirror/addon/display',
+ '/media/vendor/codemirror/addon/dialog',
+ '/media/vendor/codemirror/addon/comment',
+ '/media/vendor/codemirror/addon',
+ // From 5.0.0-alpha3 to 5.0.0-alpha4
+ '/templates/system/incompatible.html,/includes',
+ '/templates/system/incompatible.html,',
+ '/media/plg_system_compat',
+ '/media/plg_editors_tinymce/js/plugins/highlighter',
];
$status['files_checked'] = $files;
@@ -895,9 +2342,328 @@ public function postflight($action, $installer)
}
// Add here code which shall be executed only when updating from an older version than 5.0.0
+ if (!$this->migrateTinymceConfiguration()) {
+ return false;
+ }
+
+ if (!$this->migrateDeleteActionlogsConfiguration()) {
+ return false;
+ }
+
+ if (!$this->migratePrivacyconsentConfiguration()) {
+ return false;
+ }
+
+ $this->setGuidedToursUid();
+
+ return true;
+ }
+
+ /**
+ * Migrate Deleteactionlogs plugin configuration
+ *
+ * @return boolean True on success
+ *
+ * @since __DEPLOY_VERSION__
+ */
+ private function migrateDeleteActionlogsConfiguration(): bool
+ {
+ $db = Factory::getDbo();
+
+ try {
+ // Get the ActionLogs system plugin's parameters
+ $row = $db->setQuery(
+ $db->getQuery(true)
+ ->select([$db->quotename('enabled'), $db->quoteName('params')])
+ ->from($db->quoteName('#__extensions'))
+ ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
+ ->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
+ ->where($db->quoteName('element') . ' = ' . $db->quote('actionlogs'))
+ )->loadObject();
+ } catch (Exception $e) {
+ echo Text::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
';
+
+ return false;
+ }
+
+ // If not existing or disabled there is nothing to migrate
+ if (!$row || !$row->enabled) {
+ return true;
+ }
+
+ $params = new Registry($row->params);
+
+ // If deletion of outdated logs was disabled there is nothing to migrate
+ if (!$params->get('logDeletePeriod', 0)) {
+ return true;
+ }
+
+ /** @var SchedulerComponent $component */
+ $component = Factory::getApplication()->bootComponent('com_scheduler');
+
+ /** @var TaskModel $model */
+ $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);
+ $task = [
+ 'title' => 'DeleteActionLogs',
+ 'type' => 'delete.actionlogs',
+ 'execution_rules' => [
+ 'rule-type' => 'interval-hours',
+ 'interval-hours' => 24,
+ 'exec-time' => gmdate('H:i', $params->get('lastrun', time())),
+ 'exec-day' => gmdate('d'),
+ ],
+ 'state' => 1,
+ 'params' => [
+ 'logDeletePeriod' => $params->get('logDeletePeriod', 0),
+ ],
+ ];
+
+ try {
+ $model->save($task);
+ } catch (Exception $e) {
+ echo Text::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
';
+
+ return false;
+ }
return true;
}
+ /**
+ * Migrate privacyconsents system plugin configuration
+ *
+ * @return boolean True on success
+ *
+ * @since 5.0.0
+ */
+ private function migratePrivacyconsentConfiguration(): bool
+ {
+ $db = Factory::getDbo();
+
+ try {
+ // Get the PrivacyConsent system plugin's parameters
+ $row = $db->setQuery(
+ $db->getQuery(true)
+ ->select([$db->quotename('enabled'), $db->quoteName('params')])
+ ->from($db->quoteName('#__extensions'))
+ ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
+ ->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
+ ->where($db->quoteName('element') . ' = ' . $db->quote('privacyconsent'))
+ )->loadObject();
+ } catch (Exception $e) {
+ echo Text::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
';
+
+ return false;
+ }
+
+ // If not existing or disabled there is nothing to migrate
+ if (!$row || !$row->enabled) {
+ return true;
+ }
+
+ $params = new Registry($row->params);
+
+ // If consent expiration was disabled there is nothing to migrate
+ if (!$params->get('enabled', 0)) {
+ return true;
+ }
+
+ /** @var SchedulerComponent $component */
+ $component = Factory::getApplication()->bootComponent('com_scheduler');
+
+ /** @var TaskModel $model */
+ $model = $component->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]);
+ $task = [
+ 'title' => 'PrivacyConsent',
+ 'type' => 'privacy.consent',
+ 'execution_rules' => [
+ 'rule-type' => 'interval-days',
+ 'interval-days' => $params->get('cachetimeout', 30),
+ 'exec-time' => gmdate('H:i', $params->get('lastrun', time())),
+ 'exec-day' => gmdate('d'),
+ ],
+ 'state' => 1,
+ 'params' => [
+ 'consentexpiration' => $params->get('consentexpiration', 360),
+ 'remind' => $params->get('remind', 30),
+ ],
+ ];
+
+ try {
+ $model->save($task);
+ } catch (Exception $e) {
+ echo Text::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
';
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Migrate TinyMCE editor plugin configuration
+ *
+ * @return boolean True on success
+ *
+ * @since 5.0.0
+ */
+ private function migrateTinymceConfiguration(): bool
+ {
+ $db = Factory::getDbo();
+
+ try {
+ // Get the TinyMCE editor plugin's parameters
+ $params = $db->setQuery(
+ $db->getQuery(true)
+ ->select($db->quoteName('params'))
+ ->from($db->quoteName('#__extensions'))
+ ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
+ ->where($db->quoteName('folder') . ' = ' . $db->quote('editors'))
+ ->where($db->quoteName('element') . ' = ' . $db->quote('tinymce'))
+ )->loadResult();
+ } catch (Exception $e) {
+ echo Text::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
';
+
+ return false;
+ }
+
+ $params = json_decode($params, true);
+
+ // If there are no toolbars there is nothing to migrate
+ if (!isset($params['configuration']['toolbars'])) {
+ return true;
+ }
+
+ // Each set has its own toolbar configuration
+ foreach ($params['configuration']['toolbars'] as $setIdx => $toolbarConfig) {
+ // Migrate menu items if there is a menu
+ if (isset($toolbarConfig['menu'])) {
+ /**
+ * Replace array values with menu item names ("old name" -> "new name"):
+ * "blockformats" -> "blocks"
+ * "fontformats" -> "fontfamily"
+ * "fontsizes" -> "fontsize"
+ * "formats" -> "styles"
+ * "template" -> "jtemplate"
+ */
+ $search = ['blockformats', 'fontformats', 'fontsizes', 'formats'];
+ $replace = ['blocks', 'fontfamily', 'fontsize', 'styles'];
+
+ // Don't redo the template
+ if (!in_array('jtemplate', $params['configuration']['toolbars'][$setIdx]['menu'])) {
+ $search[] = 'template';
+ $replace[] = 'jtemplate';
+ }
+
+ $params['configuration']['toolbars'][$setIdx]['menu'] = str_replace($search, $replace, $toolbarConfig['menu']);
+ }
+
+ // There could be no toolbar at all, or only toolbar1, or both toolbar1 and toolbar2
+ foreach (['toolbar1', 'toolbar2'] as $toolbarIdx) {
+ // Migrate toolbar buttons if that toolbar exists
+ if (isset($toolbarConfig[$toolbarIdx])) {
+ /**
+ * Replace array values with button names ("old name" -> "new name"):
+ * "fontselect" -> "fontfamily"
+ * "fontsizeselect" -> "fontsize"
+ * "formatselect" -> "blocks"
+ * "styleselect" -> "styles"
+ * "template" -> "jtemplate"
+ */
+ $search = ['fontselect', 'fontsizeselect', 'formatselect', 'styleselect'];
+ $replace = ['fontfamily', 'fontsize', 'blocks', 'styles'];
+
+ // Don't redo the template
+ if (!in_array('jtemplate', $params['configuration']['toolbars'][$setIdx][$toolbarIdx])) {
+ $search[] = 'template';
+ $replace[] = 'jtemplate';
+ }
+
+ $params['configuration']['toolbars'][$setIdx][$toolbarIdx] = str_replace($search, $replace, $toolbarConfig[$toolbarIdx]);
+ }
+ }
+ }
+
+ $params = json_encode($params);
+
+ $query = $db->getQuery(true)
+ ->update($db->quoteName('#__extensions'))
+ ->set($db->quoteName('params') . ' = ' . $db->quote($params))
+ ->where($db->quoteName('type') . ' = ' . $db->quote('plugin'))
+ ->where($db->quoteName('folder') . ' = ' . $db->quote('editors'))
+ ->where($db->quoteName('element') . ' = ' . $db->quote('tinymce'));
+
+ try {
+ $db->setQuery($query)->execute();
+ } catch (Exception $e) {
+ echo Text::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', $e->getCode(), $e->getMessage()) . '
';
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * setup Guided Tours Unique Identifiers
+ *
+ * @return boolean True on success
+ *
+ * @since __DEPLOY_VERSION__
+ */
+ private function setGuidedToursUid()
+ {
+ /** @var \Joomla\Component\Cache\Administrator\Model\CacheModel $model */
+ $model = Factory::getApplication()->bootComponent('com_guidedtours')->getMVCFactory()
+ ->createModel('Tours', 'Administrator', ['ignore_request' => true]);
+
+ $items = $model->getItems();
+
+ foreach ($items as $item) {
+ // Set uid for tours where it is empty
+ if (empty($item->uid)) {
+ $tourItem = $model->getTable('Tour');
+ $tourItem->load($item->id);
+
+ // Tour follows Joomla naming convention
+ if (str_starts_with($tourItem->title, 'COM_GUIDEDTOURS_TOUR_') && str_ends_with($tourItem->title, '_TITLE')) {
+ $uidTitle = 'joomla_' . str_replace('COM_GUIDEDTOURS_TOUR_', '', $tourItem->title);
+
+ // Remove the last _TITLE part
+ $pos = strrpos($uidTitle, '_TITLE');
+ if ($pos !== false) {
+ $uidTitle = substr($uidTitle, 0, $pos);
+ }
+ } elseif (preg_match('#COM_(\w+)_TOUR_#', $tourItem->title) && str_ends_with($tourItem->title, '_TITLE')) {
+ // Tour follows component naming pattern
+ $uidTitle = preg_replace('#COM_(\w+)_TOUR_#', '$1.', $tourItem->title);
+
+ // Remove the last _TITLE part
+ $pos = strrpos($uidTitle, "_TITLE");
+ if ($pos !== false) {
+ $uidTitle = substr($uidTitle, 0, $pos);
+ }
+ } else {
+ $uri = Uri::getInstance();
+ $host = $uri->toString(['host']);
+ $host = ApplicationHelper::stringURLSafe($host, $tourItem->language);
+ $uidTitle = $host . ' ' . str_replace('COM_GUIDEDTOURS_TOUR_', '', $tourItem->title);
+ // Remove the last _TITLE part
+ if (str_ends_with($uidTitle, '_TITLE')) {
+ $pos = strrpos($uidTitle, '_TITLE');
+ $uidTitle = substr($uidTitle, 0, $pos);
+ }
+ }
+ // ApplicationHelper::stringURLSafe will replace a period (.) separator so we split the construction into multiple parts
+ $uidTitleParts = explode('.', $uidTitle);
+ array_walk($uidTitleParts, function (&$value, $key, $tourLanguage) {
+ $value = ApplicationHelper::stringURLSafe($value, $tourLanguage);
+ }, $tourItem->language);
+ $tourItem->uid = implode('.', $uidTitleParts);
+
+ $tourItem->store();
+ }
+ }
+ }
/**
* Renames or removes incorrectly cased files.
@@ -912,6 +2678,8 @@ protected function fixFilenameCasing()
// From 4.4 to 5.0
'/libraries/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/ED256.php' => '/libraries/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/Ed256.php',
'/libraries/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/ED512.php' => '/libraries/vendor/web-auth/cose-lib/src/Algorithm/Signature/EdDSA/Ed512.php',
+ // From 5.0.0-alpha3 to 5.0.0-alpha4
+ '/plugins/schemaorg/blogposting/src/Extension/Blogposting.php' => '/plugins/schemaorg/blogposting/src/Extension/BlogPosting.php',
];
foreach ($files as $old => $expected) {
@@ -948,7 +2716,9 @@ protected function fixFilenameCasing()
}
} else {
// On Unix with both files: Delete the incorrectly cased file.
- File::delete(JPATH_ROOT . $old);
+ if (is_file(JPATH_ROOT . $old)) {
+ File::delete(JPATH_ROOT . $old);
+ }
}
}
}
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-03-17.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-03-17.sql
new file mode 100644
index 0000000000000..4f6aa1f79b567
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-03-17.sql
@@ -0,0 +1 @@
+DELETE FROM `#__scheduler_tasks` WHERE `type` = 'demoTask_r1.sleep';
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-12.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-12.sql
new file mode 100644
index 0000000000000..882f857346fd7
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-12.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `#__menu_types` ADD COLUMN `ordering` int NOT NULL DEFAULT 0 AFTER `client_id` /** CAN FAIL **/;
+UPDATE `#__menu_types` SET `ordering` = `id` WHERE `client_id` = 0;
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-25.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-25.sql
new file mode 100644
index 0000000000000..68f3966136529
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-25.sql
@@ -0,0 +1,23 @@
+--
+-- Table structure for table `#__schemaorg`
+--
+
+CREATE TABLE IF NOT EXISTS `#__schemaorg` (
+ `id` int unsigned NOT NULL AUTO_INCREMENT,
+ `itemId` int unsigned,
+ `context` varchar(100),
+ `schemaType` varchar(100),
+ `schema` text,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;
+
+-- Add plugins to `#__extensions`
+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_schemaorg_blogposting', 'plugin', 'blogposting', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 1, 0),
+(0, 'plg_schemaorg_book', 'plugin', 'book', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 2, 0),
+(0, 'plg_schemaorg_event', 'plugin', 'event', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 3, 0),
+(0, 'plg_schemaorg_organization', 'plugin', 'organization', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 4, 0),
+(0, 'plg_schemaorg_person', 'plugin', 'person', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 5, 0),
+(0, 'plg_schemaorg_recipe', 'plugin', 'recipe', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 6, 0),
+(0, 'plg_schemaorg_jobposting', 'plugin', 'jobposting', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 7, 0),
+(0, 'plg_system_schemaorg', 'plugin', 'schemaorg', 'system', 0, 1, 1, 0, 0, '', '{}', '', 0, 0);
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-29.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-29.sql
new file mode 100644
index 0000000000000..aff03ebad6261
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-07-29.sql
@@ -0,0 +1,2 @@
+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_behaviour_compat', 'plugin', 'compat', 'behaviour', 0, 1, 1, 0, 1, '', '{"classes_aliases":"1","es5_assets":"1"}', '', -1, 0);
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-21.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-21.sql
new file mode 100644
index 0000000000000..53a45aa687c0d
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-21.sql
@@ -0,0 +1,17 @@
+--
+-- Attention: In the below SQL statements, the value of the filter is unescaped, i.e. uses "\\", while
+-- in base.sql the same value is using "\\\\". This is expected because of how JSON_REPLACE works.
+--
+UPDATE `#__extensions`
+ SET `params` = JSON_REPLACE(`params`, '$.filter' , '\\Joomla\\CMS\\Component\\ComponentHelper::filterText')
+ WHERE `type` = 'plugin'
+ AND `folder` = 'fields'
+ AND `element` IN ('editor', 'text', 'textarea')
+ AND `params` <> ''
+ AND JSON_EXTRACT(`params`, '$.filter') = 'JComponentHelper::filterText';
+
+UPDATE `#__fields`
+ SET `fieldparams` = JSON_REPLACE(`fieldparams`, '$.filter' , '\\Joomla\\CMS\\Component\\ComponentHelper::filterText')
+ WHERE `type` IN ('editor', 'text', 'textarea')
+ AND `fieldparams` <> ''
+ AND JSON_EXTRACT(`fieldparams`, '$.filter') = 'JComponentHelper::filterText';
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-26.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-26.sql
new file mode 100644
index 0000000000000..6126e568478e7
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-26.sql
@@ -0,0 +1,3 @@
+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_task_globalcheckin', 'plugin', 'globalcheckin', 'task', 0, 1, 1, 0, 0, '', '{}', '', 5, 0);
+
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-28.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-28.sql
new file mode 100644
index 0000000000000..34c1d727cb1e7
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-28.sql
@@ -0,0 +1,13 @@
+UPDATE `#__guidedtours` SET `extensions` = '["com_content","com_categories"]' WHERE `url` LIKE '%option=com_content%';
+UPDATE `#__guidedtours` SET `extensions` = '["com_content","com_categories"]' WHERE `url` LIKE '%option=com_categories%';
+UPDATE `#__guidedtours` SET `extensions` = '["com_menus"]' WHERE `url` LIKE '%com_menus%';
+UPDATE `#__guidedtours` SET `extensions` = '["com_tags"]' WHERE `url` LIKE '%com_tags%';
+UPDATE `#__guidedtours` SET `extensions` = '["com_banners"]' WHERE `url` LIKE '%com_banners%';
+UPDATE `#__guidedtours` SET `extensions` = '["com_contact"]' WHERE `url` LIKE '%com_contact%';
+UPDATE `#__guidedtours` SET `extensions` = '["com_newsfeeds"]' WHERE `url` LIKE '%com_newsfeeds%';
+UPDATE `#__guidedtours` SET `extensions` = '["com_finder"]' WHERE `url` LIKE '%com_finder%';
+UPDATE `#__guidedtours` SET `extensions` = '["com_users"]' WHERE `url` LIKE '%com_users%';
+
+UPDATE `#__update_sites`
+ SET `location` = 'https://update.joomla.org/language/translationlist_5.xml'
+ WHERE `location` = 'https://update.joomla.org/language/translationlist_4.xml';
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-29.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-29.sql
new file mode 100644
index 0000000000000..85790c1132a04
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-29.sql
@@ -0,0 +1,14 @@
+ALTER TABLE `#__guidedtours` ADD COLUMN `uid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL AFTER `title`/** CAN FAIL **/;
+ALTER TABLE `#__guidedtours` ADD INDEX `idx_uid` (`uid`(191)) /** CAN FAIL **/;
+
+UPDATE `#__guidedtours` SET `uid` = 'joomla-guidedtours' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-guidedtoursteps' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-articles' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_ARTICLES_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-categories' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_CATEGORIES_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-menus' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_MENUS_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-tags' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_TAGS_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-banners' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_BANNERS_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-contacts' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_CONTACTS_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-newsfeeds' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-smartsearch' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_TITLE';
+UPDATE `#__guidedtours` SET `uid` = 'joomla-users' WHERE `title` = 'COM_GUIDEDTOURS_TOUR_USERS_TITLE';
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-30.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-30.sql
new file mode 100644
index 0000000000000..8b144004d1147
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-08-30.sql
@@ -0,0 +1,3 @@
+UPDATE `#__extensions`
+ SET `locked` = 0
+ WHERE `type` = 'plugin' AND `element` = 'recaptcha_invisible' AND `folder` = 'captcha';
diff --git a/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-09-02.sql b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-09-02.sql
new file mode 100644
index 0000000000000..4e74349940933
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/mysql/5.0.0-2023-09-02.sql
@@ -0,0 +1,13 @@
+INSERT INTO `#__extensions` (`name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES
+('plg_task_deleteactionlogs', 'plugin', 'deleteactionlogs', 'task', 0, 1, 1, 0, 1, '', '{}', '', NULL, NULL, 0, 0),
+('plg_task_privacyconsent', 'plugin', 'privacyconsent', 'task', 0, 1, 1, 0, 1, '', '{}', '', NULL, NULL, 0, 0),
+('plg_task_rotatelogs', 'plugin', 'rotatelogs', 'task', 0, 1, 1, 0, 1, '', '{}', '', NULL, NULL, 0, 0),
+('plg_task_updatenotification', 'plugin', 'updatenotification', 'task', 0, 1, 1, 0, 1, '', '{}', '', NULL, NULL, 0, 0);
+
+INSERT INTO `#__mail_templates` (`template_id`, `extension`, `language`, `subject`, `body`, `htmlbody`, `attachments`, `params`) VALUES
+('plg_task_privacyconsent.request.reminder', 'plg_task_privacyconsent', '', 'PLG_TASK_PRIVACYCONSENT_EMAIL_REMIND_SUBJECT', 'PLG_TASK_PRIVACYCONSENT_EMAIL_REMIND_BODY', '', '', '{"tags":["sitename","url","tokenurl","formurl","token"]}'),
+('plg_task_updatenotification.mail', 'plg_task_updatenotification', '', 'PLG_TASK_UPDATENOTIFICATION_EMAIL_SUBJECT', 'PLG_TASK_UPDATENOTIFICATION_EMAIL_BODY', '', '', '{"tags":["newversion","curversion","sitename","url","link","releasenews"]}');
+
+DELETE FROM `#__mail_templates` WHERE `template_id` IN ('plg_system_privacyconsent.request.reminder', 'plg_system_updatenotification.mail');
+
+DELETE FROM `#__postinstall_messages` WHERE `condition_file` = 'site://plugins/system/updatenotification/postinstall/updatecachetime.php';
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-03-17.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-03-17.sql
new file mode 100644
index 0000000000000..c3bb4daede595
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-03-17.sql
@@ -0,0 +1 @@
+DELETE FROM "#__scheduler_tasks" WHERE "type" = 'demoTask_r1.sleep';
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-12.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-12.sql
new file mode 100644
index 0000000000000..0c83e0d5360fd
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-12.sql
@@ -0,0 +1,2 @@
+ALTER TABLE "#__menu_types" ADD COLUMN "ordering" int NOT NULL DEFAULT 0 /** CAN FAIL **/;
+UPDATE "#__menu_types" SET "ordering" = "id" WHERE "client_id" = 0;
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-25.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-25.sql
new file mode 100644
index 0000000000000..18e8bd027d608
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-25.sql
@@ -0,0 +1,23 @@
+--
+-- Table structure for table "#__schemaorg"
+--
+
+CREATE TABLE IF NOT EXISTS "#__schemaorg" (
+ "id" serial NOT NULL,
+ "itemId" bigint,
+ "context" varchar(100),
+ "schemaType" varchar(100),
+ "schema" text,
+ PRIMARY KEY ("id")
+);
+
+-- Add plugins to "#__extensions"
+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_schemaorg_blogposting', 'plugin', 'blogposting', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 1, 0),
+(0, 'plg_schemaorg_book', 'plugin', 'book', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 2, 0),
+(0, 'plg_schemaorg_event', 'plugin', 'event', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 3, 0),
+(0, 'plg_schemaorg_organization', 'plugin', 'organization', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 4, 0),
+(0, 'plg_schemaorg_person', 'plugin', 'person', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 5, 0),
+(0, 'plg_schemaorg_recipe', 'plugin', 'recipe', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 6, 0),
+(0, 'plg_schemaorg_jobposting', 'plugin', 'jobposting', 'schemaorg', 0, 1, 1, 0, 0, '', '{}', '', 7, 0),
+(0, 'plg_system_schemaorg', 'plugin', 'schemaorg', 'system', 0, 1, 1, 0, 0, '', '{}', '', 0, 0);
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-29.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-29.sql
new file mode 100644
index 0000000000000..489861e7681ae
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-07-29.sql
@@ -0,0 +1,2 @@
+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_behaviour_compat', 'plugin', 'compat', 'behaviour', 0, 1, 1, 0, 1, '', '{"classes_aliases":"1","es5_assets":"1"}', '', -1, 0);
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-21.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-21.sql
new file mode 100644
index 0000000000000..bcca1d7e0835f
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-21.sql
@@ -0,0 +1,13 @@
+UPDATE "#__extensions"
+ SET "params" = jsonb_set("params"::jsonb, '{filter}' , '"\\\\Joomla\\\\CMS\\\\Component\\\\ComponentHelper::filterText"')
+ WHERE "type" = 'plugin'
+ AND "folder" = 'fields'
+ AND "element" IN ('editor', 'text', 'textarea')
+ AND "params" <> ''
+ AND "params"::jsonb->>'filter' = 'JComponentHelper::filterText';
+
+UPDATE "#__fields"
+ SET "fieldparams" = jsonb_set("fieldparams"::jsonb, '{filter}' , '"\\\\Joomla\\\\CMS\\\\Component\\\\ComponentHelper::filterText"')
+ WHERE "type" IN ('editor', 'text', 'textarea')
+ AND "fieldparams" <> ''
+ AND "fieldparams"::jsonb->>'filter' = 'JComponentHelper::filterText';
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-26.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-26.sql
new file mode 100644
index 0000000000000..ce78be2301d1a
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-26.sql
@@ -0,0 +1,3 @@
+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_task_globalcheckin', 'plugin', 'globalcheckin', 'task', 0, 1, 1, 0, 0, '', '{}', '', 5, 0);
+
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-28.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-28.sql
new file mode 100644
index 0000000000000..252410f0e0baa
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-28.sql
@@ -0,0 +1,14 @@
+
+UPDATE "#__guidedtours" SET "extensions" = '["com_content","com_categories"]' WHERE "url" LIKE '%option=com_content%';
+UPDATE "#__guidedtours" SET "extensions" = '["com_content","com_categories"]' WHERE "url" LIKE '%option=com_categories%';
+UPDATE "#__guidedtours" SET "extensions" = '["com_menus"]' WHERE "url" LIKE '%com_menus%';
+UPDATE "#__guidedtours" SET "extensions" = '["com_tags"]' WHERE "url" LIKE '%com_tags%';
+UPDATE "#__guidedtours" SET "extensions" = '["com_banners"]' WHERE "url" LIKE '%com_banners%';
+UPDATE "#__guidedtours" SET "extensions" = '["com_contact"]' WHERE "url" LIKE '%com_contact%';
+UPDATE "#__guidedtours" SET "extensions" = '["com_newsfeeds"]' WHERE "url" LIKE '%com_newsfeeds%';
+UPDATE "#__guidedtours" SET "extensions" = '["com_finder"]' WHERE "url" LIKE '%com_finder%';
+UPDATE "#__guidedtours" SET "extensions" = '["com_users"]' WHERE "url" LIKE '%com_users%';
+
+UPDATE "#__update_sites"
+ SET "location" = 'https://update.joomla.org/language/translationlist_5.xml'
+ WHERE "location" = 'https://update.joomla.org/language/translationlist_4.xml';
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-29.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-29.sql
new file mode 100644
index 0000000000000..21666a58eb649
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-29.sql
@@ -0,0 +1,14 @@
+ALTER TABLE "#__guidedtours" ADD COLUMN "uid" varchar(255) DEFAULT '' NOT NULL /** CAN FAIL **/;
+CREATE INDEX "#__guidedtours_idx_uid" ON "#__guidedtours" ("uid") /** CAN FAIL **/;
+
+UPDATE "#__guidedtours" SET "uid" = 'joomla-guidedtours' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-guidedtoursteps' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-articles' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_ARTICLES_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-categories' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_CATEGORIES_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-menus' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_MENUS_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-tags' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_TAGS_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-banners' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_BANNERS_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-contacts' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_CONTACTS_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-newsfeeds' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-smartsearch' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_TITLE';
+UPDATE "#__guidedtours" SET "uid" = 'joomla-users' WHERE "title" = 'COM_GUIDEDTOURS_TOUR_USERS_TITLE';
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-30.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-30.sql
new file mode 100644
index 0000000000000..6cdba7c66ee3c
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-08-30.sql
@@ -0,0 +1,3 @@
+UPDATE "#__extensions"
+ SET "locked" = 0
+ WHERE "type" = 'plugin' AND "element" = 'recaptcha_invisible' AND "folder" = 'captcha';
diff --git a/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-09-02.sql b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-09-02.sql
new file mode 100644
index 0000000000000..08e8541039d17
--- /dev/null
+++ b/administrator/components/com_admin/sql/updates/postgresql/5.0.0-2023-09-02.sql
@@ -0,0 +1,13 @@
+INSERT INTO "#__extensions" ("name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "checked_out", "checked_out_time", "ordering", "state") VALUES
+('plg_task_deleteactionlogs', 'plugin', 'deleteactionlogs', 'task', 0, 1, 1, 0, 1, '', '{}', '', NULL, NULL, 0, 0),
+('plg_task_privacyconsent', 'plugin', 'privacyconsent', 'task', 0, 1, 1, 0, 1, '', '{}', '', NULL, NULL, 0, 0),
+('plg_task_rotatelogs', 'plugin', 'rotatelogs', 'task', 0, 1, 1, 0, 1, '', '{}', '', NULL, NULL, 0, 0),
+('plg_task_updatenotification', 'plugin', 'updatenotification', 'task', 0, 1, 1, 0, 1, '', '{}', '', NULL, NULL, 0, 0);
+
+INSERT INTO "#__mail_templates" ("template_id", "extension", "language", "subject", "body", "htmlbody", "attachments", "params") VALUES
+('plg_task_privacyconsent.request.reminder', 'plg_task_privacyconsent', '', 'PLG_TASK_PRIVACYCONSENT_EMAIL_REMIND_SUBJECT', 'PLG_TASK_PRIVACYCONSENT_EMAIL_REMIND_BODY', '', '', '{"tags":["sitename","url","tokenurl","formurl","token"]}'),
+('plg_task_updatenotification.mail', 'plg_task_updatenotification', '', 'PLG_TASK_UPDATENOTIFICATION_EMAIL_SUBJECT', 'PLG_TASK_UPDATENOTIFICATION_EMAIL_BODY', '', '', '{"tags":["newversion","curversion","sitename","url","link","releasenews"]}');
+
+DELETE FROM "#__mail_templates" WHERE "template_id" IN ('plg_system_privacyconsent.request.reminder', 'plg_system_updatenotification.mail');
+
+DELETE FROM "#__postinstall_messages" WHERE "condition_file" = 'site://plugins/system/updatenotification/postinstall/updatecachetime.php';
diff --git a/administrator/components/com_admin/src/Controller/DisplayController.php b/administrator/components/com_admin/src/Controller/DisplayController.php
index 7d4d97c91c56c..77bdd03953fb5 100644
--- a/administrator/components/com_admin/src/Controller/DisplayController.php
+++ b/administrator/components/com_admin/src/Controller/DisplayController.php
@@ -27,7 +27,8 @@ class DisplayController extends BaseController
* View method
*
* @param boolean $cachable If true, the view output will be cached
- * @param array $urlparams An array of safe URL parameters and their variable types, for valid values see {@link \JFilterInput::clean()}.
+ * @param array $urlparams An array of safe URL parameters and their variable types.
+ * @see \Joomla\CMS\Filter\InputFilter::clean() for valid values.
*
* @return static Supports chaining.
*
diff --git a/administrator/components/com_admin/src/Extension/AdminComponent.php b/administrator/components/com_admin/src/Extension/AdminComponent.php
index 5319fbfc6bb45..009cc42947687 100644
--- a/administrator/components/com_admin/src/Extension/AdminComponent.php
+++ b/administrator/components/com_admin/src/Extension/AdminComponent.php
@@ -20,7 +20,7 @@
use Psr\Container\ContainerInterface;
// phpcs:disable PSR1.Files.SideEffects
-\defined('JPATH_PLATFORM') or die;
+\defined('_JEXEC') or die;
// phpcs:enable PSR1.Files.SideEffects
/**
diff --git a/administrator/components/com_admin/src/Model/HelpModel.php b/administrator/components/com_admin/src/Model/HelpModel.php
index e93a2384f4750..139a9ffebdcf0 100644
--- a/administrator/components/com_admin/src/Model/HelpModel.php
+++ b/administrator/components/com_admin/src/Model/HelpModel.php
@@ -58,7 +58,7 @@ class HelpModel extends BaseDatabaseModel
* @var array
* @since 1.6
*/
- protected $toc = null;
+ protected $toc = [];
/**
* URL for the latest version check
@@ -128,7 +128,7 @@ public function getLangTag()
*/
public function &getToc()
{
- if (!\is_null($this->toc)) {
+ if (\count($this->toc)) {
return $this->toc;
}
@@ -152,8 +152,7 @@ public function &getToc()
}
// Get Help files
- $files = Folder::files(JPATH_BASE . '/help/' . $lang_tag, '\.xml$|\.html$');
- $this->toc = [];
+ $files = Folder::files(JPATH_BASE . '/help/' . $lang_tag, '\.xml$|\.html$');
foreach ($files as $file) {
$buffer = file_get_contents(JPATH_BASE . '/help/' . $lang_tag . '/' . $file);
diff --git a/administrator/components/com_admin/src/Model/SysinfoModel.php b/administrator/components/com_admin/src/Model/SysinfoModel.php
index 0fa96f5ede7db..a8abd3bda895e 100644
--- a/administrator/components/com_admin/src/Model/SysinfoModel.php
+++ b/administrator/components/com_admin/src/Model/SysinfoModel.php
@@ -11,12 +11,15 @@
namespace Joomla\Component\Admin\Administrator\Model;
use Joomla\CMS\Component\ComponentHelper;
+use Joomla\CMS\Extension\ExtensionHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\MVC\Model\BaseDatabaseModel;
+use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Version;
use Joomla\Registry\Registry;
+use Joomla\Utilities\ArrayHelper;
// phpcs:disable PSR1.Files.SideEffects
\defined('_JEXEC') or die;
@@ -321,12 +324,27 @@ public function &getInfo(): array
'server' => $_SERVER['SERVER_SOFTWARE'] ?? getenv('SERVER_SOFTWARE'),
'sapi_name' => PHP_SAPI,
'version' => (new Version())->getLongVersion(),
+ 'compatpluginenabled' => PluginHelper::isEnabled('behaviour', 'compat'),
+ 'compatpluginparameters' => $this->getCompatPluginParameters(),
'useragent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
];
return $this->info;
}
+ private function getCompatPluginParameters()
+ {
+ $record = ExtensionHelper::getExtensionRecord('compat', 'plugin', 0, 'behaviour');
+
+ if ($record) {
+ $params = new Registry($record->params);
+
+ return ArrayHelper::toString($params->toArray(), ':', ', ');
+ }
+
+ return '';
+ }
+
/**
* Check if the phpinfo function is enabled
*
@@ -336,7 +354,9 @@ public function &getInfo(): array
*/
public function phpinfoEnabled(): bool
{
- return !\in_array('phpinfo', explode(',', ini_get('disable_functions')));
+ // remove any spaces from the ini value before exploding it
+ $disabledFunctions = str_replace(' ', '', ini_get('disable_functions'));
+ return !\in_array('phpinfo', explode(',', $disabledFunctions));
}
/**
diff --git a/administrator/components/com_admin/src/View/Help/HtmlView.php b/administrator/components/com_admin/src/View/Help/HtmlView.php
index 02abc9ba16989..9d893b8cd8a70 100644
--- a/administrator/components/com_admin/src/View/Help/HtmlView.php
+++ b/administrator/components/com_admin/src/View/Help/HtmlView.php
@@ -10,7 +10,6 @@
namespace Joomla\Component\Admin\Administrator\View\Help;
-use Exception;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Toolbar\ToolbarHelper;
@@ -68,7 +67,7 @@ class HtmlView extends BaseHtmlView
*
* @since 1.6
*
- * @throws Exception
+ * @throws \Exception
*/
public function display($tpl = null): void
{
diff --git a/administrator/components/com_admin/src/View/Sysinfo/HtmlView.php b/administrator/components/com_admin/src/View/Sysinfo/HtmlView.php
index 3b915c8c257b5..3ef5b7c049c95 100644
--- a/administrator/components/com_admin/src/View/Sysinfo/HtmlView.php
+++ b/administrator/components/com_admin/src/View/Sysinfo/HtmlView.php
@@ -10,7 +10,6 @@
namespace Joomla\Component\Admin\Administrator\View\Sysinfo;
-use Exception;
use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
@@ -80,7 +79,7 @@ class HtmlView extends BaseHtmlView
*
* @since 1.6
*
- * @throws Exception
+ * @throws \Exception
*/
public function display($tpl = null): void
{
diff --git a/administrator/components/com_admin/src/View/Sysinfo/JsonView.php b/administrator/components/com_admin/src/View/Sysinfo/JsonView.php
index 4ea9d7d79ef07..f9eafe564abba 100644
--- a/administrator/components/com_admin/src/View/Sysinfo/JsonView.php
+++ b/administrator/components/com_admin/src/View/Sysinfo/JsonView.php
@@ -10,11 +10,12 @@
namespace Joomla\Component\Admin\Administrator\View\Sysinfo;
-use Exception;
use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\AbstractView;
+use Joomla\CMS\User\CurrentUserInterface;
+use Joomla\CMS\User\CurrentUserTrait;
use Joomla\Component\Admin\Administrator\Model\SysinfoModel;
// phpcs:disable PSR1.Files.SideEffects
@@ -26,8 +27,10 @@
*
* @since 3.5
*/
-class JsonView extends AbstractView
+class JsonView extends AbstractView implements CurrentUserInterface
{
+ use CurrentUserTrait;
+
/**
* Execute and display a template script.
*
@@ -37,12 +40,12 @@ class JsonView extends AbstractView
*
* @since 3.5
*
- * @throws Exception
+ * @throws \Exception
*/
public function display($tpl = null): void
{
// Access check.
- if (!Factory::getUser()->authorise('core.admin')) {
+ if (!$this->getCurrentUser()->authorise('core.admin')) {
throw new NotAllowed(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}
diff --git a/administrator/components/com_admin/src/View/Sysinfo/TextView.php b/administrator/components/com_admin/src/View/Sysinfo/TextView.php
index 603c565aeaebe..48b8ac17245e8 100644
--- a/administrator/components/com_admin/src/View/Sysinfo/TextView.php
+++ b/administrator/components/com_admin/src/View/Sysinfo/TextView.php
@@ -10,11 +10,12 @@
namespace Joomla\Component\Admin\Administrator\View\Sysinfo;
-use Exception;
use Joomla\CMS\Access\Exception\NotAllowed;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\AbstractView;
+use Joomla\CMS\User\CurrentUserInterface;
+use Joomla\CMS\User\CurrentUserTrait;
use Joomla\Component\Admin\Administrator\Model\SysinfoModel;
// phpcs:disable PSR1.Files.SideEffects
@@ -26,8 +27,10 @@
*
* @since 3.5
*/
-class TextView extends AbstractView
+class TextView extends AbstractView implements CurrentUserInterface
{
+ use CurrentUserTrait;
+
/**
* Execute and display a template script.
*
@@ -37,12 +40,12 @@ class TextView extends AbstractView
*
* @since 3.5
*
- * @throws Exception
+ * @throws \Exception
*/
public function display($tpl = null): void
{
// Access check.
- if (!Factory::getUser()->authorise('core.admin')) {
+ if (!$this->getCurrentUser()->authorise('core.admin')) {
throw new NotAllowed(Text::_('JERROR_ALERTNOAUTHOR'), 403);
}
@@ -146,6 +149,7 @@ protected function renderSection(string $sectionName, array $sectionData, int $l
}
if (\is_int($name) && ($name == 0 || $name == 1)) {
+ // The term "Master" is used because it is the term used in phpinfo() and this is a text representation of that.
$name = ($name == 0 ? 'Local Value' : 'Master Value');
}
diff --git a/administrator/components/com_admin/tmpl/help/langforum.php b/administrator/components/com_admin/tmpl/help/langforum.php
index 979c726533351..b73500e014529 100644
--- a/administrator/components/com_admin/tmpl/help/langforum.php
+++ b/administrator/components/com_admin/tmpl/help/langforum.php
@@ -13,7 +13,7 @@
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
-Factory::getLanguage()->load('mod_menu', JPATH_ADMINISTRATOR);
+$this->getLanguage()->load('mod_menu', JPATH_ADMINISTRATOR);
$forumId = (int) Text::_('MOD_MENU_HELP_SUPPORT_OFFICIAL_LANGUAGE_FORUM_VALUE');
diff --git a/administrator/components/com_admin/tmpl/sysinfo/default_system.php b/administrator/components/com_admin/tmpl/sysinfo/default_system.php
index 0891b5c2ef82b..06e1bdb41f60a 100644
--- a/administrator/components/com_admin/tmpl/sysinfo/default_system.php
+++ b/administrator/components/com_admin/tmpl/sysinfo/default_system.php
@@ -120,6 +120,14 @@
info['version']; ?>
+