Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
b9a65b6
NPM fix audit for non-dev dependency "flatted" (#47407)
richard67 Mar 17, 2026
065632d
Joomla! 6.1.0 Beta 3
tecpromotion Mar 17, 2026
60c9178
Reset to dev
tecpromotion Mar 17, 2026
efe3f93
[5.4] NPM fix audit for non-dev dependency "flatted" (#47406)
richard67 Mar 17, 2026
ea1efed
[5.4] Fix relative asset paths on Cassiopeia error page (#47251)
krishnagandhicode Mar 17, 2026
41235aa
[5.4] Maintenance Task: Change feature request issue template (#47411)
rdeutz Mar 18, 2026
693b7cb
[6.0] Translation Update (#47416)
joomla-translation-bot Mar 18, 2026
04112a6
[5.4] Translation Update (#47421)
joomla-translation-bot Mar 18, 2026
ad474b5
[6.0] codemirror language deprecations (#47398)
brianteeman Mar 19, 2026
b5c97ac
Skip toolbar creation for pagebreak layout (#46908)
sathwikre Mar 19, 2026
0653f01
[5.4] update GitHub actions (drops node.js 20) (#47422)
heelc29 Mar 19, 2026
55f2907
[6.0] GET content/articles render the placeholder only (#45357)
alikon Mar 19, 2026
93a6bbb
[6.1] Fix fancy-select duplication while AJAX search (#47426)
Fedik Mar 20, 2026
b365b7c
[5.4] Fix disable media edit(icon) when no media action plugins are …
krishnagandhicode Mar 20, 2026
8ab684f
[6.0] Translation Update (#47436)
joomla-translation-bot Mar 20, 2026
39bb90f
Merge remote-tracking branch 'upstream/5.4-dev' into upmerges/2026-03-20
Bodge-IT Mar 20, 2026
2dbaa45
[6.0] Upmerges - 2026-03-20
Bodge-IT Mar 20, 2026
05973c3
Merge branch '6.0-dev' into 6.1/maint/upmerge-260320
tecpromotion Mar 20, 2026
4708680
[6.0] partly revert strings in pr #47398 (#47439)
tecpromotion Mar 20, 2026
d03f4a7
Merge branch '6.0-dev' into 6.1/maint/upmerge-260320
tecpromotion Mar 20, 2026
47b48ae
Joomla! 5.4.4
muhme Mar 21, 2026
43ba8da
Reset to dev
muhme Mar 21, 2026
e7d45e1
Joomla! 6.0.4
Bodge-IT Mar 21, 2026
922cb23
Reset to dev
Bodge-IT Mar 21, 2026
0415fa0
[6.1] Correct doc block for document property (#47450)
laoneo Mar 23, 2026
fa62d22
Merge pull request #47438 from tecpromotion/6.1/maint/upmerge-260320
HLeithner Mar 23, 2026
54fcc9c
update phpstan-baseline.neon (#47475)
tecpromotion Mar 25, 2026
70e6fc6
[6.1] Fix switching media type on field reload (#47468)
HLeithner Mar 26, 2026
038a876
Merge remote-tracking branch 'jsst/6.0.4-release' into 6.1-dev
HLeithner Mar 30, 2026
4813051
Joomla! 6.1.0 Release Candidate 1
HLeithner Mar 30, 2026
41d81e9
Reset to dev
HLeithner Mar 31, 2026
66602c7
[5.4] Fix regex pattern in ShowOnRule for custom fields
LadySolveig Mar 31, 2026
f3c76fd
[5.4] Update version in allowEdit method documentation (#47520)
brianteeman Apr 1, 2026
9edeb9d
Merge remote-tracking branch 'upstream/5.4-dev' into upmerges/2026-04-01
Bodge-IT Apr 1, 2026
164afff
[6.0] Upmerges - 2026-04-01
Bodge-IT Apr 1, 2026
20032d2
[5.4] Use the full path for $this in association template file (#47523)
laoneo Apr 1, 2026
c64e552
[5.4] Fix double timezone conversion in Media Manager file dates (#47…
krishnagandhicode Apr 1, 2026
de4cec4
[5.4] Use logical top corner radius for RTL/LTR consistency (#47448)
krishnagandhicode Apr 1, 2026
9ac337c
[5.4] The image rotation Angle field keeps the entered value (#47462)
krishnagandhicode Apr 1, 2026
3f10ab7
[5.4] Handle onContentPrepare event in mod_articles (#47467)
chmst Apr 1, 2026
ef01ccb
[5.4] TinyMCE: Load non minified custom CSS (#47478)
adarshdubey03 Apr 1, 2026
17ca44a
[5.4] Fix required modal category field highlighting on validation er…
krishnagandhicode Apr 1, 2026
652232e
[5.4] Composer update phpseclib/phpseclib to 3.0.50 (#47529)
richard67 Apr 2, 2026
4078bf3
[5.4] NPM audit fix indirect dependencies 2026-04-01 (#47530)
richard67 Apr 2, 2026
1a2f77e
[5.4] Warn when duplicate subform fields are removed on save (#47511)
krishnagandhicode Apr 2, 2026
02d1ffc
Fix: Correct possessive apostrophe 'user's' to 'users'' in stats plug…
Api-cmd Apr 3, 2026
3628939
[6.1] Translation Update (#47537)
joomla-translation-bot Apr 3, 2026
c48f128
[5.4] Correct possessive apostrophe 'user's' to 'users''
tecpromotion Apr 3, 2026
d189cfa
Merge remote-tracking branch 'upstream/5.4-dev' into upmerges/2026-04-03
Bodge-IT Apr 3, 2026
7e2fd4b
[6.0] Upmerges - 2026-04-03
Bodge-IT Apr 3, 2026
de14ee0
Merge branch '6.0-dev' into 6.1/maint/upmerge-260403
tecpromotion Apr 3, 2026
b27c5ec
[5.4] Prevent recursions in loadposition/loadmodule plugin (#47208)
Hackwar Apr 3, 2026
c187823
[5.4] NPM update indirect development dependency lodash to 4.18.1 (#4…
richard67 Apr 4, 2026
ab77428
[5.4] Translation Update (#47535)
joomla-translation-bot Apr 4, 2026
e789d8d
Merge branch '5.4-dev' into 6.1/maint/upmerge-260403
tecpromotion Apr 4, 2026
d0ef68a
[6.1] Translation Update (#47552)
joomla-translation-bot Apr 6, 2026
f022715
Merge branch '6.1-dev' into 6.1/maint/upmerge-260403
tecpromotion Apr 7, 2026
d15bcfb
[6.1] Upmerges - 2026-04-03 #47542
HLeithner Apr 7, 2026
6ebfa1b
npm update (#47554)
tecpromotion Apr 7, 2026
d1560f8
Joomla! 6.1.0 Release Candidate 2
tecpromotion Apr 7, 2026
697299c
Reset to dev
tecpromotion Apr 7, 2026
7816113
Merge remote-tracking branch 'upstream/6.1-dev' into 6.2-upmerge-2025…
MacJoom Apr 8, 2026
e9f39da
Merge pull request #47562 from MacJoom/6.2-upmerge-2025-04-08
charvimehradu Apr 9, 2026
2cb6f86
[6.2] The build script for building scripts (#46879)
Fedik Apr 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .github/ISSUE_TEMPLATE/Feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
name: Feature request
about: Suggest an idea for this project

---

Feature requests should **NOT** be submitted as an issue.

The correct place for a feature request is the Discussion area. More in depth information on the feature request process can be found here: https://github.com/joomla/joomla-cms/discussions/46934
27 changes: 0 additions & 27 deletions .github/ISSUE_TEMPLATE/Feature_request.yml

This file was deleted.

84 changes: 50 additions & 34 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ jobs:
runs-on: ubuntu-latest
container: joomlaprojects/docker-images:php8.4
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
- uses: actions/checkout@v6
- uses: actions/cache@v5
id: cache-php
with:
path: libraries/vendor
Expand All @@ -39,18 +39,22 @@ jobs:
container: joomlaprojects/docker-images:php8.4
needs: [composer]
steps:
- uses: actions/setup-node@v4
- uses: actions/setup-node@v6
with:
node-version: latest
- uses: actions/checkout@v4
- uses: actions/cache@v4
- uses: actions/checkout@v6
- uses: actions/cache@v5
id: cache-assets
with:
path: |
node_modules
media
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json', 'build/media_source/**', 'administrator/components/com_media/resources/**') }}
- uses: actions/cache/restore@v4
installation/template/css
installation/template/images
installation/template/js
installation/template/scss
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json', 'build/build.mjs', 'build/build-modules-js/**', 'media_source/**') }}
- uses: actions/cache/restore@v5
with:
path: libraries/vendor
key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }}
Expand All @@ -71,8 +75,8 @@ jobs:
matrix:
command: ['php-cs-fixer fix -vvv --dry-run --diff', 'phpcs --extensions=php -p --standard=ruleset.xml .']
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
- uses: actions/checkout@v6
- uses: actions/cache/restore@v5
with:
path: libraries/vendor
key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }}
Expand All @@ -94,16 +98,20 @@ jobs:
matrix:
check: ['lint:js', 'lint:testjs', 'lint:css']
steps:
- uses: actions/setup-node@v4
- uses: actions/setup-node@v6
with:
node-version: latest
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
- uses: actions/checkout@v6
- uses: actions/cache/restore@v5
with:
path: |
node_modules
media
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json', 'build/media_source/**', 'administrator/components/com_media/resources/**') }}
installation/template/css
installation/template/images
installation/template/js
installation/template/scss
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json', 'build/build.mjs', 'build/build-modules-js/**', 'media_source/**') }}
- name: Check code style
run: npm run ${{ matrix.check }}

Expand All @@ -113,8 +121,8 @@ jobs:
container: joomlaprojects/docker-images:php8.4
needs: [code-style-php]
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
- uses: actions/checkout@v6
- uses: actions/cache/restore@v5
with:
path: libraries/vendor
key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }}
Expand All @@ -135,8 +143,8 @@ jobs:
matrix:
php_version: ['8.3', '8.4', '8.5']
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
- uses: actions/checkout@v6
- uses: actions/cache/restore@v5
with:
path: libraries/vendor
key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }}
Expand Down Expand Up @@ -181,12 +189,12 @@ jobs:
host: 'postgres'
user: 'root'
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Start LDAP container
uses: docker://docker
with:
args: docker run -d --name openldap --network ${{ job.container.network }} --network-alias openldap -e "LDAP_ADMIN_USERNAME=admin" -e "LDAP_ADMIN_PASSWORD=adminpassword" -e "LDAP_USERS=customuser" -e "LDAP_PASSWORDS=custompassword" -e "LDAP_ENABLE_TLS=yes" -e "LDAP_TLS_CERT_FILE=/certs/openldap.crt" -e "LDAP_TLS_KEY_FILE=/certs/openldap.key" -e "LDAP_TLS_CA_FILE=/certs/CA.crt" -e "BITNAMI_DEBUG=true" -e "LDAP_CONFIG_ADMIN_ENABLED=yes" -e "LDAP_CONFIG_ADMIN_USERNAME=admin" -e "LDAP_CONFIG_ADMIN_PASSWORD=configpassword" -v "${{ github.workspace }}/tests/certs/openldap.crt":"/certs/openldap.crt" -v "${{ github.workspace }}/tests/certs/openldap.key":"/certs/openldap.key" -v "${{ github.workspace }}/tests/certs/CA.crt":"/certs/CA.crt" ghcr.io/joomla-projects/mirror-bitnami-openldap:latest
- uses: actions/cache/restore@v4
- uses: actions/cache/restore@v5
with:
path: libraries/vendor
key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }}
Expand Down Expand Up @@ -238,8 +246,8 @@ jobs:
matrix:
php_version: ['8.3', '8.4', '8.5']
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
- uses: actions/checkout@v6
- uses: actions/cache/restore@v5
id: cache-php-windows
with:
path: libraries/vendor
Expand Down Expand Up @@ -269,8 +277,8 @@ jobs:
matrix:
php_version: ['8.3', '8.4', '8.5']
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
- uses: actions/checkout@v6
- uses: actions/cache/restore@v5
with:
path: libraries/vendor
key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }}
Expand Down Expand Up @@ -308,14 +316,18 @@ jobs:
env:
CYPRESS_VERIFY_TIMEOUT: 100000
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
- uses: actions/checkout@v6
- uses: actions/cache/restore@v5
with:
path: |
node_modules
media
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json', 'build/media_source/**', 'administrator/components/com_media/resources/**') }}
- uses: actions/cache@v4
installation/template/css
installation/template/images
installation/template/js
installation/template/scss
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json', 'build/build.mjs', 'build/build-modules-js/**', 'media_source/**') }}
- uses: actions/cache@v5
id: cache-cypress
with:
path: |
Expand Down Expand Up @@ -370,12 +382,12 @@ jobs:
env:
JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
- uses: actions/checkout@v6
- uses: actions/cache/restore@v5
with:
path: libraries/vendor
key: ${{ runner.os }}-composer-${{ hashFiles('composer.lock') }}
- uses: actions/cache/restore@v4
- uses: actions/cache/restore@v5
with:
path: plugins/system/webauthn/fido.jwt
key: ${{ runner.os }}-webauthn-${{ hashFiles('composer.lock') }}
Expand All @@ -384,8 +396,12 @@ jobs:
path: |
node_modules
media
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json', 'build/media_source/**', 'administrator/components/com_media/resources/**') }}
- uses: actions/cache/restore@v4
installation/template/css
installation/template/images
installation/template/js
installation/template/scss
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json', 'build/build.mjs', 'build/build-modules-js/**', 'media_source/**') }}
- uses: actions/cache/restore@v5
with:
path: |
/root/.cache/Cypress
Expand All @@ -394,7 +410,7 @@ jobs:
- name: Run System tests
run: bash tests/System/entrypoint.sh "$(pwd)" ${{ matrix.config.test_group }} ${{ matrix.config.db_engine }} ${{ matrix.config.db_host }} ${{ matrix.browser }}
- name: Archive test results results
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
if: always()
with:
name: system-test-output
Expand Down Expand Up @@ -427,7 +443,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout Actions Repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Spell Check Repository
uses: crate-ci/typos@v1.34.0
with:
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/create-translation-pull-request-v5.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ jobs:
if: ${{ github.repository == 'joomla-translation-bot/joomla-cms' && github.ref == 'refs/heads/translation5' }}

steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
# We need the full depth to create / update the pull request against the main repo
with:
ref: translation5
fetch-depth: 0
token: ${{ secrets.PAT_WORKFLOW }}
- uses: actions/setup-node@v5
- uses: actions/setup-node@v6
with:
node-version: 24

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/create-translation-pull-request-v6.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ on:

env:
JOOMLA_MAJOR_VERSION: 6
JOOMLA_MINOR_VERSION: '6.0'
JOOMLA_MINOR_VERSION: '6.1'

permissions:
contents: read
Expand All @@ -26,13 +26,13 @@ jobs:
if: ${{ github.repository == 'joomla-translation-bot/joomla-cms' && github.ref == 'refs/heads/translation6' }}

steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
# We need the full depth to create / update the pull request against the main repo
with:
ref: translation6
fetch-depth: 0
token: ${{ secrets.PAT_WORKFLOW }}
- uses: actions/setup-node@v5
token: ${{ secrets.PAT_WORKFLOW }}
- uses: actions/setup-node@v6
with:
node-version: 24

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@

# Template CSS files generated by NPM
/installation/template/css
/installation/template/images
/installation/template/js
/installation/template/scss

# Test Related Files
/phpunit.xml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@
src="<?php echo Route::_($this->editUri . '&task=' . $this->typeName . '.edit&id=' . (int) $this->referenceId); ?>"
height="400" width="400"
data-action="edit"
data-item="<?php echo $this->typeName; ?>"
data-id="<?php echo $this->referenceId; ?>"
data-title="<?php echo $this->referenceTitle; ?>"
data-title-value="<?php echo $this->referenceTitleValue; ?>"
data-language="<?php echo $this->referenceLanguage; ?>"
data-item="<?php echo $this->escape($this->typeName); ?>"
data-id="<?php echo $this->escape($this->referenceId); ?>"
data-title="<?php echo $this->escape($this->referenceTitle); ?>"
data-title-value="<?php echo $this->escape($this->referenceTitleValue); ?>"
data-language="<?php echo $this->escape($this->referenceLanguage); ?>"
data-editurl="<?php echo Route::_($this->editUri); ?>">
</iframe>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,9 @@ protected function initializeView()
*/
protected function addToolbar()
{
if ($this->getLayout() === 'pagebreak') {
return;
}
if ($this->getLayout() === 'modal') {
$this->addModalToolbar();

Expand Down
24 changes: 23 additions & 1 deletion administrator/components/com_fields/src/Model/FieldModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,30 @@ public function __construct($config = [], ?MVCFactoryInterface $factory = null)
*/
public function save($data)
{
$field = null;
$field = null;
$hasDuplicateSubformFields = false;

if (isset($data['id']) && $data['id']) {
$field = $this->getItem($data['id']);
}

$fieldType = $data['type'] ?? ($field->type ?? null);

if ($fieldType === 'subform' && isset($data['fieldparams']['options']) && \is_array($data['fieldparams']['options'])) {
$seenCustomFields = [];

foreach ($data['fieldparams']['options'] as $option) {
$customField = (string) ($option['customfield'] ?? '');

if (isset($seenCustomFields[$customField])) {
$hasDuplicateSubformFields = true;
break;
}

$seenCustomFields[$customField] = true;
}
}

if (isset($data['params']['searchindex'])) {
if (\is_null($field)) {
if ($data['params']['searchindex'] > 0) {
Expand Down Expand Up @@ -172,6 +190,10 @@ public function save($data)
return false;
}

if ($hasDuplicateSubformFields) {
Factory::getApplication()->enqueueMessage(Text::_('COM_FIELDS_FIELD_SUBFORM_DUPLICATE_FIELDS_REMOVED'), 'warning');
}

// Save the assigned categories into #__fields_categories
$db = $this->getDatabase();
$id = (int) $this->getState('field.id');
Expand Down
3 changes: 3 additions & 0 deletions administrator/components/com_media/tmpl/media/default.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Plugin\PluginHelper;
use Joomla\CMS\Session\Session;
use Joomla\CMS\Uri\Uri;

Expand All @@ -34,6 +35,7 @@
$tmpl = $input->getCmd('tmpl');

$mediaTypes = '&mediatypes=' . $input->getString('mediatypes', '0,1,2,3');
$hasMediaActionPlugins = !empty(PluginHelper::getPlugin('media-action'));

// Populate the media config
$config = [
Expand All @@ -54,6 +56,7 @@
'canCreate' => $user->authorise('core.create', 'com_media'),
'canEdit' => $user->authorise('core.edit', 'com_media'),
'canDelete' => $user->authorise('core.delete', 'com_media'),
'hasMediaActionPlugins' => $hasMediaActionPlugins,
];
$this->getDocument()->addScriptOptions('com_media', $config);
?>
Expand Down
1 change: 1 addition & 0 deletions administrator/language/en-GB/com_fields.ini
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ COM_FIELDS_FIELD_SHOWLABEL_LABEL="Label"
COM_FIELDS_FIELD_SHOWON_DESC="Conditionally show or hide the field depending on the value of other fields."
COM_FIELDS_FIELD_SHOWON_LABEL="Showon Attribute"
COM_FIELDS_FIELD_SMARTSEARCHOPTIONS_HEADING="Smart Search"
COM_FIELDS_FIELD_SUBFORM_DUPLICATE_FIELDS_REMOVED="Duplicate subform fields were removed. Each field can only be used once."
COM_FIELDS_FIELD_SUFFIX_LABEL="Suffix"
COM_FIELDS_FIELD_TYPE_LABEL="Type"
COM_FIELDS_FIELD_USE_GLOBAL="Use settings from Plugin"
Expand Down
Loading
Loading