29
0
mirror of https://github.com/joomla/joomla-cms.git synced 2024-06-28 08:03:40 +00:00

Merge branch '4.0-dev' of github.com:joomla/joomla-cms into 4.1-dev

This commit is contained in:
Benjamin Trenkle 2021-05-10 15:14:35 +02:00
commit 93a46a3696
465 changed files with 20577 additions and 15477 deletions

View File

@ -70,8 +70,8 @@ install:
- IF %PHP%==1 echo zend_extension=php_opcache.dll >> php.ini
- IF %PHP%==1 echo opcache.enable_cli=1 >> php.ini
- IF %PHP%==1 echo extension=php_ldap.dll >> php.ini
- IF %PHP%==1 echo @php %%~dp0composer-1.phar %%* > composer.bat
- IF %PHP%==1 appveyor-retry appveyor DownloadFile https://getcomposer.org/composer-1.phar
- IF %PHP%==1 echo @php %%~dp0composer.phar %%* > composer.bat
- IF %PHP%==1 appveyor-retry appveyor DownloadFile https://getcomposer.org/download/latest-1.x/composer.phar
- cd C:\projects\joomla-cms
- appveyor-retry composer install --no-progress --profile
before_test:

2
.github/CODEOWNERS vendored
View File

@ -45,8 +45,6 @@ RoboFile.php @rdeutz @hackwar
# CSP Tooling
plugins/system/httpheaders/* @zero-24
administrator/components/com_csp/* @zero-24
components/com_csp/* @zero-24
# Web Authentication (WebAuthn)
plugins/system/webauthn/* @nikosdion

2
.github/SUPPORT.md vendored
View File

@ -5,4 +5,4 @@ Where can you get support and help?
* Find the [information you need](https://docs.joomla.org/Special:MyLanguage/Start_here).
* Find [help and other users](https://www.joomla.org/about-joomla/create-and-share.html).
* Post questions at [our forums](https://forum.joomla.org).
* [Joomla Resources Directory](https://resources.joomla.org) (JRD).
* [Joomla Resources Directory](https://community.joomla.org/service-providers-directory/) (JRD).

View File

@ -1,4 +1,4 @@
Joomla! CMS™ [![Analytics](https://ga-beacon.appspot.com/UA-544070-3/joomla-cms/readme)](https://github.com/igrigorik/ga-beacon)
Joomla! CMS™ [![Analytics](https://ga-beacon.appspot.com/UA-544070-3/joomla-cms/readme)](https://github.com/igrigorik/ga-beacon)
====================
Build Status

View File

@ -52,7 +52,7 @@ Joomla! CMS™
* Find the information you need: https://docs.joomla.org/Special:MyLanguage/Start_here
* Find help and other users: https://www.joomla.org/about-joomla/create-and-share.html
* Post questions at our forums: https://forum.joomla.org
* Joomla! Resources Directory (JRD): https://resources.joomla.org/
* Joomla! Resources Directory (JRD): https://community.joomla.org/service-providers-directory/
11- Do you already have a Joomla! site that's not built with Joomla! 4.x ?
* What's new in Joomla! 4.x: https://www.joomla.org/4

View File

@ -0,0 +1,90 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_admin
*
* @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Filesystem\File;
use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;
/**
* Notifies users of the new Behind Load Balancer option in Global Config, if we detect they might be behind a proxy
*
* @return boolean
*
* @since 3.9.26
*/
function admin_postinstall_behindproxy_condition()
{
$app = JFactory::getApplication();
if ($app->get('behind_loadbalancer', '0'))
{
return false;
}
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
return true;
}
if (array_key_exists('HTTP_CLIENT_IP', $_SERVER) && !empty($_SERVER['HTTP_CLIENT_IP']))
{
return true;
}
return false;
}
/**
* Enables the Behind Load Balancer setting in Global Configuration
*
* @return void
*
* @since 3.9.26
*/
function behindproxy_postinstall_action()
{
$prev = ArrayHelper::fromObject(new JConfig);
$data = array_merge($prev, array('behind_loadbalancer' => '1'));
$config = new Registry($data);
jimport('joomla.filesystem.path');
jimport('joomla.filesystem.file');
// Set the configuration file path.
$file = JPATH_CONFIGURATION . '/configuration.php';
// Get the new FTP credentials.
$ftp = JClientHelper::getCredentials('ftp', true);
// Attempt to make the file writeable if using FTP.
if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0644'))
{
JError::raiseNotice(500, JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE'));
}
// Attempt to write the configuration file as a PHP class named JConfig.
$configuration = $config->toString('PHP', array('class' => 'JConfig', 'closingtag' => false));
if (!File::write($file, $configuration))
{
JFactory::getApplication()->enqueueMessage(JText::_('COM_CONFIG_ERROR_WRITE_FAILED'), 'error');
return;
}
// Attempt to make the file unwriteable if NOT using FTP.
if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0444'))
{
JError::raiseNotice(500, JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE'));
}
}

View File

@ -9,7 +9,6 @@
defined('_JEXEC') or die;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Extension\ExtensionHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\File;
@ -18,8 +17,6 @@ use Joomla\CMS\Installer\Installer;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Log\Log;
use Joomla\CMS\Table\Table;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Config\Administrator\Model\ComponentModel;
use Joomla\Component\Fields\Administrator\Model\FieldModel;
use Joomla\Database\ParameterType;
@ -581,7 +578,7 @@ class JoomlaInstallerScript
];
$files = array(
// Joomla 4.0 Beta 1
// From 3.10 to 4.0
'/administrator/components/com_actionlogs/actionlogs.php',
'/administrator/components/com_actionlogs/controller.php',
'/administrator/components/com_actionlogs/controllers/actionlogs.php',
@ -611,7 +608,9 @@ class JoomlaInstallerScript
'/administrator/components/com_admin/models/profile.php',
'/administrator/components/com_admin/models/sysinfo.php',
'/administrator/components/com_admin/postinstall/eaccelerator.php',
'/administrator/components/com_admin/postinstall/htaccess.php',
'/administrator/components/com_admin/postinstall/joomla40checks.php',
'/administrator/components/com_admin/postinstall/updatedefaultsettings.php',
'/administrator/components/com_admin/sql/others/mysql/utf8mb4-conversion-01.sql',
'/administrator/components/com_admin/sql/others/mysql/utf8mb4-conversion-02.sql',
'/administrator/components/com_admin/sql/others/mysql/utf8mb4-conversion-03.sql',
@ -744,6 +743,9 @@ class JoomlaInstallerScript
'/administrator/components/com_admin/sql/updates/mysql/3.9.16-2020-03-04.sql',
'/administrator/components/com_admin/sql/updates/mysql/3.9.19-2020-05-16.sql',
'/administrator/components/com_admin/sql/updates/mysql/3.9.19-2020-06-01.sql',
'/administrator/components/com_admin/sql/updates/mysql/3.9.21-2020-08-02.sql',
'/administrator/components/com_admin/sql/updates/mysql/3.9.22-2020-09-16.sql',
'/administrator/components/com_admin/sql/updates/mysql/3.9.26-2021-04-07.sql',
'/administrator/components/com_admin/sql/updates/mysql/3.9.3-2019-01-12.sql',
'/administrator/components/com_admin/sql/updates/mysql/3.9.3-2019-02-07.sql',
'/administrator/components/com_admin/sql/updates/mysql/3.9.7-2019-04-23.sql',
@ -856,6 +858,9 @@ class JoomlaInstallerScript
'/administrator/components/com_admin/sql/updates/postgresql/3.9.16-2020-02-15.sql',
'/administrator/components/com_admin/sql/updates/postgresql/3.9.16-2020-03-04.sql',
'/administrator/components/com_admin/sql/updates/postgresql/3.9.19-2020-06-01.sql',
'/administrator/components/com_admin/sql/updates/postgresql/3.9.21-2020-08-02.sql',
'/administrator/components/com_admin/sql/updates/postgresql/3.9.22-2020-09-16.sql',
'/administrator/components/com_admin/sql/updates/postgresql/3.9.26-2021-04-07.sql',
'/administrator/components/com_admin/sql/updates/postgresql/3.9.3-2019-01-12.sql',
'/administrator/components/com_admin/sql/updates/postgresql/3.9.3-2019-02-07.sql',
'/administrator/components/com_admin/sql/updates/postgresql/3.9.7-2019-04-23.sql',
@ -973,6 +978,7 @@ class JoomlaInstallerScript
'/administrator/components/com_admin/sql/updates/sqlazure/3.9.19-2020-06-01.sql',
'/administrator/components/com_admin/sql/updates/sqlazure/3.9.21-2020-08-02.sql',
'/administrator/components/com_admin/sql/updates/sqlazure/3.9.22-2020-09-16.sql',
'/administrator/components/com_admin/sql/updates/sqlazure/3.9.26-2021-04-07.sql',
'/administrator/components/com_admin/sql/updates/sqlazure/3.9.3-2019-01-12.sql',
'/administrator/components/com_admin/sql/updates/sqlazure/3.9.3-2019-02-07.sql',
'/administrator/components/com_admin/sql/updates/sqlazure/3.9.4-2019-03-06.sql',
@ -1286,6 +1292,7 @@ class JoomlaInstallerScript
'/administrator/components/com_finder/helpers/indexer/driver/mysql.php',
'/administrator/components/com_finder/helpers/indexer/driver/postgresql.php',
'/administrator/components/com_finder/helpers/indexer/driver/sqlsrv.php',
'/administrator/components/com_finder/helpers/indexer/indexer.php',
'/administrator/components/com_finder/helpers/indexer/parser/html.php',
'/administrator/components/com_finder/helpers/indexer/parser/rtf.php',
'/administrator/components/com_finder/helpers/indexer/parser/txt.php',
@ -3169,6 +3176,7 @@ class JoomlaInstallerScript
'/language/en-GB/en-GB.tpl_protostar.ini',
'/language/en-GB/en-GB.tpl_protostar.sys.ini',
'/language/en-GB/en-GB.xml',
'/layouts/joomla/content/blog_style_default_links.php',
'/layouts/joomla/content/icons/email.php',
'/layouts/joomla/content/icons/print_popup.php',
'/layouts/joomla/content/icons/print_screen.php',
@ -3180,13 +3188,23 @@ class JoomlaInstallerScript
'/layouts/joomla/html/formbehavior/chosen.php',
'/layouts/joomla/html/sortablelist.php',
'/layouts/joomla/html/tag.php',
'/layouts/joomla/modal/body.php',
'/layouts/joomla/modal/footer.php',
'/layouts/joomla/modal/header.php',
'/layouts/joomla/modal/iframe.php',
'/layouts/joomla/modal/main.php',
'/layouts/joomla/sidebars/toggle.php',
'/layouts/joomla/tinymce/buttons.php',
'/layouts/joomla/tinymce/buttons/button.php',
'/layouts/joomla/toolbar/confirm.php',
'/layouts/joomla/toolbar/help.php',
'/layouts/joomla/toolbar/modal.php',
'/layouts/joomla/toolbar/slider.php',
'/layouts/libraries/cms/html/bootstrap/addtab.php',
'/layouts/libraries/cms/html/bootstrap/addtabscript.php',
'/layouts/libraries/cms/html/bootstrap/endtab.php',
'/layouts/libraries/cms/html/bootstrap/endtabset.php',
'/layouts/libraries/cms/html/bootstrap/starttabset.php',
'/layouts/libraries/cms/html/bootstrap/starttabsetscript.php',
'/libraries/cms/class/loader.php',
'/libraries/cms/html/access.php',
@ -3821,6 +3839,7 @@ class JoomlaInstallerScript
'/libraries/vendor/joomla/compat/src/CallbackFilterIterator.php',
'/libraries/vendor/joomla/compat/src/JsonSerializable.php',
'/libraries/vendor/joomla/event/src/DelegatingDispatcher.php',
'/libraries/vendor/joomla/filesystem/src/Stream/String.php',
'/libraries/vendor/joomla/image/LICENSE',
'/libraries/vendor/joomla/image/src/Filter/Backgroundfill.php',
'/libraries/vendor/joomla/image/src/Filter/Brightness.php',
@ -3862,7 +3881,6 @@ class JoomlaInstallerScript
'/libraries/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php',
'/libraries/vendor/paragonie/random_compat/lib/random_bytes_openssl.php',
'/libraries/vendor/paragonie/random_compat/lib/random_int.php',
'/libraries/vendor/paragonie/sodium_compat/src/Core/Xsalsa20.php',
'/libraries/vendor/paragonie/sodium_compat/src/Core32/Curve25519/README.md',
'/libraries/vendor/phpmailer/phpmailer/PHPMailerAutoload.php',
'/libraries/vendor/phpmailer/phpmailer/class.phpmailer.php',
@ -4770,6 +4788,7 @@ class JoomlaInstallerScript
'/media/overrider/css/overrider.css',
'/media/overrider/js/overrider.js',
'/media/overrider/js/overrider.min.js',
'/media/plg_system_highlight/highlight.css',
'/media/plg_twofactorauth_totp/js/qrcode.js',
'/media/plg_twofactorauth_totp/js/qrcode.min.js',
'/media/plg_twofactorauth_totp/js/qrcode_SJIS.js',
@ -5099,14 +5118,29 @@ class JoomlaInstallerScript
'/templates/system/images/j_button2_readmore.png',
'/templates/system/images/j_button2_right.png',
'/templates/system/images/selector-arrow.png',
// Joomla 4.0 Beta 3
'/administrator/templates/atum/images/logo.svg',
// 4.0 from Beta 1 to Beta 2
'/administrator/components/com_finder/src/Indexer/Driver/Mysql.php',
'/administrator/components/com_finder/src/Indexer/Driver/Postgresql.php',
'/administrator/components/com_workflow/access.xml',
'/api/components/com_installer/src/Controller/LanguagesController.php',
'/api/components/com_installer/src/View/Languages/JsonapiView.php',
'/libraries/vendor/joomla/controller/LICENSE',
'/libraries/vendor/joomla/controller/src/AbstractController.php',
'/libraries/vendor/joomla/controller/src/ControllerInterface.php',
'/media/com_users/js/admin-users-user.es6.js',
'/media/com_users/js/admin-users-user.es6.min.js',
'/media/com_users/js/admin-users-user.es6.min.js.gz',
'/media/com_users/js/admin-users-user.js',
'/media/com_users/js/admin-users-user.min.js',
'/media/com_users/js/admin-users-user.min.js.gz',
// 4.0 from Beta 2 to Beta 3
'/administrator/templates/atum/images/logo-blue.svg',
'/administrator/templates/atum/images/logo-joomla-blue.svg',
'/administrator/templates/atum/images/logo-joomla-white.svg',
// Joomla 4.0 Beta 4
'/administrator/templates/atum/images/logo.svg',
// 4.0 from Beta 3 to Beta 4
'/components/com_config/src/Model/CmsModel.php',
// Joomla 4.0 Beta 5
// 4.0 from Beta 4 to Beta 5
'/administrator/components/com_admin/sql/updates/mysql/4.0.0-2018-06-11.sql',
'/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-04-18.sql',
'/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2018-06-11.sql',
@ -5116,39 +5150,564 @@ class JoomlaInstallerScript
'/administrator/language/en-GB/plg_fields_image.ini',
'/administrator/language/en-GB/plg_fields_image.sys.ini',
'/administrator/templates/atum/scss/vendor/bootstrap/_nav.scss',
'/cli/finder_indexer.php',
'/components/com_users/layouts/joomla/form/renderfield.php',
'/libraries/vendor/spomky-labs/base64url/phpstan.neon',
'/media/plg_system_webauthn/images/webauthn-black.png',
'/media/plg_system_webauthn/images/webauthn-color.png',
'/media/plg_system_webauthn/images/webauthn-white.png',
'/media/system/css/system.css',
'/media/system/css/system.min.css',
'/media/system/css/system.min.css.gz',
'/media/system/images/notice-alert.png',
'/media/system/images/notice-download.png',
'/media/system/images/notice-info.png',
'/media/system/images/notice-note.png',
'/plugins/content/imagelazyload/imagelazyload.php',
'/plugins/content/imagelazyload/imagelazyload.xml',
'/templates/cassiopeia/html/layouts/chromes/cardGrey.php',
'/templates/cassiopeia/html/layouts/chromes/default.php',
'/templates/cassiopeia/scss/vendor/bootstrap/_card.scss',
// Joomla 4.0 Beta 7
'/media/vendor/skipto/js/dropMenu.js',
// 4.0 from Beta 5 to Beta 6
'/administrator/modules/mod_multilangstatus/src/Helper/MultilangstatusAdminHelper.php',
'/administrator/templates/atum/favicon.ico',
'/libraries/vendor/nyholm/psr7/phpstan.baseline.dist',
'/libraries/vendor/spomky-labs/base64url/.php_cs.dist',
'/libraries/vendor/spomky-labs/base64url/infection.json.dist',
'/media/layouts/js/joomla/html/batch/batch-language.es6.js',
'/media/layouts/js/joomla/html/batch/batch-language.es6.min.js',
'/media/layouts/js/joomla/html/batch/batch-language.es6.min.js.gz',
'/media/layouts/js/joomla/html/batch/batch-language.js',
'/media/layouts/js/joomla/html/batch/batch-language.min.js',
'/media/layouts/js/joomla/html/batch/batch-language.min.js.gz',
'/media/plg_system_webauthn/images/webauthn-black.svg',
'/media/plg_system_webauthn/images/webauthn-white.svg',
'/media/system/js/core.es6/ajax.es6',
'/media/system/js/core.es6/customevent.es6',
'/media/system/js/core.es6/event.es6',
'/media/system/js/core.es6/form.es6',
'/media/system/js/core.es6/message.es6',
'/media/system/js/core.es6/options.es6',
'/media/system/js/core.es6/text.es6',
'/media/system/js/core.es6/token.es6',
'/media/system/js/core.es6/webcomponent.es6',
'/templates/cassiopeia/favicon.ico',
'/templates/cassiopeia/scss/_mixin.scss',
'/templates/cassiopeia/scss/_variables.scss',
'/templates/cassiopeia/scss/blocks/_demo-styling.scss',
// 4.0 from Beta 6 to Beta 7
'/media/legacy/js/bootstrap-init.js',
'/media/legacy/js/bootstrap-init.min.js',
'/media/legacy/js/bootstrap-init.min.js.gz',
'/media/legacy/js/frontediting.js',
'/media/legacy/js/frontediting.min.js',
'/media/legacy/js/frontediting.min.js.gz',
'/media/vendor/bootstrap/js/bootstrap.bundle.js',
'/media/vendor/bootstrap/js/bootstrap.bundle.min.js',
'/media/vendor/bootstrap/js/bootstrap.bundle.min.js.gz',
'/media/vendor/bootstrap/js/bootstrap.bundle.min.js.map',
'/media/vendor/bootstrap/js/bootstrap.js',
'/media/vendor/bootstrap/js/bootstrap.min.js',
'/media/vendor/bootstrap/js/bootstrap.min.js.gz',
'/media/vendor/bootstrap/scss/_code.scss',
'/media/vendor/bootstrap/scss/_custom-forms.scss',
'/media/vendor/bootstrap/scss/_input-group.scss',
'/media/vendor/bootstrap/scss/_jumbotron.scss',
'/media/vendor/bootstrap/scss/_media.scss',
'/media/vendor/bootstrap/scss/_print.scss',
'/media/vendor/bootstrap/scss/mixins/_background-variant.scss',
'/media/vendor/bootstrap/scss/mixins/_badge.scss',
'/media/vendor/bootstrap/scss/mixins/_float.scss',
'/media/vendor/bootstrap/scss/mixins/_grid-framework.scss',
'/media/vendor/bootstrap/scss/mixins/_hover.scss',
'/media/vendor/bootstrap/scss/mixins/_nav-divider.scss',
'/media/vendor/bootstrap/scss/mixins/_screen-reader.scss',
'/media/vendor/bootstrap/scss/mixins/_size.scss',
'/media/vendor/bootstrap/scss/mixins/_table-row.scss',
'/media/vendor/bootstrap/scss/mixins/_text-emphasis.scss',
'/media/vendor/bootstrap/scss/mixins/_text-hide.scss',
'/media/vendor/bootstrap/scss/mixins/_visibility.scss',
'/media/vendor/bootstrap/scss/utilities/_align.scss',
'/media/vendor/bootstrap/scss/utilities/_background.scss',
'/media/vendor/bootstrap/scss/utilities/_borders.scss',
'/media/vendor/bootstrap/scss/utilities/_clearfix.scss',
'/media/vendor/bootstrap/scss/utilities/_display.scss',
'/media/vendor/bootstrap/scss/utilities/_embed.scss',
'/media/vendor/bootstrap/scss/utilities/_flex.scss',
'/media/vendor/bootstrap/scss/utilities/_float.scss',
'/media/vendor/bootstrap/scss/utilities/_interactions.scss',
'/media/vendor/bootstrap/scss/utilities/_overflow.scss',
'/media/vendor/bootstrap/scss/utilities/_position.scss',
'/media/vendor/bootstrap/scss/utilities/_screenreaders.scss',
'/media/vendor/bootstrap/scss/utilities/_shadows.scss',
'/media/vendor/bootstrap/scss/utilities/_sizing.scss',
'/media/vendor/bootstrap/scss/utilities/_spacing.scss',
'/media/vendor/bootstrap/scss/utilities/_stretched-link.scss',
'/media/vendor/bootstrap/scss/utilities/_text.scss',
'/media/vendor/bootstrap/scss/utilities/_visibility.scss',
'/media/vendor/skipto/css/SkipTo.css',
// Joomla 4.0 Beta 8
'/media/vendor/skipto/js/dropMenu.js',
// 4.0 from Beta 7 to Beta 8
'/administrator/components/com_admin/forms/profile.xml',
'/administrator/components/com_admin/postinstall/htaccess.php',
'/administrator/components/com_admin/postinstall/updatedefaultsettings.php',
'/administrator/components/com_admin/src/Controller/ProfileController.php',
'/administrator/components/com_admin/src/Model/ProfileModel.php',
'/administrator/components/com_admin/src/View/Profile/HtmlView.php',
'/administrator/components/com_csp/access.xml',
'/administrator/components/com_csp/config.xml',
'/administrator/components/com_csp/csp.xml',
'/administrator/components/com_csp/forms/filter_reports.xml',
'/administrator/components/com_csp/services/provider.php',
'/administrator/components/com_csp/src/Controller/DisplayController.php',
'/administrator/components/com_csp/src/Controller/ReportsController.php',
'/administrator/components/com_csp/src/Helper/ReporterHelper.php',
'/administrator/components/com_csp/src/Model/ReportModel.php',
'/administrator/components/com_csp/src/Model/ReportsModel.php',
'/administrator/components/com_csp/src/Table/ReportTable.php',
'/administrator/components/com_csp/src/View/Reports/HtmlView.php',
'/administrator/components/com_csp/tmpl/reports/default.php',
'/administrator/components/com_csp/tmpl/reports/default.xml',
'/administrator/components/com_admin/tmpl/profile/edit.php',
'/administrator/components/com_config/tmpl/application/default_ftp.php',
'/administrator/components/com_config/tmpl/application/default_ftplogin.php',
'/administrator/components/com_fields/src/Field/SubfieldstypeField.php',
'/administrator/components/com_installer/tmpl/installer/default_ftp.php',
'/administrator/components/com_joomlaupdate/src/Helper/Select.php',
'/administrator/language/en-GB/com_csp.ini',
'/administrator/language/en-GB/com_csp.sys.ini',
'/administrator/language/en-GB/plg_fields_subfields.ini',
'/administrator/language/en-GB/plg_fields_subfields.sys.ini',
'/administrator/templates/atum/Service/HTML/Atum.php',
'/components/com_csp/src/Controller/ReportController.php',
'/components/com_menus/src/Controller/DisplayController.php',
'/libraries/vendor/beberlei/assert/phpstan-code.neon',
'/libraries/vendor/beberlei/assert/phpstan-tests.neon',
'/libraries/vendor/nyholm/psr7/src/LowercaseTrait.php',
'/libraries/vendor/ozdemirburak/iris/LICENSE.md',
'/libraries/vendor/ozdemirburak/iris/src/BaseColor.php',
'/libraries/vendor/ozdemirburak/iris/src/Color/Factory.php',
'/libraries/vendor/ozdemirburak/iris/src/Color/Hex.php',
'/libraries/vendor/ozdemirburak/iris/src/Color/Hsl.php',
'/libraries/vendor/ozdemirburak/iris/src/Color/Hsla.php',
'/libraries/vendor/ozdemirburak/iris/src/Color/Hsv.php',
'/libraries/vendor/ozdemirburak/iris/src/Color/Rgb.php',
'/libraries/vendor/ozdemirburak/iris/src/Color/Rgba.php',
'/libraries/vendor/ozdemirburak/iris/src/Exceptions/AmbiguousColorString.php',
'/libraries/vendor/ozdemirburak/iris/src/Exceptions/InvalidColorException.php',
'/libraries/vendor/ozdemirburak/iris/src/Helpers/DefinedColor.php',
'/libraries/vendor/ozdemirburak/iris/src/Traits/AlphaTrait.php',
'/libraries/vendor/ozdemirburak/iris/src/Traits/HsTrait.php',
'/libraries/vendor/ozdemirburak/iris/src/Traits/HslTrait.php',
'/libraries/vendor/ozdemirburak/iris/src/Traits/RgbTrait.php',
'/libraries/vendor/willdurand/negotiation/src/Negotiation/Match.php',
'/media/com_actionlogs/js/admin-actionlogs-default.es6.js',
'/media/com_actionlogs/js/admin-actionlogs-default.es6.min.js',
'/media/com_actionlogs/js/admin-actionlogs-default.es6.min.js.gz',
'/media/com_associations/js/admin-associations-default.es6.js',
'/media/com_associations/js/admin-associations-default.es6.min.js',
'/media/com_associations/js/admin-associations-default.es6.min.js.gz',
'/media/com_associations/js/admin-associations-modal.es6.js',
'/media/com_associations/js/admin-associations-modal.es6.min.js',
'/media/com_associations/js/admin-associations-modal.es6.min.js.gz',
'/media/com_associations/js/associations-edit.es6.js',
'/media/com_associations/js/associations-edit.es6.min.js',
'/media/com_associations/js/associations-edit.es6.min.js.gz',
'/media/com_banners/js/admin-banner-edit.es6.js',
'/media/com_banners/js/admin-banner-edit.es6.min.js',
'/media/com_banners/js/admin-banner-edit.es6.min.js.gz',
'/media/com_cache/js/admin-cache-default.es6.js',
'/media/com_cache/js/admin-cache-default.es6.min.js',
'/media/com_cache/js/admin-cache-default.es6.min.js.gz',
'/media/com_categories/js/shared-categories-accordion.es6.js',
'/media/com_categories/js/shared-categories-accordion.es6.min.js',
'/media/com_categories/js/shared-categories-accordion.es6.min.js.gz',
'/media/com_config/js/config-default.es6.js',
'/media/com_config/js/config-default.es6.min.js',
'/media/com_config/js/config-default.es6.min.js.gz',
'/media/com_config/js/modules-default.es6.js',
'/media/com_config/js/modules-default.es6.min.js',
'/media/com_config/js/modules-default.es6.min.js.gz',
'/media/com_config/js/templates-default.es6.js',
'/media/com_config/js/templates-default.es6.min.js',
'/media/com_config/js/templates-default.es6.min.js.gz',
'/media/com_contact/js/admin-contacts-modal.es6.js',
'/media/com_contact/js/admin-contacts-modal.es6.min.js',
'/media/com_contact/js/admin-contacts-modal.es6.min.js.gz',
'/media/com_contact/js/contacts-list.es6.js',
'/media/com_contact/js/contacts-list.es6.min.js',
'/media/com_contact/js/contacts-list.es6.min.js.gz',
'/media/com_content/js/admin-article-pagebreak.es6.js',
'/media/com_content/js/admin-article-pagebreak.es6.min.js',
'/media/com_content/js/admin-article-pagebreak.es6.min.js.gz',
'/media/com_content/js/admin-article-readmore.es6.js',
'/media/com_content/js/admin-article-readmore.es6.min.js',
'/media/com_content/js/admin-article-readmore.es6.min.js.gz',
'/media/com_content/js/admin-articles-default-batch-footer.es6.js',
'/media/com_content/js/admin-articles-default-batch-footer.es6.min.js',
'/media/com_content/js/admin-articles-default-batch-footer.es6.min.js.gz',
'/media/com_content/js/admin-articles-default-stage-footer.es6.js',
'/media/com_content/js/admin-articles-default-stage-footer.es6.min.js',
'/media/com_content/js/admin-articles-default-stage-footer.es6.min.js.gz',
'/media/com_content/js/admin-articles-modal.es6.js',
'/media/com_content/js/admin-articles-modal.es6.min.js',
'/media/com_content/js/admin-articles-modal.es6.min.js.gz',
'/media/com_content/js/articles-list.es6.js',
'/media/com_content/js/articles-list.es6.min.js',
'/media/com_content/js/articles-list.es6.min.js.gz',
'/media/com_content/js/form-edit.es6.js',
'/media/com_content/js/form-edit.es6.min.js',
'/media/com_content/js/form-edit.es6.min.js.gz',
'/media/com_contenthistory/js/admin-compare-compare.es6.js',
'/media/com_contenthistory/js/admin-compare-compare.es6.min.js',
'/media/com_contenthistory/js/admin-compare-compare.es6.min.js.gz',
'/media/com_contenthistory/js/admin-history-modal.es6.js',
'/media/com_contenthistory/js/admin-history-modal.es6.min.js',
'/media/com_contenthistory/js/admin-history-modal.es6.min.js.gz',
'/media/com_contenthistory/js/admin-history-versions.es6.js',
'/media/com_contenthistory/js/admin-history-versions.es6.min.js',
'/media/com_contenthistory/js/admin-history-versions.es6.min.js.gz',
'/media/com_cpanel/js/admin-add_module.es6.js',
'/media/com_cpanel/js/admin-add_module.es6.min.js',
'/media/com_cpanel/js/admin-add_module.es6.min.js.gz',
'/media/com_cpanel/js/admin-cpanel-default.es6.js',
'/media/com_cpanel/js/admin-cpanel-default.es6.min.js',
'/media/com_cpanel/js/admin-cpanel-default.es6.min.js.gz',
'/media/com_cpanel/js/admin-system-loader.es6.js',
'/media/com_cpanel/js/admin-system-loader.es6.min.js',
'/media/com_cpanel/js/admin-system-loader.es6.min.js.gz',
'/media/com_fields/js/admin-field-changecontext.es6.js',
'/media/com_fields/js/admin-field-changecontext.es6.min.js',
'/media/com_fields/js/admin-field-changecontext.es6.min.js.gz',
'/media/com_fields/js/admin-field-edit-modal.es6.js',
'/media/com_fields/js/admin-field-edit-modal.es6.min.js',
'/media/com_fields/js/admin-field-edit-modal.es6.min.js.gz',
'/media/com_fields/js/admin-field-edit.es6.js',
'/media/com_fields/js/admin-field-edit.es6.min.js',
'/media/com_fields/js/admin-field-edit.es6.min.js.gz',
'/media/com_fields/js/admin-field-typehaschanged.es6.js',
'/media/com_fields/js/admin-field-typehaschanged.es6.min.js',
'/media/com_fields/js/admin-field-typehaschanged.es6.min.js.gz',
'/media/com_fields/js/admin-fields-default-batch.es6.js',
'/media/com_fields/js/admin-fields-default-batch.es6.min.js',
'/media/com_fields/js/admin-fields-default-batch.es6.min.js.gz',
'/media/com_fields/js/admin-fields-modal.es6.js',
'/media/com_fields/js/admin-fields-modal.es6.min.js',
'/media/com_fields/js/admin-fields-modal.es6.min.js.gz',
'/media/com_finder/js/filters.es6.js',
'/media/com_finder/js/filters.es6.min.js',
'/media/com_finder/js/filters.es6.min.js.gz',
'/media/com_finder/js/finder-edit.es6.js',
'/media/com_finder/js/finder-edit.es6.min.js',
'/media/com_finder/js/finder-edit.es6.min.js.gz',
'/media/com_finder/js/finder.es6.js',
'/media/com_finder/js/finder.es6.min.js',
'/media/com_finder/js/finder.es6.min.js.gz',
'/media/com_finder/js/index.es6.js',
'/media/com_finder/js/index.es6.min.js',
'/media/com_finder/js/index.es6.min.js.gz',
'/media/com_finder/js/indexer.es6.js',
'/media/com_finder/js/indexer.es6.min.js',
'/media/com_finder/js/indexer.es6.min.js.gz',
'/media/com_finder/js/maps.es6.js',
'/media/com_finder/js/maps.es6.min.js',
'/media/com_finder/js/maps.es6.min.js.gz',
'/media/com_installer/js/changelog.es6.js',
'/media/com_installer/js/changelog.es6.min.js',
'/media/com_installer/js/changelog.es6.min.js.gz',
'/media/com_installer/js/installer.es6.js',
'/media/com_installer/js/installer.es6.min.js',
'/media/com_installer/js/installer.es6.min.js.gz',
'/media/com_joomlaupdate/js/admin-update-default.es6.js',
'/media/com_joomlaupdate/js/admin-update-default.es6.min.js',
'/media/com_joomlaupdate/js/admin-update-default.es6.min.js.gz',
'/media/com_languages/js/admin-language-edit-change-flag.es6.js',
'/media/com_languages/js/admin-language-edit-change-flag.es6.min.js',
'/media/com_languages/js/admin-language-edit-change-flag.es6.min.js.gz',
'/media/com_languages/js/admin-override-edit-refresh-searchstring.es6.js',
'/media/com_languages/js/admin-override-edit-refresh-searchstring.es6.min.js',
'/media/com_languages/js/admin-override-edit-refresh-searchstring.es6.min.js.gz',
'/media/com_languages/js/overrider.es6.js',
'/media/com_languages/js/overrider.es6.min.js',
'/media/com_languages/js/overrider.es6.min.js.gz',
'/media/com_mails/js/admin-email-template-edit.es6.js',
'/media/com_mails/js/admin-email-template-edit.es6.min.js',
'/media/com_mails/js/admin-email-template-edit.es6.min.js.gz',
'/media/com_media/css/mediamanager.min.css',
'/media/com_media/css/mediamanager.min.css.gz',
'/media/com_media/css/mediamanager.min.css.map',
'/media/com_media/js/edit-images.es6.js',
'/media/com_media/js/edit-images.es6.min.js',
'/media/com_media/js/mediamanager.min.js',
'/media/com_media/js/mediamanager.min.js.gz',
'/media/com_media/js/mediamanager.min.js.map',
'/media/com_menus/js/admin-item-edit.es6.js',
'/media/com_menus/js/admin-item-edit.es6.min.js',
'/media/com_menus/js/admin-item-edit.es6.min.js.gz',
'/media/com_menus/js/admin-item-edit_container.es6.js',
'/media/com_menus/js/admin-item-edit_container.es6.min.js',
'/media/com_menus/js/admin-item-edit_container.es6.min.js.gz',
'/media/com_menus/js/admin-item-edit_modules.es6.js',
'/media/com_menus/js/admin-item-edit_modules.es6.min.js',
'/media/com_menus/js/admin-item-edit_modules.es6.min.js.gz',
'/media/com_menus/js/admin-item-modal.es6.js',
'/media/com_menus/js/admin-item-modal.es6.min.js',
'/media/com_menus/js/admin-item-modal.es6.min.js.gz',
'/media/com_menus/js/admin-items-modal.es6.js',
'/media/com_menus/js/admin-items-modal.es6.min.js',
'/media/com_menus/js/admin-items-modal.es6.min.js.gz',
'/media/com_menus/js/admin-menus-default.es6.js',
'/media/com_menus/js/admin-menus-default.es6.min.js',
'/media/com_menus/js/admin-menus-default.es6.min.js.gz',
'/media/com_menus/js/default-batch-body.es6.js',
'/media/com_menus/js/default-batch-body.es6.min.js',
'/media/com_menus/js/default-batch-body.es6.min.js.gz',
'/media/com_modules/js/admin-module-edit.es6.js',
'/media/com_modules/js/admin-module-edit.es6.min.js',
'/media/com_modules/js/admin-module-edit.es6.min.js.gz',
'/media/com_modules/js/admin-module-edit_assignment.es6.js',
'/media/com_modules/js/admin-module-edit_assignment.es6.min.js',
'/media/com_modules/js/admin-module-edit_assignment.es6.min.js.gz',
'/media/com_modules/js/admin-module-search.es6.js',
'/media/com_modules/js/admin-module-search.es6.min.js',
'/media/com_modules/js/admin-module-search.es6.min.js.gz',
'/media/com_modules/js/admin-modules-modal.es6.js',
'/media/com_modules/js/admin-modules-modal.es6.min.js',
'/media/com_modules/js/admin-modules-modal.es6.min.js.gz',
'/media/com_modules/js/admin-select-modal.es6.js',
'/media/com_modules/js/admin-select-modal.es6.min.js',
'/media/com_modules/js/admin-select-modal.es6.min.js.gz',
'/media/com_tags/js/tag-default.es6.js',
'/media/com_tags/js/tag-default.es6.min.js',
'/media/com_tags/js/tag-default.es6.min.js.gz',
'/media/com_tags/js/tag-list.es6.js',
'/media/com_tags/js/tag-list.es6.min.js',
'/media/com_tags/js/tag-list.es6.min.js.gz',
'/media/com_tags/js/tags-default.es6.js',
'/media/com_tags/js/tags-default.es6.min.js',
'/media/com_tags/js/tags-default.es6.min.js.gz',
'/media/com_templates/js/admin-template-compare.es6.js',
'/media/com_templates/js/admin-template-compare.es6.min.js',
'/media/com_templates/js/admin-template-compare.es6.min.js.gz',
'/media/com_templates/js/admin-template-toggle-assignment.es6.js',
'/media/com_templates/js/admin-template-toggle-assignment.es6.min.js',
'/media/com_templates/js/admin-template-toggle-assignment.es6.min.js.gz',
'/media/com_templates/js/admin-template-toggle-switch.es6.js',
'/media/com_templates/js/admin-template-toggle-switch.es6.min.js',
'/media/com_templates/js/admin-template-toggle-switch.es6.min.js.gz',
'/media/com_templates/js/admin-templates-default.es6.js',
'/media/com_templates/js/admin-templates-default.es6.min.js',
'/media/com_templates/js/admin-templates-default.es6.min.js.gz',
'/media/com_users/js/admin-users-groups.es6.js',
'/media/com_users/js/admin-users-groups.es6.min.js',
'/media/com_users/js/admin-users-groups.es6.min.js.gz',
'/media/com_users/js/admin-users-mail.es6.js',
'/media/com_users/js/admin-users-mail.es6.min.js',
'/media/com_users/js/admin-users-mail.es6.min.js.gz',
'/media/com_users/js/two-factor-switcher.es6.js',
'/media/com_users/js/two-factor-switcher.es6.min.js',
'/media/com_users/js/two-factor-switcher.es6.min.js.gz',
'/media/com_workflow/js/admin-items-workflow-buttons.es6.js',
'/media/com_workflow/js/admin-items-workflow-buttons.es6.min.js',
'/media/com_workflow/js/admin-items-workflow-buttons.es6.min.js.gz',
'/media/com_wrapper/js/iframe-height.es6.js',
'/media/com_wrapper/js/iframe-height.es6.min.js',
'/media/com_wrapper/js/iframe-height.es6.min.js.gz',
'/media/layouts/js/joomla/form/field/category-change.es6.js',
'/media/layouts/js/joomla/form/field/category-change.es6.min.js',
'/media/layouts/js/joomla/form/field/category-change.es6.min.js.gz',
'/media/layouts/js/joomla/html/batch/batch-copymove.es6.js',
'/media/layouts/js/joomla/html/batch/batch-copymove.es6.min.js',
'/media/layouts/js/joomla/html/batch/batch-copymove.es6.min.js.gz',
'/media/legacy/js/highlighter.js',
'/media/legacy/js/highlighter.min.js',
'/media/legacy/js/highlighter.min.js.gz',
'/media/mod_login/js/admin-login.es6.js',
'/media/mod_login/js/admin-login.es6.min.js',
'/media/mod_login/js/admin-login.es6.min.js.gz',
'/media/mod_menu/js/admin-menu.es6.js',
'/media/mod_menu/js/admin-menu.es6.min.js',
'/media/mod_menu/js/admin-menu.es6.min.js.gz',
'/media/mod_menu/js/menu.es6.js',
'/media/mod_menu/js/menu.es6.min.js',
'/media/mod_menu/js/menu.es6.min.js.gz',
'/media/mod_multilangstatus/js/admin-multilangstatus.es6.js',
'/media/mod_multilangstatus/js/admin-multilangstatus.es6.min.js',
'/media/mod_multilangstatus/js/admin-multilangstatus.es6.min.js.gz',
'/media/mod_quickicon/js/quickicon.es6.js',
'/media/mod_quickicon/js/quickicon.es6.min.js',
'/media/mod_quickicon/js/quickicon.es6.min.js.gz',
'/media/mod_sampledata/js/sampledata-process.es6.js',
'/media/mod_sampledata/js/sampledata-process.es6.min.js',
'/media/mod_sampledata/js/sampledata-process.es6.min.js.gz',
'/media/plg_captcha_recaptcha/js/recaptcha.es6.js',
'/media/plg_captcha_recaptcha/js/recaptcha.es6.min.js',
'/media/plg_captcha_recaptcha/js/recaptcha.es6.min.js.gz',
'/media/plg_captcha_recaptcha_invisible/js/recaptcha.es6.js',
'/media/plg_captcha_recaptcha_invisible/js/recaptcha.es6.min.js',
'/media/plg_captcha_recaptcha_invisible/js/recaptcha.es6.min.js.gz',
'/media/plg_editors_tinymce/js/plugins/dragdrop/plugin.es6.js',
'/media/plg_editors_tinymce/js/plugins/dragdrop/plugin.es6.min.js',
'/media/plg_editors_tinymce/js/plugins/dragdrop/plugin.es6.min.js.gz',
'/media/plg_editors_tinymce/js/tinymce-builder.es6.js',
'/media/plg_editors_tinymce/js/tinymce-builder.es6.min.js',
'/media/plg_editors_tinymce/js/tinymce-builder.es6.min.js.gz',
'/media/plg_editors_tinymce/js/tinymce.es6.js',
'/media/plg_editors_tinymce/js/tinymce.es6.min.js',
'/media/plg_editors_tinymce/js/tinymce.es6.min.js.gz',
'/media/plg_installer_folderinstaller/js/folderinstaller.es6.js',
'/media/plg_installer_folderinstaller/js/folderinstaller.es6.min.js',
'/media/plg_installer_folderinstaller/js/folderinstaller.es6.min.js.gz',
'/media/plg_installer_packageinstaller/js/packageinstaller.es6.js',
'/media/plg_installer_packageinstaller/js/packageinstaller.es6.min.js',
'/media/plg_installer_packageinstaller/js/packageinstaller.es6.min.js.gz',
'/media/plg_installer_urlinstaller/js/urlinstaller.es6.js',
'/media/plg_installer_urlinstaller/js/urlinstaller.es6.min.js',
'/media/plg_installer_urlinstaller/js/urlinstaller.es6.min.js.gz',
'/media/plg_installer_webinstaller/js/client.es6.js',
'/media/plg_installer_webinstaller/js/client.es6.min.js',
'/media/plg_installer_webinstaller/js/client.es6.min.js.gz',
'/media/plg_media-action_crop/js/crop.es6.js',
'/media/plg_media-action_crop/js/crop.es6.min.js',
'/media/plg_media-action_crop/js/crop.es6.min.js.gz',
'/media/plg_media-action_resize/js/resize.es6.js',
'/media/plg_media-action_resize/js/resize.es6.min.js',
'/media/plg_media-action_resize/js/resize.es6.min.js.gz',
'/media/plg_media-action_rotate/js/rotate.es6.js',
'/media/plg_media-action_rotate/js/rotate.es6.min.js',
'/media/plg_media-action_rotate/js/rotate.es6.min.js.gz',
'/media/plg_quickicon_extensionupdate/js/extensionupdatecheck.es6.js',
'/media/plg_quickicon_extensionupdate/js/extensionupdatecheck.es6.min.js',
'/media/plg_quickicon_extensionupdate/js/extensionupdatecheck.es6.min.js.gz',
'/media/plg_quickicon_joomlaupdate/js/jupdatecheck.es6.js',
'/media/plg_quickicon_joomlaupdate/js/jupdatecheck.es6.min.js',
'/media/plg_quickicon_joomlaupdate/js/jupdatecheck.es6.min.js.gz',
'/media/plg_quickicon_overridecheck/js/overridecheck.es6.js',
'/media/plg_quickicon_overridecheck/js/overridecheck.es6.min.js',
'/media/plg_quickicon_overridecheck/js/overridecheck.es6.min.js.gz',
'/media/plg_quickicon_privacycheck/js/privacycheck.es6.js',
'/media/plg_quickicon_privacycheck/js/privacycheck.es6.min.js',
'/media/plg_quickicon_privacycheck/js/privacycheck.es6.min.js.gz',
'/media/plg_system_debug/js/debug.es6.js',
'/media/plg_system_debug/js/debug.es6.min.js',
'/media/plg_system_debug/js/debug.es6.min.js.gz',
'/media/plg_system_highlight/highlight.min.css',
'/media/plg_system_highlight/highlight.min.css.gz',
'/media/plg_system_stats/js/stats-message.es6.js',
'/media/plg_system_stats/js/stats-message.es6.min.js',
'/media/plg_system_stats/js/stats-message.es6.min.js.gz',
'/media/plg_system_stats/js/stats.es6.js',
'/media/plg_system_stats/js/stats.es6.min.js',
'/media/plg_system_stats/js/stats.es6.min.js.gz',
'/media/plg_system_webauthn/js/login.es6.js',
'/media/plg_system_webauthn/js/login.es6.min.js',
'/media/plg_system_webauthn/js/login.es6.min.js.gz',
'/media/plg_system_webauthn/js/management.es6.js',
'/media/plg_system_webauthn/js/management.es6.min.js',
'/media/plg_system_webauthn/js/management.es6.min.js.gz',
'/media/plg_user_token/js/token.es6.js',
'/media/plg_user_token/js/token.es6.min.js',
'/media/plg_user_token/js/token.es6.min.js.gz',
'/media/system/js/core.es6.js',
'/media/system/js/core.es6.min.js',
'/media/system/js/core.es6.min.js.gz',
'/media/system/js/draggable.es6.js',
'/media/system/js/draggable.es6.min.js',
'/media/system/js/draggable.es6.min.js.gz',
'/media/system/js/fields/joomla-field-color-slider.es6.js',
'/media/system/js/fields/joomla-field-color-slider.es6.min.js',
'/media/system/js/fields/joomla-field-color-slider.es6.min.js.gz',
'/media/system/js/fields/passwordstrength.es6.js',
'/media/system/js/fields/passwordstrength.es6.min.js',
'/media/system/js/fields/passwordstrength.es6.min.js.gz',
'/media/system/js/fields/passwordview.es6.js',
'/media/system/js/fields/passwordview.es6.min.js',
'/media/system/js/fields/passwordview.es6.min.js.gz',
'/media/system/js/fields/select-colour.es6.js',
'/media/system/js/fields/select-colour.es6.min.js',
'/media/system/js/fields/select-colour.es6.min.js.gz',
'/media/system/js/fields/validate.es6.js',
'/media/system/js/fields/validate.es6.min.js',
'/media/system/js/fields/validate.es6.min.js.gz',
'/media/system/js/keepalive.es6.js',
'/media/system/js/keepalive.es6.min.js',
'/media/system/js/keepalive.es6.min.js.gz',
'/media/system/js/multiselect.es6.js',
'/media/system/js/multiselect.es6.min.js',
'/media/system/js/multiselect.es6.min.js.gz',
'/media/system/js/searchtools.es6.js',
'/media/system/js/searchtools.es6.min.js',
'/media/system/js/searchtools.es6.min.js.gz',
'/media/system/js/showon.es6.js',
'/media/system/js/showon.es6.min.js',
'/media/system/js/showon.es6.min.js.gz',
'/media/templates/atum/js/template.es6.js',
'/media/templates/atum/js/template.es6.min.js',
'/media/templates/atum/js/template.es6.min.js.gz',
'/media/templates/atum/js/template.js',
'/media/templates/atum/js/template.min.js',
'/media/templates/atum/js/template.min.js.gz',
'/media/templates/cassiopeia/js/mod_menu/menu-metismenu.es6.js',
'/media/templates/cassiopeia/js/mod_menu/menu-metismenu.es6.min.js',
'/media/templates/cassiopeia/js/mod_menu/menu-metismenu.es6.min.js.gz',
'/media/vendor/bootstrap/js/alert.es6.js',
'/media/vendor/bootstrap/js/alert.es6.min.js',
'/media/vendor/bootstrap/js/alert.es6.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/bootstrap/js/button.es6.js',
'/media/vendor/bootstrap/js/button.es6.min.js',
'/media/vendor/bootstrap/js/button.es6.min.js.gz',
'/media/vendor/bootstrap/js/carousel.es6.js',
'/media/vendor/bootstrap/js/carousel.es6.min.js',
'/media/vendor/bootstrap/js/carousel.es6.min.js.gz',
'/media/vendor/bootstrap/js/collapse.es6.js',
'/media/vendor/bootstrap/js/collapse.es6.min.js',
'/media/vendor/bootstrap/js/collapse.es6.min.js.gz',
'/media/vendor/bootstrap/js/dom-8eef6b5f.js',
'/media/vendor/bootstrap/js/dropdown.es6.js',
'/media/vendor/bootstrap/js/dropdown.es6.min.js',
'/media/vendor/bootstrap/js/dropdown.es6.min.js.gz',
'/media/vendor/bootstrap/js/modal.es6.js',
'/media/vendor/bootstrap/js/modal.es6.min.js',
'/media/vendor/bootstrap/js/modal.es6.min.js.gz',
'/media/vendor/bootstrap/js/popover.es6.js',
'/media/vendor/bootstrap/js/popover.es6.min.js',
'/media/vendor/bootstrap/js/popover.es6.min.js.gz',
'/media/vendor/bootstrap/js/popper-5304749a.js',
'/media/vendor/bootstrap/js/scrollspy.es6.js',
'/media/vendor/bootstrap/js/scrollspy.es6.min.js',
'/media/vendor/bootstrap/js/scrollspy.es6.min.js.gz',
'/media/vendor/bootstrap/js/tab.es6.js',
'/media/vendor/bootstrap/js/tab.es6.min.js',
'/media/vendor/bootstrap/js/tab.es6.min.js.gz',
'/media/vendor/bootstrap/js/toast.es6.js',
'/media/vendor/bootstrap/js/toast.es6.min.js',
'/media/vendor/bootstrap/js/toast.es6.min.js.gz',
'/media/vendor/codemirror/lib/codemirror-ce.js',
'/media/vendor/codemirror/lib/codemirror-ce.min.js',
'/media/vendor/codemirror/lib/codemirror-ce.min.js.gz',
'/media/vendor/punycode/js/punycode.js',
'/media/vendor/punycode/js/punycode.min.js',
'/media/vendor/punycode/js/punycode.min.js.gz',
'/media/vendor/tinymce/changelog.txt',
'/media/vendor/webcomponentsjs/js/webcomponents-ce.js',
'/media/vendor/webcomponentsjs/js/webcomponents-ce.min.js',
'/media/vendor/webcomponentsjs/js/webcomponents-ce.min.js.gz',
'/media/vendor/webcomponentsjs/js/webcomponents-sd-ce-pf.js',
'/media/vendor/webcomponentsjs/js/webcomponents-sd-ce-pf.min.js',
'/media/vendor/webcomponentsjs/js/webcomponents-sd-ce-pf.min.js.gz',
'/media/vendor/webcomponentsjs/js/webcomponents-sd-ce.js',
'/media/vendor/webcomponentsjs/js/webcomponents-sd-ce.min.js',
'/media/vendor/webcomponentsjs/js/webcomponents-sd-ce.min.js.gz',
'/media/vendor/webcomponentsjs/js/webcomponents-sd.js',
'/media/vendor/webcomponentsjs/js/webcomponents-sd.min.js',
'/media/vendor/webcomponentsjs/js/webcomponents-sd.min.js.gz',
'/plugins/fields/subfields/params/subfields.xml',
'/plugins/fields/subfields/subfields.php',
'/plugins/fields/subfields/subfields.xml',
'/plugins/fields/subfields/tmpl/subfields.php',
'/templates/cassiopeia/images/system/rating_star.png',
'/templates/cassiopeia/images/system/rating_star_blank.png',
'/templates/cassiopeia/scss/tools/mixins/_margin.scss',
'/templates/cassiopeia/scss/tools/mixins/_visually-hidden.scss',
'/templates/system/js/error-locales.js',
);
$folders = array(
// Joomla 4.0 Beta 1
// From 3.10 to 4.0
'/templates/system/images',
'/templates/system/html',
'/templates/protostar/less',
@ -5220,6 +5779,7 @@ class JoomlaInstallerScript
'/media/system/images/modal',
'/media/plg_twofactorauth_totp/js',
'/media/plg_twofactorauth_totp',
'/media/plg_system_highlight',
'/media/overrider/js',
'/media/overrider/css',
'/media/overrider',
@ -5637,7 +6197,11 @@ class JoomlaInstallerScript
'/libraries/cms/html',
'/libraries/cms/class',
'/libraries/cms',
'/layouts/libraries/cms/html/bootstrap',
'/layouts/libraries/cms/html',
'/layouts/libraries/cms',
'/layouts/joomla/tinymce/buttons',
'/layouts/joomla/modal',
'/layouts/joomla/html/formbehavior',
'/components/com_wrapper/views/wrapper/tmpl',
'/components/com_wrapper/views/wrapper',
@ -6327,17 +6891,57 @@ class JoomlaInstallerScript
'/administrator/components/com_actionlogs/layouts',
'/administrator/components/com_actionlogs/helpers',
'/administrator/components/com_actionlogs/controllers',
// Joomla 4.0 Beta 2
'/administrator/components/com_finder/src/Indexer/Driver',
'/api/components/com_installer/src/View/Languages',
// 4.0 from Beta 1 to Beta 2
'/libraries/vendor/joomla/controller/src',
'/libraries/vendor/joomla/controller',
// Joomla 4.0 Beta 5
'/api/components/com_installer/src/View/Languages',
'/administrator/components/com_finder/src/Indexer/Driver',
// 4.0 from Beta 2 to Beta 5
'/plugins/content/imagelazyload',
// Joomla 4.0 Beta 7
// 4.0 from Beta 5 to Beta 6
'/media/system/js/core.es6',
'/administrator/modules/mod_multilangstatus/src/Helper',
'/administrator/modules/mod_multilangstatus/src',
// 4.0 from Beta 6 to Beta 7
'/media/vendor/skipto/css',
// Joomla 4.0 Beta 8
'/administrator/components/com_admin/src/View/Profile',
// 4.0 from Beta 7 to Beta 8
'/templates/system/js',
'/templates/cassiopeia/scss/tools/mixins',
'/plugins/fields/subfields/tmpl',
'/plugins/fields/subfields/params',
'/plugins/fields/subfields',
'/media/vendor/punycode/js',
'/media/templates/atum/js',
'/media/templates/atum',
'/libraries/vendor/ozdemirburak/iris/src/Traits',
'/libraries/vendor/ozdemirburak/iris/src/Helpers',
'/libraries/vendor/ozdemirburak/iris/src/Exceptions',
'/libraries/vendor/ozdemirburak/iris/src/Color',
'/libraries/vendor/ozdemirburak/iris/src',
'/libraries/vendor/ozdemirburak/iris',
'/libraries/vendor/ozdemirburak',
'/components/com_menus/src/Controller',
'/components/com_csp/src/Controller',
'/components/com_csp/src',
'/components/com_csp',
'/administrator/templates/atum/Service/HTML',
'/administrator/templates/atum/Service',
'/administrator/components/com_joomlaupdate/src/Helper',
'/administrator/components/com_csp/tmpl/reports',
'/administrator/components/com_csp/tmpl',
'/administrator/components/com_csp/src/View/Reports',
'/administrator/components/com_csp/src/View',
'/administrator/components/com_csp/src/Table',
'/administrator/components/com_csp/src/Model',
'/administrator/components/com_csp/src/Helper',
'/administrator/components/com_csp/src/Controller',
'/administrator/components/com_csp/src',
'/administrator/components/com_csp/services',
'/administrator/components/com_csp/forms',
'/administrator/components/com_csp',
'/administrator/components/com_admin/tmpl/profile',
'/administrator/components/com_admin/src/View/Profile',
'/administrator/components/com_admin/forms',
);
$status['files_checked'] = $files;
@ -6371,7 +6975,6 @@ class JoomlaInstallerScript
if ($dryRun === false)
{
// TODO There is an issue while deleting folders using the ftp mode
if (Folder::delete(JPATH_ROOT . $folder))
{
$status['folders_deleted'][] = $folder;
@ -6412,7 +7015,7 @@ class JoomlaInstallerScript
{
// List all components added since 4.0
$newComponents = array(
'com_csp',
// Components to be added here
);
foreach ($newComponents as $component)
@ -6742,8 +7345,6 @@ class JoomlaInstallerScript
}
}
$this->convertBlogLayouts();
return true;
}
@ -7106,154 +7707,6 @@ class JoomlaInstallerScript
}
}
/**
* Converts layout parameters for blog / featured views into the according CSS classes.
*
* @return void
*
* @since 4.0.0
*/
private function convertBlogLayouts()
{
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select(
[
$db->quoteName('m.id'),
$db->quoteName('m.link'),
$db->quoteName('m.params'),
]
)
->from($db->quoteName('#__menu', 'm'))
->leftJoin($db->quoteName('#__extensions', 'e'), $db->quoteName('e.extension_id') . ' = ' . $db->quoteName('m.component_id'))
->where($db->quoteName('e.element') . ' = ' . $db->quote('com_content'));
$menuItems = $db->setQuery($query)->loadAssocList('id');
$contentParams = ComponentHelper::getParams('com_content');
foreach ($menuItems as $id => $menuItem)
{
$view = Uri::getInstance($menuItem['link'])->getVar('view');
if (!in_array($view, ['category', 'categories', 'featured']))
{
continue;
}
$params = json_decode($menuItem['params'], true);
// Don't update parameters if num_columns is unset.
if (!isset($params['num_columns']))
{
continue;
}
$useLocalCols = $params['num_columns'] !== '';
if ($useLocalCols)
{
$nColumns = (int) $params['num_columns'];
}
else
{
$nColumns = (int) $contentParams->get('num_columns', '1');
}
unset($params['num_columns']);
$order = 0;
$useLocalOrder = false;
if (isset($params['multi_column_order']))
{
if ($params['multi_column_order'] !== '')
{
$useLocalOrder = true;
$order = (int) $params['multi_column_order'];
}
else
{
$order = (int) $contentParams->get('multi_column_order', '0');
}
unset($params['multi_column_order']);
}
// Only add CSS class if columns > 1 and a local value was set for columns or order.
if ($nColumns > 1 && ($useLocalOrder || $useLocalCols))
{
// Convert to the according CSS class depending on order = "down" or "across".
$layout = ($order === 0) ? 'masonry-' : 'columns-';
if (!isset($params['blog_class']))
{
$params['blog_class'] = '';
}
if (strpos($params['blog_class'], $layout) === false)
{
$params['blog_class'] .= ' ' . $layout . $nColumns;
}
}
$newParams = json_encode($params);
$query = $db->getQuery(true)
->update($db->quoteName('#__menu'))
->set($db->quoteName('params') . ' = :params')
->where($db->quoteName('id') . ' = :id')
->bind(':params', $newParams, ParameterType::STRING)
->bind(':id', $id, ParameterType::INTEGER);
$db->setQuery($query)->execute();
}
// Update global parameters for com_content.
$nColumns = $contentParams->get('num_columns');
if ($nColumns !== null)
{
$nColumns = (int) $nColumns;
$order = (int) $contentParams->get('multi_column_order', '0');
$params = $contentParams->toArray();
if (!isset($params['blog_class']))
{
$params['blog_class'] = '';
}
// Convert to the according CSS class depending on order = "down" or "across".
$layout = ($order === 0) ? 'masonry-' : 'columns-';
if (strpos($params['blog_class'], $layout) === false && $nColumns > 1)
{
$params['blog_class'] .= ' ' . $layout . $nColumns;
}
unset($params['num_columns']);
$app = Factory::getApplication();
/** @var ComponentModel $configModel */
$configModel = $app->bootComponent('com_config')
->getMVCFactory()
->createModel('Component', 'Administrator', ['ignore_request' => true]);
$query = $db->getQuery(true)
->select($db->quoteName('extension_id'))
->from($db->quoteName('#__extensions'))
->where($db->quoteName('element') . ' = ' . $db->quote('com_content'));
$componentId = $db->setQuery($query)->loadResult();
$data = array(
'id' => $componentId,
'option' => 'com_content',
'params' => $params,
);
$configModel->save($data);
}
}
/**
* Renames or removes incorrectly cased files.
*

View File

@ -1,3 +0,0 @@
INSERT INTO `#__postinstall_messages` (`extension_id`, `title_key`, `description_key`, `action_key`, `language_extension`, `language_client_id`, `type`, `action_file`, `action`, `condition_file`, `condition_method`, `version_introduced`, `enabled`)
VALUES
(700, 'COM_CPANEL_MSG_HTACCESSSVG_TITLE', 'COM_CPANEL_MSG_HTACCESSSVG_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/htaccesssvg.php', 'admin_postinstall_htaccesssvg_condition', '3.9.21', 1);

View File

@ -1,3 +0,0 @@
INSERT INTO `#__postinstall_messages` (`extension_id`, `title_key`, `description_key`, `action_key`, `language_extension`, `language_client_id`, `type`, `version_introduced`, `enabled`)
VALUES
(700, 'COM_ADMIN_POSTINSTALL_MSG_HTACCESS_AUTOINDEX_TITLE', 'COM_ADMIN_POSTINSTALL_MSG_HTACCESS_AUTOINDEX_DESCRIPTION', '', 'com_admin', 1, 'message', '3.9.22', 1);

View File

@ -3,20 +3,20 @@
--
CREATE TABLE IF NOT EXISTS `#__workflows` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`asset_id` int(10) DEFAULT 0,
`published` tinyint(1) NOT NULL DEFAULT 0,
`id` int NOT NULL AUTO_INCREMENT,
`asset_id` int DEFAULT 0,
`published` tinyint NOT NULL DEFAULT 0,
`title` varchar(255) NOT NULL,
`description` text NOT NULL,
`extension` varchar(50) NOT NULL,
`default` tinyint(1) NOT NULL DEFAULT 0,
`ordering` int(11) NOT NULL DEFAULT 0,
`default` tinyint NOT NULL DEFAULT 0,
`ordering` int NOT NULL DEFAULT 0,
`created` datetime NOT NULL,
`created_by` int(10) NOT NULL DEFAULT 0,
`created_by` int NOT NULL DEFAULT 0,
`modified` datetime NOT NULL,
`modified_by` int(10) NOT NULL DEFAULT 0,
`modified_by` int NOT NULL DEFAULT 0,
`checked_out_time` datetime,
`checked_out` int(10) NOT NULL DEFAULT 0,
`checked_out` int NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_asset_id` (`asset_id`),
KEY `idx_title` (`title`(191)),
@ -41,8 +41,8 @@ INSERT INTO `#__workflows` (`id`, `asset_id`, `published`, `title`, `description
--
CREATE TABLE IF NOT EXISTS `#__workflow_associations` (
`item_id` int(10) NOT NULL DEFAULT 0 COMMENT 'Extension table id value',
`stage_id` int(10) NOT NULL COMMENT 'Foreign Key to #__workflow_stages.id',
`item_id` int NOT NULL DEFAULT 0 COMMENT 'Extension table id value',
`stage_id` int NOT NULL COMMENT 'Foreign Key to #__workflow_stages.id',
`extension` varchar(50) NOT NULL,
PRIMARY KEY (`item_id`, `extension`),
KEY `idx_item_stage_extension` (`item_id`, `stage_id`, `extension`),
@ -56,16 +56,16 @@ CREATE TABLE IF NOT EXISTS `#__workflow_associations` (
--
CREATE TABLE IF NOT EXISTS `#__workflow_stages` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`asset_id` int(10) DEFAULT 0,
`ordering` int(11) NOT NULL DEFAULT 0,
`workflow_id` int(10) NOT NULL,
`published` tinyint(1) NOT NULL DEFAULT 0,
`id` int NOT NULL AUTO_INCREMENT,
`asset_id` int DEFAULT 0,
`ordering` int NOT NULL DEFAULT 0,
`workflow_id` int NOT NULL,
`published` tinyint NOT NULL DEFAULT 0,
`title` varchar(255) NOT NULL,
`description` text NOT NULL,
`default` tinyint(1) NOT NULL DEFAULT 0,
`default` tinyint NOT NULL DEFAULT 0,
`checked_out_time` datetime,
`checked_out` int(10) NOT NULL DEFAULT 0,
`checked_out` int NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_workflow_id` (`workflow_id`),
KEY `idx_checked_out` (`checked_out`),
@ -86,18 +86,18 @@ INSERT INTO `#__workflow_stages` (`id`, `asset_id`, `ordering`, `workflow_id`, `
--
CREATE TABLE IF NOT EXISTS `#__workflow_transitions` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`asset_id` int(10) DEFAULT 0,
`ordering` int(11) NOT NULL DEFAULT 0,
`workflow_id` int(10) NOT NULL,
`published` tinyint(1) NOT NULL DEFAULT 0,
`id` int NOT NULL AUTO_INCREMENT,
`asset_id` int DEFAULT 0,
`ordering` int NOT NULL DEFAULT 0,
`workflow_id` int NOT NULL,
`published` tinyint NOT NULL DEFAULT 0,
`title` varchar(255) NOT NULL,
`description` text NOT NULL,
`from_stage_id` int(10) NOT NULL,
`to_stage_id` int(10) NOT NULL,
`from_stage_id` int NOT NULL,
`to_stage_id` int NOT NULL,
`options` text NOT NULL,
`checked_out_time` datetime,
`checked_out` int(10) NOT NULL DEFAULT 0,
`checked_out` int NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_title` (`title`(191)),
KEY `idx_asset_id` (`asset_id`),

View File

@ -1,18 +1 @@
--
-- Table structure for table `#__csp`
--
CREATE TABLE IF NOT EXISTS `#__csp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`document_uri` varchar(500) NOT NULL DEFAULT '',
`blocked_uri` varchar(500) NOT NULL DEFAULT '',
`directive` varchar(500) NOT NULL DEFAULT '',
`client` varchar(500) NOT NULL DEFAULT '',
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
`published` tinyint(1) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;
INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES
(0, 'com_csp', 'component', 'com_csp', '', 1, 1, 1, 0, '', '{}', '', 0, '0000-00-00 00:00:00', 0, 0);
-- This has been removed as com_csp has been removed from the final build

View File

@ -1 +1 @@
ALTER TABLE `#__user_notes` CHANGE `modified_user_id` `modified_user_id` int(10) unsigned NOT NULL DEFAULT 0;
ALTER TABLE `#__user_notes` CHANGE `modified_user_id` `modified_user_id` int unsigned NOT NULL DEFAULT 0;

View File

@ -1,11 +1,11 @@
CREATE TABLE IF NOT EXISTS `#__template_overrides` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id` int unsigned NOT NULL AUTO_INCREMENT,
`template` varchar(50) NOT NULL DEFAULT '',
`hash_id` varchar(255) NOT NULL DEFAULT '',
`extension_id` int(11) DEFAULT 0,
`state` tinyint(1) NOT NULL DEFAULT 0,
`extension_id` int DEFAULT 0,
`state` tinyint NOT NULL DEFAULT 0,
`action` varchar(50) NOT NULL DEFAULT '',
`client_id` tinyint(1) unsigned NOT NULL DEFAULT 0,
`client_id` tinyint unsigned NOT NULL DEFAULT 0,
`created_date` datetime NOT NULL,
`modified_date` datetime,
PRIMARY KEY (`id`),

View File

@ -2,7 +2,7 @@ INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`,
(0, 'plg_extension_finder', 'plugin', 'finder', 'extension', 0, 1, 1, 0, '', '', '', 0, '0000-00-00 00:00:00', 0, 0);
TRUNCATE TABLE `#__finder_filters`;
ALTER TABLE `#__finder_filters` MODIFY `created_by` int(10) unsigned NOT NULL DEFAULT 0;
ALTER TABLE `#__finder_filters` MODIFY `created_by` int unsigned NOT NULL DEFAULT 0;
ALTER TABLE `#__finder_filters` MODIFY `created_by_alias` varchar(255) NOT NULL DEFAULT '';
ALTER TABLE `#__finder_filters` MODIFY `created` datetime NOT NULL;
ALTER TABLE `#__finder_filters` MODIFY `modified` datetime NOT NULL;
@ -13,8 +13,8 @@ ALTER TABLE `#__finder_filters` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_un
TRUNCATE TABLE `#__finder_links`;
ALTER TABLE `#__finder_links` CHANGE `route` `route` varchar(400);
ALTER TABLE `#__finder_links` CHANGE `language` `language` CHAR(7) NOT NULL DEFAULT '' AFTER `access`;
ALTER TABLE `#__finder_links` MODIFY `state` int(5) NOT NULL DEFAULT 1;
ALTER TABLE `#__finder_links` MODIFY `access` int(5) NOT NULL DEFAULT 0;
ALTER TABLE `#__finder_links` MODIFY `state` int NOT NULL DEFAULT 1;
ALTER TABLE `#__finder_links` MODIFY `access` int NOT NULL DEFAULT 0;
ALTER TABLE `#__finder_links` MODIFY `indexdate` datetime NOT NULL;
ALTER TABLE `#__finder_links` MODIFY `publish_start_date` datetime NULL DEFAULT NULL;
ALTER TABLE `#__finder_links` MODIFY `publish_end_date` datetime NULL DEFAULT NULL;
@ -25,8 +25,8 @@ ALTER TABLE `#__finder_links` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_u
ALTER TABLE `#__finder_links` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE `#__finder_links_terms` (
`link_id` INT(10) UNSIGNED NOT NULL,
`term_id` INT(10) UNSIGNED NOT NULL,
`link_id` INT UNSIGNED NOT NULL,
`term_id` INT UNSIGNED NOT NULL,
`weight` FLOAT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`link_id`, `term_id`),
INDEX `idx_term_weight` (`term_id`, `weight`),
@ -54,8 +54,8 @@ CREATE TABLE IF NOT EXISTS `#__finder_logging` (
`searchterm` VARCHAR(255) NOT NULL DEFAULT '',
`md5sum` VARCHAR(32) NOT NULL DEFAULT '',
`query` BLOB NOT NULL,
`hits` INT(11) NOT NULL DEFAULT 1,
`results` INT(11) NOT NULL DEFAULT 0,
`hits` INT NOT NULL DEFAULT 1,
`results` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`md5sum`),
INDEX `searchterm` (`searchterm`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;
@ -64,16 +64,16 @@ ALTER TABLE `#__finder_logging` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_un
DROP TABLE `#__finder_taxonomy`;
CREATE TABLE IF NOT EXISTS `#__finder_taxonomy` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`parent_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`lft` INT(11) NOT NULL DEFAULT '0',
`rgt` INT(11) NOT NULL DEFAULT '0',
`level` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`parent_id` INT UNSIGNED NOT NULL DEFAULT '0',
`lft` INT NOT NULL DEFAULT '0',
`rgt` INT NOT NULL DEFAULT '0',
`level` INT UNSIGNED NOT NULL DEFAULT '0',
`path` VARCHAR(400) NOT NULL DEFAULT '',
`title` VARCHAR(255) NOT NULL DEFAULT '',
`alias` VARCHAR(400) NOT NULL DEFAULT '',
`state` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
`access` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
`state` TINYINT UNSIGNED NOT NULL DEFAULT '1',
`access` TINYINT UNSIGNED NOT NULL DEFAULT '1',
`language` CHAR(7) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
INDEX `idx_state` (`state`),
@ -107,7 +107,7 @@ DROP TABLE IF EXISTS `#__finder_terms_common`;
CREATE TABLE `#__finder_terms_common` (
`term` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`language` char(7) NOT NULL DEFAULT '',
`custom` int(11) NOT NULL DEFAULT '0',
`custom` int NOT NULL DEFAULT '0',
UNIQUE KEY `idx_term_language` (`term`,`language`),
KEY `idx_lang` (`language`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;

View File

@ -1 +1 @@
DELETE FROM `#__menu` WHERE `link` = 'index.php?option=com_csp' AND `menutype` = 'main';
-- This has been removed as com_csp has been removed from the final build

View File

@ -1,2 +1,2 @@
ALTER TABLE `#__update_sites` ADD COLUMN `checked_out` int(10) unsigned NOT NULL DEFAULT 0;
ALTER TABLE `#__update_sites` ADD COLUMN `checked_out` int unsigned NOT NULL DEFAULT 0;
ALTER TABLE `#__update_sites` ADD COLUMN `checked_out_time` datetime NULL DEFAULT NULL;

View File

@ -1,6 +1,6 @@
-- Add locked field to extensions table.
ALTER TABLE `#__extensions` MODIFY `protected` tinyint(3) NOT NULL DEFAULT 0 COMMENT 'Flag to indicate if the extension is protected. Protected extensions cannot be disabled.';
ALTER TABLE `#__extensions` ADD COLUMN `locked` tinyint(3) NOT NULL DEFAULT 0 COMMENT 'Flag to indicate if the extension is locked. Locked extensions cannot be uninstalled.';
ALTER TABLE `#__extensions` MODIFY `protected` tinyint NOT NULL DEFAULT 0 COMMENT 'Flag to indicate if the extension is protected. Protected extensions cannot be disabled.';
ALTER TABLE `#__extensions` ADD COLUMN `locked` tinyint NOT NULL DEFAULT 0 COMMENT 'Flag to indicate if the extension is locked. Locked extensions cannot be uninstalled.';
-- Set all core extensions as locked extensions and unprotected them.
UPDATE `#__extensions`
@ -39,7 +39,6 @@ WHERE (`type` = 'component' AND `element` IN (
'com_privacy',
'com_actionlogs',
'com_workflow',
'com_csp',
'com_mails'
))
OR (`type` = 'module' AND `client_id` = 0 AND `element` IN (

View File

@ -1,22 +1,22 @@
ALTER TABLE `#__extensions` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__menu` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__modules` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__tags` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__update_sites` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__user_notes` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__workflows` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__workflow_stages` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__workflow_transitions` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__banners` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__banner_clients` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__contact_details` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__content` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__finder_filters` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__newsfeeds` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__categories` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__fields` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__fields_groups` MODIFY `checked_out` INT(10) UNSIGNED;
ALTER TABLE `#__ucm_content` MODIFY `core_checked_out_user_id` INT(10) UNSIGNED;
ALTER TABLE `#__extensions` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__menu` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__modules` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__tags` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__update_sites` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__user_notes` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__workflows` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__workflow_stages` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__workflow_transitions` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__banners` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__banner_clients` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__contact_details` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__content` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__finder_filters` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__newsfeeds` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__categories` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__fields` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__fields_groups` MODIFY `checked_out` INT UNSIGNED;
ALTER TABLE `#__ucm_content` MODIFY `core_checked_out_user_id` INT UNSIGNED;
UPDATE `#__extensions` SET `checked_out` = null WHERE `checked_out` = 0;
UPDATE `#__menu` SET `checked_out` = null WHERE `checked_out` = 0;

View File

@ -1 +1 @@
ALTER TABLE `#__fields` ADD COLUMN `only_use_in_subform` tinyint(1) NOT NULL DEFAULT 0;
ALTER TABLE `#__fields` ADD COLUMN `only_use_in_subform` tinyint NOT NULL DEFAULT 0;

View File

@ -0,0 +1,4 @@
UPDATE `#__template_styles`
SET `params` = '{"hue":"hsl(214, 63%, 20%)","bg-light":"#f0f4fb","text-dark":"#495057","text-light":"#ffffff","link-color":"#2a69b8","special-color":"#001b4c","monochrome":"0","loginLogo":"","loginLogoAlt":"","logoBrandLarge":"","logoBrandLargeAlt":"","logoBrandSmall":"","logoBrandSmallAlt":""}'
WHERE `template` = 'atum'
AND `client_id` = 1;

View File

@ -0,0 +1,2 @@
DELETE FROM `#__extensions` WHERE `name` = 'com_csp' and `type` = 'component' and `element` = 'com_csp';
DROP TABLE `#__csp`;

View File

@ -0,0 +1,4 @@
UPDATE `#__mail_templates`
SET `subject` = 'COM_PRIVACY_EMAIL_DATA_EXPORT_COMPLETED_SUBJECT',
`body` = 'COM_PRIVACY_EMAIL_DATA_EXPORT_COMPLETED_BODY'
WHERE `template_id` = 'com_privacy.userdataexport';

View File

@ -1,3 +0,0 @@
INSERT INTO "#__postinstall_messages" ("extension_id", "title_key", "description_key", "action_key", "language_extension", "language_client_id", "type", "action_file", "action", "condition_file", "condition_method", "version_introduced", "enabled")
VALUES
(700, 'COM_CPANEL_MSG_HTACCESSSVG_TITLE', 'COM_CPANEL_MSG_HTACCESSSVG_BODY', '', 'com_cpanel', 1, 'message', '', '', 'admin://components/com_admin/postinstall/htaccesssvg.php', 'admin_postinstall_htaccesssvg_condition', '3.9.21', 1);

View File

@ -1,3 +0,0 @@
INSERT INTO "#__postinstall_messages" ("extension_id", "title_key", "description_key", "action_key", "language_extension", "language_client_id", "type", "version_introduced", "enabled")
VALUES
(700, 'COM_ADMIN_POSTINSTALL_MSG_HTACCESS_AUTOINDEX_TITLE', 'COM_ADMIN_POSTINSTALL_MSG_HTACCESS_AUTOINDEX_DESCRIPTION', '', 'com_admin', 1, 'message', '3.9.22', 1);

View File

@ -1,18 +1 @@
--
-- Table structure for table `#__csp`
--
CREATE TABLE IF NOT EXISTS "#__csp" (
"id" serial NOT NULL,
"document_uri" varchar(500) NOT NULL DEFAULT '',
"blocked_uri" varchar(500) NOT NULL DEFAULT '',
"directive" varchar(500) NOT NULL DEFAULT '',
"client" varchar(500) NOT NULL DEFAULT '',
"created" timestamp without time zone NOT NULL,
"modified" timestamp without time zone NOT NULL,
"published" smallint DEFAULT 0 NOT NULL,
PRIMARY KEY ("id")
);
INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "manifest_cache", "params", "custom_data", "checked_out", "checked_out_time", "ordering", "state") VALUES
(0, 'com_csp', 'component', 'com_csp', '', 1, 1, 1, 0, '', '{}', '', 0, '1970-01-01 00:00:00', 0, 0);
-- This has been removed as com_csp has been removed from the final build

View File

@ -1 +1 @@
DELETE FROM "#__menu" WHERE "link" = 'index.php?option=com_csp' AND "menutype" = 'main';
-- This has been removed as com_csp has been removed from the final build

View File

@ -41,7 +41,6 @@ WHERE ("type" = 'component' AND "element" IN (
'com_privacy',
'com_actionlogs',
'com_workflow',
'com_csp',
'com_mails'
))
OR ("type" = 'module' AND "client_id" = 0 AND "element" IN (

View File

@ -0,0 +1,4 @@
UPDATE "#__template_styles"
SET "params" = '{"hue":"hsl(214, 63%, 20%)","bg-light":"#f0f4fb","text-dark":"#495057","text-light":"#ffffff","link-color":"#2a69b8","special-color":"#001b4c","monochrome":"0","loginLogo":"","loginLogoAlt":"","logoBrandLarge":"","logoBrandLargeAlt":"","logoBrandSmall":"","logoBrandSmallAlt":""}'
WHERE "template" = 'atum'
AND "client_id" = 1;

View File

@ -0,0 +1,2 @@
DELETE FROM `#__extensions` WHERE `name` = 'com_csp' and `type` = 'component' and `element` = 'com_csp';
DROP TABLE `#__csp`;

View File

@ -0,0 +1,4 @@
UPDATE "#__mail_templates"
SET "subject" = 'COM_PRIVACY_EMAIL_DATA_EXPORT_COMPLETED_SUBJECT',
"body" = 'COM_PRIVACY_EMAIL_DATA_EXPORT_COMPLETED_BODY'
WHERE "template_id" = 'com_privacy.userdataexport';

View File

@ -32,7 +32,7 @@ class SysinfoModel extends BaseDatabaseModel
* @var array
* @since 1.6
*/
protected $php_settings = array();
protected $php_settings = [];
/**
* Config values
@ -40,7 +40,7 @@ class SysinfoModel extends BaseDatabaseModel
* @var array
* @since 1.6
*/
protected $config = array();
protected $config = [];
/**
* Some system values
@ -48,7 +48,7 @@ class SysinfoModel extends BaseDatabaseModel
* @var array
* @since 1.6
*/
protected $info = array();
protected $info = [];
/**
* PHP info
@ -74,8 +74,8 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 3.5
*/
protected $privateSettings = array(
'phpInfoArray' => array(
protected $privateSettings = [
'phpInfoArray' => [
'CONTEXT_DOCUMENT_ROOT',
'Cookie',
'DOCUMENT_ROOT',
@ -111,8 +111,8 @@ class SysinfoModel extends BaseDatabaseModel
'upload_tmp_dir',
'User/Group',
'open_basedir',
),
'other' => array(
],
'other' => [
'db',
'dbprefix',
'fromname',
@ -137,8 +137,8 @@ class SysinfoModel extends BaseDatabaseModel
'smtphost',
'tmp_path',
'open_basedir',
)
);
]
];
/**
* System values that can be "safely" shared
@ -155,7 +155,7 @@ class SysinfoModel extends BaseDatabaseModel
* @var array
* @since 1.6
*/
protected $directories = array();
protected $directories = [];
/**
* The current editor.
@ -175,7 +175,7 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 3.5
*/
protected function cleanPrivateData($dataArray, $dataType = 'other')
protected function cleanPrivateData(array $dataArray, string $dataType = 'other'): array
{
$dataType = isset($this->privateSettings[$dataType]) ? $dataType : 'other';
@ -188,12 +188,12 @@ class SysinfoModel extends BaseDatabaseModel
foreach ($dataArray as $section => $values)
{
if (is_array($values))
if (\is_array($values))
{
$dataArray[$section] = $this->cleanPrivateData($values, $dataType);
}
if (in_array($section, $privateSettings, true))
if (\in_array($section, $privateSettings, true))
{
$dataArray[$section] = $this->cleanSectionPrivateData($values);
}
@ -207,13 +207,13 @@ class SysinfoModel extends BaseDatabaseModel
*
* @param mixed $sectionValues Section data
*
* @return mixed
* @return string|array
*
* @since 3.5
*/
protected function cleanSectionPrivateData($sectionValues)
{
if (!is_array($sectionValues))
if (!\is_array($sectionValues))
{
if (strstr($sectionValues, JPATH_ROOT))
{
@ -238,14 +238,14 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 1.6
*/
public function &getPhpSettings()
public function &getPhpSettings(): array
{
if (!empty($this->php_settings))
{
return $this->php_settings;
}
$this->php_settings = array(
$this->php_settings = [
'memory_limit' => ini_get('memory_limit'),
'upload_max_filesize' => ini_get('upload_max_filesize'),
'post_max_size' => ini_get('post_max_size'),
@ -262,8 +262,9 @@ class SysinfoModel extends BaseDatabaseModel
'zip' => function_exists('zip_open') && function_exists('zip_read'),
'mbstring' => extension_loaded('mbstring'),
'iconv' => function_exists('iconv'),
'intl' => function_exists('transliterator_transliterate'),
'max_input_vars' => ini_get('max_input_vars'),
);
];
return $this->php_settings;
}
@ -275,7 +276,7 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 1.6
*/
public function &getConfig()
public function &getConfig(): array
{
if (!empty($this->config))
{
@ -284,11 +285,11 @@ class SysinfoModel extends BaseDatabaseModel
$registry = new Registry(new \JConfig);
$this->config = $registry->toArray();
$hidden = array(
$hidden = [
'host', 'user', 'password', 'ftp_user', 'ftp_pass',
'smtpuser', 'smtppass', 'redis_server_auth', 'session_redis_server_auth',
'proxy_user', 'proxy_pass', 'secret'
);
];
foreach ($hidden as $key)
{
@ -305,7 +306,7 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 1.6
*/
public function &getInfo()
public function &getInfo(): array
{
if (!empty($this->info))
{
@ -314,7 +315,7 @@ class SysinfoModel extends BaseDatabaseModel
$db = $this->getDbo();
$this->info = array(
$this->info = [
'php' => php_uname(),
'dbserver' => $db->getServerType(),
'dbversion' => $db->getVersion(),
@ -327,7 +328,7 @@ class SysinfoModel extends BaseDatabaseModel
'sapi_name' => PHP_SAPI,
'version' => (new Version)->getLongVersion(),
'useragent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
);
];
return $this->info;
}
@ -339,9 +340,9 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 3.4.1
*/
public function phpinfoEnabled()
public function phpinfoEnabled(): bool
{
return !in_array('phpinfo', explode(',', ini_get('disable_functions')));
return !\in_array('phpinfo', explode(',', ini_get('disable_functions')));
}
/**
@ -354,7 +355,7 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 3.5
*/
public function getSafeData($dataType, $public = true)
public function getSafeData(string $dataType, bool $public = true): array
{
if (isset($this->safeData[$dataType]))
{
@ -365,7 +366,7 @@ class SysinfoModel extends BaseDatabaseModel
if (!method_exists($this, $methodName))
{
return array();
return [];
}
$data = $this->$methodName($public);
@ -382,7 +383,7 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 1.6
*/
public function &getPHPInfo()
public function &getPHPInfo(): string
{
if (!$this->phpinfoEnabled())
{
@ -406,7 +407,7 @@ class SysinfoModel extends BaseDatabaseModel
$output = preg_replace('#(\w),(\w)#', '\1, \2', $output);
$output = preg_replace('#<hr />#', '', $output);
$output = str_replace('<div class="text-center">', '', $output);
$output = preg_replace('#<tr class="h">(.*)<\/tr>#', '<thead><tr class="h">$1</tr></thead><tbody>', $output);
$output = preg_replace('#<tr class="h">(.*)</tr>#', '<thead><tr class="h">$1</tr></thead><tbody>', $output);
$output = str_replace('</table>', '</tbody></table>', $output);
$output = str_replace('</div>', '', $output);
$this->php_info = $output;
@ -421,7 +422,7 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 3.5
*/
public function getPhpInfoArray()
public function getPhpInfoArray(): array
{
// Already cached
if (null !== $this->phpInfoArray)
@ -443,10 +444,10 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 3.5
*/
public function getExtensions()
public function getExtensions(): array
{
$installed = array();
$db = Factory::getDbo();
$installed = [];
$db = Factory::getContainer()->get('DatabaseDriver');
$query = $db->getQuery(true)
->select('*')
->from($db->quoteName('#__extensions'));
@ -485,7 +486,7 @@ class SysinfoModel extends BaseDatabaseModel
continue;
}
$installed[$extension->name] = array(
$installed[$extension->name] = [
'name' => $extension->name,
'type' => $extension->type,
'state' => $extension->enabled ? Text::_('JENABLED') : Text::_('JDISABLED'),
@ -493,16 +494,16 @@ class SysinfoModel extends BaseDatabaseModel
'version' => 'unknown',
'creationDate' => 'unknown',
'authorUrl' => 'unknown',
);
];
$manifest = new Registry($extension->manifest_cache);
$extraData = array(
$extraData = [
'author' => $manifest->get('author', ''),
'version' => $manifest->get('version', ''),
'creationDate' => $manifest->get('creationDate', ''),
'authorUrl' => $manifest->get('authorUrl', '')
);
];
$installed[$extension->name] = array_merge($installed[$extension->name], $extraData);
}
@ -513,20 +514,21 @@ class SysinfoModel extends BaseDatabaseModel
/**
* Method to get the directory states
*
* @param bool $public If true no information is going to be removed
* @param bool $public If true no information is going to be removed
*
* @return array States of directories
*
* @throws \Exception
* @since 1.6
*/
public function getDirectory($public = false)
public function getDirectory(bool $public = false): array
{
if (!empty($this->directories))
{
return $this->directories;
}
$this->directories = array();
$this->directories = [];
$registry = Factory::getApplication()->getConfig();
$cparams = ComponentHelper::getParams('com_media');
@ -679,9 +681,9 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 1.6
*/
private function addDirectory($name, $path, $message = '')
private function addDirectory(string $name, string $path, string $message = ''): void
{
$this->directories[$name] = array('writable' => is_writable($path), 'message' => $message,);
$this->directories[$name] = ['writable' => is_writable($path), 'message' => $message,];
}
/**
@ -692,7 +694,7 @@ class SysinfoModel extends BaseDatabaseModel
* @note Has to be removed (it is present in the config...)
* @since 1.6
*/
public function &getEditor()
public function &getEditor(): string
{
if (!is_null($this->editor))
{
@ -714,14 +716,14 @@ class SysinfoModel extends BaseDatabaseModel
*
* @since 3.5
*/
protected function parsePhpInfo($html)
protected function parsePhpInfo(string $html): array
{
$html = strip_tags($html, '<h2><th><td>');
$html = preg_replace('/<th[^>]*>([^<]+)<\/th>/', '<info>\1</info>', $html);
$html = preg_replace('/<td[^>]*>([^<]+)<\/td>/', '<info>\1</info>', $html);
$t = preg_split('/(<h2[^>]*>[^<]+<\/h2>)/', $html, -1, PREG_SPLIT_DELIM_CAPTURE);
$r = array();
$count = count($t);
$r = [];
$count = \count($t);
$p1 = '<info>([^<]+)<\/info>';
$p2 = '/' . $p1 . '\s*' . $p1 . '\s*' . $p1 . '/';
$p3 = '/' . $p1 . '\s*' . $p1 . '/';
@ -738,7 +740,7 @@ class SysinfoModel extends BaseDatabaseModel
// 3cols
if (preg_match($p2, $val, $matchs))
{
$r[$name][trim($matchs[1])] = array(trim($matchs[2]), trim($matchs[3]),);
$r[$name][trim($matchs[1])] = [trim($matchs[2]), trim($matchs[3]),];
}
// 2cols
elseif (preg_match($p3, $val, $matchs))

View File

@ -50,7 +50,7 @@ class JsonView extends AbstractView
$data = $this->getLayoutData();
echo json_encode($data);
echo json_encode($data, JSON_PRETTY_PRINT);
Factory::getApplication()->close();
}

View File

@ -17,7 +17,7 @@ use Joomla\CMS\Router\Route;
/** @var \Joomla\Component\Admin\Administrator\View\Help\HtmlView $this */
?>
<form action="<?php echo Route::_('index.php?option=com_admin&amp;view=help'); ?>" method="post" name="adminForm" id="adminForm">
<form action="<?php echo Route::_('index.php?option=com_admin&amp;view=help'); ?>" method="post" name="adminForm" id="adminForm" class="main-card">
<div class="row mt-sm-3">
<div id="sidebar" class="col-md-3">
<button class="btn btn-sm btn-secondary my-2 options-menu d-md-none" type="button" data-bs-toggle="collapse" data-bs-target=".sidebar-nav" aria-controls="help-index" aria-expanded="false">

View File

@ -15,9 +15,7 @@ use Joomla\CMS\Language\Text;
/** @var \Joomla\Component\Admin\Administrator\View\Sysinfo\HtmlView $this */
?>
<div class="row">
<?php // Begin Content ?>
<div class="col-md-12">
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', ['active' => 'site']); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'site', Text::_('COM_ADMIN_SYSTEM_INFORMATION')); ?>
@ -41,7 +39,5 @@ use Joomla\CMS\Language\Text;
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php echo HTMLHelper::_('uitab.endTabSet'); ?>
</div>
<?php // End Content ?>
</div>

View File

@ -153,12 +153,20 @@ use Joomla\CMS\Language\Text;
</tr>
<tr>
<th scope="row">
<?php echo Text::_('COM_ADMIN_ICONV_AVAILABLE'); ?>
iconv <?php echo Text::_('COM_ADMIN_EXTENSION_AVAILABLE'); ?>
</th>
<td>
<?php echo HTMLHelper::_('phpsetting.set', $this->phpSettings['iconv']); ?>
</td>
</tr>
<tr>
<th scope="row">
intl <?php echo Text::_('COM_ADMIN_EXTENSION_AVAILABLE'); ?>
</th>
<td>
<?php echo HTMLHelper::_('phpsetting.set', $this->phpSettings['intl']); ?>
</td>
</tr>
<tr>
<th scope="row">
<?php echo Text::_('COM_ADMIN_MAX_INPUT_VARS'); ?>

View File

@ -3,40 +3,40 @@
--
CREATE TABLE IF NOT EXISTS `#__banners` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cid` int(11) NOT NULL DEFAULT 0,
`type` int(11) NOT NULL DEFAULT 0,
`id` int NOT NULL AUTO_INCREMENT,
`cid` int NOT NULL DEFAULT 0,
`type` int NOT NULL DEFAULT 0,
`name` varchar(255) NOT NULL DEFAULT '',
`alias` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`imptotal` int(11) NOT NULL DEFAULT 0,
`impmade` int(11) NOT NULL DEFAULT 0,
`clicks` int(11) NOT NULL DEFAULT 0,
`imptotal` int NOT NULL DEFAULT 0,
`impmade` int NOT NULL DEFAULT 0,
`clicks` int NOT NULL DEFAULT 0,
`clickurl` varchar(200) NOT NULL DEFAULT '',
`state` tinyint(3) NOT NULL DEFAULT 0,
`catid` int(10) unsigned NOT NULL DEFAULT 0,
`state` tinyint NOT NULL DEFAULT 0,
`catid` int unsigned NOT NULL DEFAULT 0,
`description` text NOT NULL,
`custombannercode` varchar(2048) NOT NULL,
`sticky` tinyint(1) unsigned NOT NULL DEFAULT 0,
`ordering` int(11) NOT NULL DEFAULT 0,
`sticky` tinyint unsigned NOT NULL DEFAULT 0,
`ordering` int NOT NULL DEFAULT 0,
`metakey` text NOT NULL,
`params` text NOT NULL,
`own_prefix` tinyint(1) NOT NULL DEFAULT 0,
`own_prefix` tinyint NOT NULL DEFAULT 0,
`metakey_prefix` varchar(400) NOT NULL DEFAULT '',
`purchase_type` tinyint(4) NOT NULL DEFAULT -1,
`track_clicks` tinyint(4) NOT NULL DEFAULT -1,
`track_impressions` tinyint(4) NOT NULL DEFAULT -1,
`checked_out` int(10) unsigned NOT NULL DEFAULT 0,
`purchase_type` tinyint NOT NULL DEFAULT -1,
`track_clicks` tinyint NOT NULL DEFAULT -1,
`track_impressions` tinyint NOT NULL DEFAULT -1,
`checked_out` int unsigned NOT NULL DEFAULT 0,
`checked_out_time` datetime,
`publish_up` datetime,
`publish_down` datetime,
`reset` datetime,
`created` datetime NOT NULL,
`language` char(7) NOT NULL DEFAULT '',
`created_by` int(10) unsigned NOT NULL DEFAULT 0,
`created_by` int unsigned NOT NULL DEFAULT 0,
`created_by_alias` varchar(255) NOT NULL DEFAULT '',
`modified` datetime NOT NULL,
`modified_by` int(10) unsigned NOT NULL DEFAULT 0,
`version` int(10) unsigned NOT NULL DEFAULT 1,
`modified_by` int unsigned NOT NULL DEFAULT 0,
`version` int unsigned NOT NULL DEFAULT 1,
PRIMARY KEY (`id`),
KEY `idx_state` (`state`),
KEY `idx_own_prefix` (`own_prefix`),
@ -50,20 +50,20 @@ CREATE TABLE IF NOT EXISTS `#__banners` (
--
CREATE TABLE IF NOT EXISTS `#__banner_clients` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`contact` varchar(255) NOT NULL DEFAULT '',
`email` varchar(255) NOT NULL DEFAULT '',
`extrainfo` text NOT NULL,
`state` tinyint(3) NOT NULL DEFAULT 0,
`checked_out` int(10) unsigned NOT NULL DEFAULT 0,
`state` tinyint NOT NULL DEFAULT 0,
`checked_out` int unsigned NOT NULL DEFAULT 0,
`checked_out_time` datetime,
`metakey` text NOT NULL,
`own_prefix` tinyint(4) NOT NULL DEFAULT 0,
`own_prefix` tinyint NOT NULL DEFAULT 0,
`metakey_prefix` varchar(400) NOT NULL DEFAULT '',
`purchase_type` tinyint(4) NOT NULL DEFAULT -1,
`track_clicks` tinyint(4) NOT NULL DEFAULT -1,
`track_impressions` tinyint(4) NOT NULL DEFAULT -1,
`purchase_type` tinyint NOT NULL DEFAULT -1,
`track_clicks` tinyint NOT NULL DEFAULT -1,
`track_impressions` tinyint NOT NULL DEFAULT -1,
PRIMARY KEY (`id`),
KEY `idx_own_prefix` (`own_prefix`),
KEY `idx_metakey_prefix` (`metakey_prefix`(100))
@ -75,9 +75,9 @@ CREATE TABLE IF NOT EXISTS `#__banner_clients` (
CREATE TABLE IF NOT EXISTS `#__banner_tracks` (
`track_date` datetime NOT NULL,
`track_type` int(10) unsigned NOT NULL,
`banner_id` int(10) unsigned NOT NULL,
`count` int(10) unsigned NOT NULL DEFAULT 0,
`track_type` int unsigned NOT NULL,
`banner_id` int unsigned NOT NULL,
`count` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`track_date`,`track_type`,`banner_id`),
KEY `idx_track_date` (`track_date`),
KEY `idx_track_type` (`track_type`),

View File

@ -540,6 +540,9 @@ class TracksModel extends ListModel
}
$this->content = file_get_contents($ziproot);
// Remove tmp zip file, it's no longer needed.
File::delete($ziproot);
}
}

View File

@ -28,34 +28,26 @@ $wa->useScript('keepalive')
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<div>
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'details')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'details', Text::_('COM_BANNERS_BANNER_DETAILS')); ?>
<div class="row">
<div class="col-lg-9">
<div class="card">
<div class="card-body">
<?php echo $this->form->renderField('type'); ?>
<div id="image">
<?php echo $this->form->renderFieldset('image'); ?>
</div>
<div id="custom">
<?php echo $this->form->renderField('custombannercode'); ?>
</div>
<?php
echo $this->form->renderField('clickurl');
echo $this->form->renderField('description');
?>
</div>
<?php echo $this->form->renderField('type'); ?>
<div id="image">
<?php echo $this->form->renderFieldset('image'); ?>
</div>
<div id="custom">
<?php echo $this->form->renderField('custombannercode'); ?>
</div>
<?php
echo $this->form->renderField('clickurl');
echo $this->form->renderField('description');
?>
</div>
<div class="col-lg-3">
<div class="card">
<div class="card-body">
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>

View File

@ -18,7 +18,7 @@ $published = $this->state->get('filter.published');
?>
<div class="container">
<div class="p-3">
<div class="row">
<div class="form-group col-md-6">
<div class="controls">

View File

@ -27,31 +27,23 @@ $wa->useScript('keepalive')
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<div>
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', ['active' => 'general']); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'general', empty($this->item->id) ? Text::_('COM_BANNERS_NEW_CLIENT') : Text::_('COM_BANNERS_EDIT_CLIENT')); ?>
<div class="row">
<div class="col-lg-9">
<div class="card">
<div class="card-body">
<?php
echo $this->form->renderField('contact');
echo $this->form->renderField('email');
echo $this->form->renderField('purchase_type');
echo $this->form->renderField('track_impressions');
echo $this->form->renderField('track_clicks');
echo $this->form->renderFieldset('extra');
?>
</div>
</div>
<?php
echo $this->form->renderField('contact');
echo $this->form->renderField('email');
echo $this->form->renderField('purchase_type');
echo $this->form->renderField('track_impressions');
echo $this->form->renderField('track_clicks');
echo $this->form->renderFieldset('extra');
?>
</div>
<div class="col-lg-3">
<div class="card">
<div class="card-body">
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>

View File

@ -17,6 +17,7 @@ use Joomla\CMS\Factory;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Database\DatabaseQuery;
use Joomla\Database\ParameterType;
use Joomla\Utilities\ArrayHelper;
@ -490,30 +491,22 @@ class CategoriesModel extends ListModel
}
/**
* Is this an empty state, I.e: no items of this type regardless of the searched for states.
* Manipulate the query to be used to evaluate if this is an Empty State to provide specific conditions for this extension.
*
* @return boolean
* @return DatabaseQuery
*
* @since __DEPLOY_VERSION__
*/
public function getisEmptyState()
protected function getEmptyStateQuery()
{
$query = parent::getEmptyStateQuery();
// Get the extension from the filter
$extension = $this->getState('filter.extension');
$sql = $this->query
->clear('select')
->clear('values')
->clear('bounded')
->clear('limit')
->clear('order')
->clear('where')
->select('count(*)');
$sql->where($this->_db->quoteName('extension') . ' = :extension')
$query->where($this->_db->quoteName('extension') . ' = :extension')
->bind(':extension', $extension);
$this->_db->setQuery($sql);
return !($this->_db->loadResult() > 0);
return $query;
}
}

View File

@ -17,7 +17,7 @@ $extension = $this->escape($this->state->get('filter.extension'));
?>
<div class="container-fluid">
<div class="p-3">
<div class="row">
<div class="form-group col-md-6">
<div class="controls">
@ -44,6 +44,7 @@ $extension = $this->escape($this->state->get('filter.extension'));
</div>
</div>
</div>
<?php if ($extension === 'com_content') : ?>
<div class="row">
<div class="form-group col-md-6">
<div class="control-group">
@ -56,5 +57,6 @@ $extension = $this->escape($this->state->get('filter.extension'));
</div>
</div>
</div>
<?php endif; ?>
</div>

View File

@ -42,24 +42,16 @@ $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=c
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<div>
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'general')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'general', Text::_('JCATEGORY')); ?>
<div class="row">
<div class="col-lg-9">
<div class="card">
<div class="card-body">
<?php echo $this->form->getLabel('description'); ?>
<?php echo $this->form->getInput('description'); ?>
</div>
</div>
<?php echo $this->form->getLabel('description'); ?>
<?php echo $this->form->getInput('description'); ?>
</div>
<div class="col-lg-3">
<div class="card card-block">
<div class="card-body">
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>

View File

@ -203,7 +203,6 @@
filter="raw"
autocomplete="off"
size="30"
hiddenDescription="true"
lock="true"
/>
@ -373,77 +372,23 @@
/>
</fieldset>
<fieldset name="ftp" label="CONFIG_FTP_SETTINGS_LABEL">
<fieldset
name="proxy"
label="CONFIG_PROXY_SETTINGS_LABEL">
<field
name="ftp_enable"
name="behind_loadbalancer"
type="radio"
label="COM_CONFIG_FIELD_FTP_ENABLE_LABEL"
label="COM_CONFIG_FIELD_LOADBALANCER_ENABLE_LABEL"
description="COM_CONFIG_FIELD_LOADBALANCER_ENABLE_DESC"
layout="joomla.form.field.radio.switcher"
default="0"
filter="boolean"
>
<option value="0">JNO</option>
<option value="1">JYES</option>
<option value="0">JNO</option>
</field>
<field
name="ftp_host"
type="text"
label="COM_CONFIG_FIELD_FTP_HOST_LABEL"
filter="string"
showon="ftp_enable:1"
size="14"
/>
<field
name="ftp_port"
type="number"
label="COM_CONFIG_FIELD_FTP_PORT_LABEL"
showon="ftp_enable:1"
min="1"
max="65535"
hint="21"
validate="number"
filter="integer"
/>
<field
name="ftp_user"
type="text"
label="COM_CONFIG_FIELD_FTP_USERNAME_LABEL"
filter="string"
showon="ftp_enable:1"
autocomplete="off"
size="25"
/>
<field
name="ftp_pass"
type="password"
label="COM_CONFIG_FIELD_FTP_PASSWORD_LABEL"
filter="raw"
showon="ftp_enable:1"
autocomplete="off"
size="25"
lock="true"
/>
<field
name="ftp_root"
type="text"
label="COM_CONFIG_FIELD_FTP_ROOT_LABEL"
showon="ftp_enable:1"
filter="string"
size="50"
/>
</fieldset>
<fieldset
name="proxy"
label="CONFIG_PROXY_SETTINGS_LABEL">
<field
name="proxy_enable"
type="radio"
@ -863,6 +808,7 @@
name="force_ssl"
type="list"
label="COM_CONFIG_FIELD_FORCE_SSL_LABEL"
description="COM_CONFIG_FIELD_FORCE_SSL_DESC"
default="-1"
filter="integer"
validate="options"

View File

@ -12,7 +12,6 @@ namespace Joomla\Component\Config\Administrator\Controller;
\defined('_JEXEC') or die;
use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
@ -82,9 +81,6 @@ class ApplicationController extends BaseController
$this->app->setUserState('com_config.config.global.data', null);
// Set FTP credentials, if given.
ClientHelper::setCredentialsFromRequest('ftp');
/** @var \Joomla\Component\Config\Administrator\Model\ApplicationModel $model */
$model = $this->getModel('Application', 'Administrator');

View File

@ -12,7 +12,6 @@ namespace Joomla\Component\Config\Administrator\Controller;
\defined('_JEXEC') or die;
use Joomla\CMS\Application\CMSApplication;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\FormController;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
@ -62,9 +61,6 @@ class ComponentController extends FormController
// Check for request forgeries.
$this->checkToken();
// Set FTP credentials, if given.
ClientHelper::setCredentialsFromRequest('ftp');
$data = $this->input->get('jform', [], 'ARRAY');
$id = $this->input->get('id', null, 'INT');
$option = $this->input->get('component');

View File

@ -15,7 +15,6 @@ use Joomla\CMS\Access\Access;
use Joomla\CMS\Access\Rules;
use Joomla\CMS\Cache\Exception\CacheConnectingException;
use Joomla\CMS\Cache\Exception\UnsupportedCacheException;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Filesystem\File;
@ -50,7 +49,7 @@ class ApplicationModel extends FormModel
* @var array
* @since 3.9.23
*/
private $protectedConfigurationFields = array('password', 'secret', 'ftp_pass', 'smtppass', 'redis_server_auth', 'session_redis_server_auth');
private $protectedConfigurationFields = array('password', 'secret', 'smtppass', 'redis_server_auth', 'session_redis_server_auth');
/**
* Method to get a form object.
@ -115,6 +114,12 @@ class ApplicationModel extends FormModel
// Merge in the session data.
if (!empty($temp))
{
// $temp can sometimes be an object, and we need it to be an array
if (is_object($temp))
{
$temp = ArrayHelper::fromObject($temp);
}
$data = array_merge($temp, $data);
}
@ -861,14 +866,6 @@ class ApplicationModel extends FormModel
$app->set('cors_allow_headers', $data['cors_allow_headers']);
$app->set('cors_allow_methods', $data['cors_allow_methods']);
// Overwrite the old FTP credentials with the new ones.
$app->set('ftp_enable', $data['ftp_enable']);
$app->set('ftp_host', $data['ftp_host']);
$app->set('ftp_port', $data['ftp_port']);
$app->set('ftp_user', $data['ftp_user']);
$app->set('ftp_pass', $data['ftp_pass']);
$app->set('ftp_root', $data['ftp_root']);
// Clear cache of com_config component.
$this->cleanCache('_system', 0);
$this->cleanCache('_system', 1);
@ -944,13 +941,10 @@ class ApplicationModel extends FormModel
// Set the configuration file path.
$file = JPATH_CONFIGURATION . '/configuration.php';
// Get the new FTP credentials.
$ftp = ClientHelper::getCredentials('ftp', true);
$app = Factory::getApplication();
// Attempt to make the file writeable if using FTP.
if (!$ftp['enabled'] && Path::isOwner($file) && !Path::setPermissions($file, '0644'))
// Attempt to make the file writeable.
if (Path::isOwner($file) && !Path::setPermissions($file, '0644'))
{
$app->enqueueMessage(Text::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE'), 'notice');
}
@ -969,8 +963,8 @@ class ApplicationModel extends FormModel
\opcache_invalidate($file);
}
// Attempt to make the file unwriteable if NOT using FTP.
if (!$ftp['enabled'] && Path::isOwner($file) && !Path::setPermissions($file, '0444'))
// Attempt to make the file unwriteable.
if (Path::isOwner($file) && !Path::setPermissions($file, '0444'))
{
$app->enqueueMessage(Text::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE'), 'notice');
}

View File

@ -11,7 +11,6 @@ namespace Joomla\Component\Config\Administrator\View\Application;
\defined('_JEXEC') or die;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
@ -91,12 +90,8 @@ class HtmlView extends BaseHtmlView
// Get the params for com_media.
$mediaParams = ComponentHelper::getParams('com_media');
// Load settings for the FTP layer.
$ftp = ClientHelper::setCredentialsFromRequest('ftp');
$this->form = &$form;
$this->data = &$data;
$this->ftp = &$ftp;
$this->usersParams = &$usersParams;
$this->mediaParams = &$mediaParams;
$this->components = ConfigHelper::getComponentsWithConfig();

View File

@ -24,21 +24,18 @@ Text::script('NOTICE');
Text::script('MESSAGE');
?>
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" id="application-form" method="post" name="adminForm" class="form-validate">
<div class="row">
<!-- Begin Sidebar -->
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" id="application-form" method="post" name="adminForm" class="main-card form-validate">
<div class="row main-card-columns">
<div id="sidebar" class="col-md-3">
<button class="btn btn-sm btn-secondary my-2 options-menu d-md-none" type="button" data-bs-toggle="collapse" data-bs-target=".sidebar-nav" aria-controls="sidebar-nav" aria-expanded="false" aria-label="<?php echo Text::_('JTOGGLE_SIDEBAR_MENU'); ?>">
<span class="icon-align-justify" aria-hidden="true"></span>
<?php echo Text::_('JTOGGLE_SIDEBAR_MENU'); ?>
</button>
<div id="sidebar-nav" class="sidebar-nav bg-light p-2 my-2">
<div id="sidebar-nav" class="sidebar-nav">
<?php echo $this->loadTemplate('navigation'); ?>
</div>
</div>
<!-- End Sidebar -->
<!-- Begin Content -->
<div class="col-md-9 mt-2">
<div class="col-md-9">
<?php echo HTMLHelper::_('uitab.startTabSet', 'configTabs', array('active' => 'page-site')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'configTabs', 'page-site', Text::_('JSITE')); ?>
<?php echo $this->loadTemplate('site'); ?>
@ -57,7 +54,6 @@ Text::script('MESSAGE');
<?php echo $this->loadTemplate('server'); ?>
<?php echo $this->loadTemplate('locale'); ?>
<?php echo $this->loadTemplate('webservices'); ?>
<?php echo $this->loadTemplate('ftp'); ?>
<?php echo $this->loadTemplate('proxy'); ?>
<?php echo $this->loadTemplate('database'); ?>
<?php echo $this->loadTemplate('mail'); ?>
@ -72,12 +68,6 @@ Text::script('MESSAGE');
<?php echo $this->loadTemplate('filters'); ?>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php if ($this->ftp) : ?>
<?php echo HTMLHelper::_('uitab.addTab', 'configTabs', 'page-ftp', Text::_('COM_CONFIG_FTP_SETTINGS')); ?>
<?php echo $this->loadTemplate('ftplogin'); ?>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php endif; ?>
<?php echo HTMLHelper::_('uitab.addTab', 'configTabs', 'page-permissions', Text::_('COM_CONFIG_PERMISSIONS')); ?>
<?php echo $this->loadTemplate('permissions'); ?>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
@ -86,6 +76,5 @@ Text::script('MESSAGE');
<input type="hidden" name="task" value="">
<?php echo HTMLHelper::_('form.token'); ?>
</div>
<!-- End Content -->
</div>
</form>

View File

@ -1,19 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_config
*
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
defined('_JEXEC') or die;
$this->name = Text::_('COM_CONFIG_FTP_SETTINGS');
$this->fieldsname = 'ftp';
$this->formclass = 'options-form';
echo LayoutHelper::render('joomla.content.options_default', $this);

View File

@ -1,40 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_config
*
* @copyright (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
?>
<fieldset class="options-form">
<legend><?php echo Text::_('COM_CONFIG_FTP_DETAILS'); ?></legend>
<p><?php echo Text::_('COM_CONFIG_FTP_DETAILS_TIP'); ?></p>
<?php if ($this->ftp instanceof Exception) : ?>
<?php /** @var Exception $this */ ?>
<p><?php echo Text::_($this->ftp->message); ?></p>
<?php endif; ?>
<div>
<div class="control-group">
<div class="control-label">
<label for="username"><?php echo Text::_('JGLOBAL_USERNAME'); ?></label>
</div>
<div class="controls">
<input type="text" id="username" name="username" class="form-control" size="70" value="">
</div>
</div>
<div class="control-group">
<div class="control-label">
<label for="password"><?php echo Text::_('JGLOBAL_PASSWORD'); ?></label>
</div>
<div class="controls">
<input type="password" id="password" name="password" class="form-control" size="70" value="">
</div>
</div>
</div>
</fieldset>

View File

@ -38,22 +38,21 @@ if ($this->fieldsets)
$xml = $this->form->getXml();
?>
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" id="component-form" method="post" class="form-validate" name="adminForm" autocomplete="off">
<div class="row">
<form action="<?php echo Route::_('index.php?option=com_config'); ?>" id="component-form" method="post" class="form-validate main-card" name="adminForm" autocomplete="off">
<div class="row main-card-columns">
<?php // Begin Sidebar ?>
<div class="col-md-3" id="sidebar">
<button class="btn btn-sm btn-secondary my-2 options-menu d-md-none" type="button" data-bs-toggle="collapse" data-bs-target=".sidebar-nav" aria-controls="sidebar-nav" aria-expanded="false">
<span class="icon-align-justify" aria-hidden="true"></span>
<?php echo Text::_('JTOGGLE_SIDEBAR_MENU'); ?>
</button>
<div id="sidebar-nav" class="sidebar-nav bg-light p-2 my-2">
<div id="sidebar-nav" class="sidebar-nav">
<?php echo $this->loadTemplate('navigation'); ?>
</div>
</div>
<?php // End Sidebar ?>
<div class="col-md-9 mt-2" id="config">
<div class="col-md-9" id="config">
<?php if ($this->fieldsets) : ?>
<?php $opentab = 0; ?>

View File

@ -3,7 +3,7 @@
--
CREATE TABLE IF NOT EXISTS `#__contact_details` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`alias` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`con_position` varchar(255),
@ -17,15 +17,15 @@ CREATE TABLE IF NOT EXISTS `#__contact_details` (
`misc` mediumtext,
`image` varchar(255),
`email_to` varchar(255),
`default_con` tinyint(1) unsigned NOT NULL DEFAULT 0,
`published` tinyint(1) NOT NULL DEFAULT 0,
`checked_out` int(10) unsigned NOT NULL DEFAULT 0,
`default_con` tinyint unsigned NOT NULL DEFAULT 0,
`published` tinyint NOT NULL DEFAULT 0,
`checked_out` int unsigned NOT NULL DEFAULT 0,
`checked_out_time` datetime,
`ordering` int(11) NOT NULL DEFAULT 0,
`ordering` int NOT NULL DEFAULT 0,
`params` text NOT NULL,
`user_id` int(11) NOT NULL DEFAULT 0,
`catid` int(11) NOT NULL DEFAULT 0,
`access` int(10) unsigned NOT NULL DEFAULT 0,
`user_id` int NOT NULL DEFAULT 0,
`catid` int NOT NULL DEFAULT 0,
`access` int unsigned NOT NULL DEFAULT 0,
`mobile` varchar(255) NOT NULL DEFAULT '',
`webpage` varchar(255) NOT NULL DEFAULT '',
`sortname1` varchar(255) NOT NULL DEFAULT '',
@ -33,18 +33,18 @@ CREATE TABLE IF NOT EXISTS `#__contact_details` (
`sortname3` varchar(255) NOT NULL DEFAULT '',
`language` varchar(7) NOT NULL,
`created` datetime NOT NULL,
`created_by` int(10) unsigned NOT NULL DEFAULT 0,
`created_by` int unsigned NOT NULL DEFAULT 0,
`created_by_alias` varchar(255) NOT NULL DEFAULT '',
`modified` datetime NOT NULL,
`modified_by` int(10) unsigned NOT NULL DEFAULT 0,
`modified_by` int unsigned NOT NULL DEFAULT 0,
`metakey` text NOT NULL,
`metadesc` text NOT NULL,
`metadata` text NOT NULL,
`featured` tinyint(3) unsigned NOT NULL DEFAULT 0 COMMENT 'Set if contact is featured.',
`featured` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'Set if contact is featured.',
`publish_up` datetime,
`publish_down` datetime,
`version` int(10) unsigned NOT NULL DEFAULT 1,
`hits` int(10) unsigned NOT NULL DEFAULT 0,
`version` int unsigned NOT NULL DEFAULT 1,
`hits` int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_access` (`access`),
KEY `idx_checkout` (`checked_out`),

View File

@ -132,20 +132,21 @@ class AdministratorService
);
$state = ArrayHelper::getValue($states, (int) $value, $states[1]);
$icon = $state[0] === 'featured' ? 'star featured' : 'circle';
$onclick = 'onclick="return Joomla.listItemTask(\'cb' . $i . '\',\'' . $state[1] . '\')"';
$tooltipText = Text::_($state[3]);
if ($canChange)
if (!$canChange)
{
$html = '<a href="#" onclick="return Joomla.listItemTask(\'cb' . $i . '\',\'' . $state[1] . '\')" class="tbody-icon'
. ($value == 1 ? ' active' : '') . '" aria-labelledby="cb' . $i . '-desc">'
. '<span class="icon-' . $icon . '" aria-hidden="true"></span></a>'
. '<div role="tooltip" id="cb' . $i . '-desc">' . Text::_($state[3]);
}
else
{
$html = '<a class="tbody-icon disabled' . ($value == 1 ? ' active' : '')
. '" title="' . Text::_($state[2]) . '"><span class="icon-' . $icon . '" aria-hidden="true"></span></a>';
$onclick = 'disabled';
$tooltipText = Text::_($state[2]);
}
$html = '<button type="submit" class="tbody-icon' . ($value == 1 ? ' active' : '') . '"'
. ' aria-labelledby="cb' . $i . '-desc" ' . $onclick . '>'
. '<span class="icon-' . $icon . '" aria-hidden="true"></span>'
. '</button>'
. '<div role="tooltip" id="cb' . $i . '-desc">' . $tooltipText . '</div>';
return $html;
}
}

View File

@ -40,45 +40,37 @@ $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=c
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<div>
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'details')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'details', empty($this->item->id) ? Text::_('COM_CONTACT_NEW_CONTACT') : Text::_('COM_CONTACT_EDIT_CONTACT')); ?>
<div class="row">
<div class="col-lg-9">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-6">
<?php echo $this->form->renderField('user_id'); ?>
<?php echo $this->form->renderField('image'); ?>
<?php echo $this->form->renderField('con_position'); ?>
<?php echo $this->form->renderField('email_to'); ?>
<?php echo $this->form->renderField('address'); ?>
<?php echo $this->form->renderField('suburb'); ?>
<?php echo $this->form->renderField('state'); ?>
<?php echo $this->form->renderField('postcode'); ?>
<?php echo $this->form->renderField('country'); ?>
</div>
<div class="col-md-6">
<?php echo $this->form->renderField('telephone'); ?>
<?php echo $this->form->renderField('mobile'); ?>
<?php echo $this->form->renderField('fax'); ?>
<?php echo $this->form->renderField('webpage'); ?>
<?php echo $this->form->renderField('sortname1'); ?>
<?php echo $this->form->renderField('sortname2'); ?>
<?php echo $this->form->renderField('sortname3'); ?>
</div>
</div>
<div class="row">
<div class="col-md-6">
<?php echo $this->form->renderField('user_id'); ?>
<?php echo $this->form->renderField('image'); ?>
<?php echo $this->form->renderField('con_position'); ?>
<?php echo $this->form->renderField('email_to'); ?>
<?php echo $this->form->renderField('address'); ?>
<?php echo $this->form->renderField('suburb'); ?>
<?php echo $this->form->renderField('state'); ?>
<?php echo $this->form->renderField('postcode'); ?>
<?php echo $this->form->renderField('country'); ?>
</div>
<div class="col-md-6">
<?php echo $this->form->renderField('telephone'); ?>
<?php echo $this->form->renderField('mobile'); ?>
<?php echo $this->form->renderField('fax'); ?>
<?php echo $this->form->renderField('webpage'); ?>
<?php echo $this->form->renderField('sortname1'); ?>
<?php echo $this->form->renderField('sortname2'); ?>
<?php echo $this->form->renderField('sortname3'); ?>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card">
<div class="card-body">
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>

View File

@ -14,7 +14,7 @@ $published = $this->state->get('filter.published');
$noUser = true;
?>
<div class="container">
<div class="p-3">
<div class="row">
<div class="form-group col-md-6">
<div class="controls">

View File

@ -258,6 +258,7 @@
name="readmore_limit"
type="number"
label="JGLOBAL_SHOW_READMORE_LIMIT_LABEL"
filter="integer"
default="100"
showon="show_readmore:1[AND]show_readmore_title:1"
/>
@ -722,6 +723,7 @@
name="num_leading_articles"
type="number"
label="JGLOBAL_NUM_LEADING_ARTICLES_LABEL"
filter="integer"
default="1"
parentclass="stack span-1"
/>
@ -738,22 +740,19 @@
name="num_intro_articles"
type="number"
label="JGLOBAL_NUM_INTRO_ARTICLES_LABEL"
filter="integer"
default="4"
parentclass="stack span-1"
/>
<field
name="num_columns"
type="list"
type="number"
label="JGLOBAL_NUM_COLUMNS_LABEL"
filter="integer"
default="1"
parentclass="stack span-1-inline"
>
<option value="1">J1</option>
<option value="2">J2</option>
<option value="3">J3</option>
<option value="4">J4</option>
</field>
/>
<field
name="multi_column_order"
@ -761,6 +760,7 @@
label="JGLOBAL_MULTI_COLUMN_ORDER_LABEL"
default="0"
parentclass="stack span-1-inline"
validate="options"
>
<option value="0">JGLOBAL_BLOG_DOWN_OPTION</option>
<option value="1">JGLOBAL_BLOG_ACROSS_OPTION</option>
@ -778,6 +778,7 @@
name="num_links"
type="number"
label="JGLOBAL_NUM_LINKS_LABEL"
filter="integer"
default="4"
parentclass="stack span-1"
/>

View File

@ -74,6 +74,7 @@
class="form-select-color-state"
size="1"
default="1"
validate="options"
>
<option value="1">JPUBLISHED</option>
<option value="0">JUNPUBLISHED</option>

View File

@ -55,25 +55,21 @@ $tmpl = $isModal || $input->get('tmpl', '', 'cmd') === 'component' ? '&tmpl=c
<form action="<?php echo Route::_('index.php?option=com_content&layout=' . $layout . $tmpl . '&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" aria-label="<?php echo Text::_('COM_CONTENT_FORM_TITLE_' . ( (int) $this->item->id === 0 ? 'NEW' : 'EDIT'), true); ?>" class="form-validate">
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<div>
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'general')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'general', Text::_('COM_CONTENT_ARTICLE_CONTENT')); ?>
<div class="row">
<div class="col-lg-9">
<div>
<div class="card-body">
<fieldset class="adminform">
<?php echo $this->form->getLabel('articletext'); ?>
<?php echo $this->form->getInput('articletext'); ?>
</fieldset>
</div>
<fieldset class="adminform">
<?php echo $this->form->getLabel('articletext'); ?>
<?php echo $this->form->getInput('articletext'); ?>
</fieldset>
</div>
</div>
<div class="col-lg-3">
<div class="px-3">
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
</div>

View File

@ -26,9 +26,6 @@ use Joomla\Utilities\ArrayHelper;
HTMLHelper::_('behavior.multiselect');
// Just for the tests :(
HTMLHelper::_('jquery.framework');
$app = Factory::getApplication();
$user = Factory::getUser();
$userId = $user->get('id');
@ -217,26 +214,26 @@ $assoc = Associations::isEnabled();
<?php endif; ?>
</td>
<?php if ($workflow_enabled) : ?>
<td class="article-stage">
<div class="d-flex align-items-center tbody-icon small">
<?php
$options = [
'transitions' => $transitions,
'title' => Text::_($item->stage_title),
'tip_content' => Text::sprintf('JWORKFLOW', Text::_($item->workflow_title))
];
<td class="article-stage text-center">
<?php
$options = [
'transitions' => $transitions,
'title' => Text::_($item->stage_title),
'tip_content' => Text::sprintf('JWORKFLOW', Text::_($item->workflow_title)),
'id' => 'workflow-' . $item->id
];
echo (new TransitionButton($options))
->render(0, $i);
?>
</div>
echo (new TransitionButton($options))
->render(0, $i);
?>
</td>
<?php endif; ?>
<td class="text-center d-none d-md-table-cell">
<?php
$options = [
'task_prefix' => 'articles.',
'disabled' => $workflow_featured || !$canChange
'disabled' => $workflow_featured || !$canChange,
'id' => 'featured-' . $item->id
];
echo (new FeaturedButton)
@ -247,7 +244,8 @@ $assoc = Associations::isEnabled();
<?php
$options = [
'task_prefix' => 'articles.',
'disabled' => $workflow_state || !$canChange
'disabled' => $workflow_state || !$canChange,
'id' => 'state-' . $item->id
];
echo (new PublishedButton)->render((int) $item->state, $i, $options, $item->publish_up, $item->publish_down);

View File

@ -19,7 +19,7 @@ $published = (int) $this->state->get('filter.published');
$user = Factory::getUser();
?>
<div class="container">
<div class="p-3">
<div class="row">
<div class="form-group col-md-6">
<div class="controls">

View File

@ -3,7 +3,7 @@
* @package Joomla.Administrator
* @subpackage com_content
*
* @copyright (C) 2008 Open Source Matters, Inc. <https://www.joomla.org>
* @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

View File

@ -11,8 +11,15 @@ namespace Joomla\Component\Contenthistory\Administrator\View\History;
\defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Pagination\Pagination;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Session\Session;
use Joomla\CMS\Toolbar\Toolbar;
use Joomla\CMS\Toolbar\ToolbarFactoryInterface;
/**
* View class for a list of contenthistory.
@ -31,7 +38,7 @@ class HtmlView extends BaseHtmlView
/**
* The model state
*
* @var \Joomla\CMS\Pagination\Pagination
* @var Pagination
*/
protected $pagination;
@ -63,6 +70,72 @@ class HtmlView extends BaseHtmlView
throw new GenericDataException(implode("\n", $errors), 500);
}
$this->toolbar = $this->addToolbar();
return parent::display($tpl);
}
/**
* Add the page toolbar.
*
* @return Toolbar
*
* @since __DEPLOY_VERSION__
*/
protected function addToolbar(): Toolbar
{
/** @var Toolbar $toolbar */
$toolbar = Factory::getContainer()->get(ToolbarFactoryInterface::class)->createToolbar('toolbar');
// Cache a session token for reuse throughout.
$token = Session::getFormToken();
// Clean up input to ensure a clean url.
$aliasArray = explode('.', $this->state->item_id);
$option = $aliasArray[1] == 'category'
? 'com_categories&amp;extension=' . implode('.', array_slice($aliasArray, 0, count($aliasArray) - 2))
: $aliasArray[0];
$filter = InputFilter::getInstance();
$task = $filter->clean($aliasArray[1], 'cmd') . '.loadhistory';
// Build the final urls.
$loadUrl = Route::_('index.php?option=' . $filter->clean($option, 'cmd') . '&amp;task=' . $task . '&amp;' . $token . '=1');
$previewUrl = Route::_('index.php?option=com_contenthistory&view=preview&layout=preview&tmpl=component&' . $token . '=1');
$compareUrl = Route::_('index.php?option=com_contenthistory&view=compare&layout=compare&tmpl=component&' . $token . '=1');
$toolbar->basicButton('load')
->attributes(['data-url' => $loadUrl])
->icon('icon-upload')
->buttonClass('btn btn-success')
->text('COM_CONTENTHISTORY_BUTTON_LOAD')
->listCheck(true);
$toolbar->basicButton('preview')
->attributes(['data-url' => $previewUrl])
->icon('icon-search')
->text('COM_CONTENTHISTORY_BUTTON_PREVIEW')
->listCheck(true);
$toolbar->basicButton('compare')
->attributes(['data-url' => $compareUrl])
->icon('icon-search-plus')
->text('COM_CONTENTHISTORY_BUTTON_COMPARE')
->listCheck(true);
$toolbar->basicButton('keep')
->task('history.keep')
->buttonClass('btn btn-inverse')
->icon('icon-lock')
->text('COM_CONTENTHISTORY_BUTTON_KEEP')
->listCheck(true);
$toolbar->basicButton('delete')
->task('history.delete')
->buttonClass('btn btn-danger')
->icon('icon-times')
->text('COM_CONTENTHISTORY_BUTTON_DELETE')
->listCheck(true);
return $toolbar;
}
}

View File

@ -9,8 +9,6 @@
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;
@ -20,18 +18,6 @@ Session::checkToken('get') or die(Text::_('JINVALID_TOKEN'));
HTMLHelper::_('behavior.multiselect');
$input = Factory::getApplication()->input;
$field = $input->getCmd('field');
$function = 'jSelectContenthistory_' . $field;
$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn = $this->escape($this->state->get('list.direction'));
$deleteMessage = "alert(Joomla.Text._('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST'));";
$aliasArray = explode('.', $this->state->item_id);
$option = ($aliasArray[1] == 'category') ? 'com_categories&amp;extension=' . implode('.', array_slice($aliasArray, 0, count($aliasArray) - 2)) : $aliasArray[0];
$filter = InputFilter::getInstance();
$task = $filter->clean($aliasArray[1]) . '.loadhistory';
$loadUrl = Route::_('index.php?option=' . $filter->clean($option) . '&amp;task=' . $task);
$deleteUrl = Route::_('index.php?option=com_contenthistory&task=history.delete');
$hash = $this->state->get('sha1_hash');
$formUrl = 'index.php?option=com_contenthistory&view=history&layout=modal&tmpl=component&item_id=' . $this->state->get('item_id') . '&' . Session::getFormToken() . '=1';
@ -42,34 +28,15 @@ Text::script('JLIB_HTML_PLEASE_MAKE_A_SELECTION_FROM_THE_LIST');
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = $this->document->getWebAssetManager();
$wa->useScript('com_contenthistory.admin-history-modal');
?>
<div class="container-popup">
<div id="subhead" class="subhead mb-3">
<nav aria-label="toolbar">
<div class="float-end mb-3">
<button id="toolbar-load" type="submit" class="btn btn-secondary" aria-label="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_LOAD_DESC'); ?>" title="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_LOAD_DESC'); ?>" data-url="<?php echo Route::_($loadUrl); ?>">
<span class="icon-upload" aria-hidden="true"></span>
<span class="d-none d-md-inline"><?php echo Text::_('COM_CONTENTHISTORY_BUTTON_LOAD'); ?></span>
</button>
<button id="toolbar-preview" type="button" class="btn btn-secondary" aria-label="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_PREVIEW_DESC'); ?>" title="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_PREVIEW_DESC'); ?>" data-url="<?php echo Route::_('index.php?option=com_contenthistory&view=preview&layout=preview&tmpl=component&' . Session::getFormToken() . '=1'); ?>">
<span class="icon-search" aria-hidden="true"></span>
<span class="d-none d-md-inline"><?php echo Text::_('COM_CONTENTHISTORY_BUTTON_PREVIEW'); ?></span>
</button>
<button id="toolbar-compare" type="button" class="btn btn-secondary" aria-label="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_COMPARE_DESC'); ?>" title="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_COMPARE_DESC'); ?>" data-url="<?php echo Route::_('index.php?option=com_contenthistory&view=compare&layout=compare&tmpl=component&' . Session::getFormToken() . '=1'); ?>">
<span class="icon-search-plus" aria-hidden="true"></span>
<span class="d-none d-md-inline"><?php echo Text::_('COM_CONTENTHISTORY_BUTTON_COMPARE'); ?></span>
</button>
<button onclick="if (document.adminForm.boxchecked.value==0){<?php echo $deleteMessage; ?>}else{ Joomla.submitbutton('history.keep')}" class="btn btn-secondary pointer" aria-label="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_KEEP_DESC'); ?>" title="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_KEEP_DESC'); ?>">
<span class="icon-lock" aria-hidden="true"></span>
<span class="d-none d-md-inline"><?php echo Text::_('COM_CONTENTHISTORY_BUTTON_KEEP'); ?></span>
</button>
<button onclick="if (document.adminForm.boxchecked.value==0){<?php echo $deleteMessage; ?>}else{ Joomla.submitbutton('history.delete')}" class="btn btn-secondary pointer" aria-label="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_DELETE_DESC'); ?>" title="<?php echo Text::_('COM_CONTENTHISTORY_BUTTON_DELETE_DESC'); ?>">
<span class="icon-times" aria-hidden="true"></span>
<span class="d-none d-md-inline"><?php echo Text::_('COM_CONTENTHISTORY_BUTTON_DELETE'); ?></span>
</button>
<div class="btn-toolbar d-flex" id="toolbar">
<?php echo $this->toolbar->render(); ?>
</div>
</nav>
</div>
<form action="<?php echo Route::_($formUrl); ?>" method="post" name="adminForm" id="adminForm">
<table class="table table-sm">
<caption class="visually-hidden">

View File

@ -43,7 +43,7 @@ echo HTMLHelper::_(
'modalWidth' => '80',
'footer' => '<button type="button" class="button-cancel btn btn-danger" data-bs-dismiss="modal" data-bs-target="#closeBtn">'
. Text::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>'
. '<button type="button" class="button-save btn btn-success hidden" data-bs-target="#saveBtn">'
. '<button type="button" id="btnModalSaveAndClose" class="button-save btn btn-success hidden" data-bs-target="#saveBtn">'
. Text::_('JSAVE') . '</button>',
)
);
@ -63,12 +63,16 @@ echo HTMLHelper::_(
}
?>
<?php if ($user->authorise('core.manage', 'com_modules')) : ?>
<button type="button" data-bs-toggle="modal" data-bs-target="#moduleDashboardAddModal" class="cpanel-add-module text-center py-5 w-100 d-block">
<div class="cpanel-add-module-icon text-center">
<span class="icon-plus-square text-light mt-2"></span>
<div class="module-wrapper">
<div class="card">
<button type="button" data-bs-toggle="modal" data-bs-target="#moduleDashboardAddModal" class="cpanel-add-module">
<div class="cpanel-add-module-icon">
<span class="icon-plus-square" aria-hidden="true"></span>
</div>
<span><?php echo Text::_('COM_CPANEL_ADD_DASHBOARD_MODULE'); ?></span>
</button>
</div>
<span><?php echo Text::_('COM_CPANEL_ADD_DASHBOARD_MODULE'); ?></span>
</button>
</div>
<?php endif; ?>
</div>
</div>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<access component="com_csp">
<section name="component">
<action name="core.admin" title="JACTION_ADMIN" />
<action name="core.options" title="JACTION_OPTIONS" />
<action name="core.manage" title="JACTION_MANAGE" />
<action name="core.create" title="JACTION_CREATE" />
<action name="core.delete" title="JACTION_DELETE" />
<action name="core.edit" title="JACTION_EDIT" />
<action name="core.edit.state" title="JACTION_EDITSTATE" />
</section>
</access>

View File

@ -1,191 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<config>
<fieldset name="csp" label="Content-Security-Policy (CSP)">
<field
name="contentsecuritypolicy"
type="radio"
label="COM_CSP_CONTENTSECURITYPOLICY"
layout="joomla.form.field.radio.switcher"
default="0"
>
<option value="0">JDISABLED</option>
<option value="1">JENABLED</option>
</field>
<field
name="contentsecuritypolicy_client"
type="list"
label="COM_CSP_CONTENTSECURITYPOLICY_CLIENT"
default="site"
validate="options"
showon="contentsecuritypolicy:1"
>
<option value="site">JSITE</option>
<option value="administrator">JADMINISTRATOR</option>
<option value="both">COM_CSP_HEADER_CLIENT_BOTH</option>
</field>
<field
name="contentsecuritypolicy_mode"
type="list"
label="COM_CSP_CONTENTSECURITYPOLICY_MODE"
default="detect"
validate="options"
showon="contentsecuritypolicy:1"
>
<option value="custom">COM_CSP_CONTENTSECURITYPOLICY_MODE_CUSTOM</option>
<option value="detect">COM_CSP_CONTENTSECURITYPOLICY_MODE_DETECT</option>
<option value="auto">COM_CSP_CONTENTSECURITYPOLICY_MODE_AUTO</option>
</field>
<field
name="contentsecuritypolicy_report_only"
type="radio"
label="COM_CSP_CONTENTSECURITYPOLICY_REPORT_ONLY"
description="COM_CSP_CONTENTSECURITYPOLICY_REPORT_ONLY_DESC"
layout="joomla.form.field.radio.switcher"
default="1"
showon="contentsecuritypolicy:1[AND]contentsecuritypolicy_mode!:detect"
>
<option value="0">JDISABLED</option>
<option value="1">JENABLED</option>
</field>
<field
name="nonce_enabled"
type="radio"
label="COM_CSP_CONTENTSECURITYPOLICY_NONCE_ENABLED"
description="COM_CSP_CONTENTSECURITYPOLICY_NONCE_ENABLED_DESC"
layout="joomla.form.field.radio.switcher"
default="0"
showon="contentsecuritypolicy:1[AND]contentsecuritypolicy_mode!:detect"
>
<option value="0">JDISABLED</option>
<option value="1">JENABLED</option>
</field>
<field
name="script_hashes_enabled"
type="radio"
label="COM_CSP_CONTENTSECURITYPOLICY_SCRIPT_HASHES_ENABLED"
description="COM_CSP_CONTENTSECURITYPOLICY_SCRIPT_HASHES_ENABLED_DESC"
layout="joomla.form.field.radio.switcher"
default="0"
showon="contentsecuritypolicy:1[AND]contentsecuritypolicy_mode!:detect"
>
<option value="0">JDISABLED</option>
<option value="1">JENABLED</option>
</field>
<field
name="strict_dynamic_enabled"
type="radio"
label="COM_CSP_CONTENTSECURITYPOLICY_STRICT_DYNAMIC_ENABLED"
description="COM_CSP_CONTENTSECURITYPOLICY_STRICT_DYNAMIC_ENABLED_DESC"
layout="joomla.form.field.radio.switcher"
default="0"
showon="contentsecuritypolicy:1[AND]contentsecuritypolicy_mode!:detect"
>
<option value="0">JDISABLED</option>
<option value="1">JENABLED</option>
</field>
<field
name="style_hashes_enabled"
type="radio"
label="COM_CSP_CONTENTSECURITYPOLICY_STYLE_HASHES_ENABLED"
description="COM_CSP_CONTENTSECURITYPOLICY_STYLE_HASHES_ENABLED_DESC"
layout="joomla.form.field.radio.switcher"
default="0"
showon="contentsecuritypolicy:1[AND]contentsecuritypolicy_mode!:detect"
>
<option value="0">JDISABLED</option>
<option value="1">JENABLED</option>
</field>
<field
name="frame_ancestors_self_enabled"
type="radio"
label="COM_CSP_CONTENTSECURITYPOLICY_FRAME_ANCESTORS_SELF_ENABLED"
description="COM_CSP_CONTENTSECURITYPOLICY_FRAME_ANCESTORS_SELF_ENABLED_DESC"
layout="joomla.form.field.radio.switcher"
default="1"
showon="contentsecuritypolicy:1[AND]contentsecuritypolicy_mode!:detect"
>
<option value="0">JDISABLED</option>
<option value="1">JENABLED</option>
</field>
<field
name="contentsecuritypolicy_values"
type="subform"
label="COM_CSP_CONTENTSECURITYPOLICY_VALUES"
multiple="true"
showon="contentsecuritypolicy:1[AND]contentsecuritypolicy_mode:custom"
>
<form>
<field
name="directive"
type="list"
label="COM_CSP_CONTENTSECURITYPOLICY_VALUES_DIRECTIVE"
class="col-md-4"
validate="options"
>
<option value="child-src">child-src</option>
<option value="connect-src">connect-src</option>
<option value="default-src">default-src</option>
<option value="font-src">font-src</option>
<option value="frame-src">frame-src</option>
<option value="img-src">img-src</option>
<option value="manifest-src">manifest-src</option>
<option value="media-src">media-src</option>
<option value="prefetch-src">prefetch-src</option>
<option value="object-src">object-src</option>
<option value="script-src">script-src</option>
<option value="script-src-elem">script-src-elem</option>
<option value="script-src-attr">script-src-attr</option>
<option value="style-src">script-src</option>
<option value="style-src-elem">script-src-elem</option>
<option value="style-src-attr">script-src-attr</option>
<option value="worker-src">worker-src</option>
<option value="base-uri">base-uri</option>
<option value="plugin-types">plugin-types</option>
<option value="sandbox">sandbox</option>
<option value="form-action">form-action</option>
<option value="frame-ancestors">frame-ancestors</option>
<option value="navigate-to">navigate-to</option>
<option value="report-uri">report-uri</option>
<option value="report-to">report-to</option>
<option value="block-all-mixed-content">block-all-mixed-content</option>
<option value="upgrade-insecure-requests">upgrade-insecure-requests</option>
<option value="require-sri-for">require-sri-for</option>
</field>
<field
name="value"
type="text"
label="COM_CSP_CONTENTSECURITYPOLICY_VALUES_VALUE"
class="col-md-10"
showon="directive!:block-all-mixed-content[AND]directive!:upgrade-insecure-requests"
/>
<field
name="client"
type="radio"
label="COM_CSP_HEADER_CLIENT"
default="site"
class="col-md-12"
>
<option value="site">JSITE</option>
<option value="administrator">JADMINISTRATOR</option>
<option value="both">COM_CSP_HEADER_CLIENT_BOTH</option>
</field>
</form>
</field>
</fieldset>
<fieldset
name="permissions"
label="JCONFIG_PERMISSIONS_LABEL"
description="JCONFIG_PERMISSIONS_DESC"
>
<field
name="rules"
type="rules"
label="JCONFIG_PERMISSIONS_LABEL"
filter="rules"
validate="rules"
component="com_csp"
section="component"
/>
</fieldset>
</config>

View File

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" method="upgrade">
<name>com_csp</name>
<author>Joomla! Project</author>
<creationDate>May 2018</creationDate>
<copyright>(C) 2018 Open Source Matters, Inc.</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail>admin@joomla.org</authorEmail>
<authorUrl>www.joomla.org</authorUrl>
<version>4.0.0</version>
<description>COM_CSP_XML_DESCRIPTION</description>
<namespace path="src">Joomla\Component\Csp</namespace>
<files folder="site">
<folder>src</folder>
</files>
<administration>
<menu img="class:csp">com_csp</menu>
<files folder="admin">
<filename>access.xml</filename>
<filename>config.xml</filename>
<filename>csp.xml</filename>
<folder>forms</folder>
<folder>services</folder>
<folder>src</folder>
<folder>tmpl</folder>
</files>
<languages folder="admin">
<language tag="en-GB">language/en-GB/com_csp.ini</language>
<language tag="en-GB">language/en-GB/com_csp.sys.ini</language>
</languages>
</administration>
</extension>

View File

@ -1,86 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<form>
<fields name="filter">
<field
name="search"
type="text"
inputmode="search"
label="COM_CSP_FILTER_SEARCH_LABEL"
description="COM_CSP_FILTER_SEARCH_DESC"
hint="JSEARCH_FILTER"
/>
<field
name="published"
type="status"
label="JSTATUS"
optionsFilter="*,0,1,-2"
onchange="this.form.submit();"
>
<option value="">JOPTION_SELECT_PUBLISHED</option>
</field>
<field
name="directive"
type="sql"
label="COM_CSP_HEADING_DIRECTIVE"
sql_select="directive"
sql_from="#__csp"
sql_group="directive"
sql_order="directive ASC"
key_field="directive"
onchange="this.form.submit();"
>
<option value="">COM_CSP_FILTER_DIRECTIVE</option>
</field>
<field
name="client"
type="list"
label="JSITEADMIN"
filtermode="selector"
onchange="this.form.submit();"
validate="options"
>
<option value="">JGLOBAL_FILTER_CLIENT</option>
<option value="site">JSITE</option>
<option value="administrator">JADMINISTRATOR</option>
</field>
</fields>
<fields name="list">
<field
name="fullordering"
type="list"
label="JGLOBAL_SORT_BY"
default="a.id ASC"
statuses="*,0,1,2,-2"
onchange="this.form.submit();"
validate="options"
>
<option value="">JGLOBAL_SORT_BY</option>
<option value="a.published ASC">JSTATUS_ASC</option>
<option value="a.published DESC">JSTATUS_DESC</option>
<option value="a.document_uri ASC">COM_CSP_HEADING_DOCUMENT_URI_ASC</option>
<option value="a.document_uri DESC">COM_CSP_HEADING_DOCUMENT_URI_DESC</option>
<option value="a.blocked_uri ASC">COM_CSP_HEADING_BLOCKED_URI_ASC</option>
<option value="a.blocked_uri DESC">COM_CSP_HEADING_BLOCKED_URI_DESC</option>
<option value="a.directive ASC">COM_CSP_HEADING_DIRECTIVE_ASC</option>
<option value="a.directive DESC">COM_CSP_HEADING_DIRECTIVE_DESC</option>
<option value="a.client ASC">COM_CSP_HEADING_CLIENT_ASC</option>
<option value="a.client DESC">COM_CSP_HEADING_CLIENT_DESC</option>
<option value="a.created ASC">COM_CSP_HEADING_CREATED_ASC</option>
<option value="a.created DESC">COM_CSP_HEADING_CREATED_DESC</option>
<option value="a.id ASC">JGRID_HEADING_ID_ASC</option>
<option value="a.id DESC">JGRID_HEADING_ID_DESC</option>
</field>
<field
name="limit"
type="limitbox"
label="JGLOBAL_LIST_LIMIT"
default="25"
onchange="this.form.submit();"
/>
</fields>
</form>

View File

@ -1,52 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Dispatcher\ComponentDispatcherFactoryInterface;
use Joomla\CMS\Extension\ComponentInterface;
use Joomla\CMS\Extension\MVCComponent;
use Joomla\CMS\Extension\Service\Provider\ComponentDispatcherFactory;
use Joomla\CMS\Extension\Service\Provider\MVCFactory;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\DI\Container;
use Joomla\DI\ServiceProviderInterface;
/**
* The com_csp service provider.
*
* @since 4.0.0
*/
return new class implements ServiceProviderInterface
{
/**
* Registers the service provider with a DI container.
*
* @param Container $container The DI container.
*
* @return void
*
* @since 4.0.0
*/
public function register(Container $container)
{
$container->registerServiceProvider(new MVCFactory('\\Joomla\\Component\\Csp'));
$container->registerServiceProvider(new ComponentDispatcherFactory('\\Joomla\\Component\\Csp'));
$container->set(
ComponentInterface::class,
function (Container $container)
{
$component = new MVCComponent($container->get(ComponentDispatcherFactoryInterface::class));
$component->setMVCFactory($container->get(MVCFactoryInterface::class));
return $component;
}
);
}
};

View File

@ -1,63 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Csp\Administrator\Controller;
\defined('_JEXEC') or die;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Component\Csp\Administrator\Helper\ReporterHelper;
/**
* Csp display controller.
*
* @since 4.0.0
*/
class DisplayController extends BaseController
{
/**
* The default view.
*
* @var string
* @since 4.0.0
*/
protected $default_view = 'reports';
/**
* Method to display a view.
*
* @param boolean $cachable If true, the view output will be cached.
* @param mixed $urlparams An array of safe URL parameters and their variable types, for valid values see {@link \JFilterInput::clean()}.
*
* @return static This object to support chaining.
*
* @since 4.0.0
*/
public function display($cachable = false, $urlparams = false)
{
// Show messages about the plugin when it is disabled
if (!PluginHelper::isEnabled('system', 'httpheaders'))
{
$httpHeadersId = ReporterHelper::getHttpHeadersPluginId();
$link = HTMLHelper::_(
'link',
'#plugin' . $httpHeadersId . 'Modal',
Text::_('COM_CSP_SYSTEM_PLUGIN'),
'class="alert-link" data-bs-toggle="modal" id="title-' . $httpHeadersId . '"'
);
$this->app->enqueueMessage(Text::sprintf('COM_CSP_PLUGIN_MODAL_DISABLED', $link), 'error');
}
return parent::display();
}
}

View File

@ -1,38 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Csp\Administrator\Controller;
\defined('_JEXEC') or die;
use Joomla\CMS\MVC\Controller\AdminController;
/**
* Reports list controller class.
*
* @since 4.0.0
*/
class ReportsController extends AdminController
{
/**
* Proxy for getModel
*
* @param string $name The model name. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $config The array of possible config values. Optional.
*
* @return \Joomla\CMS\MVC\Model\BaseDatabaseModel The model.
*
* @since 4.0.0
*/
public function getModel($name = 'Report', $prefix = 'Administrator', $config = array('ignore_request' => true))
{
return parent::getModel($name, $prefix, $config);
}
}

View File

@ -1,145 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Csp\Administrator\Helper;
\defined('_JEXEC') or die;
use Joomla\CMS\Factory;
/**
* Reporter component helper.
*
* @since 4.0.0
*/
class ReporterHelper
{
/**
* Gets the httpheaders system plugin extension id.
*
* @return mixed The httpheaders system plugin extension id or false in case of an error.
*
* @since 4.0.0
*/
public static function getHttpHeadersPluginId()
{
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName('extension_id'))
->from($db->quoteName('#__extensions'))
->where($db->quoteName('folder') . ' = ' . $db->quote('system'))
->where($db->quoteName('element') . ' = ' . $db->quote('httpheaders'));
$db->setQuery($query);
try
{
$result = (int) $db->loadResult();
}
catch (\RuntimeException $e)
{
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
return false;
}
return $result;
}
/**
* Check the com_csp trash to show a warning in this case
*
* @return boolean The status of the trash; Do items exists in the trash
*
* @since 4.0.0
*/
public static function getCspTrashStatus()
{
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select('COUNT(*)')
->from($db->quoteName('#__csp'))
->where($db->quoteName('published') . ' = ' . $db->quote('-2'));
$db->setQuery($query);
try
{
$result = (int) $db->loadResult();
}
catch (\RuntimeException $e)
{
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
return false;
}
return boolval($result);
}
/**
* Check whether there are unsafe-inline rules published
*
* @return boolean Whether there are unsafe-inline rules published
*
* @since 4.0.0
*/
public static function getCspUnsafeInlineStatus()
{
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select('COUNT(*)')
->from($db->quoteName('#__csp'))
->where($db->quoteName('blocked_uri') . ' = ' . $db->quote("'unsafe-inline'"))
->where($db->quoteName('published') . ' = 1');
$db->setQuery($query);
try
{
$result = (int) $db->loadResult();
}
catch (\RuntimeException $e)
{
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
return false;
}
return boolval($result);
}
/**
* Check whether there are unsafe-eval rules published
*
* @return boolean Whether there are unsafe-eval rules published
*
* @since 4.0.0
*/
public static function getCspUnsafeEvalStatus()
{
$db = Factory::getDbo();
$query = $db->getQuery(true)
->select('COUNT(*)')
->from($db->quoteName('#__csp'))
->where($db->quoteName('blocked_uri') . ' = ' . $db->quote("'unsafe-eval'"))
->where($db->quoteName('published') . ' = 1');
$db->setQuery($query);
try
{
$result = (int) $db->loadResult();
}
catch (\RuntimeException $e)
{
Factory::getApplication()->enqueueMessage($e->getMessage(), 'error');
return false;
}
return boolval($result);
}
}

View File

@ -1,45 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Csp\Administrator\Model;
\defined('_JEXEC') or die;
use Joomla\CMS\MVC\Model\AdminModel;
/**
* Report Model
*
* @since 4.0.0
*/
class ReportModel extends AdminModel
{
/**
* The prefix to use with controller messages.
*
* @var string
* @since 4.0.0
*/
protected $text_prefix = 'COM_CSP';
/**
* Method to get the row form.
*
* @param array $data Data for the form.
* @param boolean $loadData True if the form is to load its own data (default case), false if not.
*
* @return \JForm|boolean A JForm object on success, false on failure
*
* @since 4.0.0
*/
public function getForm($data = array(), $loadData = true)
{
return false;
}
}

View File

@ -1,174 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Csp\Administrator\Model;
\defined('_JEXEC') or die;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\Database\ParameterType;
/**
* CSP Component Reports Model
*
* @since 4.0.0
*/
class ReportsModel extends ListModel
{
/**
* Constructor
*
* @param array $config An array of configuration options (name, state, dbo, table_path, ignore_request).
* @param MVCFactoryInterface $factory The factory.
*
* @since 4.0.0
* @throws \Exception
*/
public function __construct($config = array(), MVCFactoryInterface $factory = null)
{
if (empty($config['filter_fields']))
{
$config['filter_fields'] = array(
'id', 'a.id',
'document_uri', 'a.document_uri',
'blocked_uri', 'a.blocked_uri',
'directive', 'a.directive',
'client', 'a.client',
'published', 'a.published',
'created', 'a.created',
);
}
parent::__construct($config, $factory);
}
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @param string $ordering An optional ordering field.
* @param string $direction An optional direction (asc|desc).
*
* @return void
*
* @since 4.0.0
*/
protected function populateState($ordering = 'a.id', $direction = 'asc')
{
// List state information.
parent::populateState($ordering, $direction);
}
/**
* Method to get a store id based on model configuration state.
*
* This is necessary because the model is used by the component and
* different modules that might need different sets of data or different
* ordering requirements.
*
* @param string $id A prefix for the store id.
*
* @return string A store id.
*
* @since 4.0.0
*/
protected function getStoreId($id = '')
{
// Compile the store id.
$id .= ':' . $this->getState('filter.search');
$id .= ':' . $this->getState('filter.published');
return parent::getStoreId($id);
}
/**
* Method to create a query for a list of items.
*
* @return string
*
* @since 4.0.0
*/
protected function getListQuery()
{
$db = $this->getDbo();
$query = $db->getQuery(true);
// Select the required fields from the table.
$query
->select('*')
->from($db->quoteName('#__csp', 'a'));
// Filter by client
$client = (string) $this->getState('filter.client');
if (!empty($client))
{
$query->where($db->quoteName('a.client') . ' = :client')
->bind(':client', $client);
}
// Filter by published state
$published = (string) $this->getState('filter.published');
if (is_numeric($published))
{
$published = (int) $published;
$query->where($db->quoteName('a.published') . ' = :published')
->bind(':published', $published, ParameterType::INTEGER);
}
elseif ($published === '')
{
$query->whereIn($db->quoteName('a.published'), [0, 1]);
}
// Filter by directive
$directive = (string) $this->getState('filter.directive');
if (!empty($directive))
{
$query->where($db->quoteName('a.directive') . ' = :directive')
->bind(':directive', $directive);
}
// Filter by search in title
$search = $this->getState('filter.search');
if (!empty($search))
{
if (stripos($search, 'id:') === 0)
{
$ids = (int) substr($search, 3);
$query->where($db->quoteName('a.id') . ' = :id');
$query->bind(':id', $ids, ParameterType::INTEGER);
}
else
{
$search = '%' . trim($search) . '%';
$query->where(
'(' . $db->quoteName('a.document_uri') . ' LIKE :documenturi'
. ' OR ' . $db->quoteName('a.blocked_uri') . ' LIKE :blockeduri'
. ' OR ' . $db->quoteName('a.directive') . ' LIKE :directive)'
)
->bind(':documenturi', $search)
->bind(':blockeduri', $search)
->bind(':directive', $search);
}
}
// Add the list ordering clause
$listOrdering = $this->getState('list.ordering', 'a.id');
$listDirn = $db->escape($this->getState('list.direction', 'ASC'));
$query->order($db->escape($listOrdering) . ' ' . $listDirn);
return $query;
}
}

View File

@ -1,35 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Csp\Administrator\Table;
\defined('_JEXEC') or die;
use Joomla\CMS\Table\Table;
use Joomla\Database\DatabaseInterface;
/**
* Report table
*
* @since 4.0.0
*/
class ReportTable extends Table
{
/**
* Constructor
*
* @param DatabaseInterface $db Database driver object.
*
* @since 4.0.0
*/
public function __construct(DatabaseInterface $db)
{
parent::__construct('#__csp', 'id', $db);
}
}

View File

@ -1,183 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
namespace Joomla\Component\Csp\Administrator\View\Reports;
\defined('_JEXEC') or die;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Helper\ContentHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\View\GenericDataException;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Toolbar\ToolbarHelper;
use Joomla\Component\Csp\Administrator\Helper\ReporterHelper;
/**
* Reports view class for the Csp package.
*
* @since 4.0.0
*/
class HtmlView extends BaseHtmlView
{
/**
* An array of items
*
* @var array
* @since 4.0.0
*/
protected $items;
/**
* The pagination object
*
* @var \Joomla\CMS\Pagination\Pagination
* @since 4.0.0
*/
protected $pagination;
/**
* The model state
*
* @var \JObject
* @since 4.0.0
*/
protected $state;
/**
* Form object for search filters
*
* @var \JForm
* @since 4.0.0
*/
public $filterForm;
/**
* The active search filters
*
* @var array
* @since 4.0.0
*/
public $activeFilters;
/**
* The id of the httpheaders plugin in mysql
*
* @var integer
* @since 4.0.0
*/
protected $httpHeadersId = 0;
/**
* Is this view an Empty State
*
* @var boolean
* @since __DEPLOY_VERSION__
*/
private $isEmptyState = false;
/**
* Execute and display a template script.
*
* @param string $tpl The name of the template file to parse; automatically searches through the template paths.
*
* @return mixed A string if successful, otherwise an Error object.
*
* @since 4.0.0
*/
public function display($tpl = null)
{
$this->items = $this->get('Items');
$this->pagination = $this->get('Pagination');
$this->state = $this->get('State');
$this->activeFilters = $this->get('ActiveFilters');
$this->filterForm = $this->get('FilterForm');
if (!count($this->items) && $this->isEmptyState = $this->get('IsEmptyState'))
{
$this->setLayout('emptystate');
}
// Check for errors.
if (count($errors = $this->get('Errors')))
{
throw new GenericDataException(implode("\n", $errors), 500);
}
if (!(PluginHelper::isEnabled('system', 'httpheaders')))
{
$this->httpHeadersId = ReporterHelper::getHttpHeadersPluginId();
}
if (ComponentHelper::getParams('com_csp')->get('contentsecuritypolicy_mode', 'detect') === 'detect'
&& ComponentHelper::getParams('com_csp')->get('contentsecuritypolicy', 0)
&& ReporterHelper::getCspTrashStatus())
{
$this->trashWarningMessage = Text::_('COM_CSP_COLLECTING_TRASH_WARNING');
}
if (ComponentHelper::getParams('com_csp')->get('contentsecuritypolicy_mode', 'detect') === 'auto'
&& ComponentHelper::getParams('com_csp')->get('contentsecuritypolicy', 0)
&& ReporterHelper::getCspUnsafeInlineStatus())
{
$this->unsafeInlineWarningMessage = Text::_('COM_CSP_AUTO_UNSAFE_INLINE_WARNING');
}
if (ComponentHelper::getParams('com_csp')->get('contentsecuritypolicy_mode', 'detect') === 'auto'
&& ComponentHelper::getParams('com_csp')->get('contentsecuritypolicy', 0)
&& ReporterHelper::getCspUnsafeEvalStatus())
{
$this->unsafeEvalWarningMessage = Text::_('COM_CSP_AUTO_UNSAFE_EVAL_WARNING');
}
$this->addToolbar();
return parent::display($tpl);
}
/**
* Add the page title and toolbar.
*
* @return void
*
* @since 4.0.0
*/
protected function addToolbar()
{
$canDo = ContentHelper::getActions('com_csp');
ToolbarHelper::title(Text::_('COM_CSP_REPORTS'), 'shield-alt');
if (!$this->isEmptyState)
{
if ($canDo->get('core.edit.state'))
{
ToolbarHelper::publish('reports.publish', 'JTOOLBAR_ENABLE', true);
ToolbarHelper::unpublish('reports.unpublish', 'JTOOLBAR_DISABLE', true);
}
if ($this->state->get('filter.published') == -2 && $canDo->get('core.delete'))
{
ToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'reports.delete', 'JTOOLBAR_EMPTY_TRASH');
}
elseif ($canDo->get('core.edit.state'))
{
ToolbarHelper::trash('reports.trash');
}
}
if ($canDo->get('core.admin') || $canDo->get('core.options'))
{
ToolbarHelper::preferences('com_csp');
}
ToolbarHelper::help('JHELP_COMPONENTS_CSP_REPORTS');
}
}

View File

@ -1,149 +0,0 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
*
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;
HTMLHelper::_('behavior.multiselect');
$user = Factory::getUser();
$userId = $user->get('id');
$listOrder = $this->escape($this->state->get('list.ordering'));
$listDirn = $this->escape($this->state->get('list.direction'));
$saveOrder = $listOrder == 'a.id';
?>
<form action="<?php echo Route::_('index.php?option=com_csp&view=reports'); ?>" method="post" name="adminForm" id="adminForm">
<div class="row">
<div class="col-md-12">
<div id="j-main-container" class="j-main-container">
<?php echo LayoutHelper::render('joomla.searchtools.default', array('view' => $this)); ?>
<?php if ($this->httpHeadersId) : ?>
<?php $link = Route::_('index.php?option=com_plugins&client_id=0&task=plugin.edit&extension_id=' . $this->httpHeadersId . '&tmpl=component&layout=modal'); ?>
<?php echo HTMLHelper::_(
'bootstrap.renderModal',
'plugin' . $this->httpHeadersId . 'Modal',
array(
'url' => $link,
'title' => Text::_('COM_CSP_EDIT_PLUGIN_SETTINGS'),
'height' => '400px',
'width' => '800px',
'bodyHeight' => '70',
'modalWidth' => '80',
'closeButton' => false,
'backdrop' => 'static',
'keyboard' => false,
'footer' => '<button type="button" class="btn" data-bs-dismiss="modal"'
. ' onclick="Joomla.iframeButtonClick({iframeSelector: \'#plugin' . $this->httpHeadersId . 'Modal\', buttonSelector: \'#closeBtn\'})">'
. Text::_('JLIB_HTML_BEHAVIOR_CLOSE') . '</button>'
. '<button type="button" class="btn btn-primary" data-bs-dismiss="modal" onclick="Joomla.iframeButtonClick({iframeSelector: \'#plugin' . $this->httpHeadersId . 'Modal\', buttonSelector: \'#saveBtn\'})">'
. Text::_("JSAVE") . '</button>'
. '<button type="button" class="btn btn-success" onclick="Joomla.iframeButtonClick({iframeSelector: \'#plugin' . $this->httpHeadersId . 'Modal\', buttonSelector: \'#applyBtn\'})">'
. Text::_("JAPPLY") . '</button>'
)
); ?>
<?php endif; ?>
<?php if (isset($this->trashWarningMessage)) : ?>
<?php Factory::getApplication()->enqueueMessage($this->trashWarningMessage, 'warning'); ?>
<?php endif; ?>
<?php if (isset($this->unsafeInlineWarningMessage)) : ?>
<?php Factory::getApplication()->enqueueMessage($this->unsafeInlineWarningMessage, 'warning'); ?>
<?php endif; ?>
<?php if (isset($this->unsafeEvalWarningMessage)) : ?>
<?php Factory::getApplication()->enqueueMessage($this->unsafeEvalWarningMessage, 'warning'); ?>
<?php endif; ?>
<?php if (empty($this->items)) : ?>
<div class="alert alert-info">
<span class="icon-info-circle" aria-hidden="true"></span><span class="visually-hidden"><?php echo Text::_('INFO'); ?></span>
<?php echo Text::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
</div>
<?php else : ?>
<table class="table" id="articleList">
<caption class="visually-hidden">
<?php echo Text::_('COM_CSP_TABLE_CAPTION'); ?>,
<span id="orderedBy"><?php echo Text::_('JGLOBAL_SORTED_BY'); ?> </span>,
<span id="filteredBy"><?php echo Text::_('JGLOBAL_FILTERED_BY'); ?></span>
</caption>
<thead>
<tr>
<td class="text-center">
<?php echo HTMLHelper::_('grid.checkall'); ?>
</td>
<th scope="col" class="text-center">
<?php echo HTMLHelper::_('searchtools.sort', 'JSTATUS', 'a.published', $listDirn, $listOrder); ?>
</th>
<th scope="col" class="d-md-table-cell">
<?php echo HTMLHelper::_('searchtools.sort', 'COM_CSP_HEADING_DOCUMENT_URI', 'a.document_uri', $listDirn, $listOrder); ?>
</th>
<th scope="col" class="d-none d-md-table-cell">
<?php echo HTMLHelper::_('searchtools.sort', 'COM_CSP_HEADING_BLOCKED_URI', 'a.blocked_uri', $listDirn, $listOrder); ?>
</th>
<th scope="col" class="d-none d-md-table-cell">
<?php echo HTMLHelper::_('searchtools.sort', 'COM_CSP_HEADING_DIRECTIVE', 'a.directive', $listDirn, $listOrder); ?>
</th>
<th scope="col" class="d-none d-md-table-cell">
<?php echo HTMLHelper::_('searchtools.sort', 'JCLIENT', 'a.client', $listDirn, $listOrder); ?>
</th>
<th scope="col" class="d-none d-md-table-cell">
<?php echo HTMLHelper::_('searchtools.sort', 'COM_CSP_HEADING_CREATED', 'a.created', $listDirn, $listOrder); ?>
</th>
<th scope="col" class="w-3 d-none d-md-table-cell">
<?php echo HTMLHelper::_('searchtools.sort', 'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder); ?>
</th>
</tr>
</thead>
<tbody>
<?php foreach ($this->items as $i => $item) : ?>
<?php $canChange = $user->authorise('core.edit.state', 'com_csp'); ?>
<tr class="row<?php echo $i % 2; ?>">
<td class="text-center">
<?php echo HTMLHelper::_('grid.id', $i, $item->id); ?>
</td>
<td class="text-center">
<?php echo HTMLHelper::_('jgrid.published', $item->published, $i, 'reports.', $canChange, 'cb'); ?>
</td>
<th scope="row" class="small d-md-table-cell text-break">
<?php echo $item->document_uri; ?>
</th>
<td class="small d-none d-md-table-cell">
<?php echo $item->blocked_uri; ?>
</td>
<td class="d-none d-md-table-cell">
<?php echo $item->directive; ?>
</td>
<td class="d-none d-md-table-cell">
<?php echo Text::_('J' . strtoupper($item->client)); ?>
</td>
<td class="d-none d-md-table-cell">
<?php echo $item->created > 0 ? HTMLHelper::_('date', $item->created, Text::_('DATE_FORMAT_LC4')) : '-'; ?>
</td>
<td class="d-none d-md-table-cell">
<?php echo $item->id; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php // load the pagination. ?>
<?php echo $this->pagination->getListFooter(); ?>
<?php endif; ?>
<input type="hidden" name="task" value="">
<input type="hidden" name="boxchecked" value="0">
<?php echo HTMLHelper::_('form.token'); ?>
</div>
</div>
</div>
</form>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_CSP_REPORTS_VIEW_DEFAULT_TITLE">
<message>
<![CDATA[COM_CSP_REPORTS_VIEW_DEFAULT_DESC]]>
</message>
</layout>
</metadata>

View File

@ -71,6 +71,7 @@
label="COM_FIELDS_FIELDS_FILTER_ONLY_USE_IN_SUBFORM_LABEL"
onchange="this.form.submit();"
default=""
validate="options"
>
<option value="">COM_FIELDS_ONLY_USE_IN_SUBFORM</option>
<option value="0">JNO</option>

View File

@ -119,7 +119,7 @@ class FieldController extends FormController
}
// Grant if current user is owner of the record
return $user->id == $record->created_by;
return $user->id == $record->created_user_id;
}
return false;

View File

@ -31,12 +31,11 @@ $wa->useScript('keepalive')
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'general')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'general', Text::_('COM_FIELDS_VIEW_FIELD_FIELDSET_GENERAL', true)); ?>
<div class="row">
<div class="col-lg-9">
<div class="card">
<div class="card-body">
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'general')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'general', Text::_('COM_FIELDS_VIEW_FIELD_FIELDSET_GENERAL', true)); ?>
<div class="row">
<div class="col-lg-9">
<?php echo $this->form->renderField('type'); ?>
<?php echo $this->form->renderField('name'); ?>
<?php echo $this->form->renderField('label'); ?>
@ -50,61 +49,56 @@ $wa->useScript('keepalive')
<?php echo $field->renderField(); ?>
<?php endforeach; ?>
<?php endforeach; ?>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="card">
<div class="card-body">
<?php $this->set('fields',
<div class="col-lg-3">
<?php $this->set('fields',
array(
array(
array(
'published',
'state',
'enabled',
),
'group_id',
'assigned_cat_ids',
'access',
'language',
'note',
)
); ?>
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
<?php $this->set('fields', null); ?>
</div>
'published',
'state',
'enabled',
),
'group_id',
'assigned_cat_ids',
'access',
'language',
'note',
)
); ?>
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
<?php $this->set('fields', null); ?>
</div>
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php $this->set('ignore_fieldsets', array('fieldparams')); ?>
<?php echo LayoutHelper::render('joomla.edit.params', $this); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'publishing', Text::_('JGLOBAL_FIELDSET_PUBLISHING', true)); ?>
<div class="row">
<div class="col-md-6">
<fieldset id="fieldset-publishingdata" class="options-form">
<legend><?php echo Text::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend>
<div>
<?php echo LayoutHelper::render('joomla.edit.publishingdata', $this); ?>
</div>
</fieldset>
</div>
<div class="col-md-6">
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php if ($this->canDo->get('core.admin')) : ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'rules', Text::_('JGLOBAL_ACTION_PERMISSIONS_LABEL', true)); ?>
<fieldset id="fieldset-rules" class="options-form">
<legend><?php echo Text::_('JGLOBAL_ACTION_PERMISSIONS_LABEL'); ?></legend>
<div>
<?php echo $this->form->getInput('rules'); ?>
</div>
</fieldset>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php endif; ?>
<?php echo HTMLHelper::_('uitab.endTabSet'); ?>
<?php echo $this->form->getInput('context'); ?>
<input type="hidden" name="task" value="">
<?php echo HTMLHelper::_('form.token'); ?>
<?php $this->set('ignore_fieldsets', array('fieldparams')); ?>
<?php echo LayoutHelper::render('joomla.edit.params', $this); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'publishing', Text::_('JGLOBAL_FIELDSET_PUBLISHING', true)); ?>
<div class="row">
<div class="col-md-6">
<fieldset id="fieldset-publishingdata" class="options-form">
<legend><?php echo Text::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend>
<div>
<?php echo LayoutHelper::render('joomla.edit.publishingdata', $this); ?>
</div>
</fieldset>
</div>
<div class="col-md-6">
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php if ($this->canDo->get('core.admin')) : ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'rules', Text::_('JGLOBAL_ACTION_PERMISSIONS_LABEL', true)); ?>
<fieldset id="fieldset-rules" class="options-form">
<legend><?php echo Text::_('JGLOBAL_ACTION_PERMISSIONS_LABEL'); ?></legend>
<div>
<?php echo $this->form->getInput('rules'); ?>
</div>
</fieldset>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php endif; ?>
<?php echo HTMLHelper::_('uitab.endTabSet'); ?>
<?php echo $this->form->getInput('context'); ?>
<input type="hidden" name="task" value="">
<?php echo HTMLHelper::_('form.token'); ?>
</div>
</form>

View File

@ -35,7 +35,7 @@ $this->useCoreUI = true;
<form action="<?php echo Route::_('index.php?option=com_fields&context=' . Factory::getApplication()->input->getCmd('context', 'com_content') . '&layout=modal&tmpl=component&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" class="form-validate">
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<div>
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'general')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'general', Text::_('COM_FIELDS', true)); ?>

View File

@ -20,9 +20,6 @@ use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
HTMLHelper::_('behavior.multiselect');
// Just for the tests :(
HTMLHelper::_('jquery.framework');
$app = Factory::getApplication();
$user = Factory::getUser();
$userId = $user->get('id');

View File

@ -20,7 +20,7 @@ $wa->useScript('joomla.batch-copymove');
$context = $this->escape($this->state->get('filter.context'));
?>
<div class="container">
<div class="p-3">
<div class="row">
<div class="form-group col-md-6">
<div class="controls">

View File

@ -26,37 +26,29 @@ $this->useCoreUI = true;
<form action="<?php echo Route::_('index.php?option=com_fields&context=' . $this->state->get('filter.context') . '&layout=edit&id=' . (int) $this->item->id); ?>" method="post" name="adminForm" id="item-form" aria-label="<?php echo Text::_('COM_FIELDS_GROUP_FORM_' . ( (int) $this->item->id === 0 ? 'NEW' : 'EDIT'), true); ?>" class="form-validate">
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<div class="form-horizontal">
<div class="main-card form-horizontal">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'general')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'general', Text::_('COM_FIELDS_VIEW_FIELD_FIELDSET_GENERAL', true)); ?>
<div class="row">
<div class="col-lg-9">
<div class="card">
<div class="card-body">
<?php echo $this->form->renderField('label'); ?>
<?php echo $this->form->renderField('description'); ?>
</div>
</div>
<?php echo $this->form->renderField('label'); ?>
<?php echo $this->form->renderField('description'); ?>
</div>
<div class="col-lg-3">
<div class="card">
<div class="card-body">
<?php $this->set('fields',
<?php $this->set('fields',
array(
array(
array(
'published',
'state',
'enabled',
),
'access',
'language',
'note',
)
); ?>
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
<?php $this->set('fields', null); ?>
</div>
</div>
'published',
'state',
'enabled',
),
'access',
'language',
'note',
)
); ?>
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
<?php $this->set('fields', null); ?>
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>

View File

@ -12,7 +12,7 @@ use Joomla\CMS\Layout\LayoutHelper;
?>
<div class="container">
<div class="p-3">
<div class="row">
<div class="form-group col-md-6">
<div class="controls">

View File

@ -3,18 +3,18 @@
--
CREATE TABLE IF NOT EXISTS `#__finder_filters` (
`filter_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`filter_id` int unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`alias` varchar(255) NOT NULL,
`state` tinyint(1) NOT NULL DEFAULT 1,
`state` tinyint NOT NULL DEFAULT 1,
`created` datetime NOT NULL,
`created_by` int(10) unsigned NOT NULL DEFAULT 0,
`created_by` int unsigned NOT NULL DEFAULT 0,
`created_by_alias` varchar(255) NOT NULL DEFAULT '',
`modified` datetime NOT NULL,
`modified_by` int(10) unsigned NOT NULL DEFAULT 0,
`checked_out` int(10) unsigned NOT NULL DEFAULT 0,
`modified_by` int unsigned NOT NULL DEFAULT 0,
`checked_out` int unsigned NOT NULL DEFAULT 0,
`checked_out_time` datetime,
`map_count` int(10) unsigned NOT NULL DEFAULT 0,
`map_count` int unsigned NOT NULL DEFAULT 0,
`data` text,
`params` mediumtext,
PRIMARY KEY (`filter_id`)
@ -25,16 +25,16 @@ CREATE TABLE IF NOT EXISTS `#__finder_filters` (
--
CREATE TABLE IF NOT EXISTS `#__finder_links` (
`link_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`link_id` int unsigned NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL,
`route` varchar(255) NOT NULL,
`title` varchar(400) DEFAULT NULL,
`description` text,
`indexdate` datetime NOT NULL,
`md5sum` varchar(32) DEFAULT NULL,
`published` tinyint(1) NOT NULL DEFAULT 1,
`state` int(5) NOT NULL DEFAULT 1,
`access` int(5) NOT NULL DEFAULT 0,
`published` tinyint NOT NULL DEFAULT 1,
`state` int NOT NULL DEFAULT 1,
`access` int NOT NULL DEFAULT 0,
`language` char(7) NOT NULL DEFAULT '',
`publish_start_date` datetime,
`publish_end_date` datetime,
@ -42,7 +42,7 @@ CREATE TABLE IF NOT EXISTS `#__finder_links` (
`end_date` datetime,
`list_price` double unsigned NOT NULL DEFAULT 0,
`sale_price` double unsigned NOT NULL DEFAULT 0,
`type_id` int(11) NOT NULL,
`type_id` int NOT NULL,
`object` mediumblob,
PRIMARY KEY (`link_id`),
KEY `idx_type` (`type_id`),
@ -59,8 +59,8 @@ CREATE TABLE IF NOT EXISTS `#__finder_links` (
--
CREATE TABLE IF NOT EXISTS `#__finder_links_terms` (
`link_id` int(10) unsigned NOT NULL,
`term_id` int(10) unsigned NOT NULL,
`link_id` int unsigned NOT NULL,
`term_id` int unsigned NOT NULL,
`weight` float unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (`link_id`,`term_id`),
KEY `idx_term_weight` (`term_id`,`weight`),
@ -75,8 +75,8 @@ CREATE TABLE IF NOT EXISTS `#__finder_logging` (
`searchterm` VARCHAR(255) NOT NULL DEFAULT '',
`md5sum` VARCHAR(32) NOT NULL DEFAULT '',
`query` BLOB NOT NULL,
`hits` INT(11) NOT NULL DEFAULT 1,
`results` INT(11) NOT NULL DEFAULT 0,
`hits` int NOT NULL DEFAULT 1,
`results` int NOT NULL DEFAULT 0,
PRIMARY KEY (`md5sum`),
INDEX `searchterm` (`searchterm`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;
@ -86,16 +86,16 @@ CREATE TABLE IF NOT EXISTS `#__finder_logging` (
--
CREATE TABLE IF NOT EXISTS `#__finder_taxonomy` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`parent_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`lft` INT(11) NOT NULL DEFAULT '0',
`rgt` INT(11) NOT NULL DEFAULT '0',
`level` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
`parent_id` int UNSIGNED NOT NULL DEFAULT '0',
`lft` int NOT NULL DEFAULT '0',
`rgt` int NOT NULL DEFAULT '0',
`level` int UNSIGNED NOT NULL DEFAULT '0',
`path` VARCHAR(400) NOT NULL DEFAULT '',
`title` VARCHAR(255) NOT NULL DEFAULT '',
`alias` VARCHAR(400) NOT NULL DEFAULT '',
`state` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
`access` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
`state` tinyint UNSIGNED NOT NULL DEFAULT '1',
`access` tinyint UNSIGNED NOT NULL DEFAULT '1',
`language` CHAR(7) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
INDEX `idx_state` (`state`),
@ -119,8 +119,8 @@ INSERT INTO `#__finder_taxonomy` (`id`, `parent_id`, `lft`, `rgt`, `level`, `pat
--
CREATE TABLE IF NOT EXISTS `#__finder_taxonomy_map` (
`link_id` int(10) unsigned NOT NULL,
`node_id` int(10) unsigned NOT NULL,
`link_id` int unsigned NOT NULL,
`node_id` int unsigned NOT NULL,
PRIMARY KEY (`link_id`,`node_id`),
KEY `link_id` (`link_id`),
KEY `node_id` (`node_id`)
@ -131,14 +131,14 @@ CREATE TABLE IF NOT EXISTS `#__finder_taxonomy_map` (
--
CREATE TABLE IF NOT EXISTS `#__finder_terms` (
`term_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`term_id` int unsigned NOT NULL AUTO_INCREMENT,
`term` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`stem` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`common` tinyint(1) unsigned NOT NULL DEFAULT 0,
`phrase` tinyint(1) unsigned NOT NULL DEFAULT 0,
`common` tinyint unsigned NOT NULL DEFAULT 0,
`phrase` tinyint unsigned NOT NULL DEFAULT 0,
`weight` float unsigned NOT NULL DEFAULT 0,
`soundex` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`links` int(10) NOT NULL DEFAULT 0,
`links` int NOT NULL DEFAULT 0,
`language` char(7) NOT NULL DEFAULT '',
PRIMARY KEY (`term_id`),
UNIQUE KEY `idx_term_language` (`term`,`language`),
@ -156,7 +156,7 @@ CREATE TABLE IF NOT EXISTS `#__finder_terms` (
CREATE TABLE IF NOT EXISTS `#__finder_terms_common` (
`term` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`language` char(7) NOT NULL DEFAULT '',
`custom` int(11) NOT NULL DEFAULT '0',
`custom` int NOT NULL DEFAULT '0',
UNIQUE KEY `idx_term_language` (`term`,`language`),
KEY `idx_lang` (`language`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;
@ -348,10 +348,10 @@ INSERT INTO `#__finder_terms_common` (`term`, `language`, `custom`) VALUES
CREATE TABLE IF NOT EXISTS `#__finder_tokens` (
`term` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`stem` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`common` tinyint(1) unsigned NOT NULL DEFAULT 0,
`phrase` tinyint(1) unsigned NOT NULL DEFAULT 0,
`common` tinyint unsigned NOT NULL DEFAULT 0,
`phrase` tinyint unsigned NOT NULL DEFAULT 0,
`weight` float unsigned NOT NULL DEFAULT 1,
`context` tinyint(1) unsigned NOT NULL DEFAULT 2,
`context` tinyint unsigned NOT NULL DEFAULT 2,
`language` char(7) NOT NULL DEFAULT '',
KEY `idx_word` (`term`),
KEY `idx_stem` (`stem`),
@ -364,13 +364,13 @@ CREATE TABLE IF NOT EXISTS `#__finder_tokens` (
--
CREATE TABLE IF NOT EXISTS `#__finder_tokens_aggregate` (
`term_id` int(10) unsigned NOT NULL,
`term_id` int unsigned NOT NULL,
`term` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
`stem` varchar(75) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '',
`common` tinyint(1) unsigned NOT NULL DEFAULT 0,
`phrase` tinyint(1) unsigned NOT NULL DEFAULT 0,
`common` tinyint unsigned NOT NULL DEFAULT 0,
`phrase` tinyint unsigned NOT NULL DEFAULT 0,
`term_weight` float unsigned NOT NULL DEFAULT 0,
`context` tinyint(1) unsigned NOT NULL DEFAULT 2,
`context` tinyint unsigned NOT NULL DEFAULT 2,
`context_weight` float unsigned NOT NULL DEFAULT 0,
`total_weight` float unsigned NOT NULL DEFAULT 0,
`language` char(7) NOT NULL DEFAULT '',
@ -383,7 +383,7 @@ CREATE TABLE IF NOT EXISTS `#__finder_tokens_aggregate` (
--
CREATE TABLE IF NOT EXISTS `#__finder_types` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id` int unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`mime` varchar(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),

View File

@ -17,6 +17,7 @@ use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Factory\MVCFactoryInterface;
use Joomla\CMS\MVC\Model\ListModel;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\Database\DatabaseQuery;
/**
* Maps model for the Finder package.
@ -392,4 +393,23 @@ class MapsModel extends ListModel
return true;
}
/**
* Manipulate the query to be used to evaluate if this is an Empty State to provide specific conditions for this extension.
*
* @return DatabaseQuery
*
* @since __DEPLOY_VERSION__
*/
protected function getEmptyStateQuery()
{
$query = parent::getEmptyStateQuery();
$title = 'ROOT';
$query->where($this->_db->quoteName('title') . ' <> :title')
->bind(':title', $title);
return $query;
}
}

View File

@ -477,7 +477,7 @@ class Filter
// Start date filter.
$attribs['class'] = 'input-medium';
$html .= '<li class="filter-date' . $classSuffix . '">';
$html .= '<li class="filter-date float-start' . $classSuffix . '">';
$html .= '<label for="filter_date1" class="hasTooltip" title ="' . Text::_('COM_FINDER_FILTER_DATE1_DESC') . '">';
$html .= Text::_('COM_FINDER_FILTER_DATE1');
$html .= '</label>';
@ -490,7 +490,7 @@ class Filter
$html .= '</li>';
// End date filter.
$html .= '<li class="filter-date' . $classSuffix . '">';
$html .= '<li class="filter-date float-end' . $classSuffix . '">';
$html .= '<label for="filter_date2" class="hasTooltip" title ="' . Text::_('COM_FINDER_FILTER_DATE2_DESC') . '">';
$html .= Text::_('COM_FINDER_FILTER_DATE2');
$html .= '</label>';

View File

@ -91,6 +91,13 @@ class HtmlView extends BaseHtmlView
*/
public $activeFilters;
/**
* @var mixed
*
* @since __DEPLOY_VERSION__
*/
private $isEmptyState = false;
/**
* Method to display the view.
*
@ -113,6 +120,11 @@ class HtmlView extends BaseHtmlView
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
if ($this->get('TotalIndexed') === 0 && $this->isEmptyState = $this->get('IsEmptyState'))
{
$this->setLayout('emptystate');
}
// We do not need to filter by language when multilingual is disabled
if (!Multilanguage::isEnabled())
{
@ -138,10 +150,6 @@ class HtmlView extends BaseHtmlView
Factory::getApplication()->enqueueMessage(Text::_('COM_FINDER_INDEX_PLUGIN_CONTENT_NOT_ENABLED'), 'warning');
}
}
elseif ($this->get('TotalIndexed') === 0)
{
Factory::getApplication()->enqueueMessage(Text::_('COM_FINDER_INDEX_NO_DATA') . ' ' . Text::_('COM_FINDER_INDEX_TIP'), 'notice');
}
// Configure the toolbar.
$this->addToolbar();
@ -170,32 +178,35 @@ class HtmlView extends BaseHtmlView
'window.parent.location.reload()', Text::_('COM_FINDER_HEADING_INDEXER')
);
if ($canDo->get('core.edit.state'))
if (!$this->isEmptyState)
{
$dropdown = $toolbar->dropdownButton('status-group')
->text('JTOOLBAR_CHANGE_STATUS')
->toggleSplit(false)
->icon('icon-ellipsis-h')
->buttonClass('btn btn-action')
->listCheck(true);
if ($canDo->get('core.edit.state'))
{
$dropdown = $toolbar->dropdownButton('status-group')
->text('JTOOLBAR_CHANGE_STATUS')
->toggleSplit(false)
->icon('icon-ellipsis-h')
->buttonClass('btn btn-action')
->listCheck(true);
$childBar = $dropdown->getChildToolbar();
$childBar = $dropdown->getChildToolbar();
$childBar->publish('index.publish')->listCheck(true);
$childBar->unpublish('index.unpublish')->listCheck(true);
}
$childBar->publish('index.publish')->listCheck(true);
$childBar->unpublish('index.unpublish')->listCheck(true);
}
$toolbar->appendButton('Popup', 'bars', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 350, '', '', '', Text::_('COM_FINDER_STATISTICS_TITLE'));
$toolbar->appendButton('Popup', 'bars', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 350, '', '', '', Text::_('COM_FINDER_STATISTICS_TITLE'));
if ($canDo->get('core.delete'))
{
ToolbarHelper::deleteList('', 'index.delete');
ToolbarHelper::divider();
}
if ($canDo->get('core.delete'))
{
ToolbarHelper::deleteList('', 'index.delete');
ToolbarHelper::divider();
}
if ($canDo->get('core.edit.state'))
{
ToolbarHelper::trash('index.purge', 'COM_FINDER_INDEX_TOOLBAR_PURGE', false);
if ($canDo->get('core.edit.state'))
{
ToolbarHelper::trash('index.purge', 'COM_FINDER_INDEX_TOOLBAR_PURGE', false);
}
}
if ($canDo->get('core.admin') || $canDo->get('core.options'))

View File

@ -78,6 +78,13 @@ class HtmlView extends BaseHtmlView
*/
public $activeFilters;
/**
* @var boolean
*
* @since __DEPLOY_VERSION__
*/
private $isEmptyState = false;
/**
* Method to display the view.
*
@ -100,6 +107,11 @@ class HtmlView extends BaseHtmlView
$this->filterForm = $this->get('FilterForm');
$this->activeFilters = $this->get('ActiveFilters');
if ($this->total === 0 && $this->isEmptyState = $this->get('isEmptyState'))
{
$this->setLayout('emptystate');
}
// Check for errors.
if (count($errors = $this->get('Errors')))
{
@ -128,29 +140,32 @@ class HtmlView extends BaseHtmlView
// Get the toolbar object instance
$toolbar = Toolbar::getInstance('toolbar');
if ($canDo->get('core.edit.state'))
if (!$this->isEmptyState)
{
$dropdown = $toolbar->dropdownButton('status-group')
->text('JTOOLBAR_CHANGE_STATUS')
->toggleSplit(false)
->icon('icon-ellipsis-h')
->buttonClass('btn btn-action')
->listCheck(true);
if ($canDo->get('core.edit.state'))
{
$dropdown = $toolbar->dropdownButton('status-group')
->text('JTOOLBAR_CHANGE_STATUS')
->toggleSplit(false)
->icon('icon-ellipsis-h')
->buttonClass('btn btn-action')
->listCheck(true);
$childBar = $dropdown->getChildToolbar();
$childBar = $dropdown->getChildToolbar();
$childBar->publish('maps.publish')->listCheck(true);
$childBar->unpublish('maps.unpublish')->listCheck(true);
}
$childBar->publish('maps.publish')->listCheck(true);
$childBar->unpublish('maps.unpublish')->listCheck(true);
}
ToolbarHelper::divider();
$toolbar->appendButton('Popup', 'bars', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 350, '', '', '', Text::_('COM_FINDER_STATISTICS_TITLE'));
ToolbarHelper::divider();
if ($canDo->get('core.delete'))
{
ToolbarHelper::deleteList('', 'maps.delete');
ToolbarHelper::divider();
$toolbar->appendButton('Popup', 'bars', 'COM_FINDER_STATISTICS', 'index.php?option=com_finder&view=statistics&tmpl=component', 550, 350, '', '', '', Text::_('COM_FINDER_STATISTICS_TITLE'));
ToolbarHelper::divider();
if ($canDo->get('core.delete'))
{
ToolbarHelper::deleteList('', 'maps.delete');
ToolbarHelper::divider();
}
}
if ($canDo->get('core.admin') || $canDo->get('core.options'))

View File

@ -81,6 +81,13 @@ class HtmlView extends BaseHtmlView
*/
protected $canDo;
/**
* @var boolean
*
* @since __DEPLOY_VERSION__
*/
private $isEmptyState = false;
/**
* Display the view.
*
@ -102,6 +109,11 @@ class HtmlView extends BaseHtmlView
$link = 'index.php?option=com_config&view=component&component=com_finder&return=' . base64_encode($uri);
$output = HTMLHelper::_('link', Route::_($link), Text::_('JOPTIONS'));
if (!\count($this->items) && $this->isEmptyState = $this->get('IsEmptyState'))
{
$this->setLayout('emptystate');
}
// Check for errors.
if (count($errors = $this->get('Errors')))
{
@ -133,12 +145,15 @@ class HtmlView extends BaseHtmlView
ToolbarHelper::title(Text::_('COM_FINDER_MANAGER_SEARCHES'), 'search');
if ($canDo->get('core.edit.state'))
if (!$this->isEmptyState)
{
ToolbarHelper::custom('searches.reset', 'refresh', '', 'JSEARCH_RESET', false);
}
if ($canDo->get('core.edit.state'))
{
ToolbarHelper::custom('searches.reset', 'refresh', '', 'JSEARCH_RESET', false);
}
ToolbarHelper::divider();
ToolbarHelper::divider();
}
if ($canDo->get('core.admin') || $canDo->get('core.options'))
{

View File

@ -34,64 +34,58 @@ $wa->useScript('keepalive')
<?php echo LayoutHelper::render('joomla.edit.title_alias', $this); ?>
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'details')); ?>
<div class="main-card">
<?php echo HTMLHelper::_('uitab.startTabSet', 'myTab', array('active' => 'details')); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'details', Text::_('COM_FINDER_EDIT_FILTER')); ?>
<div class="row">
<div class="col-lg-9">
<div class="card">
<div class="card-body">
<?php if ($this->total > 0) : ?>
<div class="well">
<?php echo $this->form->renderField('map_count'); ?>
</div>
<button class="btn btn-secondary filter-toggle-all" type="button">
<span class="icon-square" aria-hidden="true"></span> <?php echo Text::_('JGLOBAL_SELECTION_INVERT'); ?></button>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'details', Text::_('COM_FINDER_EDIT_FILTER')); ?>
<div class="row">
<div class="col-lg-9">
<?php if ($this->total > 0) : ?>
<div class="well">
<?php echo $this->form->renderField('map_count'); ?>
</div>
<button class="btn btn-secondary filter-toggle-all" type="button">
<span class="icon-square" aria-hidden="true"></span> <?php echo Text::_('JGLOBAL_SELECTION_INVERT'); ?></button>
<button class="btn btn-secondary float-end" type="button" id="expandAccordion"><?php echo Text::_('COM_FINDER_FILTER_SHOW_ALL'); ?></button>
<hr>
<?php endif; ?>
<button class="btn btn-secondary float-end" type="button" id="expandAccordion"><?php echo Text::_('COM_FINDER_FILTER_SHOW_ALL'); ?></button>
<hr>
<?php endif; ?>
<?php echo HTMLHelper::_('filter.slider', array('selected_nodes' => $this->filter->data)); ?>
</div>
<?php echo HTMLHelper::_('filter.slider', array('selected_nodes' => $this->filter->data)); ?>
</div>
<div class="col-lg-3">
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
<div class="col-lg-3">
<div class="card">
<div class="card-body">
<?php echo LayoutHelper::render('joomla.edit.global', $this); ?>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'publishing', Text::_('JGLOBAL_FIELDSET_OPTIONS')); ?>
<div class="row">
<div class="col-md-6">
<fieldset id="fieldset-publishingdata" class="options-form">
<legend><?php echo Text::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend>
<div>
<?php echo LayoutHelper::render('joomla.edit.publishingdata', $this); ?>
</div>
</fieldset>
</div>
<div class="col-md-6">
<fieldset id="fieldset-filter" class="options-form">
<legend><?php echo Text::_('COM_FINDER_FILTER_FIELDSET_PARAMS'); ?></legend>
<div>
<?php echo $this->form->renderFieldset('jbasic'); ?>
</div>
</fieldset>
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php echo LayoutHelper::render('joomla.edit.params', $this); ?>
<?php echo HTMLHelper::_('uitab.endTabSet'); ?>
<input type="hidden" name="task" value="">
<input type="hidden" name="return" value="<?php echo Factory::getApplication()->input->get('return', '', 'BASE64'); ?>">
<?php echo HTMLHelper::_('form.token'); ?>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php echo HTMLHelper::_('uitab.addTab', 'myTab', 'publishing', Text::_('JGLOBAL_FIELDSET_OPTIONS')); ?>
<div class="row">
<div class="col-md-6">
<fieldset id="fieldset-publishingdata" class="options-form">
<legend><?php echo Text::_('JGLOBAL_FIELDSET_PUBLISHING'); ?></legend>
<div>
<?php echo LayoutHelper::render('joomla.edit.publishingdata', $this); ?>
</div>
</fieldset>
</div>
<div class="col-md-6">
<fieldset id="fieldset-filter" class="options-form">
<legend><?php echo Text::_('COM_FINDER_FILTER_FIELDSET_PARAMS'); ?></legend>
<div>
<?php echo $this->form->renderFieldset('jbasic'); ?>
</div>
</fieldset>
</div>
</div>
<?php echo HTMLHelper::_('uitab.endTab'); ?>
<?php echo LayoutHelper::render('joomla.edit.params', $this); ?>
<?php echo HTMLHelper::_('uitab.endTabSet'); ?>
<input type="hidden" name="task" value="">
<input type="hidden" name="return" value="<?php echo Factory::getApplication()->input->get('return', '', 'BASE64'); ?>">
<?php echo HTMLHelper::_('form.token'); ?>
</form>

View File

@ -0,0 +1,25 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_finder
*
* @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
$displayData = [
'textPrefix' => 'COM_FINDER',
'formURL' => 'index.php?option=com_finder&view=index',
'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Smart_Search_quickstart_guide',
'icon' => 'icon-search-plus finder',
'content' => Text::_('COM_FINDER_INDEX_NO_DATA') . '<br>' . Text::_('COM_FINDER_INDEX_TIP'),
'title' => Text::_('COM_FINDER_HEADING_INDEXER'),
'createURL' => "javascript:document.getElementsByClassName('button-archive')[0].click();",
];
echo LayoutHelper::render('joomla.content.emptystate', $displayData);

View File

@ -121,7 +121,7 @@ $wa->useScript('com_finder.maps');
<?php endif; ?>
<td class="text-center btns itemnumber">
<?php if ($item->level > 1) : ?>
<a class="btn <?php if ((int) $item->count_published > 0) echo 'btn-success'; ?>" title="<?php echo Text::_('COM_FINDER_MAPS_COUNT_PUBLISHED_ITEMS'); ?>" href="<?php echo Route::_('index.php?option=com_finder&view=index&filter[state]=1&filter[content_map]=' . $item->id); ?>">
<a class="btn <?php echo ((int) $item->count_published > 0) ? 'btn-success' : 'btn-secondary'; ?>" title="<?php echo Text::_('COM_FINDER_MAPS_COUNT_PUBLISHED_ITEMS'); ?>" href="<?php echo Route::_('index.php?option=com_finder&view=index&filter[state]=1&filter[content_map]=' . $item->id); ?>">
<?php echo (int) $item->count_published; ?></a>
<?php else : ?>
-

View File

@ -1,7 +1,7 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_csp
* @subpackage com_finder
*
* @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
@ -9,12 +9,15 @@
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
$displayData = [
'textPrefix' => 'COM_CSP',
'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Help4.x:Content_Security_Policy_Reports',
'icon' => 'icon-shield-alt',
'textPrefix' => 'COM_FINDER',
'formURL' => 'index.php?option=com_finder&view=maps',
'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Help4.x:Smart_Search:_Content_Maps',
'icon' => 'icon-search-plus finder',
'title' => Text::_('COM_FINDER_MAPS_TOOLBAR_TITLE')
];
echo LayoutHelper::render('joomla.content.emptystate', $displayData);

View File

@ -0,0 +1,24 @@
<?php
/**
* @package Joomla.Administrator
* @subpackage com_finder
*
* @copyright (C) 2021 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;
$displayData = [
'textPrefix' => 'COM_FINDER',
'formURL' => 'index.php?option=com_finder&view=searches',
'helpURL' => 'https://docs.joomla.org/Special:MyLanguage/Help4.x:Smart_Search:_Search_Term_Analysis',
'icon' => 'icon-search',
'title' => Text::_('COM_FINDER_MANAGER_SEARCHES'),
'content' => Text::_('COM_FINDER_EMPTYSTATE_SEARCHES_CONTENT'),
];
echo LayoutHelper::render('joomla.content.emptystate', $displayData);

View File

@ -11,6 +11,7 @@ namespace Joomla\Component\Installer\Administrator\Controller;
\defined('_JEXEC') or die;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Response\JsonResponse;
use Joomla\CMS\Router\Route;
@ -36,6 +37,12 @@ class DiscoverController extends BaseController
/** @var \Joomla\Component\Installer\Administrator\Model\DiscoverModel $model */
$model = $this->getModel('discover');
$model->discover();
if (!$model->getTotal())
{
$this->setMessage(Text::_('COM_INSTALLER_ERROR_NO_EXTENSIONS_DISCOVERED'), 'info');
}
$this->setRedirect(Route::_('index.php?option=com_installer&view=discover', false));
}

View File

@ -11,7 +11,6 @@ namespace Joomla\Component\Installer\Administrator\Controller;
\defined('_JEXEC') or die;
use Joomla\CMS\Client\ClientHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\MVC\Controller\BaseController;
use Joomla\CMS\Response\JsonResponse;
@ -62,9 +61,6 @@ class DisplayController extends BaseController
// Get and render the view.
if ($view = $this->getView($vName, $vFormat))
{
$ftp = ClientHelper::setCredentialsFromRequest('ftp');
$view->ftp = &$ftp;
// Get the model for the view.
$model = $this->getModel($vName);

Some files were not shown because too many files have changed in this diff Show More