Skip to content

Commit 8f2a1c2

Browse files
authored
[6.0] Upmerges - 2025-10-22 - alternative to PR 46349
Merge pull request #46350 from richard67/6.0-dev-upmerge-2025-10-22
2 parents f81bf7d + 834f736 commit 8f2a1c2

File tree

47 files changed

+250
-215
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+250
-215
lines changed

.devcontainer/devcontainer.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@
1414
"6080": {
1515
"label": "Cypress GUI",
1616
"onAutoForward": "silent"
17+
},
18+
"8025": {
19+
"label": "Mailpit Web UI",
20+
"onAutoForward": "openPreview"
1721
}
1822
},
23+
"forwardPorts": [80, 443, 6080, 8025],
1924
"postCreateCommand": "bash ./.devcontainer/post-create.sh",
2025
"customizations": {
2126
"vscode": {

.devcontainer/docker-compose.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,11 @@ services:
2525
volumes:
2626
- "mysql-data:/var/lib/mysql"
2727

28+
mailpit:
29+
image: axllent/mailpit:latest
30+
restart: unless-stopped
31+
ports:
32+
- "8025:8025"
33+
2834
volumes:
2935
mysql-data:

.devcontainer/post-create.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ echo "✅ Joomla installed."
5454
echo "--> Applying development settings..."
5555
# Enable debug mode and maximum error reporting for easier troubleshooting.
5656
php cli/joomla.php config:set error_reporting=maximum
57+
# Configure mail settings for Mailpit
58+
php cli/joomla.php config:set mailer=smtp
59+
php cli/joomla.php config:set smtphost=mailpit
60+
php cli/joomla.php config:set smtpport=1025
61+
php cli/joomla.php config:set smtpauth=0
62+
php cli/joomla.php config:set smtpsecure=none
5763
echo "✅ Development settings applied."
5864

5965
# --- 5. Install and Configure phpMyAdmin ---
@@ -148,6 +154,10 @@ DETAILS_FILE="${JOOMLA_ROOT}/codespace-details.txt"
148154
echo " Username: $DB_USER"
149155
echo " Password: $DB_PASS"
150156
echo ""
157+
echo "Mailpit (Email Testing):"
158+
echo " URL: Open the 'Ports' tab, find 'Mailpit Web UI' (8025), and click the Globe icon"
159+
echo " All emails sent by Joomla will appear here for testing"
160+
echo ""
151161
echo "Cypress E2E Testing:"
152162
echo " Run interactive tests: npx cypress open"
153163
echo " Run headless tests: npx cypress run"

.github/CONTRIBUTING.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ You are welcome to submit a contribution for review and possible inclusion in th
1515
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.
1616

1717
#### Branches
18-
Joomla 4.4 is in security maintenance mode, until 14th October 2025, which means it will only receive security fixes. Bug fixing PRs should be made to the `5.3-dev` branch. Merged bugfixes will be upmerged into the current branches. New features that do not break backwards compatibility should be made to the `5.4-dev` branch otherwise they should be made to the `6.0-dev` branch.
18+
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.1-dev`.
1919

2020

21-
| Branch | Purpose |
22-
| ------ | ------- |
23-
| 4.4-dev | Branch for the current 4.x Joomla version. Currently in security maintenance mode. |
24-
| 5.3-dev | Branch for the current 5.x Joomla version. Bugfix only for 5.x go into this branch. |
25-
| 5.4-dev | Branch for the next minor 5.x Joomla version. New features go into this branch. |
26-
| 6.0-dev | Branch for the next major Joomla version. New features that include a b/c break have to go into this branch. |
21+
| Branch | Purpose |
22+
|---------|-----------------------------------------------------------------------------------------|
23+
| 5.4-dev | Branch for the current 5.x Joomla version. |
24+
| 6.0-dev | Branch for the current 6.x Joomla version. Bugfixes only for 6.x go into this branch. |
25+
| 6.1-dev | Branch for the next minor 6.x Joomla version. New features have to go into this branch. |

.github/workflows/create-translation-pull-request-v4.yml

Lines changed: 0 additions & 77 deletions
This file was deleted.

administrator/components/com_joomlaupdate/src/Model/UpdateModel.php

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,23 +1357,29 @@ public function getPhpOptions()
13571357
* version is not shown. So this check is actually unnecessary.
13581358
*/
13591359
$option = new \stdClass();
1360-
$option->label = Text::sprintf('INSTL_PHP_VERSION_NEWER', $this->getTargetMinimumPHPVersion());
13611360
$option->state = $this->isPhpVersionSupported();
1362-
$option->notice = null;
1361+
$option->label = $option->state
1362+
? Text::sprintf('INSTL_PHP_VERSION_NEWER', $this->getTargetMinimumPHPVersion())
1363+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_VERSION_NEWER_NOT_SUPPORTED', $this->getTargetMinimumPHPVersion());
1364+
$option->notice = $option->state ? null : Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_VERSION_NEWER_NOT_SUPPORTED_NOTICE');
13631365
$options[] = $option;
13641366

13651367
// Check for zlib support.
13661368
$option = new \stdClass();
1367-
$option->label = Text::_('INSTL_ZLIB_COMPRESSION_SUPPORT');
13681369
$option->state = \extension_loaded('zlib');
1369-
$option->notice = null;
1370+
$option->label = $option->state
1371+
? Text::_('INSTL_ZLIB_COMPRESSION_SUPPORT')
1372+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_MODULE_NOT_LOADED', Text::_('INSTL_ZLIB_COMPRESSION_SUPPORT'));
1373+
$option->notice = $option->state ? null : Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_MODULE_NOT_LOADED_NOTICE');
13701374
$options[] = $option;
13711375

13721376
// Check for XML support.
13731377
$option = new \stdClass();
1374-
$option->label = Text::_('INSTL_XML_SUPPORT');
13751378
$option->state = \extension_loaded('xml');
1376-
$option->notice = null;
1379+
$option->label = $option->state
1380+
? Text::_('INSTL_XML_SUPPORT')
1381+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_MODULE_NOT_LOADED', Text::_('INSTL_XML_SUPPORT'));
1382+
$option->notice = $option->state ? null : Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_MODULE_NOT_LOADED_NOTICE');
13771383
$options[] = $option;
13781384

13791385
// Check for mbstring options.
@@ -1388,26 +1394,33 @@ public function getPhpOptions()
13881394

13891395
// Check for a missing native parse_ini_file implementation.
13901396
$option = new \stdClass();
1391-
$option->label = Text::_('INSTL_PARSE_INI_FILE_AVAILABLE');
13921397
$option->state = $this->getIniParserAvailability();
1393-
$option->notice = null;
1398+
$option->label = $option->state
1399+
? Text::_('INSTL_PARSE_INI_FILE_AVAILABLE')
1400+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PARSE_INI_FILE_NOT_AVAILABLE', Text::_('INSTL_PARSE_INI_FILE_AVAILABLE'));
1401+
$option->notice = $option->state ? null : Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_PARSE_INI_FILE_NOT_AVAILABLE_NOTICE');
13941402
$options[] = $option;
13951403

13961404
// Check for missing native json_encode / json_decode support.
1397-
$option = new \stdClass();
1398-
$option->label = Text::_('INSTL_JSON_SUPPORT_AVAILABLE');
1399-
$option->state = \function_exists('json_encode') && \function_exists('json_decode');
1400-
$option->notice = null;
1401-
$options[] = $option;
1405+
$option = new \stdClass();
1406+
$option->state = \function_exists('json_encode') && \function_exists('json_decode');
1407+
$option->label = $option->state
1408+
? Text::_('INSTL_JSON_SUPPORT_AVAILABLE')
1409+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_MODULE_NOT_LOADED', Text::_('INSTL_JSON_SUPPORT_AVAILABLE'));
1410+
$option->notice = $option->state ? null : Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_PHP_MODULE_NOT_LOADED_NOTICE');
1411+
$options[] = $option;
1412+
14021413
$updateInformation = $this->getUpdateInformation();
14031414

14041415
// Extra checks when updating to the next major version of Joomla
14051416
if (version_compare($updateInformation['latest'], (string) Version::MAJOR_VERSION + 1, '>=')) {
14061417
// Check if configured database is compatible with the next major version of Joomla
14071418
$option = new \stdClass();
1408-
$option->label = Text::sprintf('INSTL_DATABASE_SUPPORTED', $this->getConfiguredDatabaseType());
14091419
$option->state = $this->isDatabaseTypeSupported();
1410-
$option->notice = null;
1420+
$option->label = $option->state
1421+
? Text::sprintf('INSTL_DATABASE_SUPPORTED', $this->getConfiguredDatabaseType())
1422+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_DATABASE_NOT_SUPPORTED', $this->getConfiguredDatabaseType());
1423+
$option->notice = $option->state ? null : Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_DATABASE_NOT_SUPPORTED_NOTICE');
14111424
$options[] = $option;
14121425

14131426
// Check if the Joomla 5 backwards compatibility plugin is disabled
@@ -1416,9 +1429,13 @@ public function getPhpOptions()
14161429
$this->translateExtensionName($plugin);
14171430

14181431
$option = new \stdClass();
1419-
$option->label = Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PLUGIN_DISABLED_TITLE', $plugin->name);
14201432
$option->state = !PluginHelper::isEnabled('behaviour', 'compat');
1421-
$option->notice = $option->state ? null : Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PLUGIN_DISABLED_NOTICE', $plugin->folder, $plugin->element);
1433+
$option->label = $option->state
1434+
? $plugin->name
1435+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PLUGIN_BC_DISABLED_TITLE', $plugin->name);
1436+
$option->notice = $option->state
1437+
? null
1438+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PLUGIN_BC_DISABLED_NOTICE', $plugin->name, $plugin->folder, $plugin->element);
14221439
$options[] = $option;
14231440

14241441
// Check if the Joomla 6 backwards compatibility plugin is enabled
@@ -1427,16 +1444,20 @@ public function getPhpOptions()
14271444
$this->translateExtensionName($plugin);
14281445

14291446
$option = new \stdClass();
1430-
$option->label = Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PLUGIN_ENABLED_TITLE', $plugin->name);
14311447
$option->state = PluginHelper::isEnabled('behaviour', 'compat6');
1448+
$option->label = $option->state
1449+
? $plugin->name
1450+
: Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PLUGIN_BC_ENABLED_TITLE', $plugin->name);
14321451
$option->notice = $option->state ? null : Text::sprintf('COM_JOOMLAUPDATE_VIEW_DEFAULT_PLUGIN_ENABLED_NOTICE', $plugin->folder, $plugin->element);
14331452
$options[] = $option;
14341453
}
14351454

14361455
// Check if database structure is up to date
14371456
$option = new \stdClass();
1438-
$option->label = Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_DATABASE_STRUCTURE_TITLE');
14391457
$option->state = $this->getDatabaseSchemaCheck();
1458+
$option->label = $option->state
1459+
? Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_DATABASE_STRUCTURE_TITLE')
1460+
: Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_DATABASE_STRUCTURE_NOT_UP_TO_DATE');
14401461
$option->notice = $option->state ? null : Text::_('COM_JOOMLAUPDATE_VIEW_DEFAULT_DATABASE_STRUCTURE_NOTICE');
14411462
$options[] = $option;
14421463

administrator/components/com_joomlaupdate/tmpl/joomlaupdate/preupdatecheck.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@
161161
</thead>
162162
<tbody>
163163
<?php foreach ($this->phpOptions as $option) : ?>
164-
<tr>
164+
<tr<?php echo ($option->state ? '' : ' class="border-3 border-danger"'); ?>>
165165
<th scope="row">
166166
<?php echo $option->label; ?>
167167
<?php if ($option->notice) : ?>
@@ -171,9 +171,11 @@
171171
<?php endif; ?>
172172
</th>
173173
<td>
174-
<span class="badge bg-<?php echo $option->state ? 'success' : 'danger'; ?>">
175-
<?php echo Text::_($option->state ? 'JYES' : 'JNO'); ?>
176-
</span>
174+
<?php if ($option->state) : ?>
175+
<span class="badge text-bg-success"><span class="icon-checkmark" aria-hidden="true"></span><?php echo Text::_('JOK'); ?></span>
176+
<?php else : ?>
177+
<span class="badge text-bg-danger"><span class="icon-cancel" aria-hidden="true"></span><?php echo Text::_('COM_JOOMLAUPDATE_ACTION_REQUIRED'); ?></span>
178+
<?php endif; ?>
177179
</td>
178180
</tr>
179181
<?php endforeach; ?>

administrator/components/com_menus/src/Model/MenuModel.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ public function &getModules()
363363
foreach ($modules as &$module) {
364364
$params = new Registry($module->params);
365365

366-
$menuType = $params->get('menutype');
366+
$menuType = $params->get('menutype', '');
367367

368368
if (!isset($result[$menuType])) {
369369
$result[$menuType] = [];

administrator/components/com_privacy/src/View/Requests/HtmlView.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ protected function addToolbar()
143143
// Requests can only be created if mail sending is enabled
144144
if (Factory::getApplication()->get('mailonline', 1)) {
145145
$toolbar->addNew('request.add');
146+
} else {
147+
// Display a message if mail is not enabled
148+
Factory::getApplication()->enqueueMessage(Text::_('COM_PRIVACY_ERROR_CANNOT_CREATE_REQUEST_WHEN_SENDMAIL_DISABLED'), 'error');
146149
}
147150

148151
$toolbar->preferences('com_privacy');

administrator/components/com_scheduler/src/Traits/TaskPluginTrait.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,6 @@ public function standardRoutineHandler(ExecuteTaskEvent $event): void
296296
}
297297

298298
try {
299-
// Enable invocation of private/protected methods.
300-
$method->setAccessible(true);
301299
$exitCode = $method->invoke($this, $event);
302300
} catch (\ReflectionException $e) {
303301
// @todo replace with language string (?)

0 commit comments

Comments
 (0)