We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
New language relevant PR in upstream repo: joomla/joomla-cms#44695 Here are the upstream changes:
diff --git a/administrator/components/com_actionlogs/src/Model/ActionlogModel.php b/administrator/components/com_actionlogs/src/Model/ActionlogModel.php index 0c7c46c3029d7..8cbbbe2729a40 100644 --- a/administrator/components/com_actionlogs/src/Model/ActionlogModel.php +++ b/administrator/components/com_actionlogs/src/Model/ActionlogModel.php @@ -126,7 +126,7 @@ protected function sendNotificationEmails($messages, $username, $context) $query = $db->getQuery(true); $query - ->select($db->quoteName(['u.email', 'l.extensions'])) + ->select($db->quoteName(['u.email', 'u.username', 'l.extensions', 'l.exclude_self'])) ->from($db->quoteName('#__users', 'u')) ->where($db->quoteName('u.block') . ' = 0') ->join( @@ -142,6 +142,10 @@ protected function sendNotificationEmails($messages, $username, $context) $recipients = []; foreach ($users as $user) { + if ($user->username === $this->getCurrentUser()->username && $user->exclude_self) { + continue; + } + $extensions = json_decode($user->extensions, true); if ($extensions && \in_array(strtok($context, '.'), $extensions)) { diff --git a/administrator/components/com_config/src/Model/ApplicationModel.php b/administrator/components/com_config/src/Model/ApplicationModel.php index a362c9523c808..4fbe8c5651ae9 100644 --- a/administrator/components/com_config/src/Model/ApplicationModel.php +++ b/administrator/components/com_config/src/Model/ApplicationModel.php @@ -299,6 +299,19 @@ public function save($data) 'prefix' => $data['dbprefix'], ]; + // Validate database name + if (\in_array($options['driver'], ['pgsql', 'postgresql']) && !preg_match('#^[a-zA-Z_][0-9a-zA-Z_$]*$#', $options['database'])) { + $app->enqueueMessage(Text::_('COM_CONFIG_FIELD_DATABASE_NAME_INVALID_MSG_POSTGRES'), 'warning'); + + return false; + } + + if (\in_array($options['driver'], ['mysql', 'mysqli']) && preg_match('#[\\\\\/]#', $options['database'])) { + $app->enqueueMessage(Text::_('COM_CONFIG_FIELD_DATABASE_NAME_INVALID_MSG_MYSQL'), 'warning'); + + return false; + } + if ((int) $data['dbencryption'] !== 0) { $options['ssl'] = [ 'enable' => true, diff --git a/administrator/components/com_contact/tmpl/contacts/default_batch_body.php b/administrator/components/com_contact/tmpl/contacts/default_batch_body.php index 3d1f89331baab..ec6122f02701e 100644 --- a/administrator/components/com_contact/tmpl/contacts/default_batch_body.php +++ b/administrator/components/com_contact/tmpl/contacts/default_batch_body.php @@ -48,11 +48,6 @@ <?php echo LayoutHelper::render('joomla.html.batch.tag', []); ?> </div> </div> - <div class="form-group col-md-6"> - <div class="controls"> - <?php echo LayoutHelper::render('joomla.html.batch.user', ['noUser' => $noUser]); ?> - </div> - </div> </div> </div> <div class="btn-toolbar p-3"> diff --git a/administrator/components/com_finder/src/View/Index/HtmlView.php b/administrator/components/com_finder/src/View/Index/HtmlView.php index 04e1e72c229de..af44c4dea913b 100644 --- a/administrator/components/com_finder/src/View/Index/HtmlView.php +++ b/administrator/components/com_finder/src/View/Index/HtmlView.php @@ -112,6 +112,15 @@ class HtmlView extends BaseHtmlView */ private $isEmptyState = false; + /** + * The finder plugins status + * + * @var boolean + * + * @since __DEPLOY_VERSION__ + */ + protected $finderPlugins = true; + /** * Method to display the view. * @@ -157,6 +166,11 @@ public function display($tpl = null) $this->finderPluginId = FinderHelper::getFinderPluginId(); } + // Check that the finder plugins are enabled + if (!PluginHelper::getPlugin('finder')) { + $this->finderPlugins = false; + } + // Configure the toolbar. $this->addToolbar(); diff --git a/administrator/components/com_finder/tmpl/index/default.php b/administrator/components/com_finder/tmpl/index/default.php index 47471f697fd79..da5fe365c863c 100644 --- a/administrator/components/com_finder/tmpl/index/default.php +++ b/administrator/components/com_finder/tmpl/index/default.php @@ -52,6 +52,13 @@ Factory::getApplication()->enqueueMessage(Text::sprintf('COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED_LINK', $link), 'warning'); } +// Show warning that the finder plugins are disabled +if (!$this->finderPlugins) { + $url = 'index.php?option=com_plugins&filter[folder]=finder'; + $link = HTMLHelper::_('link', Route::_($url), Text::_('COM_FINDER_FINDER_PLUGINS'), 'class="alert-link"'); + Factory::getApplication()->enqueueMessage(Text::sprintf('COM_FINDER_INDEX_PLUGIN_FINDER_NOT_ENABLED_LINK', $link), 'warning'); +} + ?> <form action="<?php echo Route::_('index.php?option=com_finder&view=index'); ?>" method="post" name="adminForm" id="adminForm"> <div class="row"> diff --git a/administrator/components/com_finder/tmpl/index/emptystate.php b/administrator/components/com_finder/tmpl/index/emptystate.php index dfbca2996ae6c..10a2395144ea6 100644 --- a/administrator/components/com_finder/tmpl/index/emptystate.php +++ b/administrator/components/com_finder/tmpl/index/emptystate.php @@ -55,3 +55,10 @@ ); Factory::getApplication()->enqueueMessage(Text::sprintf('COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED_LINK', $link), 'warning'); } + +// Show warning that the finder plugins are disabled +if (!$this->finderPlugins) { + $url = 'index.php?option=com_plugins&filter[folder]=finder'; + $link = HTMLHelper::_('link', Route::_($url), Text::_('COM_FINDER_FINDER_PLUGINS'), 'class="alert-link"'); + Factory::getApplication()->enqueueMessage(Text::sprintf('COM_FINDER_INDEX_PLUGIN_FINDER_NOT_ENABLED_LINK', $link), 'warning'); +} diff --git a/administrator/components/com_scheduler/forms/filter_logs.xml b/administrator/components/com_scheduler/forms/filter_logs.xml index 8fcfddc8e24f1..fb4b4cca18ebe 100644 --- a/administrator/components/com_scheduler/forms/filter_logs.xml +++ b/administrator/components/com_scheduler/forms/filter_logs.xml @@ -61,4 +61,4 @@ class="js-select-submit-on-change" /> </fields> -</form> \ No newline at end of file +</form> diff --git a/administrator/components/com_scheduler/src/Controller/LogsController.php b/administrator/components/com_scheduler/src/Controller/LogsController.php index bc571028bba6b..f8fb7f6ba2515 100644 --- a/administrator/components/com_scheduler/src/Controller/LogsController.php +++ b/administrator/components/com_scheduler/src/Controller/LogsController.php @@ -10,10 +10,8 @@ namespace Joomla\Component\Scheduler\Administrator\Controller; -use Joomla\CMS\Access\Exception\NotAllowed; use Joomla\CMS\Language\Text; use Joomla\CMS\MVC\Controller\AdminController; -use Joomla\Utilities\ArrayHelper; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; @@ -46,7 +44,7 @@ class LogsController extends AdminController * * @since 5.3.0 */ - public function getModel($name = 'Logs', $prefix = 'Administrator', $config = ['ignore_request' => true]) + public function getModel($name = 'Log', $prefix = 'Administrator', $config = ['ignore_request' => true]) { return parent::getModel($name, $prefix, $config); } @@ -73,39 +71,4 @@ public function purge() $this->setRedirect('index.php?option=com_scheduler&view=logs', $message); } - - /** - * Removes an item. - * - * Overrides Joomla\CMS\MVC\Controller\FormController::delete to check the core.admin permission. - * - * @return void - * - * @since 5.3.0 - */ - public function delete(): void - { - $ids = $this->input->get('cid', [], 'array'); - - if (!$this->app->getIdentity()->authorise('core.admin', $this->option)) { - throw new NotAllowed(Text::_('JERROR_ALERTNOAUTHOR'), 403); - } - - if (empty($ids)) { - $this->setMessage(Text::_('COM_SCHEDULER_NO_LOGS_SELECTED'), 'warning'); - $this->setRedirect('index.php?option=com_scheduler&view=logs'); - return; - } - - // Get the model. - $model = $this->getModel(); - $ids = ArrayHelper::toInteger($ids); - - // Remove the items. - if ($model->delete($ids)) { - $this->setMessage(Text::plural('COM_SCHEDULER_N_ITEMS_DELETED', \count($ids))); - } - - $this->setRedirect('index.php?option=com_scheduler&view=logs'); - } } diff --git a/administrator/components/com_scheduler/src/Model/LogModel.php b/administrator/components/com_scheduler/src/Model/LogModel.php new file mode 100644 index 0000000000000..edca39da1acaf --- /dev/null +++ b/administrator/components/com_scheduler/src/Model/LogModel.php @@ -0,0 +1,60 @@ +<?php + +/** + * @package Joomla.Administrator + * @subpackage com_scheduler + * + * @copyright (C) 2024 Open Source Matters, Inc. <https://www.joomla.org> + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\Component\Scheduler\Administrator\Model; + +use Joomla\CMS\Form\Form; +use Joomla\CMS\MVC\Model\AdminModel; +use Joomla\CMS\Table\Table; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * MVC Model to interact with the Scheduler logs. + * + * @since __DPELOY_VERSION__ + */ +class LogModel extends AdminModel +{ + /** + * There is no form for the log. + * + * @param array $data Data that needs to go into the form + * @param bool $loadData Should the form load its data from the DB? + * + * @return Form|boolean A Form object on success, false on failure. + * + * @since __DEPLOY_VERSION__ + * @throws \Exception + */ + public function getForm($data = [], $loadData = true) + { + return false; + } + + /** + * Method to get a table object, load it if necessary. + * + * @param string $name The table name. Optional. + * @param string $prefix The class prefix. Optional. + * @param array $options Configuration array for model. Optional. + * + * @return Table + * + * @since __DEPLOY_VERSION__ + * @throws \Exception + */ + public function getTable($name = 'Log', $prefix = 'Administrator', $options = []): Table + { + return parent::getTable($name, $prefix, $options); + } +} diff --git a/administrator/components/com_scheduler/src/Model/LogsModel.php b/administrator/components/com_scheduler/src/Model/LogsModel.php index 932c5f919c10d..85ae4ed39261b 100644 --- a/administrator/components/com_scheduler/src/Model/LogsModel.php +++ b/administrator/components/com_scheduler/src/Model/LogsModel.php @@ -15,7 +15,6 @@ // phpcs:enable PSR1.Files.SideEffects use Joomla\CMS\Component\ComponentHelper; -use Joomla\CMS\Factory; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\CMS\MVC\Model\ListModel; use Joomla\Component\Scheduler\Administrator\Helper\SchedulerHelper; @@ -185,91 +184,4 @@ protected function getListQuery() return $query; } - - /** - * Delete rows. - * - * @param array $pks The ids of the items to delete. - * - * @return boolean Returns true on success, false on failure. - */ - public function delete($pks) - { - if ($this->canDelete($pks)) { - // Delete logs from list - $db = $this->getDatabase(); - $query = $db->getQuery(true) - ->delete($db->quoteName('#__scheduler_logs')) - ->whereIn($db->quoteName('id'), $pks); - - $db->setQuery($query); - $this->setError((string) $query); - - try { - $db->execute(); - } catch (\RuntimeException $e) { - $this->setError($e->getMessage()); - - return false; - } - } else { - Factory::getApplication()->enqueueMessage(Text::_('JERROR_CORE_DELETE_NOT_PERMITTED'), 'error'); - } - - return true; - } - - /** - * Determine whether a record may be deleted taking into consideration - * the user's permissions over the record. - * - * @param object $record The database row/record in question - * - * @return boolean True if the record may be deleted - * - * @since 5.3.0 - * @throws \Exception - */ - protected function canDelete($record): bool - { - // Record doesn't exist, can't delete - if (empty($record)) { - return false; - } - - return Factory::getApplication()->getIdentity()->authorise('core.delete', 'com_scheduler'); - } - - /** - * @param array $data The task execution data. - * - * @return void - * - * @since 5.3.0 - * @throws Exception - */ - public function logTask(array $data): void - { - $model = Factory::getApplication()->bootComponent('com_scheduler') - ->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]); - $taskInfo = $model->getItem($data['TASK_ID']); - $taskOptions = SchedulerHelper::getTaskOptions(); - $safeTypeTitle = $taskOptions->findOption($taskInfo->type)->title ?? ''; - $duration = ($data['TASK_DURATION'] ?? 0); - $created = Factory::getDate()->toSql(); - - /** @var \Joomla\Component\Schduler\Administrator\Table\LogsTable $table */ - $logsTable = $this->getTable(); - $logsTable->tasktype = $safeTypeTitle; - $logsTable->taskname = $data['TASK_TITLE']; - $logsTable->duration = $duration; - $logsTable->jobid = $data['TASK_ID']; - $logsTable->exitcode = $data['EXIT_CODE']; - $logsTable->taskid = $data['TASK_TIMES']; - $logsTable->lastdate = $created; - $logsTable->nextdate = $taskInfo->next_execution; - - // Log the execution of the task. - $logsTable->store(); - } } diff --git a/administrator/components/com_scheduler/src/Model/TaskModel.php b/administrator/components/com_scheduler/src/Model/TaskModel.php index 6aa43dcf2a949..8396138f0f031 100644 --- a/administrator/components/com_scheduler/src/Model/TaskModel.php +++ b/administrator/components/com_scheduler/src/Model/TaskModel.php @@ -254,7 +254,7 @@ protected function populateState(): void * @since 4.1.0 * @throws \Exception */ - public function getTable($name = 'Task', $prefix = 'Table', $options = []): Table + public function getTable($name = 'Task', $prefix = 'Administrator', $options = []): Table { return parent::getTable($name, $prefix, $options); } diff --git a/administrator/components/com_scheduler/src/Table/LogsTable.php b/administrator/components/com_scheduler/src/Table/LogTable.php similarity index 97% rename from administrator/components/com_scheduler/src/Table/LogsTable.php rename to administrator/components/com_scheduler/src/Table/LogTable.php index c3142d4988893..522186f4f542f 100644 --- a/administrator/components/com_scheduler/src/Table/LogsTable.php +++ b/administrator/components/com_scheduler/src/Table/LogTable.php @@ -23,7 +23,7 @@ * * @since 5.3.0 */ -class LogsTable extends Table +class LogTable extends Table { /** * Constructor diff --git a/administrator/language/en-GB/com_config.ini b/administrator/language/en-GB/com_config.ini index d896ccdc803d1..027846bfb3c83 100644 --- a/administrator/language/en-GB/com_config.ini +++ b/administrator/language/en-GB/com_config.ini @@ -55,6 +55,8 @@ COM_CONFIG_FIELD_DATABASE_ENCRYPTION_MODE_VALUE_ONE_WAY="One-way authentication" COM_CONFIG_FIELD_DATABASE_ENCRYPTION_MODE_VALUE_TWO_WAY="Two-way authentication" COM_CONFIG_FIELD_DATABASE_ENCRYPTION_VERIFY_SERVER_CERT_LABEL="Verify Server Certificate" COM_CONFIG_FIELD_DATABASE_HOST_LABEL="Host" +COM_CONFIG_FIELD_DATABASE_NAME_INVALID_MSG_MYSQL="The database name is invalid. It must not contain the following characters: \ /" +COM_CONFIG_FIELD_DATABASE_NAME_INVALID_MSG_POSTGRES="The database name is invalid. It must start with a letter, followed by alphanumeric characters." COM_CONFIG_FIELD_DATABASE_NAME_LABEL="Database Name" COM_CONFIG_FIELD_DATABASE_PASSWORD_DESC="Do not edit this field unless absolutely necessary (eg after the transfer of the database to a new hosting provider)." COM_CONFIG_FIELD_DATABASE_PASSWORD_LABEL="Database Password" diff --git a/administrator/language/en-GB/com_contact.ini b/administrator/language/en-GB/com_contact.ini index daf6f4fea04de..2c6f613d04dda 100644 --- a/administrator/language/en-GB/com_contact.ini +++ b/administrator/language/en-GB/com_contact.ini @@ -196,6 +196,7 @@ COM_CONTACT_XML_DESCRIPTION="This component shows a listing of contact informati JGLOBAL_FIELDSET_DISPLAY_LINK_OPTIONS="Link options" JGLOBAL_FIELDSET_MISCELLANEOUS="Miscellaneous Information" JGLOBAL_NEWITEMSLAST_DESC="New Contacts default to the last position. Ordering can be changed after this Contact is saved." +; Deprecated, will be removed with 7.0 JLIB_HTML_BATCH_USER_LABEL="Set Linked User" JLIB_RULES_SETTING_NOTES_COM_CONTACT="Changes apply to this component only.<br><em><strong>Inherited</strong></em> - a Global Configuration setting or higher level setting is applied.<br><em><strong>Denied</strong></em> always wins - whatever is set at the Global or higher level and applies to all child elements.<br><em><strong>Allowed</strong></em> will enable the action for this component unless overruled by a Global Configuration setting." ; Alternate language strings for the rules form field diff --git a/administrator/language/en-GB/com_finder.ini b/administrator/language/en-GB/com_finder.ini index 60bf2fcf1fbca..f1709855b21ef 100644 --- a/administrator/language/en-GB/com_finder.ini +++ b/administrator/language/en-GB/com_finder.ini @@ -111,6 +111,7 @@ COM_FINDER_FILTERS_N_ITEMS_UNPUBLISHED="%d filters unpublished." COM_FINDER_FILTERS_N_ITEMS_UNPUBLISHED_1="Filter unpublished." COM_FINDER_FILTERS_TABLE_CAPTION="Filters" COM_FINDER_FILTERS_TOOLBAR_TITLE="Smart Search: Search Filters" +COM_FINDER_FINDER_PLUGINS="Smart Search Finder Plugins" COM_FINDER_HEADING_CHILDREN="Maps" COM_FINDER_HEADING_CREATED_BY="Created By" COM_FINDER_HEADING_CREATED_BY_ASC="Created By ascending" @@ -148,6 +149,7 @@ COM_FINDER_INDEX_NO_DATA="No content has been indexed." COM_FINDER_INDEX_OPTIMISE_FINISHED="Optimisation finished." COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED="The Smart Search Content Plugin is disabled. Changes to content will not update the Smart Search index until the Plugin is enabled." COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED_LINK="The %s is disabled. Changes to content will not update the Smart Search index if you do not enable this plugin." +COM_FINDER_INDEX_PLUGIN_FINDER_NOT_ENABLED_LINK="The %s are disabled. Changes to content will not update the Smart Search index if you do not enable these plugins." COM_FINDER_INDEX_PURGE_FAILED="Failed to delete selected items." COM_FINDER_INDEX_PURGE_SUCCESS="All items have been deleted." COM_FINDER_INDEX_SEARCH_DESC="Search in title, URL and last updated date." diff --git a/administrator/language/en-GB/com_scheduler.ini b/administrator/language/en-GB/com_scheduler.ini index eac54933d7d34..68f58d23f92ef 100644 --- a/administrator/language/en-GB/com_scheduler.ini +++ b/administrator/language/en-GB/com_scheduler.ini @@ -94,6 +94,8 @@ COM_SCHEDULER_LAST_RUN_ASC="Last Run ascending" COM_SCHEDULER_LAST_RUN_DATE="Last Run Date" COM_SCHEDULER_LAST_RUN_DESC="Last Run descending" COM_SCHEDULER_LOGS_CLEAR="All execution history logs have been deleted." +COM_SCHEDULER_LOGS_N_ITEMS_DELETED="%d logs deleted." +COM_SCHEDULER_LOGS_N_ITEMS_DELETED_1="Log deleted." COM_SCHEDULER_MANAGER_TASKS="Scheduled Tasks" COM_SCHEDULER_MANAGER_TASK_EDIT="Edit Task" COM_SCHEDULER_MANAGER_TASK_NEW="New Task" @@ -119,7 +121,6 @@ COM_SCHEDULER_N_ITEMS_UNPUBLISHED="%d tasks disabled." COM_SCHEDULER_N_ITEMS_UNPUBLISHED_1="Task disabled." COM_SCHEDULER_N_ITEMS_UNLOCKED="%d tasks unlocked." COM_SCHEDULER_N_ITEMS_UNLOCKED_1="Task unlocked." -COM_SCHEDULER_NO_LOGS_SELECTED="No execution history logs selected." COM_SCHEDULER_OPTION_EXECUTION_MANUAL_LABEL="Manual Execution" COM_SCHEDULER_OPTION_ORPHANED_HIDE="Hide Orphaned" COM_SCHEDULER_OPTION_ORPHANED_ONLY="Only Orphaned" diff --git a/administrator/language/en-GB/plg_system_actionlogs.ini b/administrator/language/en-GB/plg_system_actionlogs.ini index 2627c9443c7d7..304a24738df00 100644 --- a/administrator/language/en-GB/plg_system_actionlogs.ini +++ b/administrator/language/en-GB/plg_system_actionlogs.ini @@ -10,6 +10,7 @@ PLG_SYSTEM_ACTIONLOGS_INFO_LABEL="Information" PLG_SYSTEM_ACTIONLOGS_JOOMLA_ACTIONLOG_DISABLED="Action Log - Joomla" PLG_SYSTEM_ACTIONLOGS_JOOMLA_ACTIONLOG_DISABLED_REDIRECT="The %s plugin is disabled." PLG_SYSTEM_ACTIONLOGS_NOTIFICATIONS="Email Notifications" +PLG_SYSTEM_ACTIONLOGS_NOTIFICATIONS_EXCLUDE="Exclude Self" PLG_SYSTEM_ACTIONLOGS_OPTIONS="User Actions Log Options" PLG_SYSTEM_ACTIONLOGS_XML_DESCRIPTION="Records the actions of users on the site so they can be reviewed if required." ; Common content type log messages diff --git a/build/media_source/com_associations/css/sidebyside.css b/build/media_source/com_associations/css/sidebyside.css index 10deaafeb5372..9861e71b7051e 100644 --- a/build/media_source/com_associations/css/sidebyside.css +++ b/build/media_source/com_associations/css/sidebyside.css @@ -4,7 +4,7 @@ */ .sidebyside .outer-panel { - float: left; + float: inline-start; width: 50%; } @@ -33,11 +33,11 @@ } .sidebyside .langtarget { - float: left; + float: inline-start; } .sidebyside .modaltarget { - float: left; + float: inline-start; margin-inline-start: .5rem; } @@ -50,27 +50,10 @@ } .target-text { - float: left; + float: inline-start; width: auto; } -/* RTL overrides */ -[dir=rtl] .sidebyside .outer-panel { - float: right; -} - -[dir=rtl] .sidebyside .langtarget { - float: right; -} - -[dir=rtl] .sidebyside .modaltarget { - float: right; -} - -[dir=rtl] .target-text { - float: right; -} - /* Responsive layout */ @media (max-width: 767.98px) { .sidebyside .outer-panel { diff --git a/build/media_source/system/scss/system-site-offline.scss b/build/media_source/system/scss/system-site-offline.scss index ec69179d7d793..d577bd8e59767 100644 --- a/build/media_source/system/scss/system-site-offline.scss +++ b/build/media_source/system/scss/system-site-offline.scss @@ -32,7 +32,7 @@ img { } #frame form { - text-align: left; + text-align: start; } /* -- class styles ---------------------------------- */ @@ -92,7 +92,7 @@ input.button:hover { } fieldset.input p { - clear: left; + clear: inline-start; } #frmlogin { @@ -100,7 +100,7 @@ fieldset.input p { } #frmlogin fieldset.button { - text-align: right; + text-align: end; } /* -- message styles ----------------------------------- */ diff --git a/build/media_source/system/scss/system-site-offline_rtl.scss b/build/media_source/system/scss/system-site-offline_rtl.scss deleted file mode 100644 index 8fb4df13ee9b3..0000000000000 --- a/build/media_source/system/scss/system-site-offline_rtl.scss +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org> - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -/** - * Joomla! 4.0 Offline RTL css file - * - * @package Joomla - * @since 1.5 - * @version 1.0 - */ - -#frame form { text-align: right; } -label { float: right; } -fieldset.input p {clear: right;} - -/* -- message styles ----------------------------------- */ -.alert { - padding: 8px 8px 25px 14px; - text-align: right; -} -.alert .close { - right: 0; - left: -20px; - float: left; -} diff --git a/build/media_source/templates/site/cassiopeia/scss/template.scss b/build/media_source/templates/site/cassiopeia/scss/template.scss index 3d169dfe75a15..ed3f24078e2cc 100644 --- a/build/media_source/templates/site/cassiopeia/scss/template.scss +++ b/build/media_source/templates/site/cassiopeia/scss/template.scss @@ -60,127 +60,3 @@ --#{$color}: #{$value}; } } - -.border-primary { - border-color: var(--primary) !important; -} - -.border-secondary { - border-color: var(--secondary) !important; -} - -.border-success { - border-color: var(--success) !important; -} - -.border-info { - border-color: var(--info) !important; -} - -.border-warning { - border-color: var(--warning) !important; -} - -.border-danger { - border-color: var(--danger) !important; -} - -.border-light { - border-color: var(--light) !important; -} - -.border-dark { - border-color: var(--dark) !important; -} - -.border-white { - border-color: var(--white) !important; -} - -.text-primary { - color: var(--primary) !important; -} - -.text-secondary { - color: var(--secondary) !important; -} - -.text-success { - color: var(--success) !important; -} - -.text-info { - color: var(--info) !important; -} - -.text-warning { - color: var(--warning) !important; -} - -.text-danger { - color: var(--danger) !important; -} - -.text-light { - color: var(--light) !important; -} - -.text-dark { - color: var(--dark) !important; -} - -.text-black { - color: var(--black) !important; -} - -.text-white { - color: var(--white) !important; -} - -.text-body { - color: var(--body-color) !important; -} - -.bg-primary { - background-color: var(--primary) !important; -} - -.bg-secondary { - background-color: var(--secondary) !important; -} - -.bg-success { - background-color: var(--success) !important; -} - -.bg-info { - background-color: var(--info) !important; -} - -.bg-warning { - background-color: var(--warning) !important; -} - -.bg-danger { - background-color: var(--danger) !important; -} - -.bg-light { - background-color: var(--light) !important; -} - -.bg-dark { - background-color: var(--dark) !important; -} - -.bg-black { - background-color: var(--black) !important; -} - -.bg-white { - background-color: var(--white) !important; -} - -.bg-body { - background-color: var(--body-bg) !important; -} diff --git a/components/com_finder/src/View/Search/HtmlView.php b/components/com_finder/src/View/Search/HtmlView.php index dc9399be3dcee..9178f9deffa21 100644 --- a/components/com_finder/src/View/Search/HtmlView.php +++ b/components/com_finder/src/View/Search/HtmlView.php @@ -208,8 +208,9 @@ public function display($tpl = null) if (\is_array($this->results)) { $dispatcher = $this->getDispatcher(); - // Import Finder plugins + // Import Content and Finder plugins PluginHelper::importPlugin('finder', null, true, $dispatcher); + PluginHelper::importPlugin('content', null, true, $dispatcher); foreach ($this->results as $result) { $dispatcher->dispatch('onFinderResult', new ResultEvent('onFinderResult', [ diff --git a/components/com_tags/src/View/Tag/FeedView.php b/components/com_tags/src/View/Tag/FeedView.php index 7ce8b337dbf37..9a3fd8164bcd9 100644 --- a/components/com_tags/src/View/Tag/FeedView.php +++ b/components/com_tags/src/View/Tag/FeedView.php @@ -95,7 +95,7 @@ public function display($tpl = null) $feeditem->link = Route::_($item->link); $feeditem->description = $description; $feeditem->date = $date; - $feeditem->category = $title; + $feeditem->category = $item->core_category_title; $feeditem->author = $author; if ($feedEmail === 'site') { diff --git a/installation/sql/mysql/extensions.sql b/installation/sql/mysql/extensions.sql index 7d4678ca5c4e9..e8b98d7cbf0df 100644 --- a/installation/sql/mysql/extensions.sql +++ b/installation/sql/mysql/extensions.sql @@ -873,7 +873,8 @@ INSERT INTO `#__action_log_config` (`id`, `type_title`, `type_alias`, `id_holder (19, 'application_config', 'com_config.application', '', 'name', '', 'PLG_ACTIONLOG_JOOMLA'), (20, 'task', 'com_scheduler.task', 'id', 'title', '#__scheduler_tasks', 'PLG_ACTIONLOG_JOOMLA'), (21, 'field', 'com_fields.field', 'id', 'title', '#__fields', 'PLG_ACTIONLOG_JOOMLA'), -(22, 'guidedtour', 'com_guidedtours.state', 'id', 'title', '#__guidedtours', 'PLG_ACTIONLOG_JOOMLA'); +(22, 'guidedtour', 'com_guidedtours.state', 'id', 'title', '#__guidedtours', 'PLG_ACTIONLOG_JOOMLA'), +(23, 'contact', 'com_contact.form', 'id', 'name', '#__contact_details', 'PLG_ACTIONLOG_JOOMLA'); -- -------------------------------------------------------- @@ -886,6 +887,7 @@ CREATE TABLE IF NOT EXISTS `#__action_logs_users` ( `user_id` int UNSIGNED NOT NULL, `notify` tinyint UNSIGNED NOT NULL, `extensions` text NOT NULL, + `exclude_self` tinyint UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (`user_id`), KEY `idx_notify` (`notify`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci; diff --git a/installation/sql/postgresql/extensions.sql b/installation/sql/postgresql/extensions.sql index 6cb5dd37573eb..ee61578bfe5a1 100644 --- a/installation/sql/postgresql/extensions.sql +++ b/installation/sql/postgresql/extensions.sql @@ -834,7 +834,8 @@ INSERT INTO "#__action_log_config" ("id", "type_title", "type_alias", "id_holder (19, 'application_config', 'com_config.application', '', 'name', '', 'PLG_ACTIONLOG_JOOMLA'), (20, 'task', 'com_scheduler.task', 'id', 'title', '#__scheduler_tasks', 'PLG_ACTIONLOG_JOOMLA'), (21, 'field', 'com_fields.field', 'id', 'title', '#__fields', 'PLG_ACTIONLOG_JOOMLA'), -(22, 'guidedtour', 'com_guidedtours.state', 'id', 'title', '#__guidedtours', 'PLG_ACTIONLOG_JOOMLA'); +(22, 'guidedtour', 'com_guidedtours.state', 'id', 'title', '#__guidedtours', 'PLG_ACTIONLOG_JOOMLA'), +(23, 'contact', 'com_contact.form', 'id', 'name', '#__contact_details', 'PLG_ACTIONLOG_JOOMLA'); SELECT setval('#__action_log_config_id_seq', 23, false); @@ -847,6 +848,7 @@ CREATE TABLE "#__action_logs_users" ( "user_id" integer NOT NULL, "notify" integer NOT NULL, "extensions" text NOT NULL, + "exclude_self" integer NOT NULL DEFAULT 0, PRIMARY KEY ("user_id") ); diff --git a/layouts/joomla/html/batch/user.php b/layouts/joomla/html/batch/user.php index c78c665994971..618f93573b7ed 100644 --- a/layouts/joomla/html/batch/user.php +++ b/layouts/joomla/html/batch/user.php @@ -6,6 +6,8 @@ * * @copyright (C) 2015 Open Source Matters, Inc. <https://www.joomla.org> * @license GNU General Public License version 2 or later; see LICENSE.txt + * + * @deprecated 5.3 without replacement will be removed in 7.0 */ defined('_JEXEC') or die; diff --git a/libraries/src/Helper/TagsHelper.php b/libraries/src/Helper/TagsHelper.php index 4b7378ffd8da6..56f7ded3b7a96 100644 --- a/libraries/src/Helper/TagsHelper.php +++ b/libraries/src/Helper/TagsHelper.php @@ -591,6 +591,7 @@ public function getTagItemsQuery( 'MAX(' . $db->quoteName('c.core_publish_down') . ') AS ' . $db->quoteName('core_publish_down'), 'MAX(' . $db->quoteName('ct.type_title') . ') AS ' . $db->quoteName('content_type_title'), 'MAX(' . $db->quoteName('ct.router') . ') AS ' . $db->quoteName('router'), + 'MAX(' . $db->quoteName('tc.title') . ') AS ' . $db->quoteName('core_category_title'), 'CASE WHEN ' . $db->quoteName('c.core_created_by_alias') . ' > ' . $db->quote(' ') . ' THEN ' . $db->quoteName('c.core_created_by_alias') . ' ELSE ' . $db->quoteName('ua.name') . ' END AS ' . $db->quoteName('author'), $db->quoteName('ua.email', 'author_email'), diff --git a/plugins/content/emailcloak/src/Extension/EmailCloak.php b/plugins/content/emailcloak/src/Extension/EmailCloak.php index 3a4260e6f1257..67f8bc8b78644 100644 --- a/plugins/content/emailcloak/src/Extension/EmailCloak.php +++ b/plugins/content/emailcloak/src/Extension/EmailCloak.php @@ -11,6 +11,7 @@ namespace Joomla\Plugin\Content\EmailCloak\Extension; use Joomla\CMS\Event\Content\ContentPrepareEvent; +use Joomla\CMS\Event\Finder\ResultEvent; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\Event\SubscriberInterface; @@ -36,7 +37,33 @@ final class EmailCloak extends CMSPlugin implements SubscriberInterface */ public static function getSubscribedEvents(): array { - return ['onContentPrepare' => 'onContentPrepare']; + return [ + 'onContentPrepare' => 'onContentPrepare', + 'onFinderResult' => 'onFinderResult', + ]; + } + + /** + * Plugin that cloaks all emails in com_finder from spambots via Javascript. + * + * @param ResultEvent $event Event instance + * + * @return void + */ + public function onFinderResult(ResultEvent $event) + { + $item = $event->getItem(); + + // If the item does not have a text property there is nothing to do + if (!isset($item->description)) { + return; + } + + $text = $this->cloak($item->description); + + if ($text) { + $item->description = $text; + } } /** diff --git a/plugins/sampledata/blog/src/Extension/Blog.php b/plugins/sampledata/blog/src/Extension/Blog.php index 671556dd5417f..c6aa9d01d157d 100644 --- a/plugins/sampledata/blog/src/Extension/Blog.php +++ b/plugins/sampledata/blog/src/Extension/Blog.php @@ -105,6 +105,9 @@ public function onAjaxSampledataApplyStep1() $language = Multilanguage::isEnabled() ? $this->getApplication()->getLanguage()->getTag() : '*'; $langSuffix = ($language !== '*') ? ' (' . $language . ')' : ''; + // Disable language debug to prevent debug_lang_const being added to the string + $this->getApplication()->getLanguage()->setDebug(false); + /** @var \Joomla\Component\Tags\Administrator\Model\TagModel $model */ $modelTag = $this->getApplication()->bootComponent('com_tags')->getMVCFactory() ->createModel('Tag', 'Administrator', ['ignore_request' => true]); @@ -794,6 +797,9 @@ public function onAjaxSampledataApplyStep2() $language = Multilanguage::isEnabled() ? $this->getApplication()->getLanguage()->getTag() : '*'; $langSuffix = ($language !== '*') ? ' (' . $language . ')' : ''; + // Disable language debug to prevent debug_lang_const being added to the string + $this->getApplication()->getLanguage()->setDebug(false); + // Create the menu types. $menuTable = new \Joomla\Component\Menus\Administrator\Table\MenuTypeTable($this->getDatabase()); $menuTypes = []; @@ -1343,6 +1349,9 @@ public function onAjaxSampledataApplyStep3() $language = Multilanguage::isEnabled() ? $this->getApplication()->getLanguage()->getTag() : '*'; $langSuffix = ($language !== '*') ? ' (' . $language . ')' : ''; + // Disable language debug to prevent debug_lang_const being added to the string + $this->getApplication()->getLanguage()->setDebug(false); + // Add Include Paths. /** @var \Joomla\Component\Modules\Administrator\Model\ModuleModel $model */ $model = $this->getApplication()->bootComponent('com_modules')->getMVCFactory() @@ -1897,6 +1906,9 @@ private function addMenuItems(array $menuItems, $level) $language = Multilanguage::isEnabled() ? $this->getApplication()->getLanguage()->getTag() : '*'; $langSuffix = ($language !== '*') ? ' (' . $language . ')' : ''; + // Disable language debug to prevent debug_lang_const being added to the string + $this->getApplication()->getLanguage()->setDebug(false); + foreach ($menuItems as $menuItem) { // Reset item.id in model state. $this->menuItemModel->setState('item.id', 0); diff --git a/plugins/system/actionlogs/forms/actionlogs.xml b/plugins/system/actionlogs/forms/actionlogs.xml index 07840b824ed05..ab7def803a2d3 100644 --- a/plugins/system/actionlogs/forms/actionlogs.xml +++ b/plugins/system/actionlogs/forms/actionlogs.xml @@ -24,6 +24,18 @@ showon="actionlogsNotify:1" default="com_content" /> + <field + name="actionlogsExcludeSelf" + type="radio" + label="PLG_SYSTEM_ACTIONLOGS_NOTIFICATIONS_EXCLUDE" + layout="joomla.form.field.radio.switcher" + showon="actionlogsNotify:1" + default="0" + filter="integer" + > + <option value="0">JNO</option> + <option value="1">JYES</option> + </field> </fields> </fieldset> </form> diff --git a/plugins/system/actionlogs/src/Extension/ActionLogs.php b/plugins/system/actionlogs/src/Extension/ActionLogs.php index 233f3ccf71a50..99167f53ed738 100644 --- a/plugins/system/actionlogs/src/Extension/ActionLogs.php +++ b/plugins/system/actionlogs/src/Extension/ActionLogs.php @@ -151,7 +151,7 @@ public function onContentPrepareData($context, $data) $id = (int) $data->id; $query = $db->getQuery(true) - ->select($db->quoteName(['notify', 'extensions'])) + ->select($db->quoteName(['notify', 'extensions', 'exclude_self'])) ->from($db->quoteName('#__action_logs_users')) ->where($db->quoteName('user_id') . ' = :userid') ->bind(':userid', $id, ParameterType::INTEGER); @@ -169,9 +169,10 @@ public function onContentPrepareData($context, $data) // Load plugin language files. $this->loadLanguage(); - $data->actionlogs = new \stdClass(); - $data->actionlogs->actionlogsNotify = $values->notify; - $data->actionlogs->actionlogsExtensions = $values->extensions; + $data->actionlogs = new \stdClass(); + $data->actionlogs->actionlogsNotify = $values->notify; + $data->actionlogs->actionlogsExtensions = $values->extensions; + $data->actionlogs->actionlogsExcludeSelf = $values->exclude_self; if (!HTMLHelper::isRegistered('users.actionlogsNotify')) { HTMLHelper::register('users.actionlogsNotify', [__CLASS__, 'renderActionlogsNotify']); @@ -181,6 +182,10 @@ public function onContentPrepareData($context, $data) HTMLHelper::register('users.actionlogsExtensions', [__CLASS__, 'renderActionlogsExtensions']); } + if (!HTMLHelper::isRegistered('users.actionlogsExcludeSelf')) { + HTMLHelper::register('users.actionlogsExcludeSelf', [__CLASS__, 'renderActionlogsExcludeSelf']); + } + return true; } @@ -227,9 +232,10 @@ public function onUserAfterSave($user, $isNew, $success, $msg): void // If preferences don't exist, insert. if (!$exists && $authorised && isset($user['actionlogs'])) { $notify = (int) $user['actionlogs']['actionlogsNotify']; - $values = [':userid', ':notify']; - $bind = [$userid, $notify]; - $columns = ['user_id', 'notify']; + $exclude = (int) $user['actionlogs']['actionlogsExcludeSelf']; + $values = [':userid', ':notify', ':exclude']; + $bind = [$userid, $notify, $exclude]; + $columns = ['user_id', 'notify', 'exclude_self']; $query->bind($values, $bind, ParameterType::INTEGER); @@ -250,6 +256,11 @@ public function onUserAfterSave($user, $isNew, $success, $msg): void $query->bind(':notify', $notify, ParameterType::INTEGER); + $exclude = (int) $user['actionlogs']['actionlogsExcludeSelf']; + $values[] = $db->quoteName('exclude_self') . ' = :exclude'; + + $query->bind(':exclude', $exclude, ParameterType::INTEGER); + if (isset($user['actionlogs']['actionlogsExtensions'])) { $values[] = $db->quoteName('extensions') . ' = :extension'; $extension = json_encode($user['actionlogs']['actionlogsExtensions']); @@ -324,6 +335,20 @@ public static function renderActionlogsNotify($value) return Text::_($value ? 'JYES' : 'JNO'); } + /** + * Method to render a value. + * + * @param integer|string $value The value (0 or 1). + * + * @return string The rendered value. + * + * @since __DEPLOY_VERSION_ + */ + public static function renderActionlogsExcludeSelf($value) + { + return Text::_($value ? 'JYES' : 'JNO'); + } + /** * Method to render a list of extensions. * @@ -373,7 +398,7 @@ public function onExtensionAfterSave($context, $table, $isNew): void $db = $this->getDatabase(); $query = $db->getQuery(true) - ->select($db->quoteName(['user_id', 'notify', 'extensions'])) + ->select($db->quoteName(['user_id', 'notify', 'extensions', 'exclude_self'])) ->from($db->quoteName('#__action_logs_users')); try { diff --git a/plugins/system/schedulerunner/src/Extension/ScheduleRunner.php b/plugins/system/schedulerunner/src/Extension/ScheduleRunner.php index 65438995db52b..f462a9ebac0da 100644 --- a/plugins/system/schedulerunner/src/Extension/ScheduleRunner.php +++ b/plugins/system/schedulerunner/src/Extension/ScheduleRunner.php @@ -170,11 +170,10 @@ public function runLazyCron(EventInterface $e) } /** - * This method is responsible for the WebCron functionality of the Scheduler component.<br/> + * This method is responsible for the WebCron functionality of the Scheduler component. * Acting on a `com_ajax` call, this method can work in two ways: - * 1. If no Task ID is specified, it triggers the Scheduler to run the next task in - * the task queue. - * 2. If a Task ID is specified, it fetches the task (if it exists) from the Scheduler API and executes it.<br/> + * 1. If no Task ID is specified, it triggers the Scheduler to run the next task in the task queue. + * 2. If a Task ID is specified, it fetches the task (if it exists) from the Scheduler API and executes it. * * URL query parameters: * - `hash` string (required) Webcron hash (from the Scheduler component configuration). @@ -202,8 +201,10 @@ public function runWebCron(Event $event) throw new \Exception($this->getApplication()->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403); } + // Check whether there is an id passed via the URL $id = (int) $this->getApplication()->getInput()->getInt('id', 0); + // When the id is set to 0 the next task is executed $task = $this->runScheduler($id); if (!empty($task) && !empty($task->getContent()['exception'])) { diff --git a/plugins/system/tasknotification/src/Extension/TaskNotification.php b/plugins/system/tasknotification/src/Extension/TaskNotification.php index 81b6563f2ae14..51e03b5feada3 100644 --- a/plugins/system/tasknotification/src/Extension/TaskNotification.php +++ b/plugins/system/tasknotification/src/Extension/TaskNotification.php @@ -12,11 +12,11 @@ use Joomla\CMS\Event\Model; use Joomla\CMS\Factory; -use Joomla\CMS\Form\Form; use Joomla\CMS\Log\Log; use Joomla\CMS\Mail\MailTemplate; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\User\UserFactoryAwareTrait; +use Joomla\Component\Scheduler\Administrator\Helper\SchedulerHelper; use Joomla\Component\Scheduler\Administrator\Task\Status; use Joomla\Component\Scheduler\Administrator\Task\Task; use Joomla\Database\DatabaseAwareTrait; @@ -125,13 +125,8 @@ public function notifyFailure(Event $event): void { /** @var Task $task */ $task = $event->getArgument('subject'); - - // @todo safety checks, multiple files [?] - $outFile = $event->getArgument('subject')->snapshot['output_file'] ?? ''; - $data = $this->getDataFromTask($event->getArgument('subject')); - $model = $this->getApplication()->bootComponent('com_scheduler') - ->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]); - $model->logTask($data); + $data = $this->getDataFromTask($event->getArgument('subject')); + $this->saveLog($data); if (!(int) $task->get('params.notifications.failure_mail', 1)) { return; @@ -140,6 +135,8 @@ public function notifyFailure(Event $event): void // Load translations $this->loadLanguage(); + // @todo safety checks, multiple files [?] + $outFile = $event->getArgument('subject')->snapshot['output_file'] ?? ''; $this->sendMail('plg_system_tasknotification.failure_mail', $data, $outFile); } @@ -185,13 +182,8 @@ public function notifySuccess(Event $event): void { /** @var Task $task */ $task = $event->getArgument('subject'); - - // @todo safety checks, multiple files [?] - $outFile = $event->getArgument('subject')->snapshot['output_file'] ?? ''; - $data = $this->getDataFromTask($event->getArgument('subject')); - $model = $this->getApplication()->bootComponent('com_scheduler') - ->getMVCFactory()->createModel('Logs', 'Administrator', ['ignore_request' => true]); - $model->logTask($data); + $data = $this->getDataFromTask($event->getArgument('subject')); + $this->saveLog($data); if (!(int) $task->get('params.notifications.success_mail', 0)) { return; @@ -199,6 +191,9 @@ public function notifySuccess(Event $event): void // Load translations $this->loadLanguage(); + + // @todo safety checks, multiple files [?] + $outFile = $event->getArgument('subject')->snapshot['output_file'] ?? ''; $this->sendMail('plg_system_tasknotification.success_mail', $data, $outFile); } @@ -214,10 +209,7 @@ public function notifySuccess(Event $event): void */ public function notifyWillResume(Event $event): void { - $data = $this->getDataFromTask($event->getArgument('subject')); - $model = $this->getApplication()->bootComponent('com_scheduler') - ->getMVCFactory()->createModel('Logs', 'Administrator', ['ignore_request' => true]); - $model->logTask($data); + $this->saveLog($this->getDataFromTask($event->getArgument('subject'))); } /** @@ -341,4 +333,32 @@ private function sendMail(string $template, array $data, string $attachment = '' Log::add($this->getApplication()->getLanguage()->_('PLG_SYSTEM_TASK_NOTIFICATION_NO_MAIL_SENT'), Log::WARNING); } } + + /** + * @param array $data The form data + * + * @return void + * + * @since __DEPLOY_VERSION__ + * @throws \Exception + */ + private function saveLog(array $data): void + { + $model = $this->getApplication()->bootComponent('com_scheduler')->getMVCFactory()->createModel('Task', 'Administrator', ['ignore_request' => true]); + $taskInfo = $model->getItem($data['TASK_ID']); + + $obj = new \stdClass(); + $obj->tasktype = SchedulerHelper::getTaskOptions()->findOption($taskInfo->type)->title ?? ''; + $obj->taskname = $data['TASK_TITLE']; + $obj->duration = $data['TASK_DURATION'] ?? 0; + $obj->jobid = $data['TASK_ID']; + $obj->exitcode = $data['EXIT_CODE']; + $obj->taskid = $data['TASK_TIMES']; + $obj->lastdate = Factory::getDate()->toSql(); + $obj->nextdate = $taskInfo->next_execution; + + $model = $this->getApplication()->bootComponent('com_scheduler') + ->getMVCFactory()->createModel('Log', 'Administrator', ['ignore_request' => true]); + $model->save((array)$obj); + } } diff --git a/templates/system/offline.php b/templates/system/offline.php index 66d3b6826cd1e..738e2350a442d 100644 --- a/templates/system/offline.php +++ b/templates/system/offline.php @@ -24,10 +24,6 @@ // Styles $wa->registerAndUseStyle('template.system.offline', 'media/system/css/system-site-offline.css'); -if ($this->direction === 'rtl') { - $wa->registerAndUseStyle('template.system.offline_rtl', 'media/system/css/system-site-offline_rtl.css'); -} - $wa->registerAndUseStyle('template.system.general', 'media/system/css/system-site-general.css'); ?>
The text was updated successfully, but these errors were encountered:
tecpromotion
No branches or pull requests
New language relevant PR in upstream repo: joomla/joomla-cms#44695 Here are the upstream changes:
Click to expand the diff!
The text was updated successfully, but these errors were encountered: