Skip to content

Commit

Permalink
Merge branch '5.0-dev' into descending
Browse files Browse the repository at this point in the history
  • Loading branch information
bembelimen committed Nov 16, 2023
2 parents ed68c53 + f3de348 commit 912bba1
Show file tree
Hide file tree
Showing 53 changed files with 8,963 additions and 2,511 deletions.
4 changes: 2 additions & 2 deletions .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,16 @@ hosts:
openldap: 127.0.0.1

services:
- mysql
- iis

before_test:
# Run openldap docker image
- ps: docker pull bitnami/openldap:2.6.3
- ps: docker run --rm --name openldap --publish 1389:1389 --publish 1636:1636 -v ${pwd}\tests\certs:/certificates --env LDAP_ADMIN_USERNAME=admin --env LDAP_ADMIN_PASSWORD=adminpassword --env LDAP_USERS=customuser --env LDAP_PASSWORDS=custompassword --env LDAP_ENABLE_TLS=yes --env LDAP_TLS_CERT_FILE=/certificates/openldap.crt --env LDAP_TLS_KEY_FILE=/certificates/openldap.key --env LDAP_TLS_CA_FILE=/certificates/CA.crt --env BITNAMI_DEBUG=true --env LDAP_CONFIG_ADMIN_ENABLED=yes --env LDAP_CONFIG_ADMIN_USERNAME=admin --env LDAP_CONFIG_ADMIN_PASSWORD=configpassword -d bitnami/openldap:2.6.3
# Database setup for MySQL via PowerShell tools
- ps: Start-Service MySQL80
- >
"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql" -u root -p"Password12!" -e "CREATE DATABASE IF NOT EXISTS test_joomla;"
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql" -u root -p"Password12!" -e "CREATE DATABASE IF NOT EXISTS test_joomla;"
# Wait till slapd has started
- ps: |
$Counter=0
Expand Down
64 changes: 37 additions & 27 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ steps:
- ./libraries/vendor/bin/phan

- name: npm
image: node:18-bullseye-slim
image: node:20-bullseye-slim
depends_on: [ phpcs ]
volumes:
- name: npm-cache
Expand Down Expand Up @@ -286,29 +286,39 @@ steps:
- name: packager
image: joomlaprojects/docker-images:packager
environment:
FTP_USERNAME:
from_secret: ftpusername
FTP_PASSWORD:
from_secret: ftppassword
FTP_HOSTNAME: ci.joomla.org
FTP_PORT: "21"
FTP_DEST_DIR: /artifacts
FTP_VERIFY: "false"
FTP_SECURE: "true"
HTTP_ROOT: "https://ci.joomla.org/artifacts"
HTTP_ROOT: "https://artifacts.joomla.org/drone"
DRONE_PULL_REQUEST: DRONE_PULL_REQUEST
DRONE_COMMIT: DRONE_COMMIT
commands:
- /bin/drone_prepare_package.sh

- name: upload
image: joomlaprojects/docker-images:packager
environment:
package_key:
from_secret: package_key
package_user:
from_secret: package_user
package_host:
from_secret: package_host
package_root:
from_secret: package_root
GITHUB_TOKEN:
from_secret: github_token
commands:
- if [ $DRONE_REPO_NAME != 'joomla-cms' ]; then echo "The packager only runs on the joomla/joomla-cms repo"; exit 0; fi
- /bin/drone_build.sh
volumes:
- name: reference
path: /reference
when:
repo:
- joomla/joomla-cms
- mkdir -p ~/.ssh
- eval $(ssh-agent -s)
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
- echo "$package_key" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- ssh-add
- rclone config create package sftp host $package_host user $package_user port 22
- rclone copy ./upload/ package:$package_root/$DRONE_REPO/$DRONE_BRANCH/$DRONE_PULL_REQUEST/downloads/$DRONE_BUILD_NUMBER
- /bin/add_github_status.sh "Download" "Prebuilt packages are available for download." "https://artifacts.joomla.org/drone/${DRONE_REPO}/${DRONE_BRANCH}/${DRONE_PULL_REQUEST}/downloads/${DRONE_BUILD_NUMBER}"

trigger:
repo:
- joomla/joomla-cms

---
kind: pipeline
Expand All @@ -335,8 +345,8 @@ steps:
from_secret: nightly_user
nightly_host:
from_secret: nightly_host
RINGCENTRAL_WEBHOOK:
from_secret: notification_url
MATTERMOST_NIGHTLY_HOOK:
from_secret: mattermost_nightly_hook
commands:
- export MINORVERSION=${DRONE_BRANCH%-*}
- mkdir -p ~/.ssh
Expand All @@ -349,20 +359,20 @@ steps:
- rclone delete nightly:/home/devj/public_html/nightlies/ --include "Joomla_$MINORVERSION.*"
- rclone delete nightly:/home/devj/public_html/cache/com_content/
- rclone copy ./transfer/ nightly:/home/devj/public_html/nightlies/
- /bin/notify
- curl -i -X POST -H 'Content-Type:application/json' -d '{"text":"Nightly Build for [Joomla 5.0](https://developer.joomla.org/nightly-builds.html) successfully built."}' $MATTERMOST_NIGHTLY_HOOK


- name: buildfailure
image: joomlaprojects/docker-images:packager
environment:
RINGCENTRAL_WEBHOOK:
from_secret: notification_url
MATTERMOST_NIGHTLY_HOOK:
from_secret: mattermost_nightly_hook
commands:
- /bin/notify
- curl -i -X POST -H 'Content-Type:application/json' -d '{"text":"Nightly Build for [Joomla 5.0](https://developer.joomla.org/nightly-builds.html) FAILED to built."}' $MATTERMOST_NIGHTLY_HOOK
when:
status:
- failure


trigger:
event:
- cron
Expand All @@ -372,6 +382,6 @@ trigger:

---
kind: signature
hmac: 45b19b7430edc5ec922ef32c2f2dcb284c7cbf7ba55eb295ba4d877cee0fe5a4
hmac: 250f08652884d60218c5b280b139d3ff05c068d010791d159993cf87ecbbac0f

...
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Build Status
---------------------
| Drone-CI | AppVeyor | PHP | Node | npm |
|------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|---------------------------------------------------------------------------------|
| [![Build Status](https://ci.joomla.org/api/badges/joomla/joomla-cms/status.svg?branch=5.0-dev)](https://ci.joomla.org/joomla/joomla-cms) | [![Build status](https://ci.appveyor.com/api/projects/status/ru6sxal8jmfckvjc/branch/5.0-dev?svg=true)](https://ci.appveyor.com/project/release-joomla/joomla-cms) | [![PHP](https://img.shields.io/badge/PHP-V8.1.0-green)](https://www.php.net/) | [![node-lts](https://img.shields.io/badge/Node-V18.0-green)](https://nodejs.org/en/) | [![npm](https://img.shields.io/badge/npm-v9.6.7-green)](https://nodejs.org/en/) |
| [![Build Status](https://ci.joomla.org/api/badges/joomla/joomla-cms/status.svg?branch=5.0-dev)](https://ci.joomla.org/joomla/joomla-cms) | [![Build status](https://ci.appveyor.com/api/projects/status/ru6sxal8jmfckvjc/branch/5.0-dev?svg=true)](https://ci.appveyor.com/project/release-joomla/joomla-cms) | [![PHP](https://img.shields.io/badge/PHP-V8.1.0-green)](https://www.php.net/) | [![node-lts](https://img.shields.io/badge/Node-V20.0-green)](https://nodejs.org/en/) | [![npm](https://img.shields.io/badge/npm-v10.1.0-green)](https://nodejs.org/en/) |

Overview
---------------------
Expand Down
4 changes: 4 additions & 0 deletions administrator/components/com_admin/script.php
Original file line number Diff line number Diff line change
Expand Up @@ -2488,6 +2488,10 @@ public function updateAssets($installer)
// List all components added since 4.0
$newComponents = [
// Components to be added here
'com_guidedtours',
'com_mails',
'com_scheduler',
'com_workflow',
];

foreach ($newComponents as $component) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@
-2 => 'icon-trash',
0 => 'icon-times',
1 => 'icon-check',
2 => 'icon-archive',
];
?>
<?php foreach ($this->items as $i => $item) : ?>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,10 @@ function ($f) {
]))->getArgument('result', []);

if (\is_array($value)) {
$value = implode(' ', $value);
$value = array_filter($value, function ($v) {
return $v !== '' && $v !== null;
});
$value = $value ? implode(' ', $value) : '';
}

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public function prepareField(PrepareFieldEvent $event)
{
$result = $this->onCustomFieldsPrepareField($event->getContext(), $event->getItem(), $event->getField());

if ($result) {
if ($result !== '' && $result !== null) {
$event->addResult($result);
}
}
Expand Down
6 changes: 3 additions & 3 deletions administrator/components/com_finder/src/Indexer/Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,13 @@ public function parse($input)
// Find the last space character if we aren't at the end.
$ls = (($start + $chunk) < $end ? strrpos($string, ' ') : false);

// Truncate to the last space character.
// Truncate to the last space character (but include it in the string).
if ($ls !== false) {
$string = substr($string, 0, $ls);
$string = substr($string, 0, $ls + 1);
}

// Adjust the start position for the next iteration.
$start += ($ls !== false ? ($ls + 1 - $chunk) + $chunk : $chunk);
$start += $ls !== false ? $ls + 1 : $chunk;

// Parse the chunk.
$return .= $this->process($string);
Expand Down
2 changes: 1 addition & 1 deletion administrator/components/com_media/config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@
type="textarea"
label="COM_MEDIA_FIELD_RESTRICT_UPLOADS_EXTENSIONS_LABEL"
description="COM_MEDIA_FIELD_RESTRICT_UPLOADS_EXTENSIONS_DESC"
default="bmp,gif,jpg,jpeg,png,webp,avif,ico,mp3,mp4,odg,odp,ods,odt,pdf,png,ppt,txt,xcf,xls,csv"
default="bmp,gif,jpg,jpeg,png,webp,avif,ico,mp3,mp4,odg,odp,ods,odt,pdf,ppt,txt,xcf,xls,csv"
showon="restrict_uploads:1"
/>

Expand Down
5 changes: 3 additions & 2 deletions administrator/components/com_users/tmpl/users/modal.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@
<form action="<?php echo Route::_('index.php?option=com_users&view=users&layout=modal&tmpl=component&groups=' . $input->get('groups', '', 'BASE64') . '&excluded=' . $input->get('excluded', '', 'BASE64')); ?>" method="post" name="adminForm" id="adminForm">
<?php if (!$userRequired) : ?>
<div>
<button type="button" class="btn btn-primary button-select" data-user-value="0" data-user-name="<?php echo $this->escape(Text::_('JLIB_FORM_SELECT_USER')); ?>"
data-user-field="<?php echo $this->escape($field); ?>"><?php echo Text::_('JOPTION_NO_USER'); ?></button>&nbsp;
<button type="button" class="btn btn-primary button-select"
data-content-select data-content-type="com_users.user" data-id="" data-name=""
data-user-value="" data-user-name="" data-user-field="<?php echo $this->escape($field); ?>"><?php echo Text::_('JOPTION_NO_USER'); ?></button>&nbsp;
</div>
<?php endif; ?>
<?php echo LayoutHelper::render('joomla.searchtools.default', ['view' => $this]); ?>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
namespace Joomla\Component\Content\Api\Controller;

use Joomla\CMS\Filter\InputFilter;
use Joomla\CMS\Helper\TagsHelper;
use Joomla\CMS\MVC\Controller\ApiController;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;

Expand Down Expand Up @@ -114,6 +115,10 @@ protected function preprocessSaveData(array $data): array
}
}

$tags = new TagsHelper();
$tags->getTagIds($data['id'], 'com_content.article');
$data['tags'] = explode(',', $tags->tags);

return $data;
}
}
15 changes: 8 additions & 7 deletions build/build-modules-js/error-pages.es6.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ const {
const Ini = require('ini');
const { dirname } = require('path');
const Recurs = require('recursive-readdir');
const Postcss = require('postcss');
const Autoprefixer = require('autoprefixer');
const CssNano = require('cssnano');
const { minify } = require('terser');
const { transform } = require('esbuild');
const LightningCSS = require('lightningcss');

const RootPath = process.cwd();
const dir = `${RootPath}/installation/language`;
Expand Down Expand Up @@ -35,10 +33,13 @@ module.exports.createErrorPages = async (options) => {
let cssContent = await readFile(`${srcPath}/template.css`, { encoding: 'utf8' });
let jsContent = await readFile(`${srcPath}/template.js`, { encoding: 'utf8' });

const cssMin = await Postcss([Autoprefixer, CssNano]).process(cssContent, { from: undefined });
const { code } = LightningCSS.transform({
code: Buffer.from(cssContent),
minify: true,
});

cssContent = cssMin.css;
jsContent = await minify(jsContent);
cssContent = code;
jsContent = await transform(jsContent, { minify: true });

const processIni = async (file) => {
const languageStrings = Ini.parse(await readFile(file, { encoding: 'utf8' }));
Expand Down
4 changes: 2 additions & 2 deletions build/build-modules-js/init/minify-vendor.es6.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { lstat, readFile, writeFile } = require('fs-extra');
const { sep, basename } = require('path');
const recursive = require('recursive-readdir');
const { minify } = require('terser');
const { transform } = require('esbuild');

const RootPath = process.cwd();

Expand Down Expand Up @@ -70,7 +70,7 @@ const minifyJS = async (file) => {
if (isMinified || needsDotJS) {
minified = content;
} else {
minified = (await minify(content, { sourceMap: false, format: { comments: false } })).code;
minified = (await transform(content, { minify: true })).code;
}

const newFile = needsDotJS ? file.replace('.min.js', '.js') : file.replace('.js', '.min.js');
Expand Down
4 changes: 2 additions & 2 deletions build/build-modules-js/javascript/build-bootstrap-js.es6.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ const {
readdir, readFile, writeFile, unlink,
} = require('fs').promises;
const { resolve } = require('path');
const { minify } = require('terser');
const { transform } = require('esbuild');
const rimraf = require('rimraf');
const rollup = require('rollup');
const { nodeResolve } = require('@rollup/plugin-node-resolve');
Expand All @@ -16,7 +16,7 @@ const outputFolder = 'media/vendor/bootstrap/js';

const createMinified = async (file) => {
const initial = await readFile(resolve(outputFolder, file), { encoding: 'utf8' });
const mini = await minify(initial.replace('./popper.js', `./popper.min.js?${bsVersion}`).replace('./dom.js', `./dom.min.js?${bsVersion}`), { sourceMap: false, format: { comments: false } });
const mini = await transform(initial.replace('./popper.js', `./popper.min.js?${bsVersion}`).replace('./dom.js', `./dom.min.js?${bsVersion}`), { minify: true });
await writeFile(resolve(outputFolder, file), initial.replace('./popper.js', `./popper.js?${bsVersion}`).replace('./dom.js', `./dom.js?${bsVersion}`), { encoding: 'utf8', mode: 0o644 });
await writeFile(resolve(outputFolder, file.replace('.js', '.min.js')), mini.code, { encoding: 'utf8', mode: 0o644 });
};
Expand Down
4 changes: 2 additions & 2 deletions build/build-modules-js/javascript/build-codemirror.es6.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const cliProgress = require('cli-progress');
const rollup = require('rollup');
const { nodeResolve } = require('@rollup/plugin-node-resolve');
const replace = require('@rollup/plugin-replace');
const { minify } = require('terser');
const { transform } = require('esbuild');
const { resolvePackageFile, getPackagesUnderScope } = require('../init/common/resolve-package.es6.js');

// Build the module
Expand Down Expand Up @@ -39,7 +39,7 @@ const createMinified = async (filePath) => {
// Read source
const src = readFileSync(filePath, { encoding: 'utf8' });
// Minify
const min = await minify(src, { sourceMap: false, format: { comments: false } });
const min = await transform(src, { minify: true });
// Save result
await writeFile(destFile, min.code, { encoding: 'utf8', mode: 0o644 });
};
Expand Down
11 changes: 6 additions & 5 deletions build/build-modules-js/javascript/compile-to-es2017.es6.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@

const { access, writeFile } = require('fs').promises;
const { constants } = require('fs');
const Autoprefixer = require('autoprefixer');
const CssNano = require('cssnano');
const { basename, sep, resolve } = require('path');
const rollup = require('rollup');
const { nodeResolve } = require('@rollup/plugin-node-resolve');
const replace = require('@rollup/plugin-replace');
const { babel } = require('@rollup/plugin-babel');
const Postcss = require('postcss');
const LightningCSS = require('lightningcss');
const { renderSync } = require('sass-embedded');
const { minifyJsCode } = require('./minify.es6.js');
const { getPackagesUnderScope } = require('../init/common/resolve-package.es6.js');
Expand Down Expand Up @@ -37,8 +35,11 @@ const getWcMinifiedCss = async (file) => {
}

if (typeof compiled === 'object' && compiled.css) {
return Postcss([Autoprefixer(), CssNano()])
.process(compiled.css.toString(), { from: undefined });
const { code } = LightningCSS.transform({
code: Buffer.from(compiled.css.toString()),
minify: true,
});
return code;
}
}

Expand Down
10 changes: 5 additions & 5 deletions build/build-modules-js/javascript/minify.es6.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
const { minify } = require('terser');
const { transform } = require('esbuild');
const { readFile, writeFile } = require('fs-extra');
const { basename } = require('path');
/**
* Minify a js file using Terser
* Minify a js file using esbuild
*
* @param file
* @returns {Promise<void>}
*/
const minifyFile = async (file) => {
const fileContent = await readFile(file, { encoding: 'utf8' });
const content = await minify(fileContent, { sourceMap: false, format: { comments: false } });
const content = await transform(fileContent, { minify: true });
await writeFile(file.replace('.js', '.min.js'), content.code, { encoding: 'utf8', mode: 0o644 });
// eslint-disable-next-line no-console
console.log(`✅ Legacy js file: ${basename(file)}: minified`);
};

/**
* Minify a chunk of js using Terser
* Minify a chunk of js using esbuild
*
* @param code
* @returns {Promise<void>}
*/
const minifyCode = async (code) => minify(code, { sourceMap: false, format: { comments: false } });
const minifyCode = async (code) => transform(code, { minify: true });

module.exports.minifyJs = minifyFile;
module.exports.minifyJsCode = minifyCode;

0 comments on commit 912bba1

Please sign in to comment.