diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index efb59b68659c7..4df560490fdea 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -32,11 +32,15 @@ before it will be accepted, we ask that you follow these simple guidelines: Please be patient as not all items will be viewed or tested immediately (remember, all bug testing for the Joomla! CMS is done by volunteers) and be receptive to feedback about your code. #### Branches -Bug fixing PRs should be made to the `5.4-dev` branch. Merged bugfixes will be upmerged into the current branches. New features that do not break backwards compatibility should be made to the `6.3-dev`. + +Joomla 5.4 is in security maintenance mode until 12th October 2027, which means it will only receive security fixes. +Bug fixing PRs should be made to the `6.2-dev` branch. Merged bugfixes will be upmerged into the current branches. +New features that do not break backwards compatibility should be made to the `6.3-dev` branch, otherwise they should +be made to the `7.0-dev` branch. | Branch | Purpose | |---------|--------------------------------------------------------------------------------------------------------------| -| 5.4-dev | Branch for the current 5.x Joomla version. | -| 6.2-dev | Branch for the current 6.x Joomla version. Bugfixes only for 6.2 go into this branch. | +| 5.4-dev | Branch for the current 5.x Joomla version. Currently in security maintenance mode. | +| 6.2-dev | Branch for the current 6.x Joomla version. Bugfixes go into this branch. | | 6.3-dev | Branch for the next minor 6.x Joomla version. New features have to go into this branch. | | 7.0-dev | Branch for the next major Joomla version. New features that include a b/c break have to go into this branch. | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50194981e0087..b1c93d8851028 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,13 +84,17 @@ jobs: - name: Check PHP code style run: | set -e + if [ "$GITHUB_REPOSITORY" = "joomla/joomla-cms" ]; then + ./libraries/vendor/bin/php-cs-fixer check -vvv --diff + exit 0 + fi ./libraries/vendor/bin/php-cs-fixer fix -vvv --diff git config --global --add safe.directory "$GITHUB_WORKSPACE" - if [ "$GITHUB_EVENT_NAME" = "push" ] && [ "$GITHUB_REPOSITORY" != "joomla/joomla-cms" ] && ! git diff --quiet; then + if [ "$GITHUB_EVENT_NAME" = "push" ] && ! git diff --quiet; then git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add --all - git commit -m "Fix code style issues [skip ci]" + git commit -m "Fix code style issues" git push origin "HEAD:${{ github.head_ref || github.ref_name }}" fi @@ -145,7 +149,7 @@ jobs: git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add phpstan-baseline.neon - git commit -m "Updated PHPStan baseline [skip ci]" + git commit -m "Updated PHPStan baseline" git push origin "HEAD:${{ github.head_ref || github.ref_name }}" fi diff --git a/README.md b/README.md index d6838855f2442..eaf1e5bf6a06d 100644 --- a/README.md +++ b/README.md @@ -82,8 +82,7 @@ and it will be regenerated on the next call to Joomla. ## Which branch should my Pull Request target? Using a simple classification keeps the project **stable**, **transparent**, and **easy** for everyone to contribute. - | -======= + | Type of change | What it means | Target branch | |---|---|-----------------------------------------------------------------------------------| | **Bug / Patch release** | The change fixes an actual error. The software crashes, produces the wrong result, or behaves contrary to its specification. It can be resolved without large‑scale refactoring or new functionality. | **[6.2-dev](https://github.com/joomla/joomla-cms/tree/6.2-dev)** | diff --git a/administrator/components/com_admin/sql/updates/mysql/6.3.0-2026-11-06.sql b/administrator/components/com_admin/sql/updates/mysql/6.3.0-2026-11-06.sql new file mode 100644 index 0000000000000..c9a968114616f --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/6.3.0-2026-11-06.sql @@ -0,0 +1 @@ +ALTER TABLE `#__finder_links` MODIFY `route` varchar(2048) NOT NULL; diff --git a/administrator/components/com_admin/sql/updates/postgresql/6.3.0-2026-11-06.sql b/administrator/components/com_admin/sql/updates/postgresql/6.3.0-2026-11-06.sql new file mode 100644 index 0000000000000..9d490cf26329d --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/6.3.0-2026-11-06.sql @@ -0,0 +1 @@ +ALTER TABLE "#__finder_links" ALTER COLUMN "route" TYPE varchar(2048); diff --git a/administrator/components/com_admin/tmpl/sysinfo/default.php b/administrator/components/com_admin/tmpl/sysinfo/default.php index 39d2426abe0e6..925a808f942e2 100644 --- a/administrator/components/com_admin/tmpl/sysinfo/default.php +++ b/administrator/components/com_admin/tmpl/sysinfo/default.php @@ -16,29 +16,29 @@ /** @var \Joomla\Component\Admin\Administrator\View\Sysinfo\HtmlView $this */ ?> -
- 'site', 'recall' => true, 'breakpoint' => 768]); ?> +
+ 'site', 'recall' => true, 'breakpoint' => 768]); ?> - - loadTemplate('system'); ?> - + + loadTemplate('system'); ?> + - - loadTemplate('phpsettings'); ?> - + + loadTemplate('phpsettings'); ?> + - - loadTemplate('config'); ?> - + + loadTemplate('config'); ?> + - - loadTemplate('directory'); ?> - + + loadTemplate('directory'); ?> + - - loadTemplate('phpinfo'); ?> - + + loadTemplate('phpinfo'); ?> + - +
diff --git a/administrator/components/com_admin/tmpl/sysinfo/default_directory.php b/administrator/components/com_admin/tmpl/sysinfo/default_directory.php index 135c16eabc6e3..c6d1d31d2c54b 100644 --- a/administrator/components/com_admin/tmpl/sysinfo/default_directory.php +++ b/administrator/components/com_admin/tmpl/sysinfo/default_directory.php @@ -35,7 +35,7 @@ directory as $dir => $info) : ?> - + diff --git a/administrator/components/com_categories/tmpl/category/modalreturn.php b/administrator/components/com_categories/tmpl/category/modalreturn.php index b0e78a35427c3..9abf34997e23c 100644 --- a/administrator/components/com_categories/tmpl/category/modalreturn.php +++ b/administrator/components/com_categories/tmpl/category/modalreturn.php @@ -36,7 +36,7 @@ ?>
- +

escape($title); ?>

diff --git a/administrator/components/com_config/src/Model/ApplicationModel.php b/administrator/components/com_config/src/Model/ApplicationModel.php index 2a66c4c80212a..2dd938f3eed28 100644 --- a/administrator/components/com_config/src/Model/ApplicationModel.php +++ b/administrator/components/com_config/src/Model/ApplicationModel.php @@ -343,8 +343,8 @@ public function save($data) return false; } - // Check if we can set the Force SSL option - if ((int) $data['force_ssl'] !== 0 && (int) $data['force_ssl'] !== (int) $app->get('force_ssl', '0')) { + // Check if we can set the Force SSL option unless we are in CLI mode, in which case we skip this check + if (!$app->isClient('cli') && (int) $data['force_ssl'] !== 0 && (int) $data['force_ssl'] !== (int) $app->get('force_ssl', '0')) { try { // Make an HTTPS request to check if the site is available in HTTPS. $host = Uri::getInstance()->getHost(); diff --git a/administrator/components/com_contact/tmpl/contact/modalreturn.php b/administrator/components/com_contact/tmpl/contact/modalreturn.php index d02f5727bf014..6ee7b582f0519 100644 --- a/administrator/components/com_contact/tmpl/contact/modalreturn.php +++ b/administrator/components/com_contact/tmpl/contact/modalreturn.php @@ -37,7 +37,7 @@ ?>

- +

escape($title); ?>

diff --git a/administrator/components/com_content/tmpl/article/modalreturn.php b/administrator/components/com_content/tmpl/article/modalreturn.php index 023c421c4975e..38a7dc750c6c9 100644 --- a/administrator/components/com_content/tmpl/article/modalreturn.php +++ b/administrator/components/com_content/tmpl/article/modalreturn.php @@ -37,7 +37,7 @@ ?>

- +

escape($title); ?>

diff --git a/administrator/components/com_fields/forms/filter_fields.xml b/administrator/components/com_fields/forms/filter_fields.xml index 3a349dbe84514..3d601cd01453c 100644 --- a/administrator/components/com_fields/forms/filter_fields.xml +++ b/administrator/components/com_fields/forms/filter_fields.xml @@ -4,6 +4,7 @@ diff --git a/administrator/components/com_fields/forms/filter_groups.xml b/administrator/components/com_fields/forms/filter_groups.xml index 4491214aa1e5b..3bf726fa414ce 100644 --- a/administrator/components/com_fields/forms/filter_groups.xml +++ b/administrator/components/com_fields/forms/filter_groups.xml @@ -4,6 +4,7 @@ diff --git a/administrator/components/com_fields/src/Model/FieldModel.php b/administrator/components/com_fields/src/Model/FieldModel.php index 18e2d8b5aefb3..376abe272296c 100644 --- a/administrator/components/com_fields/src/Model/FieldModel.php +++ b/administrator/components/com_fields/src/Model/FieldModel.php @@ -997,9 +997,11 @@ protected function loadFormData() public function validate($form, $data, $group = null) { // Check if the values are unique. This should only apply for list, checkboxes and radio custom field types - if (\in_array($data['type'], ['list', 'checkboxes', 'radio']) + if ( + \in_array($data['type'], ['list', 'checkboxes', 'radio']) && !empty($data['fieldparams']['options']) - && \is_array($data['fieldparams']['options'])) { + && \is_array($data['fieldparams']['options']) + ) { $tmpValues = []; foreach ($data['fieldparams']['options'] as $option) { $tmpValues[] = $option['value']; diff --git a/administrator/components/com_finder/sql/install.mysql.sql b/administrator/components/com_finder/sql/install.mysql.sql index 6fca210c09d4b..316f6ffd6da32 100644 --- a/administrator/components/com_finder/sql/install.mysql.sql +++ b/administrator/components/com_finder/sql/install.mysql.sql @@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS `#__finder_filters` ( CREATE TABLE IF NOT EXISTS `#__finder_links` ( `link_id` int unsigned NOT NULL AUTO_INCREMENT, `url` varchar(255) NOT NULL, - `route` varchar(255) NOT NULL, + `route` varchar(2048) NOT NULL, `title` varchar(400) DEFAULT NULL, `description` text, `indexdate` datetime NOT NULL, diff --git a/administrator/components/com_finder/sql/install.postgresql.sql b/administrator/components/com_finder/sql/install.postgresql.sql index 999d63c1eab24..b83b736795d81 100644 --- a/administrator/components/com_finder/sql/install.postgresql.sql +++ b/administrator/components/com_finder/sql/install.postgresql.sql @@ -27,7 +27,7 @@ CREATE TABLE IF NOT EXISTS "#__finder_filters" ( CREATE TABLE IF NOT EXISTS "#__finder_links" ( "link_id" serial NOT NULL, "url" varchar(255) NOT NULL, - "route" varchar(255) NOT NULL, + "route" varchar(2048) NOT NULL, "title" varchar(400) DEFAULT NULL, "description" text, "indexdate" timestamp without time zone NOT NULL, diff --git a/administrator/components/com_guidedtours/src/Controller/AjaxController.php b/administrator/components/com_guidedtours/src/Controller/AjaxController.php index cdf73f68fdfdf..7e3706abb9f49 100644 --- a/administrator/components/com_guidedtours/src/Controller/AjaxController.php +++ b/administrator/components/com_guidedtours/src/Controller/AjaxController.php @@ -15,6 +15,7 @@ use Joomla\CMS\MVC\Controller\BaseController; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\Response\JsonResponse; +use Joomla\CMS\Session\Session; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; @@ -35,6 +36,12 @@ class AjaxController extends BaseController */ public function fetchUserState() { + // The request changes persisted user state, so it must carry a valid token. + if (!Session::checkToken('get')) { + echo new JsonResponse(null, Text::_('JINVALID_TOKEN'), true); + $this->app->close(); + } + $user = $this->app->getIdentity(); $tourId = $this->app->getInput()->getInt('tid', 0); diff --git a/administrator/components/com_installer/tmpl/update/default.php b/administrator/components/com_installer/tmpl/update/default.php index e493e91f3b0da..7b17f3cdf8c81 100644 --- a/administrator/components/com_installer/tmpl/update/default.php +++ b/administrator/components/com_installer/tmpl/update/default.php @@ -105,11 +105,11 @@ update_site_id; ?> - security)) : ?> + security)) : ?>

security); ?> -
- +
+ client_translated; ?> diff --git a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php index 68bac05dc69bc..ad4cd3ba42af4 100644 --- a/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php +++ b/administrator/components/com_joomlaupdate/src/Model/UpdateModel.php @@ -511,12 +511,20 @@ public function getAutoUpdateVersion(): ?string */ public function getAutoUpdateRequirementsState(): bool { + // Check basic requirements of the *current* system foreach ($this->getPhpOptions() as $option) { if ($option->state !== true) { return false; } } + // Fetch update and check constraints - if the "otherinfo" is set, we have a constraint issue + $updateInfo = $this->getUpdateInformation(); + + if (!empty($updateInfo['object']) && !empty((array) $updateInfo['object']->get('otherUpdateInfo'))) { + return false; + } + return true; } diff --git a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/preupdatecheck.php b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/preupdatecheck.php index 9797d65c4d922..6ed7c83c64995 100644 --- a/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/preupdatecheck.php +++ b/administrator/components/com_joomlaupdate/tmpl/joomlaupdate/preupdatecheck.php @@ -51,7 +51,7 @@ $compatibilityTypes = [ 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS' => [ 'class' => 'info', - 'icon' => 'hourglass fa-spin', + 'icon' => 'hourglass icon-spin', 'notes' => 'COM_JOOMLAUPDATE_VIEW_DEFAULT_EXTENSIONS_RUNNING_PRE_UPDATE_CHECKS_NOTES', 'group' => 0, ], @@ -118,7 +118,7 @@ - +
@@ -259,7 +259,7 @@ $data) : ?>

- + 0) : ?>

diff --git a/administrator/components/com_menus/src/Model/ItemModel.php b/administrator/components/com_menus/src/Model/ItemModel.php index 53d5036c80e38..abf8824683e0c 100644 --- a/administrator/components/com_menus/src/Model/ItemModel.php +++ b/administrator/components/com_menus/src/Model/ItemModel.php @@ -235,6 +235,15 @@ protected function batchCopy($value, $pks, $contexts) continue; } + // Check that the user is allowed to access the item + $itemMenuTypeId = (int) $this->getMenuTypeId($table->menutype); + + if ($table->menutype === 'main' || !$user->authorise('core.edit', 'com_menus.menu.' . $itemMenuTypeId)) { + $this->setError(Text::_('JLIB_APPLICATION_ERROR_BATCH_CANNOT_EDIT')); + + return false; + } + // Copy is a bit tricky, because we also need to copy the children $query = $db->createQuery() ->select($db->quoteName('id')) diff --git a/administrator/components/com_menus/tmpl/item/modalreturn.php b/administrator/components/com_menus/tmpl/item/modalreturn.php index 931ffa3aa99b8..2837b03c75147 100644 --- a/administrator/components/com_menus/tmpl/item/modalreturn.php +++ b/administrator/components/com_menus/tmpl/item/modalreturn.php @@ -34,7 +34,7 @@ ?>
- +

escape($title); ?>

diff --git a/administrator/components/com_modules/tmpl/module/modalreturn.php b/administrator/components/com_modules/tmpl/module/modalreturn.php index bb264fb65549f..85f2ef532116f 100644 --- a/administrator/components/com_modules/tmpl/module/modalreturn.php +++ b/administrator/components/com_modules/tmpl/module/modalreturn.php @@ -41,7 +41,7 @@ ?>

- +

escape($title); ?>

diff --git a/administrator/components/com_newsfeeds/tmpl/newsfeed/modalreturn.php b/administrator/components/com_newsfeeds/tmpl/newsfeed/modalreturn.php index c68d47c423b26..186e0a05dd1d9 100644 --- a/administrator/components/com_newsfeeds/tmpl/newsfeed/modalreturn.php +++ b/administrator/components/com_newsfeeds/tmpl/newsfeed/modalreturn.php @@ -37,7 +37,7 @@ ?>

- +

escape($title); ?>

diff --git a/administrator/components/com_plugins/tmpl/plugin/modalreturn.php b/administrator/components/com_plugins/tmpl/plugin/modalreturn.php index 067d0145c350e..3314a7fa4fe56 100644 --- a/administrator/components/com_plugins/tmpl/plugin/modalreturn.php +++ b/administrator/components/com_plugins/tmpl/plugin/modalreturn.php @@ -37,7 +37,7 @@ ?>

- +

escape($title); ?>

diff --git a/administrator/components/com_scheduler/tmpl/logs/default.php b/administrator/components/com_scheduler/tmpl/logs/default.php index 8872b6ce28196..4b8ab2e5383a4 100644 --- a/administrator/components/com_scheduler/tmpl/logs/default.php +++ b/administrator/components/com_scheduler/tmpl/logs/default.php @@ -34,7 +34,7 @@ $this]); ?> items)) : ?>

- +
diff --git a/administrator/components/com_scheduler/tmpl/tasks/default.php b/administrator/components/com_scheduler/tmpl/tasks/default.php index abef34beaa7b7..03f12e7dd9f92 100644 --- a/administrator/components/com_scheduler/tmpl/tasks/default.php +++ b/administrator/components/com_scheduler/tmpl/tasks/default.php @@ -211,8 +211,8 @@ class="js-draggable" data-url="" data-direction=" locked) : ?> $canChange, 'prefix' => 'tasks.', - 'active_class' => 'none fa fa-running border-dark text-body', - 'inactive_class' => 'none fa fa-running', 'tip' => true, 'translate' => false, + 'active_class' => 'none icon-running border-dark text-body', + 'inactive_class' => 'none icon-running', 'tip' => true, 'translate' => false, 'active_title' => Text::sprintf('COM_SCHEDULER_RUNNING_SINCE', HTMLHelper::_('date', $item->locked, 'DATE_FORMAT_LC5')), 'inactive_title' => Text::sprintf('COM_SCHEDULER_RUNNING_SINCE', HTMLHelper::_('date', $item->locked, 'DATE_FORMAT_LC5')), ]); ?> @@ -270,7 +270,7 @@ class="js-draggable" data-url="" data-direction=" data-scheduler-run data-id="id; ?>" data-title="title); ?>" data-url="id); ?>"> - +
diff --git a/administrator/components/com_templates/tmpl/template/default.php b/administrator/components/com_templates/tmpl/template/default.php index 881f5cc9c2d93..adb5ee1acf6cb 100644 --- a/administrator/components/com_templates/tmpl/template/default.php +++ b/administrator/components/com_templates/tmpl/template/default.php @@ -184,10 +184,10 @@ archive as $file) : ?>
  • -   +  escape($file); ?> -   +  escape($file); ?>
  • diff --git a/administrator/components/com_templates/tmpl/templates/default.php b/administrator/components/com_templates/tmpl/templates/default.php index aafcd5c299b74..6828293ce8d9c 100644 --- a/administrator/components/com_templates/tmpl/templates/default.php +++ b/administrator/components/com_templates/tmpl/templates/default.php @@ -86,13 +86,13 @@
    xmldata->inheritable) && $item->xmldata->inheritable) : ?>
    - +
    xmldata->parent) && (string) $item->xmldata->parent !== '') : ?>
    - + xmldata->parent); ?>
    diff --git a/administrator/components/com_users/forms/user.xml b/administrator/components/com_users/forms/user.xml index 199662a2c8207..248beb05ffbe9 100644 --- a/administrator/components/com_users/forms/user.xml +++ b/administrator/components/com_users/forms/user.xml @@ -259,6 +259,18 @@ + + + + + + + diff --git a/administrator/components/com_users/src/View/Group/HtmlView.php b/administrator/components/com_users/src/View/Group/HtmlView.php index 8f4554368b8d6..5745978bac76d 100644 --- a/administrator/components/com_users/src/View/Group/HtmlView.php +++ b/administrator/components/com_users/src/View/Group/HtmlView.php @@ -85,7 +85,7 @@ public function display($tpl = null) // Add form control fields $this->form - ->addControlField('task'); + ->addControlField('task', 'group.save'); $this->addToolbar(); parent::display($tpl); diff --git a/administrator/components/com_users/src/View/Level/HtmlView.php b/administrator/components/com_users/src/View/Level/HtmlView.php index b0821a7334bad..fa4650fdacf8c 100644 --- a/administrator/components/com_users/src/View/Level/HtmlView.php +++ b/administrator/components/com_users/src/View/Level/HtmlView.php @@ -76,7 +76,7 @@ public function display($tpl = null) // Add form control fields $this->form - ->addControlField('task'); + ->addControlField('task', 'level.save'); $this->addToolbar(); parent::display($tpl); diff --git a/administrator/components/com_users/tmpl/captive/select.php b/administrator/components/com_users/tmpl/captive/select.php index a062464d23ccb..432ac059d3a8a 100644 --- a/administrator/components/com_users/tmpl/captive/select.php +++ b/administrator/components/com_users/tmpl/captive/select.php @@ -51,7 +51,7 @@ href="id)?>">
    <?php echo $this->escape(strip_tags($record->title)) ?>
    allowEntryBatching || !$allowEntryBatching) : ?> @@ -62,16 +62,10 @@ class="img-fluid" /> escape($record->title) ?> - - - - - - diff --git a/administrator/components/com_users/tmpl/methods/firsttime.php b/administrator/components/com_users/tmpl/methods/firsttime.php index 8c1360697f3c8..c6cbeb8410431 100644 --- a/administrator/components/com_users/tmpl/methods/firsttime.php +++ b/administrator/components/com_users/tmpl/methods/firsttime.php @@ -27,7 +27,7 @@
    class="alert-heading"> - + >

    diff --git a/administrator/components/com_workflow/layouts/toolbar/shortcuts.php b/administrator/components/com_workflow/layouts/toolbar/shortcuts.php index 9602fecf29a63..44347779d7b39 100644 --- a/administrator/components/com_workflow/layouts/toolbar/shortcuts.php +++ b/administrator/components/com_workflow/layouts/toolbar/shortcuts.php @@ -29,7 +29,7 @@ class="btn btn-info action-button" data-joomla-dialog="" > - + diff --git a/administrator/components/com_workflow/tmpl/stage/modalreturn.php b/administrator/components/com_workflow/tmpl/stage/modalreturn.php index ee959b6796ba2..248f0cf1a0201 100644 --- a/administrator/components/com_workflow/tmpl/stage/modalreturn.php +++ b/administrator/components/com_workflow/tmpl/stage/modalreturn.php @@ -33,7 +33,7 @@ ?>

    - +

    escape($title); ?>

    diff --git a/administrator/components/com_workflow/tmpl/transition/modalreturn.php b/administrator/components/com_workflow/tmpl/transition/modalreturn.php index 253ccca36d24c..3b0fc74a76e62 100644 --- a/administrator/components/com_workflow/tmpl/transition/modalreturn.php +++ b/administrator/components/com_workflow/tmpl/transition/modalreturn.php @@ -33,7 +33,7 @@ ?>

    - +

    escape($title); ?>

    diff --git a/administrator/components/com_workflow/tmpl/workflows/default.php b/administrator/components/com_workflow/tmpl/workflows/default.php index d8ecbb7714cc0..c41741bf719a8 100644 --- a/administrator/components/com_workflow/tmpl/workflows/default.php +++ b/administrator/components/com_workflow/tmpl/workflows/default.php @@ -180,7 +180,7 @@ - +