diff --git a/.appveyor.yml b/.appveyor.yml index a0f9e6b32ef4e..d2e8e893eb24b 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -10,14 +10,10 @@ environment: matrix: - php_ver_target: 8.0 - init: - SET PATH=C:\Tools\php;%PATH% - SET COMPOSER_NO_INTERACTION=1 - SET ANSICON=121x90 (121x90) -services: - - mysql - - iis ## Install PHP and composer, and run the appropriate composer command install: @@ -45,12 +41,40 @@ install: - cd C:\projects\joomla-cms - refreshenv - composer install --no-progress --profile --ignore-platform-req=ext-sodium + +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\Codeception\_data\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 - > "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql" -u root -p"Password12!" -e "CREATE DATABASE IF NOT EXISTS test_joomla;" +# Wait till slapd has started + - ps: | + $Counter=0 + $Found=$false + While ( ! $Found -and $Counter -lt 60 ) { + $Found = ( docker logs openldap 2>&1 | Select-String -Quiet "\*\* Starting slapd \*\*" ) + Start-Sleep -Seconds 1 + $Counter++ + "$Counter Waiting for slapd" + } + if ( ! $Found ) { + Write-Error -Message "`nERROR: slapd not started (in time)!" -ErrorAction Stop + exit 1 + } test_script: - cd C:\projects\joomla-cms - libraries/vendor/bin/phpunit --testsuite Unit - libraries/vendor/bin/phpunit --testsuite Integration --configuration tests/phpunit-appveyor.xml.dist + +on_failure: + - ps: docker logs openldap 2>&1 diff --git a/.drone.yml b/.drone.yml index d6938afbf4539..6bc5e16245d6c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -5,8 +5,16 @@ name: default clone: steps: + - name: setup + image: joomlaprojects/docker-images:php8.2 + volumes: + - name: certificates + path: /certificates + commands: + - cp -v tests/Codeception/_data/certs/* /certificates/ + - name: composer - image: joomlaprojects/docker-images:php7.4 + image: joomlaprojects/docker-images:php8.2 volumes: - name: composer-cache path: /tmp/composer-cache @@ -15,16 +23,29 @@ steps: - composer install --no-progress --no-suggest - name: phpcs - image: joomlaprojects/docker-images:php7.2 + image: joomlaprojects/docker-images:php8.1 depends_on: [ composer ] commands: - echo $(date) + - ./libraries/vendor/bin/php-cs-fixer fix -vvv --dry-run --diff - ./libraries/vendor/bin/phpcs --extensions=php -p --standard=ruleset.xml . - echo $(date) + - name: phan + image: joomlaprojects/docker-images:php7.4-ast + depends_on: [ phpcs ] + failure: ignore + commands: + - ./libraries/vendor/bin/phan + - name: npm - image: node:16-alpine + image: node:16-bullseye-slim depends_on: [ phpcs ] + volumes: + - name: npm-cache + path: /tmp/npm-cache + environment: + npm_config_cache: /tmp/npm-cache commands: - npm ci --unsafe-perm @@ -159,174 +180,144 @@ steps: commands: - npm run lint:js - - name: prepare_codeception_tests + - name: prepare_system_tests depends_on: - npm image: joomlaprojects/docker-images:systemtests + volumes: + - name: cypress-cache + path: /root/.cache/Cypress commands: - - sed -i 's/tests\\/Codeception\\/_output/\\/drone\\/src\\/tests\\/Codeception\\/_output/' codeception.yml + - sed -i 's/tests\\/Codeception\\/_output/\\/drone\\/src\\/tests\\/cypress\\/output/' codeception.yml + - mv cypress.config.dist.js cypress.config.js - php libraries/vendor/bin/codecept build + - npx cypress install + - npx cypress verify - name: phpmin-api-mysql depends_on: - - prepare_codeception_tests + - prepare_system_tests image: joomlaprojects/docker-images:systemtests environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-api-run.sh "$(pwd)" mysql + - bash tests/Codeception/drone-api-run.sh "$(pwd)" mysql mysqli mysql jos_ - - name: phpmax-api-mysql + - name: phpmin-api-postgres depends_on: - - prepare_codeception_tests - image: joomlaprojects/docker-images:systemtests8.1 + - prepare_system_tests + image: joomlaprojects/docker-images:systemtests environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-api-run.sh "$(pwd)" mysqlphpmax - -# - name: phpnext-api-mysql -# depends_on: -# - phpmax-api-mysql -# image: joomlaprojects/docker-images:systemtests8.2 -# failure: ignore -# environment: -# JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 -# commands: -# - bash tests/Codeception/drone-api-run.sh "$(pwd)" mysqlphpnext + - bash tests/Codeception/drone-api-run.sh "$(pwd)" postgres pgsql postgres jos_ - - name: phpmin-api-postgres + - name: phpmax-api-mysql depends_on: - - prepare_codeception_tests - image: joomlaprojects/docker-images:systemtests + - phpmin-api-mysql + - phpmin-api-postgres + image: joomlaprojects/docker-images:systemtests8.1 environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-api-run.sh "$(pwd)" postgres + - bash tests/Codeception/drone-api-run.sh "$(pwd)" mysqlphpmax mysqli mysql phpmax_ - name: phpmax-api-postgres depends_on: - - prepare_codeception_tests + - phpmin-api-mysql + - phpmin-api-postgres image: joomlaprojects/docker-images:systemtests8.1 environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-api-run.sh "$(pwd)" postgresphpmax - -# - name: phpnext-api-postgres -# depends_on: -# - phpmin-api-postgres -# image: joomlaprojects/docker-images:systemtests8.2 -# failure: ignore -# environment: -# JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 -# commands: -# - bash tests/Codeception/drone-api-run.sh "$(pwd)" postgresphpnext + - bash tests/Codeception/drone-api-run.sh "$(pwd)" postgresphpmax pgsql postgres phpmax_ - name: phpmin-system-mysql depends_on: - phpmax-api-mysql - phpmax-api-postgres - image: joomlaprojects/docker-images:systemtests + image: joomlaprojects/docker-images:cypress + volumes: + - name: cypress-cache + path: /root/.cache/Cypress environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-system-run.sh "$(pwd)" mysql + - bash tests/cypress/drone-system-run.sh "$(pwd)" cmysql mysqli mysql - - name: phpmax-system-mysql + - name: phpmin-system-postgres depends_on: - phpmax-api-mysql - phpmax-api-postgres - image: joomlaprojects/docker-images:systemtests8.1 + image: joomlaprojects/docker-images:cypress + volumes: + - name: cypress-cache + path: /root/.cache/Cypress environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-system-run.sh "$(pwd)" mysqlphpmax + - bash tests/cypress/drone-system-run.sh "$(pwd)" cpostgres pgsql postgres -# - name: phpnext-system-mysql -# depends_on: -# - phpmax-system-mysql -# image: joomlaprojects/docker-images:systemtests8.2 -# failure: ignore -# environment: -# JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 -# commands: -# - bash tests/Codeception/drone-system-run.sh "$(pwd)" mysqlphpnext - - - name: phpmin-system-postgres + - name: phpmax-system-mysql depends_on: - - phpmax-api-mysql - - phpmax-api-postgres - image: joomlaprojects/docker-images:systemtests + - phpmin-system-mysql + - phpmin-system-postgres + image: joomlaprojects/docker-images:cypress8.1 + volumes: + - name: cypress-cache + path: /root/.cache/Cypress environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-system-run.sh "$(pwd)" postgres + - bash tests/cypress/drone-system-run.sh "$(pwd)" cmysqlmax mysqli mysql - name: phpmax-system-postgres depends_on: - - phpmax-api-mysql - - phpmax-api-postgres - image: joomlaprojects/docker-images:systemtests8.1 + - phpmin-system-mysql + - phpmin-system-postgres + image: joomlaprojects/docker-images:cypress8.1 + volumes: + - name: cypress-cache + path: /root/.cache/Cypress environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-system-run.sh "$(pwd)" postgresphpmax - -# - name: phpnext-system-postgres -# depends_on: -# - phpmax-system-postgres -# image: joomlaprojects/docker-images:systemtests8.2 -# failure: ignore -# environment: -# JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 -# commands: -# - bash tests/Codeception/drone-system-run.sh "$(pwd)" postgresphpnext + - bash tests/cypress/drone-system-run.sh "$(pwd)" cpostgresmax pgsql postgres - name: phpmin-system-mysql8 depends_on: - phpmax-system-mysql - phpmax-system-postgres - image: joomlaprojects/docker-images:systemtests + image: joomlaprojects/docker-images:cypress + volumes: + - name: cypress-cache + path: /root/.cache/Cypress environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-system-run.sh "$(pwd)" mysql8 + - bash tests/cypress/drone-system-run.sh "$(pwd)" cmysql8 mysqli mysql8 - name: phpmax-system-mysql8 depends_on: - - phpmax-system-mysql - - phpmax-system-postgres - image: joomlaprojects/docker-images:systemtests8.1 + - phpmin-system-mysql8 + image: joomlaprojects/docker-images:cypress8.1 + volumes: + - name: cypress-cache + path: /root/.cache/Cypress environment: JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 commands: - - bash tests/Codeception/drone-system-run.sh "$(pwd)" mysql8phpmax - -# - name: phpnext-system-mysql8 -# depends_on: -# - phpmax-system-mysql8 -# image: joomlaprojects/docker-images:systemtests8.2 -# failure: ignore -# environment: -# JOOMLA_INSTALLATION_DISABLE_LOCALHOST_CHECK: 1 -# commands: -# - bash tests/Codeception/drone-system-run.sh "$(pwd)" mysql8phpnext + - bash tests/cypress/drone-system-run.sh "$(pwd)" cmysql8max mysqli mysql8 - name: artifacts-system-tests - image: cschlosser/drone-ftps + image: joomlaprojects/docker-images:packager depends_on: -# - phpnext-system-mysql -# - phpnext-system-mysql8 -# - phpnext-system-postgres - phpmax-system-mysql - phpmax-system-mysql8 - phpmax-system-postgres - phpmin-system-mysql - phpmin-system-mysql8 - phpmin-system-postgres -# - phpnext-api-mysql -# - phpnext-api-postgres - phpmax-api-mysql - phpmax-api-postgres - phpmin-api-mysql @@ -336,15 +327,15 @@ steps: from_secret: ftpusername FTP_PASSWORD: from_secret: ftppassword - PLUGIN_HOSTNAME: ci.joomla.org:21 - PLUGIN_SRC_DIR: /tests/Codeception/_output/ - PLUGIN_DEST_DIR: /artifacts - PLUGIN_SECURE: false - PLUGIN_EXCLUDE: ^\.git/$ + GITHUB_TOKEN: + from_secret: github_token commands: - - export PLUGIN_DEST_DIR=$PLUGIN_DEST_DIR/$DRONE_REPO/$DRONE_BRANCH/$DRONE_PULL_REQUEST/system-tests/$DRONE_BUILD_NUMBER + - export PLUGIN_DEST_DIR=/artifacts/$DRONE_REPO/$DRONE_BRANCH/$DRONE_PULL_REQUEST/system-tests/$DRONE_BUILD_NUMBER - echo https://ci.joomla.org$PLUGIN_DEST_DIR - - /bin/upload.sh + - rclone config create artifacts ftp host ci.joomla.org user $FTP_USERNAME port 21 pass $FTP_PASSWORD + - rclone mkdir artifacts:$PLUGIN_DEST_DIR + - rclone copy tests/cypress/output/ artifacts:$PLUGIN_DEST_DIR + - 'curl -X POST "https://api.github.com/repos/$DRONE_REPO/statuses/$DRONE_COMMIT" -H "Content-Type: application/json" -H "Authorization: token $GITHUB_TOKEN" -d "{\"state\":\"failure\", \"context\": \"Artifacts from Failure\", \"description\": \"You can find artifacts from the failure of the build here:\", \"target_url\": \"https://ci.joomla.org$PLUGIN_DEST_DIR\"}" > /dev/null' when: status: - failure @@ -353,6 +344,15 @@ volumes: - name: composer-cache host: path: /tmp/composer-cache + - name: cypress-cache + host: + path: /tmp/cypress-cache + - name: npm-cache + host: + path: /tmp/npm-cache + - name: certificates + host: + path: /tmp/certificates services: - name: mysql @@ -381,6 +381,28 @@ services: POSTGRES_PASSWORD: joomla_ut POSTGRES_DB: test_joomla + - name: openldap + image: bitnami/openldap:latest + ports: + - 1389 + - 1636 + volumes: + - name: certificates + path: /certificates + environment: + LDAP_ADMIN_USERNAME: admin + LDAP_ADMIN_PASSWORD: adminpassword + LDAP_USERS: customuser + LDAP_PASSWORDS: custompassword + LDAP_ENABLE_TLS: yes + LDAP_TLS_CERT_FILE: /certificates/openldap.crt + LDAP_TLS_KEY_FILE: /certificates/openldap.key + LDAP_TLS_CA_FILE: /certificates/CA.crt + BITNAMI_DEBUG: true + LDAP_CONFIG_ADMIN_ENABLED: yes + LDAP_CONFIG_ADMIN_USERNAME: admin + LDAP_CONFIG_ADMIN_PASSWORD: configpassword + --- kind: pipeline name: package @@ -411,7 +433,7 @@ steps: path: /reference when: branch: - - 4.2-dev + - 4.3-dev --- kind: pipeline @@ -475,6 +497,6 @@ trigger: --- kind: signature -hmac: 783273e5140ae315f2403b13eb12f4773b77995a3d44a38551b55c89b9d40350 +hmac: c9d665d46d44aaa66798ce2e9bf7122e7824ba6dd5ebe4a4e7aff05e4e7c7816 ... diff --git a/.editorconfig b/.editorconfig index a7b8f5fc2a19e..dd23145c6f0a0 100644 --- a/.editorconfig +++ b/.editorconfig @@ -15,6 +15,6 @@ insert_final_newline = true indent_style = space indent_size = 4 -[*.{js,json,scss,css,vue}] +[*.{js,json,scss,css,yml,vue}] indent_style = space indent_size = 2 diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000000000..fbb91302cfb5a --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,9 @@ +# Short array syntax change https://github.com/joomla/joomla-cms/pull/39616 +10f250f418851674c2e4104b6b39b9b665496544 + +# Code style fixes from PHP CS fixer https://github.com/joomla/joomla-cms/pull/39745 +1e7527b60ec42032abe7bfb9c000bacf38f65845 + +# PSR 12 +dd91072a956a19a43798515239892edd2b49ac7b +e7f5cc182bb1cd39c7f085d529888ac4fa6fc77e diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d809bed32dbd4..06dc5c39a6460 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -25,15 +25,15 @@ libraries/src/Installer/* @rdeutz @zero-24 libraries/src/Updater/* @rdeutz @zero-24 # Automated Testing -tests/* @hackwar +tests/* @hackwar @fancyFranci tests/Codeception/* @rdeutz tests/javascript/* @rdeutz tests/Unit/* @rdeutz -.appveyor.yml @rdeutz @hackwar -.drone.yml @rdeutz @hackwar -codeception.yml @rdeutz @hackwar -phpunit.xml.dist @rdeutz @hackwar -phpunit-pgsql.xml.dist @rdeutz @hackwar +.appveyor.yml @rdeutz @hackwar @fancyFranci +.drone.yml @rdeutz @hackwar @fancyFranci +codeception.yml @rdeutz @hackwar @fancyFranci +phpunit.xml.dist @rdeutz @hackwar @fancyFranci +phpunit-pgsql.xml.dist @rdeutz @hackwar @fancyFranci # HttpHeaders Plugin plugins/system/httpheaders/* @zero-24 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 1a821a0882411..9aceb79e81cad 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -14,11 +14,12 @@ If it is a PR, include what the issue is, what the PR is addressing, testing ins Please be patient as not all items will be tested immediately (remember, all bug testing for the Joomla! CMS is done by volunteers) and be receptive to feedback about your code. #### Branches -PRs should usually be made to the `4.1-dev` branch as this contains the most recent version of the code. +PRs should usually be made to the `4.2-dev` branch as this contains the most recent version of the code. There are other branches available which serve specific purposes. | Branch | Purpose | | ------ | ------- | -| 3.10-dev | Branch for the Joomla 3.x series. The 3.10 series release will only include compatibility features for 4.x as well as bugfixes and security patches. | -| 4.1-dev | Branch for the current minor Joomla version. Commits to 3.10-dev will be applied to this branch as well. | -| 4.2-dev | Branch for the next minor Joomla version. New features go into this branch. Commits to 4.1-dev will be applied to this branch as well. | +| 3.10-dev | Branch for the Joomla 3.x series. The 3.10 series release will now only include security patches. | +| 4.2-dev | Branch for the current minor Joomla version.| +| 4.3-dev | Branch for the next minor Joomla version. New features go into this branch. Commits to 4.2-dev will be applied to this branch as well. | +| 5.0-dev | Branch for the next major Joomla version. | diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 32e34f654da80..4954021a38ac0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -16,5 +16,10 @@ Pull Request for Issue # . -### Documentation Changes Required +### Link to documentations +Please select: +- [ ] Documentation link for docs.joomla.org: +- [ ] No documentation changes for docs.joomla.org needed +- [ ] Pull Request link for manual.joomla.org: +- [ ] No documentation changes for manual.joomla.org needed diff --git a/.github/workflows/cacert-update.yml b/.github/workflows/cacert-update.yml index 8c2333053fc18..d1b74fa37fb15 100644 --- a/.github/workflows/cacert-update.yml +++ b/.github/workflows/cacert-update.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: ref: 3.10-dev @@ -33,7 +33,7 @@ jobs: run: cp "libraries/src/Http/Transport/cacert.pem" "libraries/fof/download/adapter/cacert.pem" - name: Create Pull Request - uses: peter-evans/create-pull-request@v3 + uses: peter-evans/create-pull-request@v4 id: cpr with: branch: mozilla_ca_update diff --git a/.github/workflows/create-translation-pull-request-v4.yml b/.github/workflows/create-translation-pull-request-v4.yml index f41b6a236cb8b..d149f3cb4d9fc 100644 --- a/.github/workflows/create-translation-pull-request-v4.yml +++ b/.github/workflows/create-translation-pull-request-v4.yml @@ -1,75 +1,77 @@ -name: Create translation pull request - -on: - push: - branches: [ translation ] - - workflow_dispatch: - - schedule: - # Run daily at 7:26 - - cron: '26 7 * * *' - +name: Create translation pull request + +on: + push: + branches: [ translation ] + + workflow_dispatch: + + schedule: + # Run daily at 7:26 + - cron: '27 7 * * *' + permissions: contents: read -jobs: - build: +jobs: + build: permissions: contents: write # for Git to git push - runs-on: ubuntu-latest - # Only run this action the translation-bot repository in the translation branch - if: ${{ github.repository == 'joomla-translation-bot/joomla-cms' && github.ref == 'refs/heads/translation' }} - - steps: - - uses: actions/checkout@v2 - # We need the full depth to create / update the pull request against the main repo - with: - fetch-depth: 0 - - uses: actions/setup-node@v1 - with: - node-version: 12 - - - name: Fetch latest cms changes - run: | - git config user.name Translation Bot - git config user.email release+translation-bot@joomla.org - git remote add upstream https://github.com/joomla/joomla-cms.git - git fetch upstream - git checkout --progress --force -B translation refs/remotes/origin/translation - git merge upstream/4.1-dev - - - name: Fetch and extract translations - run: | - cd .. - wget -nv "https://github.com/joomla/core-translations/archive/refs/heads/main.zip" - unzip main.zip - - - name: Syncing directories - # We use a simple copy paste syntax here if needed customization for different directories - run: | - cd .. - SYNC_VERSION="v4" - - SYNC_PATH="installation/language/" - echo ${SYNC_PATH} - rsync -i -rptgo --checksum --ignore-times --delete --exclude="*en-GB*" core-translations-main/joomla_${SYNC_VERSION}/translations/core/${SYNC_PATH} joomla-cms/${SYNC_PATH} - - - name: Update static error pages - run: | - npm ci --ignore-scripts && node build/build.js --build-pages - - - name: Create commit - run: | - git config user.name Translation Bot - git config user.email release+translation-bot@joomla.org - git add . - git commit -m "Language update" - git push --force - - - name: Create pull request - env: - GITHUB_TOKEN: ${{ secrets.API_TOKEN_GITHUB }} - run: | - gh pr list -R joomla/joomla-cms --state open --author joomla-translation-bot -S "Translation Update" | grep -v "No pull" || \ - gh pr create --title "Translation Update" --body "Automatically created pull request based on core-translation repository changes" -R joomla/joomla-cms --base 4.1-dev + runs-on: ubuntu-latest + # Only run this action the translation-bot repository in the translation branch + if: ${{ github.repository == 'joomla-translation-bot/joomla-cms' && github.ref == 'refs/heads/translation' }} + + steps: + - uses: actions/checkout@v3 + # We need the full depth to create / update the pull request against the main repo + with: + fetch-depth: 0 + - uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Fetch latest cms changes + run: | + git config user.name Translation Bot + git config user.email release+translation-bot@joomla.org + git remote add upstream https://github.com/joomla/joomla-cms.git + git fetch upstream + git checkout --progress --force -B translation refs/remotes/origin/translation + git merge upstream/4.3-dev + + - name: Fetch and extract translations + run: | + cd .. + wget -nv "https://github.com/joomla/core-translations/archive/refs/heads/main.zip" + unzip main.zip + + - name: Syncing directories + # We use a simple copy paste syntax here if needed customization for different directories + run: | + cd .. + SYNC_VERSION="v4" + + SYNC_PATH="installation/language/" + echo ${SYNC_PATH} + rsync -i -rptgo --checksum --ignore-times --delete --exclude="*en-GB*" core-translations-main/joomla_${SYNC_VERSION}/translations/core/${SYNC_PATH} joomla-cms/${SYNC_PATH} + + - name: Update static error pages + run: | + npm ci --ignore-scripts && node build/build.js --build-pages + + - name: Create commit + continue-on-error: true + run: | + git config user.name Translation Bot + git config user.email release+translation-bot@joomla.org + git add . + git commit -m "Language update" + git push --force + + - name: Create pull request + if: ${{ success() }} + env: + GITHUB_TOKEN: ${{ secrets.API_TOKEN_GITHUB }} + run: | + gh pr list -R joomla/joomla-cms --state open --author joomla-translation-bot -S "Translation Update" | grep -v "No pull" || \ + gh pr create --title "Translation Update" --body "Automatically created pull request based on core-translation repository changes" -R joomla/joomla-cms --base 4.3-dev diff --git a/.gitignore b/.gitignore index 2803e1706c181..19a68abc2bc93 100644 --- a/.gitignore +++ b/.gitignore @@ -101,3 +101,13 @@ RoboFile.ini # Media Manager /media/com_media/js/mediamanager.min.js.map /media/com_media/css/mediamanager.min.css.map + +#cypress +/tests/cypress/output/screenshots +!/tests/cypress/output/screenshots/.gitkeep +/tests/cypress/output/videos +!/tests/cypress/output/videos/.gitkeep +cypress.config.js + +# WebAuthn FIDO metadata cache +/plugins/system/webauthn/fido.jwt diff --git a/.phan/config.php b/.phan/config.php new file mode 100644 index 0000000000000..e8873f0ff8752 --- /dev/null +++ b/.phan/config.php @@ -0,0 +1,357 @@ + '7.2', + + // If enabled, missing properties will be created when + // they are first seen. If false, we'll report an + // error message if there is an attempt to write + // to a class property that wasn't explicitly + // defined. + 'allow_missing_properties' => true, + + // If enabled, null can be cast to any type and any + // type can be cast to null. Setting this to true + // will cut down on false positives. + 'null_casts_as_any_type' => true, + + // If enabled, allow null to be cast as any array-like type. + // + // This is an incremental step in migrating away from `null_casts_as_any_type`. + // If `null_casts_as_any_type` is true, this has no effect. + 'null_casts_as_array' => true, + + // If enabled, allow any array-like type to be cast to null. + // This is an incremental step in migrating away from `null_casts_as_any_type`. + // If `null_casts_as_any_type` is true, this has no effect. + 'array_casts_as_null' => true, + + // If enabled, scalars (int, float, bool, string, null) + // are treated as if they can cast to each other. + // This does not affect checks of array keys. See `scalar_array_key_cast`. + 'scalar_implicit_cast' => true, + + // If enabled, any scalar array keys (int, string) + // are treated as if they can cast to each other. + // E.g. `array` can cast to `array` and vice versa. + // Normally, a scalar type such as int could only cast to/from int and mixed. + 'scalar_array_key_cast' => true, + + // If this has entries, scalars (int, float, bool, string, null) + // are allowed to perform the casts listed. + // + // E.g. `['int' => ['float', 'string'], 'float' => ['int'], 'string' => ['int'], 'null' => ['string']]` + // allows casting null to a string, but not vice versa. + // (subset of `scalar_implicit_cast`) + 'scalar_implicit_partial' => [], + + // If enabled, Phan will warn if **any** type in a method invocation's object + // is definitely not an object, + // or if **any** type in an invoked expression is not a callable. + // Setting this to true will introduce numerous false positives + // (and reveal some bugs). + 'strict_method_checking' => false, + + // If enabled, Phan will warn if **any** type of the object expression for a property access + // does not contain that property. + 'strict_object_checking' => false, + + // If enabled, Phan will warn if **any** type in the argument's union type + // cannot be cast to a type in the parameter's expected union type. + // Setting this to true will introduce numerous false positives + // (and reveal some bugs). + 'strict_param_checking' => false, + + // If enabled, Phan will warn if **any** type in a property assignment's union type + // cannot be cast to a type in the property's declared union type. + // Setting this to true will introduce numerous false positives + // (and reveal some bugs). + 'strict_property_checking' => false, + + // If enabled, Phan will warn if **any** type in a returned value's union type + // cannot be cast to the declared return type. + // Setting this to true will introduce numerous false positives + // (and reveal some bugs). + 'strict_return_checking' => false, + + // If true, seemingly undeclared variables in the global + // scope will be ignored. + // + // This is useful for projects with complicated cross-file + // globals that you have no hope of fixing. + 'ignore_undeclared_variables_in_global_scope' => true, + + // Set this to false to emit `PhanUndeclaredFunction` issues for internal functions that Phan has signatures for, + // but aren't available in the codebase, or from Reflection. + // (may lead to false positives if an extension isn't loaded) + // + // If this is true(default), then Phan will not warn. + // + // Even when this is false, Phan will still infer return values and check parameters of internal functions + // if Phan has the signatures. + 'ignore_undeclared_functions_with_known_signatures' => true, + + // Backwards Compatibility Checking. This is slow + // and expensive, but you should consider running + // it before upgrading your version of PHP to a + // new version that has backward compatibility + // breaks. + // + // If you are migrating from PHP 5 to PHP 7, + // you should also look into using + // [php7cc (no longer maintained)](https://github.com/sstalle/php7cc) + // and [php7mar](https://github.com/Alexia/php7mar), + // which have different backwards compatibility checks. + // + // If you are still using versions of php older than 5.6, + // `PHP53CompatibilityPlugin` may be worth looking into if you are not running + // syntax checks for php 5.3 through another method such as + // `InvokePHPNativeSyntaxCheckPlugin` (see .phan/plugins/README.md). + 'backward_compatibility_checks' => false, + + // If true, check to make sure the return type declared + // in the doc-block (if any) matches the return type + // declared in the method signature. + 'check_docblock_signature_return_type_match' => true, + + // This setting maps case-insensitive strings to union types. + // + // This is useful if a project uses phpdoc that differs from the phpdoc2 standard. + // + // If the corresponding value is the empty string, + // then Phan will ignore that union type (E.g. can ignore 'the' in `@return the value`) + // + // If the corresponding value is not empty, + // then Phan will act as though it saw the corresponding UnionTypes(s) + // when the keys show up in a UnionType of `@param`, `@return`, `@var`, `@property`, etc. + // + // This matches the **entire string**, not parts of the string. + // (E.g. `@return the|null` will still look for a class with the name `the`, but `@return the` will be ignored with the below setting) + // + // (These are not aliases, this setting is ignored outside of doc comments). + // (Phan does not check if classes with these names exist) + // + // Example setting: `['unknown' => '', 'number' => 'int|float', 'char' => 'string', 'long' => 'int', 'the' => '']` + 'phpdoc_type_mapping' => [], + + // Set to true in order to attempt to detect dead + // (unreferenced) code. Keep in mind that the + // results will only be a guess given that classes, + // properties, constants and methods can be referenced + // as variables (like `$class->$property` or + // `$class->$method()`) in ways that we're unable + // to make sense of. + // + // To more aggressively detect dead code, + // you may want to set `dead_code_detection_prefer_false_negative` to `false`. + 'dead_code_detection' => false, + + // Set to true in order to attempt to detect unused variables. + // `dead_code_detection` will also enable unused variable detection. + // + // This has a few known false positives, e.g. for loops or branches. + 'unused_variable_detection' => false, + + // Set to true in order to attempt to detect redundant and impossible conditions. + // + // This has some false positives involving loops, + // variables set in branches of loops, and global variables. + 'redundant_condition_detection' => false, + + // If enabled, Phan will act as though it's certain of real return types of a subset of internal functions, + // even if those return types aren't available in reflection (real types were taken from php 7.3 or 8.0-dev, depending on target_php_version). + // + // Note that with php 7 and earlier, php would return null or false for many internal functions if the argument types or counts were incorrect. + // As a result, enabling this setting with target_php_version 8.0 may result in false positives for `--redundant-condition-detection` when codebases also support php 7.x. + 'assume_real_types_for_internal_functions' => false, + + // If true, this runs a quick version of checks that takes less + // time at the cost of not running as thorough + // of an analysis. You should consider setting this + // to true only when you wish you had more **undiagnosed** issues + // to fix in your code base. + // + // In quick-mode the scanner doesn't rescan a function + // or a method's code block every time a call is seen. + // This means that the problem here won't be detected: + // + // ```php + // false, + + // Override to hardcode existence and types of (non-builtin) globals in the global scope. + // Class names should be prefixed with `\`. + // + // (E.g. `['_FOO' => '\FooClass', 'page' => '\PageClass', 'userId' => 'int']`) + 'globals_type_map' => [], + + // The minimum severity level to report on. This can be + // set to `Issue::SEVERITY_LOW`, `Issue::SEVERITY_NORMAL` or + // `Issue::SEVERITY_CRITICAL`. Setting it to only + // critical issues is a good place to start on a big + // sloppy mature code base. + 'minimum_severity' => Issue::SEVERITY_NORMAL, + + // Add any issue types (such as `'PhanUndeclaredMethod'`) + // to this list to inhibit them from being reported. + 'suppress_issue_types' => ['PhanDeprecatedClass', 'PhanUndeclaredConstant','PhanDeprecatedFunction'], + + // A regular expression to match files to be excluded + // from parsing and analysis and will not be read at all. + // + // This is useful for excluding groups of test or example + // directories/files, unanalyzable files, or files that + // can't be removed for whatever reason. + // (e.g. `'@Test\.php$@'`, or `'@vendor/.*/(tests|Tests)/@'`) + 'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@', + + // A list of files that will be excluded from parsing and analysis + // and will not be read at all. + // + // This is useful for excluding hopelessly unanalyzable + // files that can't be removed for whatever reason. + 'exclude_file_list' => [ + 'administrator\components\com_joomlaupdate\finalisation.php' + ], + + // A directory list that defines files that will be excluded + // from static analysis, but whose class and method + // information should be included. + // + // Generally, you'll want to include the directories for + // third-party code (such as "vendor/") in this list. + // + // n.b.: If you'd like to parse but not analyze 3rd + // party code, directories containing that code + // should be added to the `directory_list` as well as + // to `exclude_analysis_directory_list`. + 'exclude_analysis_directory_list' => [ + 'libraries/vendor/', + 'libraries/php-encryption', + 'libraries/phpass' + ], + + // Enable this to enable checks of require/include statements referring to valid paths. + // The settings `include_paths` and `warn_about_relative_include_statement` affect the checks. + 'enable_include_path_checks' => false, + + // The number of processes to fork off during the analysis + // phase. + 'processes' => 1, + + // List of case-insensitive file extensions supported by Phan. + // (e.g. `['php', 'html', 'htm']`) + 'analyzed_file_extensions' => [ + 'php', + ], + + // You can put paths to stubs of internal extensions in this config option. + // If the corresponding extension is **not** loaded, then Phan will use the stubs instead. + // Phan will continue using its detailed type annotations, + // but load the constants, classes, functions, and classes (and their Reflection types) + // from these stub files (doubling as valid php files). + // Use a different extension from php to avoid accidentally loading these. + // The `tools/make_stubs` script can be used to generate your own stubs (compatible with php 7.0+ right now) + // + // (e.g. `['xdebug' => '.phan/internal_stubs/xdebug.phan_php']`) + 'autoload_internal_extension_signatures' => [ + 'redis' => '.phan/redis.phan_php', + 'memcached' => '.phan/memcached.phan_php', + 'dom' => '.phan/dom.phan_php', + ], + + // A list of plugin files to execute. + // + // Plugins which are bundled with Phan can be added here by providing their name (e.g. `'AlwaysReturnPlugin'`) + // + // Documentation about available bundled plugins can be found [here](https://github.com/phan/phan/tree/v4/.phan/plugins). + // + // Alternately, you can pass in the full path to a PHP file with the plugin's implementation (e.g. `'vendor/phan/phan/.phan/plugins/AlwaysReturnPlugin.php'`) + 'plugins' => [], + + // A list of directories that should be parsed for class and + // method information. After excluding the directories + // defined in `exclude_analysis_directory_list`, the remaining + // files will be statically analyzed for errors. + // + // Thus, both first-party and third-party code being used by + // your application should be included in this list. + 'directory_list' => [ + 'libraries', + 'libraries/vendor/joomla', + 'administrator', + 'components', + 'plugins' + ], + + // A list of individual files to include in analysis + // with a path relative to the root directory of the + // project. + 'file_list' => [], +]; diff --git a/.phan/dom.phan_php b/.phan/dom.phan_php new file mode 100644 index 0000000000000..ebb92e84dd117 --- /dev/null +++ b/.phan/dom.phan_php @@ -0,0 +1,418 @@ +in( - [ - __DIR__ . '/libraries' - ] - ) - ->files() - ->depth(0); - -// Add all the core Joomla folders and append to this list the files indexed above from /libraries -$mainFinder = PhpCsFixer\Finder::create() - ->in( - [ - __DIR__ . '/administrator', - __DIR__ . '/api', - __DIR__ . '/build', - __DIR__ . '/cache', - __DIR__ . '/cli', - __DIR__ . '/components', - __DIR__ . '/includes', - __DIR__ . '/installation', - __DIR__ . '/language', - __DIR__ . '/libraries/src', - __DIR__ . '/modules', - __DIR__ . '/plugins', - __DIR__ . '/templates', - __DIR__ . '/tests', - __DIR__ . '/layouts', - ] - ) - ->append($topFilesFinder); +// Add all the core Joomla folders +$finder = PhpCsFixer\Finder::create() + ->in( + [ + __DIR__ . '/administrator', + __DIR__ . '/api', + __DIR__ . '/build', + __DIR__ . '/cache', + __DIR__ . '/cli', + __DIR__ . '/components', + __DIR__ . '/includes', + __DIR__ . '/installation', + __DIR__ . '/language', + __DIR__ . '/libraries/src', + __DIR__ . '/modules', + __DIR__ . '/plugins', + __DIR__ . '/templates', + __DIR__ . '/tests', + ] + ) + // Ignore template files as PHP CS fixer can't handle them properly + // https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues/3702#issuecomment-396717120 + ->notPath('/tmpl/') + ->notPath('/layouts/') + ->notPath('/cassiopeia/') + ->notPath('/atum/') + // Ignore psr12 scripts because they contain invalid syntax + ->notPath('/psr12/') + ->notName('github_rebase.php'); $config = new PhpCsFixer\Config(); $config - ->setRiskyAllowed(true) - ->setIndent("\t") - ->setRules( - [ - // psr-1 - 'encoding' => true, - // psr-2 - 'elseif' => true, - 'single_blank_line_at_eof' => true, - 'no_spaces_after_function_name' => true, - 'blank_line_after_namespace' => true, - 'line_ending' => true, - 'constant_case' => ['case' => 'lower'], - 'lowercase_keywords' => true, - 'method_argument_space' => true, - 'single_import_per_statement' => true, - 'no_spaces_inside_parenthesis' => true, - 'single_line_after_imports' => true, - 'no_trailing_whitespace' => true, - // symfony - 'no_whitespace_before_comma_in_array' => true, - 'whitespace_after_comma_in_array' => true, - 'no_empty_statement' => true, - 'simplified_null_return' => true, - 'no_extra_blank_lines' => true, - 'function_typehint_space' => true, - 'include' => true, - 'no_alias_functions' => true, - 'no_trailing_comma_in_list_call' => true, - 'trailing_comma_in_multiline' => ['elements' => ['arrays']], - 'no_blank_lines_after_class_opening' => true, - 'phpdoc_trim' => true, - 'blank_line_before_statement' => ['statements' => ['return']], - 'no_trailing_comma_in_singleline_array' => true, - 'single_blank_line_before_namespace' => true, - 'cast_spaces' => true, - 'no_unused_imports' => true, - 'no_whitespace_in_blank_line' => true, - // contrib - 'concat_space' => ['spacing' => 'one'], - /** - * PHP 7+ zend_try_compile_special_func compiles certain PHP Functions to opcode which is faster - * @see https://github.com/php/php-src/blob/9dc947522186766db4a7e2d603703a2250797577/Zend/zend_compile.c#L4192 - */ - 'native_function_invocation' => ['include' => ['@compiler_optimized'], 'scope' => 'namespaced', 'strict' => true], - ] - ) - ->setFinder($mainFinder); + ->setRiskyAllowed(true) + ->setHideProgress(false) + ->setUsingCache(false) + ->setRules( + [ + // Basic ruleset is PSR 12 + '@PSR12' => true, + // Short array syntax + 'array_syntax' => ['syntax' => 'short'], + // Lists should not have a trailing comma like list($foo, $bar,) = ... + 'no_trailing_comma_in_list_call' => true, + // Arrays on multiline should have a trailing comma + 'trailing_comma_in_multiline' => ['elements' => ['arrays']], + // Align elements in multiline array and variable declarations on new lines below each other + 'binary_operator_spaces' => ['operators' => ['=>' => 'align_single_space_minimal', '=' => 'align']], + // The "No break" comment in switch statements + 'no_break_comment' => ['comment_text' => 'No break'], + ] + ) + ->setFinder($finder); return $config; diff --git a/README.md b/README.md index 7b4653ca4238d..709e9e65905fd 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,13 @@ Build Status --------------------- | Drone-CI | AppVeyor | PHP | Node | npm | | ------------- | ------------- | ------------- | ------------- | ------------- | -| [![Build Status](https://ci.joomla.org/api/badges/joomla/joomla-cms/status.svg?branch=4.2-dev)](https://ci.joomla.org/joomla/joomla-cms) | [![Build status](https://ci.appveyor.com/api/projects/status/ru6sxal8jmfckvjc/branch/4.2-dev?svg=true)](https://ci.appveyor.com/project/release-joomla/joomla-cms) | [![PHP](https://img.shields.io/badge/PHP-V7.2.5-green)](https://www.php.net/) | [![node-lts](https://img.shields.io/badge/Node-V16.0-green)](https://nodejs.org/en/) | [![npm](https://img.shields.io/badge/npm-v8.6.0-green)](https://nodejs.org/en/) | +| [![Build Status](https://ci.joomla.org/api/badges/joomla/joomla-cms/status.svg?branch=4.3-dev)](https://ci.joomla.org/joomla/joomla-cms) | [![Build status](https://ci.appveyor.com/api/projects/status/ru6sxal8jmfckvjc/branch/4.3-dev?svg=true)](https://ci.appveyor.com/project/release-joomla/joomla-cms) | [![PHP](https://img.shields.io/badge/PHP-V7.2.5-green)](https://www.php.net/) | [![node-lts](https://img.shields.io/badge/Node-V16.0-green)](https://nodejs.org/en/) | [![npm](https://img.shields.io/badge/npm-v8.6.0-green)](https://nodejs.org/en/) | Overview --------------------- * This is the source of Joomla! 4.x. * Joomla's [Official website](https://www.joomla.org). -* Joomla! 4.2 [version history](https://docs.joomla.org/Special:MyLanguage/Joomla_4.2_version_history). +* Joomla! 4.3 [version history](https://docs.joomla.org/Special:MyLanguage/Joomla_4.3_version_history). * Detailed changes are in the [changelog](https://github.com/joomla/joomla-cms/commits/4.2-dev). What is Joomla? @@ -45,9 +45,9 @@ git clone https://github.com/joomla/joomla-cms.git ```bash cd joomla-cms ``` -- Go to the 4.2-dev branch: +- Go to the 4.3-dev branch: ```bash -git checkout 4.2-dev +git checkout 4.3-dev ``` - Install all the needed composer packages: ```bash diff --git a/README.txt b/README.txt index d36d3afafc030..0eaac7a3084e5 100644 --- a/README.txt +++ b/README.txt @@ -3,7 +3,7 @@ Joomla! CMS™ 1- Overview * This is a Joomla! 4.x installation/upgrade package. * Joomla! Official site: https://www.joomla.org - * Joomla! 4.2 version history - https://docs.joomla.org/Special:MyLanguage/Joomla_4.2_version_history + * Joomla! 4.3 version history - https://docs.joomla.org/Special:MyLanguage/Joomla_4.3_version_history * Detailed changes in the Changelog: https://github.com/joomla/joomla-cms/commits/4.2-dev 2- What is Joomla? diff --git a/administrator/components/com_actionlogs/config.xml b/administrator/components/com_actionlogs/config.xml index c58768db899d5..0a8b4f83bb8f1 100644 --- a/administrator/components/com_actionlogs/config.xml +++ b/administrator/components/com_actionlogs/config.xml @@ -1,4 +1,4 @@ - + diff --git a/administrator/components/com_actionlogs/forms/filter_actionlogs.xml b/administrator/components/com_actionlogs/forms/filter_actionlogs.xml index 4fd63f239443b..6b696e26c96aa 100644 --- a/administrator/components/com_actionlogs/forms/filter_actionlogs.xml +++ b/administrator/components/com_actionlogs/forms/filter_actionlogs.xml @@ -13,7 +13,7 @@ name="extension" type="extension" label="COM_ACTIONLOGS_EXTENSION" - onchange="this.form.submit()" + class="js-select-submit-on-change" > @@ -21,7 +21,7 @@ name="dateRange" type="logsdaterange" label="COM_ACTIONLOGS_DATE" - onchange="this.form.submit();" + class="js-select-submit-on-change" > @@ -29,7 +29,7 @@ name="user" type="logcreator" label="COM_ACTIONLOGS_NAME" - onchange="this.form.submit();" + class="js-select-submit-on-change" > @@ -39,7 +39,7 @@ name="fullordering" type="list" label="JGLOBAL_SORT_BY" - onchange="this.form.submit();" + class="js-select-submit-on-change" default="a.id DESC" validate="options" > @@ -61,8 +61,7 @@ name="limit" type="limitbox" label="JGLOBAL_LIST_LIMIT" - class="input-mini" - onchange="this.form.submit();" + class="input-mini js-select-submit-on-change" default="25" /> diff --git a/administrator/components/com_actionlogs/services/provider.php b/administrator/components/com_actionlogs/services/provider.php index 3d81708bd9fe0..6f6c54d9c4bc4 100644 --- a/administrator/components/com_actionlogs/services/provider.php +++ b/administrator/components/com_actionlogs/services/provider.php @@ -24,8 +24,7 @@ * * @since 4.0.0 */ -return new class implements ServiceProviderInterface -{ +return new class () implements ServiceProviderInterface { /** * Registers the service provider with a DI container. * diff --git a/administrator/components/com_actionlogs/src/Controller/ActionlogsController.php b/administrator/components/com_actionlogs/src/Controller/ActionlogsController.php index 0c28230097e8b..1d38d94cce466 100644 --- a/administrator/components/com_actionlogs/src/Controller/ActionlogsController.php +++ b/administrator/components/com_actionlogs/src/Controller/ActionlogsController.php @@ -25,6 +25,10 @@ use Joomla\Component\Actionlogs\Administrator\Model\ActionlogsModel; use Joomla\Utilities\ArrayHelper; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Actionlogs list controller class. * @@ -69,7 +73,7 @@ public function exportLogs() $task = $this->getTask(); - $pks = array(); + $pks = []; if ($task == 'exportSelectedLogs') { // Get selected logs @@ -112,7 +116,7 @@ public function exportLogs() } fclose($output); - $this->app->triggerEvent('onAfterLogExport', array()); + $this->app->triggerEvent('onAfterLogExport', []); $this->app->close(); } else { $this->setMessage(Text::_('COM_ACTIONLOGS_NO_LOGS_TO_EXPORT')); diff --git a/administrator/components/com_actionlogs/src/Controller/DisplayController.php b/administrator/components/com_actionlogs/src/Controller/DisplayController.php index d1c05eabe6901..3ff880b1ebeed 100644 --- a/administrator/components/com_actionlogs/src/Controller/DisplayController.php +++ b/administrator/components/com_actionlogs/src/Controller/DisplayController.php @@ -12,6 +12,10 @@ use Joomla\CMS\MVC\Controller\BaseController; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Plugins master display controller. * diff --git a/administrator/components/com_actionlogs/src/Dispatcher/Dispatcher.php b/administrator/components/com_actionlogs/src/Dispatcher/Dispatcher.php new file mode 100644 index 0000000000000..778d74d4b96fa --- /dev/null +++ b/administrator/components/com_actionlogs/src/Dispatcher/Dispatcher.php @@ -0,0 +1,43 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace Joomla\Component\Actionlogs\Administrator\Dispatcher; + +use Joomla\CMS\Access\Exception\NotAllowed; +use Joomla\CMS\Dispatcher\ComponentDispatcher; + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * ComponentDispatcher class for com_admin + * + * @since 4.2.7 + */ +class Dispatcher extends ComponentDispatcher +{ + /** + * com_admin does not require check permission, so we override checkAccess method and have it empty + * + * @return void + * + * @since 4.2.7 + */ + protected function checkAccess() + { + $user = $this->app->getIdentity(); + + // Access check + if (!$user->authorise('core.admin')) { + throw new NotAllowed($this->app->getLanguage()->_('JERROR_ALERTNOAUTHOR'), 403); + } + } +} diff --git a/administrator/components/com_actionlogs/src/Field/ExtensionField.php b/administrator/components/com_actionlogs/src/Field/ExtensionField.php index f73fd5350a61a..49ec4a0a6d123 100644 --- a/administrator/components/com_actionlogs/src/Field/ExtensionField.php +++ b/administrator/components/com_actionlogs/src/Field/ExtensionField.php @@ -15,6 +15,10 @@ use Joomla\CMS\Language\Text; use Joomla\Component\Actionlogs\Administrator\Helper\ActionlogsHelper; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Field to load a list of all extensions that have logged actions * @@ -48,7 +52,7 @@ public function getOptions() $db->setQuery($query); $context = $db->loadColumn(); - $options = array(); + $options = []; if (\count($context) > 0) { foreach ($context as $item) { diff --git a/administrator/components/com_actionlogs/src/Field/LogcreatorField.php b/administrator/components/com_actionlogs/src/Field/LogcreatorField.php index 3a85d96270cb1..66f3b92124d3c 100644 --- a/administrator/components/com_actionlogs/src/Field/LogcreatorField.php +++ b/administrator/components/com_actionlogs/src/Field/LogcreatorField.php @@ -12,6 +12,10 @@ use Joomla\CMS\Form\Field\ListField; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Field to load a list of all users that have logged actions * diff --git a/administrator/components/com_actionlogs/src/Field/LogsdaterangeField.php b/administrator/components/com_actionlogs/src/Field/LogsdaterangeField.php index 9a4891fbc5d78..f211355b965d1 100644 --- a/administrator/components/com_actionlogs/src/Field/LogsdaterangeField.php +++ b/administrator/components/com_actionlogs/src/Field/LogsdaterangeField.php @@ -14,6 +14,10 @@ use Joomla\CMS\Form\Field\PredefinedlistField; use Joomla\CMS\Form\Form; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Field to show a list of range dates to sort with * @@ -35,14 +39,14 @@ class LogsdaterangeField extends PredefinedlistField * @var array * @since 3.9.0 */ - protected $predefinedOptions = array( + protected $predefinedOptions = [ 'today' => 'COM_ACTIONLOGS_OPTION_RANGE_TODAY', 'past_week' => 'COM_ACTIONLOGS_OPTION_RANGE_PAST_WEEK', 'past_1month' => 'COM_ACTIONLOGS_OPTION_RANGE_PAST_1MONTH', 'past_3month' => 'COM_ACTIONLOGS_OPTION_RANGE_PAST_3MONTH', 'past_6month' => 'COM_ACTIONLOGS_OPTION_RANGE_PAST_6MONTH', 'past_year' => 'COM_ACTIONLOGS_OPTION_RANGE_PAST_YEAR', - ); + ]; /** * Method to instantiate the form field object. diff --git a/administrator/components/com_actionlogs/src/Field/LogtypeField.php b/administrator/components/com_actionlogs/src/Field/LogtypeField.php index e63b6b93d90cc..d55071386192f 100644 --- a/administrator/components/com_actionlogs/src/Field/LogtypeField.php +++ b/administrator/components/com_actionlogs/src/Field/LogtypeField.php @@ -16,6 +16,10 @@ use Joomla\CMS\Language\Text; use Joomla\Component\Actionlogs\Administrator\Helper\ActionlogsHelper; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Field to load a list of all users that have logged actions * @@ -51,7 +55,7 @@ public function getOptions() foreach ($extensions as $extension) { ActionlogsHelper::loadTranslationFiles($extension); - $extensionName = Text::_($extension); + $extensionName = Text::_($extension); $options[ApplicationHelper::stringURLSafe($extensionName) . '_' . $extension] = HTMLHelper::_('select.option', $extension, $extensionName); } diff --git a/administrator/components/com_actionlogs/src/Field/PlugininfoField.php b/administrator/components/com_actionlogs/src/Field/PlugininfoField.php index cd281af35425c..b1c3ac45f3a81 100644 --- a/administrator/components/com_actionlogs/src/Field/PlugininfoField.php +++ b/administrator/components/com_actionlogs/src/Field/PlugininfoField.php @@ -15,6 +15,10 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Information field. * @@ -53,7 +57,7 @@ protected function getInput() 'link', Route::_('index.php?option=com_plugins&task=plugin.edit&extension_id=' . $result), Text::_('PLG_SYSTEM_ACTIONLOGS_JOOMLA_ACTIONLOG_DISABLED'), - array('class' => 'alert-link') + ['class' => 'alert-link'] ); return '
' diff --git a/administrator/components/com_actionlogs/src/Helper/ActionlogsHelper.php b/administrator/components/com_actionlogs/src/Helper/ActionlogsHelper.php index 26bb763c612bf..339f7ded1eab2 100644 --- a/administrator/components/com_actionlogs/src/Helper/ActionlogsHelper.php +++ b/administrator/components/com_actionlogs/src/Helper/ActionlogsHelper.php @@ -19,6 +19,10 @@ use Joomla\CMS\Router\Route; use Joomla\String\StringHelper; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Actionlogs component helper. * @@ -33,7 +37,7 @@ class ActionlogsHelper * * @since 3.9.7 */ - private static $characters = array('=', '+', '-', '@'); + private static $characters = ['=', '+', '-', '@']; /** * Method to convert logs objects array to an iterable type for use with a CSV export @@ -68,14 +72,14 @@ public static function getCsvData($data): Generator static::loadTranslationFiles($extension); - yield array( + yield [ 'id' => $log->id, 'message' => self::escapeCsvFormula(strip_tags(static::getHumanReadableLogMessage($log, false))), 'extension' => self::escapeCsvFormula(Text::_($extension)), 'date' => (new Date($log->log_date, new \DateTimeZone('UTC')))->format('Y-m-d H:i:s T'), 'name' => self::escapeCsvFormula($log->name), - 'ip_address' => self::escapeCsvFormula($log->ip_address === 'COM_ACTIONLOGS_DISABLED' ? $disabledText : $log->ip_address) - ); + 'ip_address' => self::escapeCsvFormula($log->ip_address === 'COM_ACTIONLOGS_DISABLED' ? $disabledText : $log->ip_address), + ]; } } @@ -90,8 +94,8 @@ public static function getCsvData($data): Generator */ public static function loadTranslationFiles($extension) { - static $cache = array(); - $extension = strtolower($extension); + static $cache = []; + $extension = strtolower($extension); if (isset($cache[$extension])) { return; @@ -151,7 +155,10 @@ public static function loadTranslationFiles($extension) * * @since 3.9.0 * - * @deprecated 5.0 Use the action log config model instead + * @deprecated 4.3 will be removed in 6.0 + * Use the action log config model instead + * Example: Factory::getApplication()->bootComponent('actionlogs')->getMVCFactory() + * ->createModel('ActionlogConfig', 'Administrator')->getLogContentTypeParams($context); */ public static function getLogContentTypeParams($context) { @@ -171,7 +178,7 @@ public static function getLogContentTypeParams($context) */ public static function getHumanReadableLogMessage($log, $generateLinks = true) { - static $links = array(); + static $links = []; $message = Text::_($log->message_language_key); $messageData = json_decode($log->message, true); @@ -196,7 +203,7 @@ public static function getHumanReadableLogMessage($log, $generateLinks = true) foreach ($messageData as $key => $value) { // Escape any markup in the values to prevent XSS attacks - $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); + $value = $value !== null ? htmlspecialchars($value, ENT_QUOTES, 'UTF-8') : ''; // Convert relative url to absolute url so that it is clickable in action logs notification email if ($generateLinks && StringHelper::strpos($value, 'index.php?') === 0) { @@ -238,7 +245,7 @@ public static function getContentTypeLink($component, $contentType, $id, $urlVar \JLoader::register($cName, $file); - if (class_exists($cName) && \is_callable(array($cName, 'getContentTypeLink'))) { + if (class_exists($cName) && \is_callable([$cName, 'getContentTypeLink'])) { return $cName::getContentTypeLink($contentType, $id, $object); } } @@ -269,31 +276,31 @@ public static function loadActionLogPluginsLanguage() $query = $db->getQuery(true) ->select( $db->quoteName( - array( + [ 'folder', 'element', 'params', - 'extension_id' - ), - array( + 'extension_id', + ], + [ 'type', 'name', 'params', - 'id' - ) + 'id', + ] ) ) - ->from('#__extensions') - ->where('type = ' . $db->quote('plugin')) - ->where('folder = ' . $db->quote('actionlog')) - ->where('state IN (0,1)') - ->order('ordering'); + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('type') . ' = ' . $db->quote('plugin')) + ->where($db->quoteName('folder') . ' = ' . $db->quote('actionlog')) + ->whereIn($db->quoteName('state'), [0, 1]) + ->order($db->quoteName('ordering')); $db->setQuery($query); try { $rows = $db->loadObjectList(); } catch (\RuntimeException $e) { - $rows = array(); + $rows = []; } if (empty($rows)) { @@ -312,7 +319,7 @@ public static function loadActionLogPluginsLanguage() } $lang->load($extension, JPATH_ADMINISTRATOR) - || $lang->load($extension, JPATH_PLUGINS . '/' . $type . '/' . $name); + || $lang->load($extension, JPATH_PLUGINS . '/' . $type . '/' . $name); } // Load plg_system_actionlogs too diff --git a/administrator/components/com_actionlogs/src/Model/ActionlogConfigModel.php b/administrator/components/com_actionlogs/src/Model/ActionlogConfigModel.php index 95b76768fc792..1fc8fbd166782 100644 --- a/administrator/components/com_actionlogs/src/Model/ActionlogConfigModel.php +++ b/administrator/components/com_actionlogs/src/Model/ActionlogConfigModel.php @@ -13,6 +13,10 @@ use Joomla\CMS\MVC\Model\BaseDatabaseModel; use stdClass; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Model to interact with the action log configuration. * diff --git a/administrator/components/com_actionlogs/src/Model/ActionlogModel.php b/administrator/components/com_actionlogs/src/Model/ActionlogModel.php index 7bf5524ef8161..fbf7acd1f4ac2 100644 --- a/administrator/components/com_actionlogs/src/Model/ActionlogModel.php +++ b/administrator/components/com_actionlogs/src/Model/ActionlogModel.php @@ -21,6 +21,10 @@ use Joomla\Utilities\IpHelper; use PHPMailer\PHPMailer\Exception as phpMailerException; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Methods supporting a list of Actionlog records. * @@ -58,7 +62,7 @@ public function addLog($messages, $messageLanguageKey, $context, $userId = null) $ip = 'COM_ACTIONLOGS_DISABLED'; } - $loggedMessages = array(); + $loggedMessages = []; foreach ($messages as $message) { $logMessage = new \stdClass(); @@ -108,7 +112,7 @@ protected function sendNotificationEmails($messages, $username, $context) $query = $db->getQuery(true); $query - ->select($db->quoteName(array('u.email', 'l.extensions'))) + ->select($db->quoteName(['u.email', 'l.extensions'])) ->from($db->quoteName('#__users', 'u')) ->where($db->quoteName('u.block') . ' = 0') ->join( @@ -121,7 +125,7 @@ protected function sendNotificationEmails($messages, $username, $context) $users = $db->loadObjectList(); - $recipients = array(); + $recipients = []; foreach ($users as $user) { $extensions = json_decode($user->extensions, true); @@ -141,16 +145,16 @@ protected function sendNotificationEmails($messages, $username, $context) $temp = []; foreach ($messages as $message) { - $m = []; + $m = []; $m['extension'] = Text::_($extension); $m['message'] = ActionlogsHelper::getHumanReadableLogMessage($message); $m['date'] = HTMLHelper::_('date', $message->log_date, 'Y-m-d H:i:s T', 'UTC'); $m['username'] = $username; - $temp[] = $m; + $temp[] = $m; } $templateData = [ - 'messages' => $temp + 'messages' => $temp, ]; $mailer = new MailTemplate('com_actionlogs.notification', $app->getLanguage()->getTag()); diff --git a/administrator/components/com_actionlogs/src/Model/ActionlogsModel.php b/administrator/components/com_actionlogs/src/Model/ActionlogsModel.php index d108c1cc0e72c..fbdea7913fd13 100644 --- a/administrator/components/com_actionlogs/src/Model/ActionlogsModel.php +++ b/administrator/components/com_actionlogs/src/Model/ActionlogsModel.php @@ -24,6 +24,10 @@ use Joomla\Utilities\ArrayHelper; use RuntimeException; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Methods supporting a list of article records. * @@ -40,10 +44,10 @@ class ActionlogsModel extends ListModel * * @throws Exception */ - public function __construct($config = array()) + public function __construct($config = []) { if (empty($config['filter_fields'])) { - $config['filter_fields'] = array( + $config['filter_fields'] = [ 'a.id', 'id', 'a.extension', 'extension', 'a.user_id', 'user', @@ -51,7 +55,7 @@ public function __construct($config = array()) 'a.log_date', 'log_date', 'a.ip_address', 'ip_address', 'dateRange', - ); + ]; } parent::__construct($config); @@ -213,7 +217,7 @@ private function buildDateRange($range) break; } - return array('dNow' => $dNow, 'dStart' => $dStart); + return ['dNow' => $dNow, 'dStart' => $dStart]; } /** @@ -343,7 +347,7 @@ public function delete(&$pks) return false; } - Factory::getApplication()->triggerEvent('onAfterLogPurge', array()); + Factory::getApplication()->triggerEvent('onAfterLogPurge', []); return true; } @@ -363,7 +367,7 @@ public function purge() return false; } - Factory::getApplication()->triggerEvent('onAfterLogPurge', array()); + Factory::getApplication()->triggerEvent('onAfterLogPurge', []); return true; } @@ -378,7 +382,7 @@ public function purge() * * @since 3.9.0 */ - public function getFilterForm($data = array(), $loadData = true) + public function getFilterForm($data = [], $loadData = true) { $form = parent::getFilterForm($data, $loadData); $params = ComponentHelper::getParams('com_actionlogs'); @@ -388,8 +392,8 @@ public function getFilterForm($data = array(), $loadData = true) if ($form && $ipLogging) { /* @var \Joomla\CMS\Form\Field\ListField $field */ $field = $form->getField('fullordering', 'list'); - $field->addOption(Text::_('COM_ACTIONLOGS_IP_ADDRESS_ASC'), array('value' => 'a.ip_address ASC')); - $field->addOption(Text::_('COM_ACTIONLOGS_IP_ADDRESS_DESC'), array('value' => 'a.ip_address DESC')); + $field->addOption(Text::_('COM_ACTIONLOGS_IP_ADDRESS_ASC'), ['value' => 'a.ip_address ASC']); + $field->addOption(Text::_('COM_ACTIONLOGS_IP_ADDRESS_DESC'), ['value' => 'a.ip_address DESC']); } return $form; diff --git a/administrator/components/com_actionlogs/src/Plugin/ActionLogPlugin.php b/administrator/components/com_actionlogs/src/Plugin/ActionLogPlugin.php index ca2b4cc6e984d..87ad75ea15785 100644 --- a/administrator/components/com_actionlogs/src/Plugin/ActionLogPlugin.php +++ b/administrator/components/com_actionlogs/src/Plugin/ActionLogPlugin.php @@ -13,6 +13,10 @@ use Joomla\CMS\Factory; use Joomla\CMS\Plugin\CMSPlugin; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Abstract Action Log Plugin * diff --git a/administrator/components/com_actionlogs/src/View/Actionlogs/HtmlView.php b/administrator/components/com_actionlogs/src/View/Actionlogs/HtmlView.php index 3dcdb21575cc7..31aa54c168ddb 100644 --- a/administrator/components/com_actionlogs/src/View/Actionlogs/HtmlView.php +++ b/administrator/components/com_actionlogs/src/View/Actionlogs/HtmlView.php @@ -1,4 +1,5 @@ getModel(); - $this->items = $model->getItems(); - $this->state = $model->getState(); - $this->pagination = $model->getPagination(); - $this->filterForm = $model->getFilterForm(); - $this->activeFilters = $model->getActiveFilters(); - $params = ComponentHelper::getParams('com_actionlogs'); - $this->showIpColumn = (bool) $params->get('ip_logging', 0); - $this->dateRelative = (bool) $params->get('date_relative', 1); - - if (\count($errors = $model->getErrors())) - { - throw new GenericDataException(implode("\n", $errors), 500); - } - - $this->addToolbar(); - - // Load all actionlog plugins language files - ActionlogsHelper::loadActionLogPluginsLanguage(); - - parent::display($tpl); - } - - /** - * Add the page title and toolbar. - * - * @return void - * - * @since 3.9.0 - */ - protected function addToolbar() - { - ToolbarHelper::title(Text::_('COM_ACTIONLOGS_MANAGER_USERLOGS'), 'icon-list-2'); - - ToolbarHelper::custom('actionlogs.exportSelectedLogs', 'download', '', 'COM_ACTIONLOGS_EXPORT_CSV', true); - ToolbarHelper::custom('actionlogs.exportLogs', 'download', '', 'COM_ACTIONLOGS_EXPORT_ALL_CSV', false); - ToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE', 'actionlogs.delete'); - $bar = Toolbar::getInstance('toolbar'); - $bar->appendButton('Confirm', 'COM_ACTIONLOGS_PURGE_CONFIRM', 'delete', 'COM_ACTIONLOGS_TOOLBAR_PURGE', 'actionlogs.purge', false); - ToolbarHelper::preferences('com_actionlogs'); - ToolbarHelper::help('User_Actions_Log'); - } + /** + * An array of items. + * + * @var array + * @since 3.9.0 + */ + protected $items; + + /** + * The model state + * + * @var array + * @since 3.9.0 + */ + protected $state; + + /** + * The pagination object + * + * @var Pagination + * @since 3.9.0 + */ + protected $pagination; + + /** + * Form object for search filters + * + * @var Form + * @since 3.9.0 + */ + public $filterForm; + + /** + * The active search filters + * + * @var array + * @since 3.9.0 + */ + public $activeFilters; + + /** + * Setting if the IP column should be shown + * + * @var boolean + * @since 3.9.0 + */ + protected $showIpColumn = false; + + /** + * Setting if the date should be displayed relative to the current date. + * + * @var boolean + * @since 4.1.0 + */ + protected $dateRelative = false; + + /** + * Method to display the view. + * + * @param string $tpl A template file to load. [optional] + * + * @return void + * + * @since 3.9.0 + * + * @throws Exception + */ + public function display($tpl = null) + { + /** @var ActionlogsModel $model */ + $model = $this->getModel(); + $this->items = $model->getItems(); + $this->state = $model->getState(); + $this->pagination = $model->getPagination(); + $this->filterForm = $model->getFilterForm(); + $this->activeFilters = $model->getActiveFilters(); + $params = ComponentHelper::getParams('com_actionlogs'); + $this->showIpColumn = (bool) $params->get('ip_logging', 0); + $this->dateRelative = (bool) $params->get('date_relative', 1); + + if (\count($errors = $model->getErrors())) { + throw new GenericDataException(implode("\n", $errors), 500); + } + + $this->addToolbar(); + + // Load all actionlog plugins language files + ActionlogsHelper::loadActionLogPluginsLanguage(); + + parent::display($tpl); + } + + /** + * Add the page title and toolbar. + * + * @return void + * + * @since 3.9.0 + */ + protected function addToolbar() + { + ToolbarHelper::title(Text::_('COM_ACTIONLOGS_MANAGER_USERLOGS'), 'icon-list-2'); + $toolbar = Toolbar::getInstance(); + + $toolbar->standardButton('download', 'COM_ACTIONLOGS_EXPORT_CSV', 'actionlogs.exportSelectedLogs') + ->icon('icon-download') + ->listCheck(true); + + $toolbar->standardButton('download', 'COM_ACTIONLOGS_EXPORT_ALL_CSV', 'actionlogs.exportLogs') + ->icon('icon-download') + ->listCheck(false); + + $toolbar->delete('actionlogs.delete') + ->message('JGLOBAL_CONFIRM_DELETE'); + + $toolbar->confirmButton('delete', 'COM_ACTIONLOGS_TOOLBAR_PURGE', 'actionlogs.purge') + ->message('COM_ACTIONLOGS_PURGE_CONFIRM') + ->listCheck(false); + + $toolbar->preferences('com_actionlogs'); + $toolbar->help('User_Actions_Log'); + } } diff --git a/administrator/components/com_actionlogs/tmpl/actionlogs/default.php b/administrator/components/com_actionlogs/tmpl/actionlogs/default.php index aad8da2a54a64..d0e868c38dc3d 100644 --- a/administrator/components/com_actionlogs/tmpl/actionlogs/default.php +++ b/administrator/components/com_actionlogs/tmpl/actionlogs/default.php @@ -1,4 +1,5 @@ document->getWebAssetManager(); $wa->useScript('keepalive') - ->useScript('table.columns') - ->useScript('multiselect') - ->useScript('com_actionlogs.admin-actionlogs'); + ->useScript('table.columns') + ->useScript('multiselect') + ->useScript('com_actionlogs.admin-actionlogs'); ?>
-
- - $this)); ?> - items)) : ?> -
- - -
- - - - - - - - - - - showIpColumn) : ?> - - - - - - - items as $i => $item) : - $extension = strtok($item->extension, '.'); - ActionlogsHelper::loadTranslationFiles($extension); ?> - - - - - - - showIpColumn) : ?> - - - - - - -
- , - , - -
- - - - - - - - - - - - - -
- id); ?> - - - - escape(Text::_($extension)); ?> - - dateRelative) : ?> - log_date); ?> -
- - log_date, Text::_('DATE_FORMAT_LC6')); ?> - dateRelative) : ?> -
- -
- escape($item->name); ?> - - escape($item->ip_address)); ?> - - id; ?> -
+
+ + $this]); ?> + items)) : ?> +
+ + +
+ + + + + + + + + + + showIpColumn) : ?> + + + + + + + items as $i => $item) : + $extension = strtok($item->extension, '.'); + ActionlogsHelper::loadTranslationFiles($extension); ?> + + + + + + + showIpColumn) : ?> + + + + + + +
+ , + , + +
+ + + + + + + + + + + + + +
+ id); ?> + + + + escape(Text::_($extension)); ?> + + dateRelative) : ?> + log_date); ?> +
+ + log_date, Text::_('DATE_FORMAT_LC6')); ?> + dateRelative) : ?> +
+ +
+ escape($item->name); ?> + + escape($item->ip_address)); ?> + + id; ?> +
- - pagination->getListFooter(); ?> + + pagination->getListFooter(); ?> - - - - -
+ + + + +
- - - + + +
diff --git a/administrator/components/com_actionlogs/tmpl/actionlogs/default.xml b/administrator/components/com_actionlogs/tmpl/actionlogs/default.xml index e4ff2b8024255..8181ba9332b00 100644 --- a/administrator/components/com_actionlogs/tmpl/actionlogs/default.xml +++ b/administrator/components/com_actionlogs/tmpl/actionlogs/default.xml @@ -1,4 +1,4 @@ - + diff --git a/administrator/components/com_admin/admin.xml b/administrator/components/com_admin/admin.xml index edddf167c2c73..79004f030505f 100644 --- a/administrator/components/com_admin/admin.xml +++ b/administrator/components/com_admin/admin.xml @@ -1,4 +1,4 @@ - + com_admin Joomla! Project diff --git a/administrator/components/com_admin/postinstall/addnosniff.php b/administrator/components/com_admin/postinstall/addnosniff.php index 620d898cedcf1..95d2f5ca1c6c3 100644 --- a/administrator/components/com_admin/postinstall/addnosniff.php +++ b/administrator/components/com_admin/postinstall/addnosniff.php @@ -11,7 +11,9 @@ * in the default .htaccess and web.config files. */ - +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects /** * Notifies users of the add the nosniff headers by applying the changes from the default .htaccess or web.config file diff --git a/administrator/components/com_admin/postinstall/behindproxy.php b/administrator/components/com_admin/postinstall/behindproxy.php index e559a75fab7e2..c7acbc0756dfc 100644 --- a/administrator/components/com_admin/postinstall/behindproxy.php +++ b/administrator/components/com_admin/postinstall/behindproxy.php @@ -15,6 +15,10 @@ use Joomla\Registry\Registry; use Joomla\Utilities\ArrayHelper; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Notifies users of the new Behind Load Balancer option in Global Config, if we detect they might be behind a proxy * @@ -52,7 +56,7 @@ function admin_postinstall_behindproxy_condition() function behindproxy_postinstall_action() { $prev = ArrayHelper::fromObject(new JConfig()); - $data = array_merge($prev, array('behind_loadbalancer' => '1')); + $data = array_merge($prev, ['behind_loadbalancer' => '1']); $config = new Registry($data); @@ -67,7 +71,7 @@ function behindproxy_postinstall_action() } // Attempt to write the configuration file as a PHP class named JConfig. - $configuration = $config->toString('PHP', array('class' => 'JConfig', 'closingtag' => false)); + $configuration = $config->toString('PHP', ['class' => 'JConfig', 'closingtag' => false]); if (!File::write($file, $configuration)) { Factory::getApplication()->enqueueMessage(Text::_('COM_CONFIG_ERROR_WRITE_FAILED'), 'error'); diff --git a/administrator/components/com_admin/postinstall/htaccesssetce.php b/administrator/components/com_admin/postinstall/htaccesssetce.php new file mode 100644 index 0000000000000..b0e698bca870a --- /dev/null +++ b/administrator/components/com_admin/postinstall/htaccesssetce.php @@ -0,0 +1,30 @@ + + * @license GNU General Public License version 2 or later; see LICENSE.txt + * + * This file contains post-installation message handling for notifying users of a change + * in the default .htaccess file regarding setting the Content-Encoding header. + */ + +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + +/** + * Notifies users of a change in the default .htaccess file regarding setting the Content-Encoding header + * + * This check returns true regardless of condition. + * + * @return boolean + * + * @since 4.2.9 + */ +function admin_postinstall_htaccesssetce_condition() +{ + return true; +} diff --git a/administrator/components/com_admin/postinstall/htaccesssvg.php b/administrator/components/com_admin/postinstall/htaccesssvg.php index bfe292da5ab4b..73b2c3758b681 100644 --- a/administrator/components/com_admin/postinstall/htaccesssvg.php +++ b/administrator/components/com_admin/postinstall/htaccesssvg.php @@ -11,7 +11,9 @@ * in the default .htaccess file regarding hardening against XSS in SVG's */ - +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects /** * Notifies users of a change in the default .htaccess file regarding hardening against XSS in SVG's diff --git a/administrator/components/com_admin/postinstall/languageaccess340.php b/administrator/components/com_admin/postinstall/languageaccess340.php index 51cd45d529bd6..32ec165e056c0 100644 --- a/administrator/components/com_admin/postinstall/languageaccess340.php +++ b/administrator/components/com_admin/postinstall/languageaccess340.php @@ -13,6 +13,10 @@ use Joomla\CMS\Factory; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Checks if the installation is affected by the issue with content languages access in 3.4.0 * diff --git a/administrator/components/com_admin/postinstall/statscollection.php b/administrator/components/com_admin/postinstall/statscollection.php index ead154f4548cd..d0a8dbaec7c35 100644 --- a/administrator/components/com_admin/postinstall/statscollection.php +++ b/administrator/components/com_admin/postinstall/statscollection.php @@ -10,7 +10,9 @@ * This file contains post-installation message handling for the checking minimum PHP version support */ - +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects /** * Alerts the user we are collecting anonymous data as of Joomla 3.5.0. diff --git a/administrator/components/com_admin/postinstall/textfilter3919.php b/administrator/components/com_admin/postinstall/textfilter3919.php index 81fb2cf7a08b3..f4911dc538b8d 100644 --- a/administrator/components/com_admin/postinstall/textfilter3919.php +++ b/administrator/components/com_admin/postinstall/textfilter3919.php @@ -11,7 +11,9 @@ * in the default textfilter settings */ - +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects /** * Notifies users the changes from the default textfilter. diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index 206a6ec7d56c5..ce4e0c0c977af 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -21,6 +21,10 @@ use Joomla\Component\Fields\Administrator\Model\FieldModel; use Joomla\Database\ParameterType; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Script file of Joomla CMS * @@ -81,7 +85,7 @@ public function update($installer) $options['format'] = '{DATE}\t{TIME}\t{LEVEL}\t{CODE}\t{MESSAGE}'; $options['text_file'] = 'joomla_update.php'; - Log::addLogger($options, Log::INFO, array('Update', 'databasequery', 'jerror')); + Log::addLogger($options, Log::INFO, ['Update', 'databasequery', 'jerror']); try { Log::add(Text::_('COM_JOOMLAUPDATE_UPDATE_LOG_DELETE_FILES'), Log::INFO, 'Update'); @@ -235,146 +239,154 @@ protected function uninstallRepeatableFieldsPlugin() // Ensure the FieldsHelper class is loaded for the Repeatable fields plugin we're about to remove \JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); - try { - $db->transactionStart(); + // Get the FieldsModelField, we need it in a sec + $fieldModel = $app->bootComponent('com_fields')->getMVCFactory()->createModel('Field', 'Administrator', ['ignore_request' => true]); + /** @var FieldModel $fieldModel */ - // Get the FieldsModelField, we need it in a sec - $fieldModel = $app->bootComponent('com_fields')->getMVCFactory()->createModel('Field', 'Administrator', ['ignore_request' => true]); - /** @var FieldModel $fieldModel */ + // Now get a list of all `repeatable` custom field instances + $db->setQuery( + $db->getQuery(true) + ->select('*') + ->from('#__fields') + ->where($db->quoteName('type') . ' = ' . $db->quote('repeatable')) + ); - // Now get a list of all `repeatable` custom field instances - $db->setQuery( - $db->getQuery(true) - ->select('*') - ->from('#__fields') - ->where($db->quoteName('type') . ' = ' . $db->quote('repeatable')) - ); + // Execute the query and iterate over the `repeatable` instances + foreach ($db->loadObjectList() as $row) { + // Skip broken rows - just a security measure, should not happen + if (!isset($row->fieldparams) || !($oldFieldparams = json_decode($row->fieldparams)) || !is_object($oldFieldparams)) { + continue; + } - // Execute the query and iterate over the `repeatable` instances - foreach ($db->loadObjectList() as $row) { - // Skip broken rows - just a security measure, should not happen - if (!isset($row->fieldparams) || !($oldFieldparams = json_decode($row->fieldparams)) || !is_object($oldFieldparams)) { - continue; - } + // First get this field's values for later data migration, so if this fails it happens before saving new subfields + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__fields_values')) + ->where($db->quoteName('field_id') . ' = ' . $row->id); + $db->setQuery($query); + $rowFieldValues = $db->loadObjectList(); + + /** + * We basically want to transform this `repeatable` type into a `subfields` type. While $oldFieldparams + * holds the `fieldparams` of the `repeatable` type, $newFieldparams shall hold the `fieldparams` + * of the `subfields` type. + */ + $newFieldparams = [ + 'repeat' => '1', + 'options' => [], + ]; - /** - * We basically want to transform this `repeatable` type into a `subfields` type. While $oldFieldparams - * holds the `fieldparams` of the `repeatable` type, $newFieldparams shall hold the `fieldparams` - * of the `subfields` type. - */ - $newFieldparams = [ - 'repeat' => '1', - 'options' => [], - ]; - - /** - * This array is used to store the mapping between the name of form fields from Repeatable field - * with ID of the child-fields. It will then be used to migrate data later - */ - $mapping = []; - - /** - * Store name of media fields which we need to convert data from old format (string) to new - * format (json) during the migration - */ - $mediaFields = []; - - // If this repeatable fields actually had child-fields (normally this is always the case) - if (isset($oldFieldparams->fields) && is_object($oldFieldparams->fields)) { - // Small counter for the child-fields (aka sub fields) - $newFieldCount = 0; - - // Iterate over the sub fields - foreach (get_object_vars($oldFieldparams->fields) as $oldField) { - // Used for field name collision prevention - $fieldname_prefix = ''; - $fieldname_suffix = 0; - - // Try to save the new sub field in a loop because of field name collisions - while (true) { - /** - * We basically want to create a completely new custom fields instance for every sub field - * of the `repeatable` instance. This is what we use $data for, we create a new custom field - * for each of the sub fields of the `repeatable` instance. - */ - $data = [ - 'context' => $row->context, - 'group_id' => $row->group_id, - 'title' => $oldField->fieldname, - 'name' => ( - $fieldname_prefix - . $oldField->fieldname - . ($fieldname_suffix > 0 ? ('_' . $fieldname_suffix) : '') - ), - 'label' => $oldField->fieldname, - 'default_value' => $row->default_value, - 'type' => $oldField->fieldtype, - 'description' => $row->description, - 'state' => '1', - 'params' => $row->params, - 'language' => '*', - 'assigned_cat_ids' => [-1], - 'only_use_in_subform' => 1, - ]; - - // `number` is not a valid custom field type, so use `text` instead. - if ($data['type'] == 'number') { - $data['type'] = 'text'; - } + /** + * This array is used to store the mapping between the name of form fields from Repeatable field + * with ID of the child-fields. It will then be used to migrate data later + */ + $mapping = []; + + /** + * Store name of media fields which we need to convert data from old format (string) to new + * format (json) during the migration + */ + $mediaFields = []; + + // If this repeatable fields actually had child-fields (normally this is always the case) + if (isset($oldFieldparams->fields) && is_object($oldFieldparams->fields)) { + // Small counter for the child-fields (aka sub fields) + $newFieldCount = 0; + + // Iterate over the sub fields + foreach (get_object_vars($oldFieldparams->fields) as $oldField) { + // Used for field name collision prevention + $fieldname_prefix = ''; + $fieldname_suffix = 0; + + // Try to save the new sub field in a loop because of field name collisions + while (true) { + /** + * We basically want to create a completely new custom fields instance for every sub field + * of the `repeatable` instance. This is what we use $data for, we create a new custom field + * for each of the sub fields of the `repeatable` instance. + */ + $data = [ + 'context' => $row->context, + 'group_id' => $row->group_id, + 'title' => $oldField->fieldname, + 'name' => ( + $fieldname_prefix + . $oldField->fieldname + . ($fieldname_suffix > 0 ? ('_' . $fieldname_suffix) : '') + ), + 'label' => $oldField->fieldname, + 'default_value' => $row->default_value, + 'type' => $oldField->fieldtype, + 'description' => $row->description, + 'state' => '1', + 'params' => $row->params, + 'language' => '*', + 'assigned_cat_ids' => [-1], + 'only_use_in_subform' => 1, + ]; - if ($data['type'] == 'media') { - $mediaFields[] = $oldField->fieldname; - } + // `number` is not a valid custom field type, so use `text` instead. + if ($data['type'] == 'number') { + $data['type'] = 'text'; + } + + if ($data['type'] == 'media') { + $mediaFields[] = $oldField->fieldname; + } - // Reset the state because else \Joomla\CMS\MVC\Model\AdminModel will take an already - // existing value (e.g. from previous save) and do an UPDATE instead of INSERT. - $fieldModel->setState('field.id', 0); - - // If an error occurred when trying to save this. - if (!$fieldModel->save($data)) { - // If the error is, that the name collided, increase the collision prevention - $error = $fieldModel->getError(); - - if ($error == 'COM_FIELDS_ERROR_UNIQUE_NAME') { - // If this is the first time this error occurs, set only the prefix - if ($fieldname_prefix == '') { - $fieldname_prefix = ($row->name . '_'); - } else { - // Else increase the suffix - $fieldname_suffix++; - } - - // And start again with the while loop. - continue 1; + // Reset the state because else \Joomla\CMS\MVC\Model\AdminModel will take an already + // existing value (e.g. from previous save) and do an UPDATE instead of INSERT. + $fieldModel->setState('field.id', 0); + + // If an error occurred when trying to save this. + if (!$fieldModel->save($data)) { + // If the error is, that the name collided, increase the collision prevention + $error = $fieldModel->getError(); + + if ($error == 'COM_FIELDS_ERROR_UNIQUE_NAME') { + // If this is the first time this error occurs, set only the prefix + if ($fieldname_prefix == '') { + $fieldname_prefix = ($row->name . '_'); + } else { + // Else increase the suffix + $fieldname_suffix++; } - // Else bail out with the error. Something is totally wrong. - throw new \Exception($error); + // And start again with the while loop. + continue 1; } - // Break out of the while loop, saving was successful. - break 1; + // Else bail out with the error. Something is totally wrong. + throw new \Exception($error); } - // Get the newly created id - $subfield_id = $fieldModel->getState('field.id'); + // Break out of the while loop, saving was successful. + break 1; + } - // Really check that it is valid - if (!is_numeric($subfield_id) || $subfield_id < 1) { - throw new \Exception('Something went wrong.'); - } + // Get the newly created id + $subfield_id = $fieldModel->getState('field.id'); - // And tell our new `subfields` field about his child - $newFieldparams['options'][('option' . $newFieldCount)] = [ - 'customfield' => $subfield_id, - 'render_values' => '1', - ]; + // Really check that it is valid + if (!is_numeric($subfield_id) || $subfield_id < 1) { + throw new \Exception('Something went wrong.'); + } - $newFieldCount++; + // And tell our new `subfields` field about his child + $newFieldparams['options'][('option' . $newFieldCount)] = [ + 'customfield' => $subfield_id, + 'render_values' => '1', + ]; - $mapping[$oldField->fieldname] = 'field' . $subfield_id; - } + $newFieldCount++; + + $mapping[$oldField->fieldname] = 'field' . $subfield_id; } + } + + try { + $db->transactionStart(); // Write back the changed stuff to the database $db->setQuery( @@ -385,14 +397,8 @@ protected function uninstallRepeatableFieldsPlugin() ->where($db->quoteName('id') . ' = ' . $db->quote($row->id)) )->execute(); - // Migrate data for this field - $query = $db->getQuery(true) - ->select('*') - ->from($db->quoteName('#__fields_values')) - ->where($db->quoteName('field_id') . ' = ' . $row->id); - $db->setQuery($query); - - foreach ($db->loadObjectList() as $rowFieldValue) { + // Migrate field values for this field + foreach ($rowFieldValues as $rowFieldValue) { // Do not do the version if no data is entered for the custom field this item if (!$rowFieldValue->value) { continue; @@ -440,11 +446,20 @@ protected function uninstallRepeatableFieldsPlugin() ->update($db->quoteName('#__fields_values')) ->set($db->quoteName('value') . ' = ' . $db->quote(json_encode($newFieldValue))) ->where($db->quoteName('field_id') . ' = ' . $rowFieldValue->field_id) - ->where($db->quoteName('item_id') . ' =' . $rowFieldValue->item_id); + ->where($db->quoteName('item_id') . ' = ' . $db->quote($rowFieldValue->item_id)); $db->setQuery($query) ->execute(); } + + $db->transactionCommit(); + } catch (\Exception $e) { + $db->transactionRollback(); + throw $e; } + } + + try { + $db->transactionStart(); // Now, unprotect the plugin so we can uninstall it $db->setQuery( @@ -524,7 +539,7 @@ protected function updateManifestCaches() // If we have the search package around, it may not have a manifest cache entry after upgrades from 3.x, so add it to the list if (File::exists(JPATH_ROOT . '/administrator/manifests/packages/pkg_search.xml')) { - $extensions[] = array('package', 'pkg_search', '', 0); + $extensions[] = ['package', 'pkg_search', '', 0]; } // Attempt to refresh manifest caches @@ -584,8 +599,8 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false) 'files_checked' => [], ]; - $files = array( - // From 3.10 to 4.1 + $files = [ + // From 3.10 to 4.3 '/administrator/components/com_actionlogs/actionlogs.php', '/administrator/components/com_actionlogs/controller.php', '/administrator/components/com_actionlogs/controllers/actionlogs.php', @@ -6435,10 +6450,106 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false) '/plugins/system/webauthn/webauthn.php', '/plugins/task/checkfiles/checkfiles.php', '/plugins/task/demotasks/demotasks.php', - ); + // From 4.2.0-rc1 to 4.2.0 + '/administrator/language/en-GB/plg_fields_menuitem.ini', + '/administrator/language/en-GB/plg_fields_menuitem.sys.ini', + '/plugins/fields/menuitem/menuitem.php', + '/plugins/fields/menuitem/menuitem.xml', + '/plugins/fields/menuitem/tmpl/menuitem.php', + // From 4.2.0 to 4.2.1 + '/media/vendor/hotkeys.js/js/hotkeys.js', + '/media/vendor/hotkeys.js/js/hotkeys.min.js', + '/media/vendor/hotkeys.js/js/hotkeys.min.js.gz', + '/media/vendor/hotkeys.js/LICENSE', + // From 4.2.1 to 4.2.2 + '/administrator/cache/fido.jwt', + // From 4.2.6 to 4.2.7 + '/libraries/vendor/maximebf/debugbar/src/DebugBar/DataFormatter/VarDumper/SeekingData.php', + // From 4.2.8 to 4.2.9 + '/administrator/components/com_scheduler/tmpl/select/modal.php', + // From 4.2.x to 4.3.0-alpha1 + '/libraries/vendor/paragonie/sodium_compat/autoload-fast.php', + '/libraries/vendor/paragonie/sodium_compat/autoload-pedantic.php', + '/libraries/vendor/paragonie/sodium_compat/autoload-phpunit.php', + '/libraries/vendor/paragonie/sodium_compat/dist/Makefile', + '/libraries/vendor/paragonie/sodium_compat/dist/box.json', + '/libraries/vendor/paragonie/sodium_compat/psalm-above-3.xml', + '/libraries/vendor/paragonie/sodium_compat/psalm-below-3.xml', + '/libraries/vendor/paragonie/sodium_compat/src/Core/Base64/Common.php', + '/media/com_menus/css/admin-item-edit_modules.css', + '/media/com_menus/css/admin-item-edit_modules.min.css', + '/media/com_menus/css/admin-item-edit_modules.min.css.gz', + '/media/templates/administrator/atum/scss/vendor/bootstrap/_bootstrap-rtl.scss', + '/media/templates/site/cassiopeia/scss/vendor/bootstrap/_bootstrap-rtl.scss', + '/plugins/content/confirmconsent/confirmconsent.php', + '/plugins/content/contact/contact.php', + '/plugins/extension/finder/finder.php', + '/plugins/extension/joomla/joomla.php', + '/plugins/extension/namespacemap/namespacemap.php', + '/plugins/quickicon/downloadkey/downloadkey.php', + '/plugins/quickicon/extensionupdate/extensionupdate.php', + '/plugins/quickicon/overridecheck/overridecheck.php', + '/plugins/quickicon/phpversioncheck/phpversioncheck.php', + '/plugins/quickicon/privacycheck/privacycheck.php', + // From 4.3.0-alpha1 to 4.3.0-alpha2 + '/plugins/content/emailcloak/emailcloak.php', + '/plugins/content/fields/fields.php', + // From 4.3.0-alpha2 to 4.3.0-alpha3 + '/cypress.config.js', + '/media/templates/administrator/atum/scss/_root.scss', + '/media/templates/administrator/atum/scss/vendor/_bootstrap.scss', + '/modules/mod_articles_popular/mod_articles_popular.php', + '/plugins/authentication/cookie/cookie.php', + '/plugins/authentication/joomla/joomla.php', + '/plugins/authentication/ldap/ldap.php', + '/plugins/editors-xtd/article/article.php', + '/plugins/editors-xtd/contact/contact.php', + '/plugins/editors-xtd/fields/fields.php', + '/plugins/editors-xtd/image/image.php', + '/plugins/editors-xtd/menu/menu.php', + '/plugins/editors-xtd/module/module.php', + '/plugins/editors-xtd/readmore/readmore.php', + '/plugins/editors/tinymce/tinymce.php', + // From 4.3.0-alpha3 to 4.3.0-beta1 + '/plugins/editors/codemirror/codemirror.php', + '/plugins/editors/none/none.php', + '/plugins/fields/calendar/calendar.php', + '/plugins/fields/checkboxes/checkboxes.php', + '/plugins/fields/color/color.php', + '/plugins/fields/editor/editor.php', + '/plugins/fields/imagelist/imagelist.php', + '/plugins/fields/integer/integer.php', + '/plugins/fields/list/list.php', + '/plugins/fields/media/media.php', + '/plugins/fields/radio/radio.php', + '/plugins/fields/sql/sql.php', + '/plugins/fields/subform/subform.php', + '/plugins/fields/text/text.php', + '/plugins/fields/textarea/textarea.php', + '/plugins/fields/url/url.php', + '/plugins/fields/user/user.php', + '/plugins/fields/usergrouplist/usergrouplist.php', + // From 4.3.0-beta2 to 4.3.0-beta3 + '/cypress.config.dist.js', + '/plugins/captcha/recaptcha/recaptcha.php', + '/plugins/captcha/recaptcha_invisible/recaptcha_invisible.php', + '/plugins/filesystem/local/local.php', + '/plugins/finder/categories/categories.php', + '/plugins/finder/contacts/contacts.php', + '/plugins/finder/content/content.php', + '/plugins/finder/newsfeeds/newsfeeds.php', + '/plugins/finder/tags/tags.php', + // From 4.3.0-beta3 to 4.3.0-beta4 + '/layouts/joomla/content/categories_default_items.php', + // From 4.3.0-beta4 to 4.3.0-rc1 + '/administrator/components/com_guidedtours/src/Helper/GuidedtoursHelper.php', + '/libraries/vendor/voku/portable-ascii/build/docs/base.md', + '/libraries/vendor/voku/portable-ascii/build/generate_docs.php', + '/libraries/vendor/voku/portable-ascii/build/generate_max_key_length.php', + ]; - $folders = array( - // From 3.10 to 4.1 + $folders = [ + // From 3.10 to 4.3 '/templates/system/images', '/templates/system/html', '/templates/protostar/less', @@ -7802,9 +7913,22 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false) // From 4.2.0-beta2 to 4.2.0-beta3 '/plugins/system/webauthn/src/Helper', '/plugins/system/webauthn/src/Exception', - ); + // From 4.2.0-rc1 to 4.2.0 + '/plugins/fields/menuitem/tmpl', + '/plugins/fields/menuitem', + // From 4.2.0 to 4.2.1 + '/media/vendor/hotkeys.js/js', + '/media/vendor/hotkeys.js', + '/libraries/vendor/symfony/string/Resources/bin', + // From 4.2.x to 4.3.0-alpha1 + '/libraries/vendor/paragonie/sodium_compat/dist', + // From 4.3.0-beta4 to 4.3.0-rc1 + '/libraries/vendor/voku/portable-ascii/build/docs', + '/libraries/vendor/voku/portable-ascii/build', + '/administrator/components/com_guidedtours/src/Helper', + ]; - $status['files_checked'] = $files; + $status['files_checked'] = $files; $status['folders_checked'] = $folders; foreach ($files as $file) { @@ -7875,9 +7999,9 @@ public function deleteUnexistingFiles($dryRun = false, $suppressOutput = false) public function updateAssets($installer) { // List all components added since 4.0 - $newComponents = array( + $newComponents = [ // Components to be added here - ); + ]; foreach ($newComponents as $component) { /** @var \Joomla\CMS\Table\Asset $asset */ @@ -8269,7 +8393,7 @@ private function contactItems(Table $tableItem): array 'client_id' => 1, 'publish_up' => null, 'publish_down' => null, - ] + ], ]; return $menuItems; @@ -8428,7 +8552,7 @@ private function finderItems(Table $tableItem): array 'client_id' => 1, 'publish_up' => null, 'publish_down' => null, - ] + ], ]; return $menuItems; @@ -8461,7 +8585,7 @@ private function updateContentTypes(): void ]; // Get table definitions. - $db = Factory::getDbo(); + $db = Factory::getDbo(); $query = $db->getQuery(true) ->select( [ @@ -8527,13 +8651,13 @@ private function updateContentTypes(): void */ protected function fixFilenameCasing() { - $files = array( + $files = [ // 3.10 changes '/libraries/src/Filesystem/Support/Stringcontroller.php' => '/libraries/src/Filesystem/Support/StringController.php', - '/libraries/src/Form/Rule/SubFormRule.php' => '/libraries/src/Form/Rule/SubformRule.php', + '/libraries/src/Form/Rule/SubFormRule.php' => '/libraries/src/Form/Rule/SubformRule.php', // 4.0.0 '/media/vendor/skipto/js/skipTo.js' => '/media/vendor/skipto/js/skipto.js', - ); + ]; foreach ($files as $old => $expected) { $oldRealpath = realpath(JPATH_ROOT . $old); @@ -8586,14 +8710,14 @@ protected function fixFilenameCasing() protected function moveRemainingTemplateFiles() { $folders = [ - '/administrator/templates/atum/css' => '/media/templates/administrator/atum/css', + '/administrator/templates/atum/css' => '/media/templates/administrator/atum/css', '/administrator/templates/atum/images' => '/media/templates/administrator/atum/images', - '/administrator/templates/atum/js' => '/media/templates/administrator/atum/js', - '/administrator/templates/atum/scss' => '/media/templates/administrator/atum/scss', - '/templates/cassiopeia/css' => '/media/templates/site/cassiopeia/css', - '/templates/cassiopeia/images' => '/media/templates/site/cassiopeia/images', - '/templates/cassiopeia/js' => '/media/templates/site/cassiopeia/js', - '/templates/cassiopeia/scss' => '/media/templates/site/cassiopeia/scss', + '/administrator/templates/atum/js' => '/media/templates/administrator/atum/js', + '/administrator/templates/atum/scss' => '/media/templates/administrator/atum/scss', + '/templates/cassiopeia/css' => '/media/templates/site/cassiopeia/css', + '/templates/cassiopeia/images' => '/media/templates/site/cassiopeia/images', + '/templates/cassiopeia/js' => '/media/templates/site/cassiopeia/js', + '/templates/cassiopeia/scss' => '/media/templates/site/cassiopeia/scss', ]; foreach ($folders as $oldFolder => $newFolder) { diff --git a/administrator/components/com_admin/services/provider.php b/administrator/components/com_admin/services/provider.php index d17a3d0cc5faf..33f2e97838907 100644 --- a/administrator/components/com_admin/services/provider.php +++ b/administrator/components/com_admin/services/provider.php @@ -25,8 +25,7 @@ * * @since 4.0.0 */ -return new class implements ServiceProviderInterface -{ +return new class () implements ServiceProviderInterface { /** * Registers the service provider with a DI container. * diff --git a/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-12-20.sql b/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-12-20.sql index 7b0022e9b039c..e81009febc9bc 100644 --- a/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-12-20.sql +++ b/administrator/components/com_admin/sql/updates/mysql/4.0.0-2020-12-20.sql @@ -12,8 +12,8 @@ INSERT IGNORE INTO `#__mail_templates` (`template_id`, `language`, `subject`, `b ('com_users.registration.user.admin_activation_w_pw', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_WITH_ADMIN_ACTIVATION_BODY', '', '', '{"tags":["name","sitename","activate","siteurl","username","password_clear"]}'), ('com_users.registration.user.self_activation', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY_NOPW', '', '', '{"tags":["name","sitename","activate","siteurl","username"]}'), ('com_users.registration.user.self_activation_w_pw', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY', '', '', '{"tags":["name","sitename","activate","siteurl","username","password_clear"]}'), -('com_users.registration.user.registration_mail', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_BODY_NOPW', '', '', '{"tags":["name","sitename","activate","siteurl","username"]}'), -('com_users.registration.user.registration_mail_w_pw', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_BODY', '', '', '{"tags":["name","sitename","activate","siteurl","username","password_clear"]}'), +('com_users.registration.user.registration_mail', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_BODY_NOPW', '', '', '{"tags":["name","sitename","siteurl","username"]}'), +('com_users.registration.user.registration_mail_w_pw', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_BODY', '', '', '{"tags":["name","sitename","siteurl","username","password_clear"]}'), ('com_users.registration.admin.new_notification', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_NOTIFICATION_TO_ADMIN_BODY', '', '', '{"tags":["name","sitename","siteurl","username"]}'), ('com_users.registration.user.admin_activated', '', 'COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_SUBJECT', 'COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_BODY', '', '', '{"tags":["name","sitename","siteurl","username"]}'), ('com_users.registration.admin.verification_request', '', 'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_SUBJECT', 'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY', '', '', '{"tags":["name","sitename","email","username","activate"]}'), diff --git a/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-07-07.sql b/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-07-07.sql index 11f3ead36a4e4..9833260ff0734 100644 --- a/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-07-07.sql +++ b/administrator/components/com_admin/sql/updates/mysql/4.2.0-2022-07-07.sql @@ -1,2 +1,4 @@ -INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES -(0, 'plg_fields_menuitem', 'plugin', 'menuitem', 'fields', 0, 1, 1, 0, 1, '', '', '', 0, 0); +-- The following statement added with Joonmla version 4.2.0 RC 1 had to be removed with version 4.2.0 (stable). +-- See https://github.com/joomla/joomla-cms/pull/38244 +-- INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES +-- (0, 'plg_fields_menuitem', 'plugin', 'menuitem', 'fields', 0, 1, 1, 0, 1, '', '', '', 0, 0); diff --git a/administrator/components/com_admin/sql/updates/mysql/4.2.1-2022-08-23.sql b/administrator/components/com_admin/sql/updates/mysql/4.2.1-2022-08-23.sql new file mode 100644 index 0000000000000..a86d5f959039a --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.2.1-2022-08-23.sql @@ -0,0 +1,3 @@ +-- Revert https://github.com/joomla/joomla-cms/pull/38244 +-- See also file 4.2.0-2022-07-07.sql +DELETE FROM `#__extensions` WHERE `name` = 'plg_fields_menuitem' AND `type` = 'plugin' AND `element` = 'menuitem' AND `folder` = 'fields' AND `client_id` = 0; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.2.3-2022-09-07.sql b/administrator/components/com_admin/sql/updates/mysql/4.2.3-2022-09-07.sql new file mode 100644 index 0000000000000..dd92e8986d4e3 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.2.3-2022-09-07.sql @@ -0,0 +1,2 @@ +-- Remove the record of any template overrides where the template has already been uninstalled +DELETE FROM `#__template_overrides` WHERE `template` NOT IN (SELECT `name` FROM `#__extensions` WHERE `type`='template'); diff --git a/administrator/components/com_admin/sql/updates/mysql/4.2.7-2022-12-29.sql b/administrator/components/com_admin/sql/updates/mysql/4.2.7-2022-12-29.sql new file mode 100644 index 0000000000000..5df3574fd8871 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.2.7-2022-12-29.sql @@ -0,0 +1,7 @@ +UPDATE `#__mail_templates` + SET `params` = '{"tags":["name","sitename","siteurl","username"]}' + WHERE `template_id` = 'com_users.registration.user.registration_mail' AND `params` = '{"tags":["name","sitename","activate","siteurl","username"]}'; + +UPDATE `#__mail_templates` + SET `params` = '{"tags":["name","sitename","siteurl","username","password_clear"]}' + WHERE `template_id` = 'com_users.registration.user.registration_mail_w_pw' AND `params` = '{"tags":["name","sitename","activate","siteurl","username","password_clear"]}'; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.2.9-2023-03-07.sql b/administrator/components/com_admin/sql/updates/mysql/4.2.9-2023-03-07.sql new file mode 100644 index 0000000000000..f2db7db839203 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.2.9-2023-03-07.sql @@ -0,0 +1,5 @@ +-- +-- Add post-installation message about setting the Content-Encoding header in .htaccess +-- +INSERT IGNORE 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`) +SELECT `extension_id`, 'COM_ADMIN_POSTINSTALL_MSG_HTACCESS_SETCE_TITLE', 'COM_ADMIN_POSTINSTALL_MSG_HTACCESS_SETCE_DESCRIPTION', '', 'com_admin', 1, 'message', '', '', 'admin://components/com_admin/postinstall/htaccesssetce.php', 'admin_postinstall_htaccesssetce_condition', '4.2.9', 1 FROM `#__extensions` WHERE `name` = 'files_joomla'; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2022-09-23.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2022-09-23.sql new file mode 100644 index 0000000000000..ba06a58e0d46a --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2022-09-23.sql @@ -0,0 +1 @@ +-- The SQL statement had to be removed, see https://github.com/joomla/joomla-cms/pull/40535 diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2022-11-06.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2022-11-06.sql new file mode 100644 index 0000000000000..5558b8ff0cda7 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2022-11-06.sql @@ -0,0 +1,2 @@ +-- Remove dummy entries for #__ucm_content rows in the #__assets table +DELETE FROM `#__assets` WHERE `name` LIKE '#__ucm_content.%'; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-01-30.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-01-30.sql new file mode 100644 index 0000000000000..ac7ab1b99a8c5 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-01-30.sql @@ -0,0 +1,36 @@ +UPDATE `#__extensions` + SET `params` = REPLACE(`params`, '"negotiate_tls":1', '"encryption":"tls"') + WHERE `name` = 'plg_authentication_ldap' + AND `type` = 'plugin' + AND `element` = 'ldap' + AND `folder` = 'authentication' + AND `client_id` = 0 + AND `params` LIKE '{%"negotiate_tls":1%}'; + +UPDATE `#__extensions` + SET `params` = REPLACE(`params`, '"negotiate_tls":0', '"encryption":"none"') + WHERE `name` = 'plg_authentication_ldap' + AND `type` = 'plugin' + AND `element` = 'ldap' + AND `folder` = 'authentication' + AND `client_id` = 0 + AND `params` LIKE '{%"negotiate_tls":0%}'; + +UPDATE `#__extensions` + SET `params` = REPLACE(`params`, '"encryption":"none"', '"encryption":"ssl"') + WHERE `name` = 'plg_authentication_ldap' + AND `type` = 'plugin' + AND `element` = 'ldap' + AND `folder` = 'authentication' + AND `client_id` = 0 + AND `params` LIKE '{%"host":"ldaps:\\\\/\\\\/%}'; + +UPDATE `#__extensions` + SET `params` = REPLACE(`params`, '"host":"ldaps:\\/\\/', '"host":"') + WHERE `name` = 'plg_authentication_ldap' + AND `type` = 'plugin' + AND `element` = 'ldap' + AND `folder` = 'authentication' + AND `client_id` = 0 + AND `params` LIKE '{%"host":"ldaps:\\\\/\\\\/%}'; + diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-02-15.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-02-15.sql new file mode 100644 index 0000000000000..30c3b382a557c --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-02-15.sql @@ -0,0 +1,214 @@ +-- +-- Table structure for table `#__guidedtours` +-- + +CREATE TABLE IF NOT EXISTS `#__guidedtours` ( + `id` int NOT NULL AUTO_INCREMENT, + `title` varchar(255) DEFAULT '' NOT NULL, + `description` text NOT NULL, + `ordering` int NOT NULL DEFAULT 0, + `extensions` text NOT NULL, + `url` varchar(255) NOT NULL, + `created` datetime NOT NULL, + `created_by` int NOT NULL DEFAULT 0, + `modified` datetime NOT NULL, + `modified_by` int NOT NULL DEFAULT 0, + `checked_out_time` datetime, + `checked_out` int unsigned, + `published` tinyint NOT NULL DEFAULT 0, + `language` varchar(7) NOT NULL, + `note` varchar(255) NOT NULL DEFAULT '', + `access` int unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `idx_access` (`access`), + KEY `idx_state` (`published`), + KEY `idx_language` (`language`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci; + +-- +-- Dumping data for table `#__guidedtours` +-- + +INSERT IGNORE INTO `#__guidedtours` (`id`, `title`, `description`, `ordering`, `extensions`, `url`, `created`, `created_by`, `modified`, `modified_by`, `checked_out_time`, `checked_out`, `published`, `language`, `access`) VALUES + (1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_TITLE', 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_DESCRIPTION', 1, '["com_guidedtours"]', 'administrator/index.php?option=com_guidedtours&view=tours', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_TITLE', 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_DESCRIPTION', 2, '["com_guidedtours"]', 'administrator/index.php?option=com_guidedtours&view=tours', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_TITLE', 'COM_GUIDEDTOURS_TOUR_ARTICLES_DESCRIPTION', 3, '["*"]', 'administrator/index.php?option=com_content&view=articles', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_TITLE', 'COM_GUIDEDTOURS_TOUR_CATEGORIES_DESCRIPTION', 4, '["*"]', 'administrator/index.php?option=com_categories&view=categories&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (5, 'COM_GUIDEDTOURS_TOUR_MENUS_TITLE', 'COM_GUIDEDTOURS_TOUR_MENUS_DESCRIPTION', 5, '["*"]', 'administrator/index.php?option=com_menus&view=menus', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (6, 'COM_GUIDEDTOURS_TOUR_TAGS_TITLE', 'COM_GUIDEDTOURS_TOUR_TAGS_DESCRIPTION', 6, '["*"]', 'administrator/index.php?option=com_tags&view=tags', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (7, 'COM_GUIDEDTOURS_TOUR_BANNERS_TITLE', 'COM_GUIDEDTOURS_TOUR_BANNERS_DESCRIPTION', 7, '["*"]', 'administrator/index.php?option=com_banners&view=banners', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_TITLE', 'COM_GUIDEDTOURS_TOUR_CONTACTS_DESCRIPTION', 8, '["*"]', 'administrator/index.php?option=com_contact&view=contacts', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_TITLE', 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_DESCRIPTION', 9, '["*"]', 'administrator/index.php?option=com_newsfeeds&view=newsfeeds', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_TITLE', 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_DESCRIPTION', 10, '["*"]', 'administrator/index.php?option=com_finder&view=filters', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1), + (11, 'COM_GUIDEDTOURS_TOUR_USERS_TITLE', 'COM_GUIDEDTOURS_TOUR_USERS_DESCRIPTION', 11, '["*"]', 'administrator/index.php?option=com_users&view=users', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, NULL, NULL, 1, '*', 1); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__guidedtour_steps` +-- + +CREATE TABLE IF NOT EXISTS `#__guidedtour_steps` ( + `id` int NOT NULL AUTO_INCREMENT, + `tour_id` int NOT NULL DEFAULT 0, + `title` varchar(255) NOT NULL, + `published` tinyint NOT NULL DEFAULT 0, + `description` text NOT NULL, + `ordering` int NOT NULL DEFAULT 0, + `position` varchar(255) NOT NULL, + `target` varchar(255) NOT NULL, + `type` int NOT NULL, + `interactive_type` int NOT NULL DEFAULT 1, + `url` varchar(255) NOT NULL, + `created` datetime NOT NULL, + `created_by` int unsigned NOT NULL DEFAULT 0, + `modified` datetime NOT NULL, + `modified_by` int unsigned NOT NULL DEFAULT 0, + `checked_out_time` datetime, + `checked_out` int unsigned, + `language` varchar(7) NOT NULL, + `note` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `idx_tour` (`tour_id`), + KEY `idx_state` (`published`), + KEY `idx_language` (`language`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci; + +-- +-- Dumping data for table `#__guidedtour_steps` +-- + +INSERT IGNORE INTO `#__guidedtour_steps` (`id`, `tour_id`, `title`, `published`, `description`, `ordering`, `position`, `target`, `type`, `interactive_type`, `url`, `created`, `created_by`, `modified`, `modified_by`, `language`) VALUES +(1, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_NEW_DESCRIPTION', 1, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_guidedtours&view=tours', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(2, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_TITLE_DESCRIPTION', 2, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(3, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_URL_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_URL_DESCRIPTION', 3, 'top', '#jform_url', 2, 2, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(4, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_CONTENT_DESCRIPTION', 4, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(5, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_COMPONENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_COMPONENT_DESCRIPTION', 5, 'top', 'joomla-field-fancy-select .choices', 2, 3, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(6, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_SAVECLOSE_DESCRIPTION', 6, 'top', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(7, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_CONGRATULATIONS_DESCRIPTION', 7, 'bottom', '', 0, 1, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(8, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_COUNTER_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_COUNTER_DESCRIPTION', 8, 'top', '#toursList tbody tr:nth-last-of-type(1) td:nth-of-type(5) .btn', 2, 1, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(9, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_NEW_DESCRIPTION', 9, 'bottom', '.button-new', 2, 1, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(10, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TITLE_DESCRIPTION', 10, 'bottom', '#jform_title', 2, 2, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(11, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_DESCRIPTION_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_DESCRIPTION_DESCRIPTION', 11, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(12, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_STATUS_DESCRIPTION', 12, 'bottom', '#jform_published', 2, 3, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(13, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_POSITION_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_POSITION_DESCRIPTION', 13, 'top', '#jform_position', 2, 3, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(14, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TARGET_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TARGET_DESCRIPTION', 14, 'top', '#jform_target', 2, 3, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(15, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TYPE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TYPE_DESCRIPTION', 15, 'top', '#jform_type', 2, 3, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(16, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_SAVECLOSE_DESCRIPTION', 16, 'bottom', '#save-group-children-save .button-save', 2, 1, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(17, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_CONGRATULATIONS_DESCRIPTION', 17, 'bottom', '', 0, 1, '', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(18, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_NEW_DESCRIPTION', 18, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_content&view=articles', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(19, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_TITLE_DESCRIPTION', 19, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(20, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_ALIAS_DESCRIPTION', 20, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(21, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CONTENT_DESCRIPTION', 21, 'bottom', '#jform_articletext,#jform_articletext_ifr', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(22, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_STATUS_DESCRIPTION', 22, 'bottom', '#jform_state', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(23, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CATEGORY_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CATEGORY_DESCRIPTION', 23, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(24, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_FEATURED_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_FEATURED_DESCRIPTION', 24, 'bottom', '#jform_featured0', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(25, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_ACCESS_DESCRIPTION', 25, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(26, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_TAGS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_TAGS_DESCRIPTION', 26, 'top', 'joomla-field-fancy-select .choices[data-type=select-multiple]', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(27, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_NOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_NOTE_DESCRIPTION', 27, 'top', '#jform_note', 2, 2, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(28, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_VERSIONNOTE_DESCRIPTION', 28, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(29, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_SAVECLOSE_DESCRIPTION', 29, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(30, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CONGRATULATIONS_DESCRIPTION', 30, 'bottom', '', 0, 1, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(31, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_NEW_DESCRIPTION', 31, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_categories&view=categories&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(32, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_TITLE_DESCRIPTION', 32, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(33, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_ALIAS_DESCRIPTION', 33, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(34, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_CONTENT_DESCRIPTION', 34, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(35, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_PARENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_PARENT_DESCRIPTION', 35, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(36, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_STATUS_DESCRIPTION', 36, 'bottom', '#jform_published', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(37, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_ACCESS_DESCRIPTION', 37, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(38, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_TAGS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_TAGS_DESCRIPTION', 38, 'top', 'joomla-field-fancy-select .choices[data-type=select-multiple]', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(39, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_NOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_NOTE_DESCRIPTION', 39, 'top', '#jform_note', 2, 2, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(40, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_VERSIONNOTE_DESCRIPTION', 40, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(41, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_SAVECLOSE_DESCRIPTION', 41, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(42, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_CONGRATULATIONS_DESCRIPTION', 42, 'bottom', '', 0, 1, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(43, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_NEW_DESCRIPTION', 43, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_menus&view=menus', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(44, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_TITLE_DESCRIPTION', 44, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(45, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_UNIQUENAME_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_UNIQUENAME_DESCRIPTION', 45, 'top', '#jform_menutype', 2, 2, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(46, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_DESCRIPTION_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_DESCRIPTION_DESCRIPTION', 46, 'top', '#jform_menudescription', 2, 2, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(47, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_SAVECLOSE_DESCRIPTION', 47, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(48, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_CONGRATULATIONS_DESCRIPTION', 48, 'bottom', '', 0, 1, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(49, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_NEW_DESCRIPTION', 49, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_tags&view=tags', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(50, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_TITLE_DESCRIPTION', 50, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(51, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_ALIAS_DESCRIPTION', 51, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(52, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_CONTENT_DESCRIPTION', 52, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(53, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_PARENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_PARENT_DESCRIPTION', 53, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(54, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_STATUS_DESCRIPTION', 54, 'bottom', '#jform_published', 2, 3, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(55, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_ACCESS_DESCRIPTION', 55, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(56, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_NOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_NOTE_DESCRIPTION', 56, 'top', '#jform_note', 2, 2, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(57, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_VERSIONNOTE_DESCRIPTION', 57, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(58, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_SAVECLOSE_DESCRIPTION', 58, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(59, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_CONGRATULATIONS_DESCRIPTION', 59, 'bottom', '', 0, 1, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(60, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_NEW_DESCRIPTION', 60, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_banners&view=banners', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(61, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_TITLE_DESCRIPTION', 61, 'bottom', '#jform_name', 2, 2, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(62, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_ALIAS_DESCRIPTION', 62, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(63, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_DETAILS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_DETAILS_DESCRIPTION', 63, 'bottom', '.col-lg-9', 2, 3, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(64, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_STATUS_DESCRIPTION', 64, 'bottom', '#jform_state', 2, 3, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(65, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_CATEGORY_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_CATEGORY_DESCRIPTION', 65, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(66, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_PINNED_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_PINNED_DESCRIPTION', 66, 'bottom', '#jform_sticky1', 2, 3, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(67, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_VERSIONNOTE_DESCRIPTION', 67, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(68, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_SAVECLOSE_DESCRIPTION', 68, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(69, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_CONGRATULATIONS_DESCRIPTION', 69, 'bottom', '', 0, 1, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(70, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_NEW_DESCRIPTION', 70, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_contact&view=contacts', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(71, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_TITLE_DESCRIPTION', 71, 'bottom', '#jform_name', 2, 2, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(72, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_ALIAS_DESCRIPTION', 72, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(73, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_DETAILS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_DETAILS_DESCRIPTION', 73, 'bottom', '.col-lg-9', 0, 1, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(74, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_STATUS_DESCRIPTION', 74, 'bottom', '#jform_published', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(75, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_CATEGORY_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_CATEGORY_DESCRIPTION', 75, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(76, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_FEATURED_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_FEATURED_DESCRIPTION', 76, 'bottom', '#jform_featured0', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(77, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_ACCESS_DESCRIPTION', 77, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(78, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_TAGS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_TAGS_DESCRIPTION', 78, 'top', 'joomla-field-fancy-select .choices[data-type=select-multiple]', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(79, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_VERSIONNOTE_DESCRIPTION', 79, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(80, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_SAVECLOSE_DESCRIPTION', 80, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(81, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_CONGRATULATIONS_DESCRIPTION', 81, 'bottom', '', 0, 1, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(82, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_NEW_DESCRIPTION', 82, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_newsfeeds&view=newsfeeds', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(83, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_TITLE_DESCRIPTION', 83, 'bottom', '#jform_name', 2, 2, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(84, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_ALIAS_DESCRIPTION', 84, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(85, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_LINK_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_LINK_DESCRIPTION', 85, 'bottom', '#jform_link', 2, 2, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(86, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_DESCRIPTION_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_DESCRIPTION_DESCRIPTION', 86, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(87, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_STATUS_DESCRIPTION', 87, 'bottom', '#jform_published', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(88, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_CATEGORY_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_CATEGORY_DESCRIPTION', 88, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(89, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_ACCESS_DESCRIPTION', 89, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(90, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_TAGS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_TAGS_DESCRIPTION', 90, 'top', 'joomla-field-fancy-select .choices[data-type=select-multiple]', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(91, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_VERSIONNOTE_DESCRIPTION', 91, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(92, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_SAVECLOSE_DESCRIPTION', 92, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(93, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_CONGRATULATIONS_DESCRIPTION', 93, 'bottom', '', 0, 1, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(94, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_NEW_DESCRIPTION', 94, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_finder&view=filters', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(95, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_TITLE_DESCRIPTION', 95, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(96, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_ALIAS_DESCRIPTION', 96, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(97, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_CONTENT_DESCRIPTION', 97, 'bottom', '.col-lg-9', 0, 1, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(98, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_STATUS_DESCRIPTION', 98, 'bottom', '#jform_state', 2, 3, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(99, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_SAVECLOSE_DESCRIPTION', 99, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(100, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_CONGRATULATIONS_DESCRIPTION', 100, 'bottom', '', 0, 1, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), + +(101, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_NEW_DESCRIPTION', 101, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(102, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_NAME_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_NAME_DESCRIPTION', 102, 'bottom', '#jform_name', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(103, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_LOGINNAME_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_LOGINNAME_DESCRIPTION', 103, 'bottom', '#jform_username', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(104, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORD_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORD_DESCRIPTION', 104, 'bottom', '#jform_password', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(105, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORD2_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORD2_DESCRIPTION', 105, 'bottom', '#jform_password2', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(106, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_EMAIL_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_EMAIL_DESCRIPTION', 106, 'bottom', '#jform_email', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(107, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_SYSTEMEMAIL_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_SYSTEMEMAIL_DESCRIPTION', 107, 'top', '#jform_sendEmail0', 2, 3, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(108, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_STATUS_DESCRIPTION', 108, 'top', '#jform_block0', 2, 3, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(109, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORDRESET_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORDRESET_DESCRIPTION', 109, 'top', '#jform_requireReset0', 2, 3, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(110, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_SAVECLOSE_DESCRIPTION', 110, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'), +(111, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_CONGRATULATIONS_DESCRIPTION', 111, 'bottom', '', 0, 1, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP(), 0, CURRENT_TIMESTAMP(), 0, '*'); + +-- Add new `#__extensions` +INSERT INTO `#__extensions` (`package_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `locked`, `manifest_cache`, `params`, `custom_data`, `ordering`, `state`) VALUES +(0, 'com_guidedtours', 'component', 'com_guidedtours', '', 1, 1, 0, 0, 1, '', '{}', '', 0, 0), +(0, 'mod_guidedtours', 'module', 'mod_guidedtours', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0), +(0, 'plg_system_guidedtours', 'plugin', 'guidedtours', 'system', 0, 1, 1, 0, 1, '', '{}', '', 0, 0); + +INSERT INTO `#__modules` (`title`, `note`, `content`, `ordering`, `position`, `checked_out`, `checked_out_time`, `publish_up`, `publish_down`, `published`, `module`, `access`, `showtitle`, `params`, `client_id`, `language`) VALUES +('Guided Tours', '', '', 1, 'status', NULL, NULL, NULL, NULL, 1, 'mod_guidedtours', 1, 1, '', 1, '*'); + +INSERT INTO `#__modules_menu` (`moduleid`, `menuid`) VALUES (LAST_INSERT_ID(), 0); diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-02-25.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-02-25.sql new file mode 100644 index 0000000000000..a0ff4bf2ac783 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-02-25.sql @@ -0,0 +1 @@ +ALTER TABLE `#__banners` MODIFY `clickurl` VARCHAR(2048) NOT NULL DEFAULT ''; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-07.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-07.sql new file mode 100644 index 0000000000000..5522505d4325d --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-07.sql @@ -0,0 +1,7 @@ +UPDATE `#__guidedtour_steps` +SET `target` = '#jform_description,#jform_description_ifr' +WHERE `target` = '#jform_description'; + +UPDATE `#__guidedtour_steps` +SET `target` = '#jform_articletext,#jform_articletext_ifr' +WHERE `target` = '#jform_articletext'; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-09.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-09.sql new file mode 100644 index 0000000000000..b2f1df23a74a2 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-09.sql @@ -0,0 +1,15 @@ +UPDATE `#__guidedtour_steps` +SET `target` = '#jform_published' +WHERE `target` = '#jform_state' AND `id` = 87; + +UPDATE `#__guidedtour_steps` +SET `target` = '#jform_sendEmail0' +WHERE `target` = '#jform_sendEmail'; + +UPDATE `#__guidedtour_steps` +SET `target` = '#jform_block0' +WHERE `target` = '#jform_block'; + +UPDATE `#__guidedtour_steps` +SET `target` = '#jform_requireReset0' +WHERE `target` = '#jform_requireReset'; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-10.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-10.sql new file mode 100644 index 0000000000000..abd9ec24cf7ab --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-10.sql @@ -0,0 +1,19 @@ +UPDATE `#__guidedtour_steps` +SET `type` = 2, `interactive_type` = 2 +WHERE `id` IN (20,27,28,33,39,40,46,51,56,57,62,67,72,79,84,91,96); + +UPDATE `#__guidedtour_steps` +SET `type` = 2, `interactive_type` = 3 +WHERE `id` IN (5,21,22,23,24,25,26,34,35,36,37,38,52,53,54,55,63,64,65,66,74,75,76,77,78,86,87,88,89,90,98,107,108,109); + +UPDATE `#__guidedtour_steps` +SET `target` = 'joomla-field-fancy-select .choices input' +WHERE `id` = 5; + +UPDATE `#__guidedtour_steps` +SET `target` = 'joomla-field-fancy-select .choices[data-type=select-one]' +WHERE `id` IN (23,35,53,65,75,88); + +UPDATE `#__guidedtour_steps` +SET `target` = 'joomla-field-fancy-select .choices[data-type=select-multiple] input' +WHERE `id` IN (26,38,78,90); diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-28.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-28.sql new file mode 100644 index 0000000000000..c3276bd654db4 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-28.sql @@ -0,0 +1,3 @@ +ALTER TABLE `#__guidedtours` DROP COLUMN `asset_id` /** CAN FAIL **/; + +DELETE FROM `#__assets` WHERE `name` LIKE 'com_guidedtours.tour.%'; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-29.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-29.sql new file mode 100644 index 0000000000000..0bdaa63ac33e3 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.0-2023-03-29.sql @@ -0,0 +1,7 @@ +UPDATE `#__guidedtour_steps` +SET `target` = 'joomla-field-fancy-select .choices' +WHERE `id` = 5; + +UPDATE `#__guidedtour_steps` +SET `target` = 'joomla-field-fancy-select .choices[data-type=select-multiple]' +WHERE `id` IN (26,38,78,90); diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-03-31.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-03-31.sql new file mode 100644 index 0000000000000..5678a50187bc4 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-03-31.sql @@ -0,0 +1,3 @@ +UPDATE `#__guidedtour_steps` +SET `title` = 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_DETAILS_TITLE', `description` = 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_DETAILS_DESCRIPTION', `target` = '.col-lg-9' +WHERE `id` = 63; diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-03.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-03.sql new file mode 100644 index 0000000000000..85e6c7c9bf4f5 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-03.sql @@ -0,0 +1,3 @@ +UPDATE `#__extensions` + SET `params` = '{"template_positions_display":"0","upload_limit":"10","image_formats":"gif,bmp,jpg,jpeg,png,webp","source_formats":"txt,less,ini,xml,js,php,css,scss,sass,json","font_formats":"woff,woff2,ttf,otf","compressed_formats":"zip","difference":"SideBySide"}' + WHERE `name` = 'com_templates' AND `params` IN ('{,"difference":"SideBySide"}', '{}', ''); diff --git a/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-20.sql b/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-20.sql new file mode 100644 index 0000000000000..d4c2640fe71e3 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/mysql/4.3.2-2023-05-20.sql @@ -0,0 +1,2 @@ +ALTER TABLE `#__user_mfa` ADD COLUMN `tries` int NOT NULL DEFAULT 0 /** CAN FAIL **/; +ALTER TABLE `#__user_mfa` ADD COLUMN `last_try` datetime /** CAN FAIL **/; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-12-20.sql b/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-12-20.sql index 3955d94200f98..6d8a98c37e46c 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-12-20.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/4.0.0-2020-12-20.sql @@ -12,8 +12,8 @@ INSERT INTO "#__mail_templates" ("template_id", "language", "subject", "body", " ('com_users.registration.user.admin_activation_w_pw', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_WITH_ADMIN_ACTIVATION_BODY', '', '', '{"tags":["name","sitename","activate","siteurl","username","password_clear"]}'), ('com_users.registration.user.self_activation', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY_NOPW', '', '', '{"tags":["name","sitename","activate","siteurl","username"]}'), ('com_users.registration.user.self_activation_w_pw', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_WITH_ACTIVATION_BODY', '', '', '{"tags":["name","sitename","activate","siteurl","username","password_clear"]}'), -('com_users.registration.user.registration_mail', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_BODY_NOPW', '', '', '{"tags":["name","sitename","activate","siteurl","username"]}'), -('com_users.registration.user.registration_mail_w_pw', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_BODY', '', '', '{"tags":["name","sitename","activate","siteurl","username","password_clear"]}'), +('com_users.registration.user.registration_mail', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_BODY_NOPW', '', '', '{"tags":["name","sitename","siteurl","username"]}'), +('com_users.registration.user.registration_mail_w_pw', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_BODY', '', '', '{"tags":["name","sitename","siteurl","username","password_clear"]}'), ('com_users.registration.admin.new_notification', '', 'COM_USERS_EMAIL_ACCOUNT_DETAILS', 'COM_USERS_EMAIL_REGISTERED_NOTIFICATION_TO_ADMIN_BODY', '', '', '{"tags":["name","sitename","siteurl","username"]}'), ('com_users.registration.user.admin_activated', '', 'COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_SUBJECT', 'COM_USERS_EMAIL_ACTIVATED_BY_ADMIN_ACTIVATION_BODY', '', '', '{"tags":["name","sitename","siteurl","username"]}'), ('com_users.registration.admin.verification_request', '', 'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_SUBJECT', 'COM_USERS_EMAIL_ACTIVATE_WITH_ADMIN_ACTIVATION_BODY', '', '', '{"tags":["name","sitename","email","username","activate"]}'), diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.2.0-2022-07-07.sql b/administrator/components/com_admin/sql/updates/postgresql/4.2.0-2022-07-07.sql index 4c83bf2f3ef9d..118f7f6a9c763 100644 --- a/administrator/components/com_admin/sql/updates/postgresql/4.2.0-2022-07-07.sql +++ b/administrator/components/com_admin/sql/updates/postgresql/4.2.0-2022-07-07.sql @@ -1,2 +1,4 @@ -INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES -(0, 'plg_fields_menuitem', 'plugin', 'menuitem', 'fields', 0, 1, 1, 0, 1, '', '', '', 0, 0); +-- The following statement added with Joonmla version 4.2.0 RC 1 had to be removed with version 4.2.0 (stable). +-- See https://github.com/joomla/joomla-cms/pull/38244 +-- INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES +--(0, 'plg_fields_menuitem', 'plugin', 'menuitem', 'fields', 0, 1, 1, 0, 1, '', '', '', 0, 0); diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.2.1-2022-08-23.sql b/administrator/components/com_admin/sql/updates/postgresql/4.2.1-2022-08-23.sql new file mode 100644 index 0000000000000..eca5b000aa2eb --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.2.1-2022-08-23.sql @@ -0,0 +1,3 @@ +-- Revert https://github.com/joomla/joomla-cms/pull/38244 +-- See also file 4.2.0-2022-07-07.sql +DELETE FROM "#__extensions" WHERE "name" = 'plg_fields_menuitem' AND "type" = 'plugin' AND "element" = 'menuitem' AND "folder" = 'fields' AND "client_id" = 0; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.2.3-2022-09-07.sql b/administrator/components/com_admin/sql/updates/postgresql/4.2.3-2022-09-07.sql new file mode 100644 index 0000000000000..355f68e1b4685 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.2.3-2022-09-07.sql @@ -0,0 +1,2 @@ +-- Remove the record of any template overrides where the template has already been uninstalled +DELETE FROM "#__template_overrides" WHERE "template" NOT IN (SELECT "name" FROM "#__extensions" WHERE "type"='template'); diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.2.7-2022-12-29.sql b/administrator/components/com_admin/sql/updates/postgresql/4.2.7-2022-12-29.sql new file mode 100644 index 0000000000000..860e90879780d --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.2.7-2022-12-29.sql @@ -0,0 +1,7 @@ +UPDATE "#__mail_templates" + SET "params" = '{"tags":["name","sitename","siteurl","username"]}' + WHERE "template_id" = 'com_users.registration.user.registration_mail' AND "params" = '{"tags":["name","sitename","activate","siteurl","username"]}'; + +UPDATE "#__mail_templates" + SET "params" = '{"tags":["name","sitename","siteurl","username","password_clear"]}' + WHERE "template_id" = 'com_users.registration.user.registration_mail_w_pw' AND "params" = '{"tags":["name","sitename","activate","siteurl","username","password_clear"]}'; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.2.9-2023-03-07.sql b/administrator/components/com_admin/sql/updates/postgresql/4.2.9-2023-03-07.sql new file mode 100644 index 0000000000000..7e055925be8b2 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.2.9-2023-03-07.sql @@ -0,0 +1,6 @@ +-- +-- Add post-installation message about setting the Content-Encoding header in .htaccess +-- +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") +SELECT "extension_id", 'COM_ADMIN_POSTINSTALL_MSG_HTACCESS_SETCE_TITLE', 'COM_ADMIN_POSTINSTALL_MSG_HTACCESS_SETCE_DESCRIPTION', '', 'com_admin', 1, 'message', '', '', 'admin://components/com_admin/postinstall/htaccesssetce.php', 'admin_postinstall_htaccesssetce_condition', '4.2.9', 1 FROM "#__extensions" WHERE "name" = 'files_joomla' +ON CONFLICT DO NOTHING; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2022-09-23.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2022-09-23.sql new file mode 100644 index 0000000000000..ba06a58e0d46a --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2022-09-23.sql @@ -0,0 +1 @@ +-- The SQL statement had to be removed, see https://github.com/joomla/joomla-cms/pull/40535 diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2022-11-06.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2022-11-06.sql new file mode 100644 index 0000000000000..fc7b82202062b --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2022-11-06.sql @@ -0,0 +1,2 @@ +-- Remove dummy entries for #__ucm_content rows in the #__assets table +DELETE FROM "#__assets" WHERE "name" LIKE '#__ucm_content.%'; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-01-30.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-01-30.sql new file mode 100644 index 0000000000000..c4071bdccce04 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-01-30.sql @@ -0,0 +1,36 @@ +UPDATE "#__extensions" + SET "params" = REPLACE("params", '"negotiate_tls":1', '"encryption":"tls"') + WHERE "name" = 'plg_authentication_ldap' + AND "type" = 'plugin' + AND "element" = 'ldap' + AND "folder" = 'authentication' + AND "client_id" = 0 + AND "params" LIKE '{%"negotiate_tls":1%}'; + +UPDATE "#__extensions" + SET "params" = REPLACE("params", '"negotiate_tls":0', '"encryption":"none"') + WHERE "name" = 'plg_authentication_ldap' + AND "type" = 'plugin' + AND "element" = 'ldap' + AND "folder" = 'authentication' + AND "client_id" = 0 + AND "params" LIKE '{%"negotiate_tls":0%}'; + +UPDATE "#__extensions" + SET "params" = REPLACE("params", '"encryption":"none"', '"encryption":"ssl"') + WHERE "name" = 'plg_authentication_ldap' + AND "type" = 'plugin' + AND "element" = 'ldap' + AND "folder" = 'authentication' + AND "client_id" = 0 + AND "params" LIKE '{%"host":"ldaps:\\/\\/%}'; + +UPDATE "#__extensions" + SET "params" = REPLACE("params", '"host":"ldaps:\/\/', '"host":"') + WHERE "name" = 'plg_authentication_ldap' + AND "type" = 'plugin' + AND "element" = 'ldap' + AND "folder" = 'authentication' + AND "client_id" = 0 + AND "params" LIKE '{%"host":"ldaps:\\/\\/%}'; + diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-02-15.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-02-15.sql new file mode 100644 index 0000000000000..8fba65d34fa48 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-02-15.sql @@ -0,0 +1,221 @@ +-- +-- Table structure for table `#__guidedtours` +-- + +CREATE TABLE IF NOT EXISTS "#__guidedtours" ( + "id" serial NOT NULL, + "title" varchar(255) DEFAULT '' NOT NULL, + "description" text NOT NULL, + "ordering" bigint DEFAULT 0 NOT NULL, + "extensions" text NOT NULL, + "url" varchar(255) NOT NULL, + "created" timestamp without time zone NOT NULL, + "created_by" bigint DEFAULT 0 NOT NULL, + "modified" timestamp without time zone NOT NULL, + "modified_by" bigint DEFAULT 0 NOT NULL, + "checked_out_time" timestamp without time zone, + "checked_out" integer, + "published" smallint DEFAULT 0 NOT NULL, + "language" varchar(7) DEFAULT '' NOT NULL, + "note" varchar(255) DEFAULT '' NOT NULL, + "access" bigint NOT NULL DEFAULT 0, + PRIMARY KEY ("id") +); + +CREATE INDEX "#__guidedtours_idx_access" ON "#__guidedtours" ("access"); +CREATE INDEX "#__guidedtours_idx_state" ON "#__guidedtours" ("published"); +CREATE INDEX "#__guidedtours_idx_language" ON "#__guidedtours" ("language"); + +-- +-- Dumping data for table `#__guidedtours` +-- + +INSERT INTO "#__guidedtours" ("id", "title", "description", "ordering", "extensions", "url", "created", "created_by", "modified", "modified_by", "checked_out_time", "checked_out", "published", "language", "access") VALUES +(1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_TITLE', 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_DESCRIPTION', 1, '["com_guidedtours"]', 'administrator/index.php?option=com_guidedtours&view=tours', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_TITLE', 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_DESCRIPTION', 2, '["com_guidedtours"]', 'administrator/index.php?option=com_guidedtours&view=tours', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_TITLE', 'COM_GUIDEDTOURS_TOUR_ARTICLES_DESCRIPTION', 3, '["*"]', 'administrator/index.php?option=com_content&view=articles', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_TITLE', 'COM_GUIDEDTOURS_TOUR_CATEGORIES_DESCRIPTION', 4, '["*"]', 'administrator/index.php?option=com_categories&view=categories&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(5, 'COM_GUIDEDTOURS_TOUR_MENUS_TITLE', 'COM_GUIDEDTOURS_TOUR_MENUS_DESCRIPTION', 5, '["*"]', 'administrator/index.php?option=com_menus&view=menus', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(6, 'COM_GUIDEDTOURS_TOUR_TAGS_TITLE', 'COM_GUIDEDTOURS_TOUR_TAGS_DESCRIPTION', 6, '["*"]', 'administrator/index.php?option=com_tags&view=tags', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(7, 'COM_GUIDEDTOURS_TOUR_BANNERS_TITLE', 'COM_GUIDEDTOURS_TOUR_BANNERS_DESCRIPTION', 7, '["*"]', 'administrator/index.php?option=com_banners&view=banners', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_TITLE', 'COM_GUIDEDTOURS_TOUR_CONTACTS_DESCRIPTION', 8, '["*"]', 'administrator/index.php?option=com_contact&view=contacts', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_TITLE', 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_DESCRIPTION', 9, '["*"]', 'administrator/index.php?option=com_newsfeeds&view=newsfeeds', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_TITLE', 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_DESCRIPTION', 10, '["*"]', 'administrator/index.php?option=com_finder&view=filters', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1), +(11, 'COM_GUIDEDTOURS_TOUR_USERS_TITLE', 'COM_GUIDEDTOURS_TOUR_USERS_DESCRIPTION', 11, '["*"]', 'administrator/index.php?option=com_users&view=users', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, NULL, NULL, 1, '*', 1) +ON CONFLICT DO NOTHING; + +SELECT setval('#__guidedtours_id_seq', 12, false); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `#__guidedtour_steps` +-- + +CREATE TABLE IF NOT EXISTS "#__guidedtour_steps" ( + "id" serial NOT NULL, + "tour_id" bigint DEFAULT 0 NOT NULL, + "title" varchar(255) NOT NULL, + "published" smallint DEFAULT 0 NOT NULL, + "description" text NOT NULL, + "ordering" bigint DEFAULT 0 NOT NULL, + "position" varchar(255) NOT NULL, + "target" varchar(255) NOT NULL, + "type" bigint NOT NULL, + "interactive_type" bigint DEFAULT 1 NOT NULL, + "url" varchar(255) NOT NULL, + "created" timestamp without time zone NOT NULL, + "created_by" bigint DEFAULT 0 NOT NULL, + "modified" timestamp without time zone NOT NULL, + "modified_by" bigint DEFAULT 0 NOT NULL, + "checked_out_time" timestamp without time zone, + "checked_out" integer, + "language" varchar(7) DEFAULT '' NOT NULL, + "note" varchar(255) DEFAULT '' NOT NULL, + PRIMARY KEY ("id") +); + +CREATE INDEX "#__guidedtour_steps_idx_tour_id" ON "#__guidedtour_steps" ("tour_id"); +CREATE INDEX "#__guidedtour_steps_idx_state" ON "#__guidedtour_steps" ("published"); +CREATE INDEX "#__guidedtour_steps_idx_language" ON "#__guidedtour_steps" ("language"); + +-- +-- Dumping data for table `#__guidedtour_steps` +-- + +INSERT INTO "#__guidedtour_steps" ("id", "tour_id", "title", "published", "description", "ordering", "position", "target", "type", "interactive_type", "url", "created", "created_by", "modified", "modified_by", "language") VALUES +(1, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_NEW_DESCRIPTION', 1, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_guidedtours&view=tours', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(2, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_TITLE_DESCRIPTION', 2, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(3, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_URL_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_URL_DESCRIPTION', 3, 'top', '#jform_url', 2, 2, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(4, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_CONTENT_DESCRIPTION', 4, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(5, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_COMPONENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_COMPONENT_DESCRIPTION', 5, 'top', 'joomla-field-fancy-select .choices', 2, 3, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(6, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_SAVECLOSE_DESCRIPTION', 6, 'top', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(7, 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURS_STEP_CONGRATULATIONS_DESCRIPTION', 7, 'bottom', '', 0, 1, 'administrator/index.php?option=com_guidedtours&view=tour&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(8, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_COUNTER_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_COUNTER_DESCRIPTION', 8, 'top', '#toursList tbody tr:nth-last-of-type(1) td:nth-of-type(5) .btn', 2, 1, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(9, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_NEW_DESCRIPTION', 9, 'bottom', '.button-new', 2, 1, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(10, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TITLE_DESCRIPTION', 10, 'bottom', '#jform_title', 2, 2, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(11, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_DESCRIPTION_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_DESCRIPTION_DESCRIPTION', 11, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(12, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_STATUS_DESCRIPTION', 12, 'bottom', '#jform_published', 2, 3, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(13, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_POSITION_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_POSITION_DESCRIPTION', 13, 'top', '#jform_position', 2, 3, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(14, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TARGET_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TARGET_DESCRIPTION', 14, 'top', '#jform_target', 2, 3, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(15, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TYPE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_TYPE_DESCRIPTION', 15, 'top', '#jform_type', 2, 3, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(16, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_SAVECLOSE_DESCRIPTION', 16, 'bottom', '#save-group-children-save .button-save', 2, 1, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(17, 2, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_GUIDEDTOURSTEPS_STEP_CONGRATULATIONS_DESCRIPTION', 17, 'bottom', '', 0, 1, '', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(18, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_NEW_DESCRIPTION', 18, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_content&view=articles', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(19, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_TITLE_DESCRIPTION', 19, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(20, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_ALIAS_DESCRIPTION', 20, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(21, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CONTENT_DESCRIPTION', 21, 'bottom', '#jform_articletext,#jform_articletext_ifr', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(22, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_STATUS_DESCRIPTION', 22, 'bottom', '#jform_state', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(23, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CATEGORY_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CATEGORY_DESCRIPTION', 23, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(24, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_FEATURED_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_FEATURED_DESCRIPTION', 24, 'bottom', '#jform_featured0', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(25, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_ACCESS_DESCRIPTION', 25, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(26, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_TAGS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_TAGS_DESCRIPTION', 26, 'top', 'joomla-field-fancy-select .choices[data-type=select-multiple]', 2, 3, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(27, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_NOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_NOTE_DESCRIPTION', 27, 'top', '#jform_note', 2, 2, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(28, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_VERSIONNOTE_DESCRIPTION', 28, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(29, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_SAVECLOSE_DESCRIPTION', 29, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(30, 3, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_ARTICLES_STEP_CONGRATULATIONS_DESCRIPTION', 30, 'bottom', '', 0, 1, 'administrator/index.php?option=com_content&view=article&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(31, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_NEW_DESCRIPTION', 31, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_categories&view=categories&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(32, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_TITLE_DESCRIPTION', 32, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(33, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_ALIAS_DESCRIPTION', 33, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(34, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_CONTENT_DESCRIPTION', 34, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(35, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_PARENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_PARENT_DESCRIPTION', 35, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(36, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_STATUS_DESCRIPTION', 36, 'bottom', '#jform_published', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(37, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_ACCESS_DESCRIPTION', 37, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(38, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_TAGS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_TAGS_DESCRIPTION', 38, 'top', 'joomla-field-fancy-select .choices[data-type=select-multiple]', 2, 3, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(39, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_NOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_NOTE_DESCRIPTION', 39, 'top', '#jform_note', 2, 2, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(40, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_VERSIONNOTE_DESCRIPTION', 40, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(41, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_SAVECLOSE_DESCRIPTION', 41, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(42, 4, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CATEGORIES_STEP_CONGRATULATIONS_DESCRIPTION', 42, 'bottom', '', 0, 1, 'administrator/index.php?option=com_categories&view=category&layout=edit&extension=com_content', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(43, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_NEW_DESCRIPTION', 43, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_menus&view=menus', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(44, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_TITLE_DESCRIPTION', 44, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(45, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_UNIQUENAME_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_UNIQUENAME_DESCRIPTION', 45, 'top', '#jform_menutype', 2, 2, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(46, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_DESCRIPTION_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_DESCRIPTION_DESCRIPTION', 46, 'top', '#jform_menudescription', 2, 2, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(47, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_SAVECLOSE_DESCRIPTION', 47, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(48, 5, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_MENUS_STEP_CONGRATULATIONS_DESCRIPTION', 48, 'bottom', '', 0, 1, 'administrator/index.php?option=com_menus&view=menu&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(49, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_NEW_DESCRIPTION', 49, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_tags&view=tags', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(50, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_TITLE_DESCRIPTION', 50, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(51, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_ALIAS_DESCRIPTION', 51, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(52, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_CONTENT_DESCRIPTION', 52, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(53, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_PARENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_PARENT_DESCRIPTION', 53, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(54, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_STATUS_DESCRIPTION', 54, 'bottom', '#jform_published', 2, 3, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(55, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_ACCESS_DESCRIPTION', 55, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(56, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_NOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_NOTE_DESCRIPTION', 56, 'top', '#jform_note', 2, 2, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(57, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_VERSIONNOTE_DESCRIPTION', 57, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(58, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_SAVECLOSE_DESCRIPTION', 58, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(59, 6, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_TAGS_STEP_CONGRATULATIONS_DESCRIPTION', 59, 'bottom', '', 0, 1, 'administrator/index.php?option=com_tags&view=tag&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(60, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_NEW_DESCRIPTION', 60, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_banners&view=banners', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(61, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_TITLE_DESCRIPTION', 61, 'bottom', '#jform_name', 2, 2, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(62, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_ALIAS_DESCRIPTION', 62, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(63, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_DETAILS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_DETAILS_DESCRIPTION', 63, 'bottom', '.col-lg-9', 2, 3, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(64, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_STATUS_DESCRIPTION', 64, 'bottom', '#jform_state', 2, 3, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(65, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_CATEGORY_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_CATEGORY_DESCRIPTION', 65, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(66, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_PINNED_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_PINNED_DESCRIPTION', 66, 'bottom', '#jform_sticky1', 2, 3, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(67, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_VERSIONNOTE_DESCRIPTION', 67, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(68, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_SAVECLOSE_DESCRIPTION', 68, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(69, 7, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_CONGRATULATIONS_DESCRIPTION', 69, 'bottom', '', 0, 1, 'administrator/index.php?option=com_banners&view=banner&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(70, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_NEW_DESCRIPTION', 70, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_contact&view=contacts', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(71, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_TITLE_DESCRIPTION', 71, 'bottom', '#jform_name', 2, 2, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(72, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_ALIAS_DESCRIPTION', 72, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(73, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_DETAILS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_DETAILS_DESCRIPTION', 73, 'bottom', '.col-lg-9', 0, 1, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(74, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_STATUS_DESCRIPTION', 74, 'bottom', '#jform_published', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(75, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_CATEGORY_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_CATEGORY_DESCRIPTION', 75, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(76, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_FEATURED_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_FEATURED_DESCRIPTION', 76, 'bottom', '#jform_featured0', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(77, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_ACCESS_DESCRIPTION', 77, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(78, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_TAGS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_TAGS_DESCRIPTION', 78, 'top', 'joomla-field-fancy-select .choices[data-type=select-multiple]', 2, 3, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(79, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_VERSIONNOTE_DESCRIPTION', 79, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(80, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_SAVECLOSE_DESCRIPTION', 80, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(81, 8, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_CONTACTS_STEP_CONGRATULATIONS_DESCRIPTION', 81, 'bottom', '', 0, 1, 'administrator/index.php?option=com_contact&view=contact&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(82, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_NEW_DESCRIPTION', 82, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_newsfeeds&view=newsfeeds', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(83, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_TITLE_DESCRIPTION', 83, 'bottom', '#jform_name', 2, 2, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(84, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_ALIAS_DESCRIPTION', 84, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(85, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_LINK_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_LINK_DESCRIPTION', 85, 'bottom', '#jform_link', 2, 2, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(86, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_DESCRIPTION_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_DESCRIPTION_DESCRIPTION', 86, 'bottom', '#jform_description,#jform_description_ifr', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(87, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_STATUS_DESCRIPTION', 87, 'bottom', '#jform_published', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(88, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_CATEGORY_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_CATEGORY_DESCRIPTION', 88, 'top', 'joomla-field-fancy-select .choices[data-type=select-one]', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(89, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_ACCESS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_ACCESS_DESCRIPTION', 89, 'bottom', '#jform_access', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(90, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_TAGS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_TAGS_DESCRIPTION', 90, 'top', 'joomla-field-fancy-select .choices[data-type=select-multiple]', 2, 3, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(91, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_VERSIONNOTE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_VERSIONNOTE_DESCRIPTION', 91, 'top', '#jform_version_note', 2, 2, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(92, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_SAVECLOSE_DESCRIPTION', 92, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(93, 9, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_NEWSFEEDS_STEP_CONGRATULATIONS_DESCRIPTION', 93, 'bottom', '', 0, 1, 'administrator/index.php?option=com_newsfeeds&view=newsfeed&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(94, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_NEW_DESCRIPTION', 94, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_finder&view=filters', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(95, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_TITLE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_TITLE_DESCRIPTION', 95, 'bottom', '#jform_title', 2, 2, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(96, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_ALIAS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_ALIAS_DESCRIPTION', 96, 'bottom', '#jform_alias', 2, 2, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(97, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_CONTENT_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_CONTENT_DESCRIPTION', 97, 'bottom', '.col-lg-9', 0, 1, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(98, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_STATUS_DESCRIPTION', 98, 'bottom', '#jform_state', 2, 3, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(99, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_SAVECLOSE_DESCRIPTION', 99, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(100, 10, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_SMARTSEARCH_STEP_CONGRATULATIONS_DESCRIPTION', 100, 'bottom', '', 0, 1, 'administrator/index.php?option=com_finder&view=filter&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), + +(101, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_NEW_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_NEW_DESCRIPTION', 101, 'bottom', '.button-new', 2, 1, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(102, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_NAME_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_NAME_DESCRIPTION', 102, 'bottom', '#jform_name', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(103, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_LOGINNAME_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_LOGINNAME_DESCRIPTION', 103, 'bottom', '#jform_username', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(104, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORD_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORD_DESCRIPTION', 104, 'bottom', '#jform_password', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(105, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORD2_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORD2_DESCRIPTION', 105, 'bottom', '#jform_password2', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(106, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_EMAIL_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_EMAIL_DESCRIPTION', 106, 'bottom', '#jform_email', 2, 2, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(107, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_SYSTEMEMAIL_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_SYSTEMEMAIL_DESCRIPTION', 107, 'top', '#jform_sendEmail0', 2, 3, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(108, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_STATUS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_STATUS_DESCRIPTION', 108, 'top', '#jform_block0', 2, 3, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(109, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORDRESET_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_PASSWORDRESET_DESCRIPTION', 109, 'top', '#jform_requireReset0', 2, 3, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(110, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_SAVECLOSE_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_SAVECLOSE_DESCRIPTION', 110, 'bottom', '#save-group-children-save .button-save', 2, 1, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*'), +(111, 11, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_CONGRATULATIONS_TITLE', 1, 'COM_GUIDEDTOURS_TOUR_USERS_STEP_CONGRATULATIONS_DESCRIPTION', 111, 'bottom', '', 0, 1, 'administrator/index.php?option=com_users&view=user&layout=edit', CURRENT_TIMESTAMP, 0, CURRENT_TIMESTAMP, 0, '*') +ON CONFLICT DO NOTHING; + +SELECT setval('#__guidedtour_steps_id_seq', 112, false); + +-- Add new `#__extensions` +INSERT INTO "#__extensions" ("package_id", "name", "type", "element", "folder", "client_id", "enabled", "access", "protected", "locked", "manifest_cache", "params", "custom_data", "ordering", "state") VALUES +(0, 'com_guidedtours', 'component', 'com_guidedtours', '', 1, 1, 0, 0, 1, '', '{}', '', 0, 0), +(0, 'mod_guidedtours', 'module', 'mod_guidedtours', '', 1, 1, 1, 0, 1, '', '{}', '', 0, 0), +(0, 'plg_system_guidedtours', 'plugin', 'guidedtours', 'system', 0, 1, 1, 0, 1, '', '{}', '', 0, 0); + +INSERT INTO "#__modules" ("title", "note", "content", "ordering", "position", "checked_out", "checked_out_time", "publish_up", "publish_down", "published", "module", "access", "showtitle", "params", "client_id", "language") VALUES +('Guided Tours', '', '', 1, 'status', NULL, NULL, NULL, NULL, 1, 'mod_guidedtours', 1, 1, '', 1, '*'); + +INSERT INTO "#__modules_menu" ("moduleid", "menuid") VALUES (currval(pg_get_serial_sequence('#__modules','id')), 0); diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-02-25.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-02-25.sql new file mode 100644 index 0000000000000..b440d4c107afc --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-02-25.sql @@ -0,0 +1 @@ +ALTER TABLE "#__banners" ALTER COLUMN "clickurl" TYPE character varying(2048); diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-07.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-07.sql new file mode 100644 index 0000000000000..00a146bd75556 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-07.sql @@ -0,0 +1,7 @@ +UPDATE "#__guidedtour_steps" +SET "target" = '#jform_description,#jform_description_ifr' +WHERE "target" = '#jform_description'; + +UPDATE "#__guidedtour_steps" +SET "target" = '#jform_articletext,#jform_articletext_ifr' +WHERE "target" = '#jform_articletext'; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-09.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-09.sql new file mode 100644 index 0000000000000..7e4ae80c13f9c --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-09.sql @@ -0,0 +1,15 @@ +UPDATE "#__guidedtour_steps" +SET "target" = '#jform_published' +WHERE "target" = '#jform_state' AND "id" = 87; + +UPDATE "#__guidedtour_steps" +SET "target" = '#jform_sendEmail0' +WHERE "target" = '#jform_sendEmail'; + +UPDATE "#__guidedtour_steps" +SET "target" = '#jform_block0' +WHERE "target" = '#jform_block'; + +UPDATE "#__guidedtour_steps" +SET "target" = '#jform_requireReset0' +WHERE "target" = '#jform_requireReset'; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-10.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-10.sql new file mode 100644 index 0000000000000..7f58fee7b9334 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-10.sql @@ -0,0 +1,19 @@ +UPDATE "#__guidedtour_steps" +SET "type" = 2, "interactive_type" = 2 +WHERE "id" IN (20,27,28,33,39,40,46,51,56,57,62,67,72,79,84,91,96); + +UPDATE "#__guidedtour_steps" +SET "type" = 2, "interactive_type" = 3 +WHERE "id" IN (5,21,22,23,24,25,26,34,35,36,37,38,52,53,54,55,63,64,65,66,74,75,76,77,78,86,87,88,89,90,98,107,108,109); + +UPDATE "#__guidedtour_steps" +SET "target" = 'joomla-field-fancy-select .choices input' +WHERE "id" = 5; + +UPDATE "#__guidedtour_steps" +SET "target" = 'joomla-field-fancy-select .choices[data-type=select-one]' +WHERE "id" IN (23,35,53,65,75,88); + +UPDATE "#__guidedtour_steps" +SET "target" = 'joomla-field-fancy-select .choices[data-type=select-multiple] input' +WHERE "id" IN (26,38,78,90); diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-28.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-28.sql new file mode 100644 index 0000000000000..fb2f71f35460d --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-28.sql @@ -0,0 +1,3 @@ +ALTER TABLE "#__guidedtours" DROP COLUMN "asset_id" /** CAN FAIL **/; + +DELETE FROM "#__assets" WHERE "name" LIKE 'com_guidedtours.tour.%'; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-29.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-29.sql new file mode 100644 index 0000000000000..e6247d588bbe9 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.0-2023-03-29.sql @@ -0,0 +1,7 @@ +UPDATE "#__guidedtour_steps" +SET "target" = 'joomla-field-fancy-select .choices' +WHERE "id" = 5; + +UPDATE "#__guidedtour_steps" +SET "target" = 'joomla-field-fancy-select .choices[data-type=select-multiple]' +WHERE "id" IN (26,38,78,90); diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-03-31.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-03-31.sql new file mode 100644 index 0000000000000..3c512404de503 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-03-31.sql @@ -0,0 +1,3 @@ +UPDATE "#__guidedtour_steps" +SET "title" = 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_DETAILS_TITLE', "description" = 'COM_GUIDEDTOURS_TOUR_BANNERS_STEP_DETAILS_DESCRIPTION', "target" = '.col-lg-9' +WHERE "id" = 63; diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-03.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-03.sql new file mode 100644 index 0000000000000..67951f49c2f68 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-03.sql @@ -0,0 +1,3 @@ +UPDATE "#__extensions" + SET "params" = '{"template_positions_display":"0","upload_limit":"10","image_formats":"gif,bmp,jpg,jpeg,png,webp","source_formats":"txt,less,ini,xml,js,php,css,scss,sass,json","font_formats":"woff,woff2,ttf,otf","compressed_formats":"zip","difference":"SideBySide"}' + WHERE "name" = 'com_templates' AND "params" IN ('{,"difference":"SideBySide"}', '{}', ''); diff --git a/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-20.sql b/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-20.sql new file mode 100644 index 0000000000000..c57ff8719c3e8 --- /dev/null +++ b/administrator/components/com_admin/sql/updates/postgresql/4.3.2-2023-05-20.sql @@ -0,0 +1,2 @@ +ALTER TABLE "#__user_mfa" ADD COLUMN "tries" bigint DEFAULT 0 NOT NULL /** CAN FAIL **/; +ALTER TABLE "#__user_mfa" ADD COLUMN "last_try" timestamp without time zone /** CAN FAIL **/; diff --git a/administrator/components/com_admin/src/Controller/DisplayController.php b/administrator/components/com_admin/src/Controller/DisplayController.php index 53d8c6ca35faa..7d4d97c91c56c 100644 --- a/administrator/components/com_admin/src/Controller/DisplayController.php +++ b/administrator/components/com_admin/src/Controller/DisplayController.php @@ -12,6 +12,10 @@ use Joomla\CMS\MVC\Controller\BaseController; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Admin Controller * @@ -29,7 +33,7 @@ class DisplayController extends BaseController * * @since 3.9 */ - public function display($cachable = false, $urlparams = array()) + public function display($cachable = false, $urlparams = []) { $viewName = $this->input->get('view', $this->default_view); $format = $this->input->get('format', 'html'); diff --git a/administrator/components/com_admin/src/Dispatcher/Dispatcher.php b/administrator/components/com_admin/src/Dispatcher/Dispatcher.php index 1fab521ee51e7..b627b8cd10763 100644 --- a/administrator/components/com_admin/src/Dispatcher/Dispatcher.php +++ b/administrator/components/com_admin/src/Dispatcher/Dispatcher.php @@ -12,6 +12,10 @@ use Joomla\CMS\Dispatcher\ComponentDispatcher; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * ComponentDispatcher class for com_admin * diff --git a/administrator/components/com_admin/src/Extension/AdminComponent.php b/administrator/components/com_admin/src/Extension/AdminComponent.php index fba9eb51aece6..5319fbfc6bb45 100644 --- a/administrator/components/com_admin/src/Extension/AdminComponent.php +++ b/administrator/components/com_admin/src/Extension/AdminComponent.php @@ -19,6 +19,10 @@ use Joomla\Component\Admin\Administrator\Service\HTML\System; use Psr\Container\ContainerInterface; +// phpcs:disable PSR1.Files.SideEffects +\defined('JPATH_PLATFORM') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Component class for com_admin * diff --git a/administrator/components/com_admin/src/Model/HelpModel.php b/administrator/components/com_admin/src/Model/HelpModel.php index d5db970af9333..e93a2384f4750 100644 --- a/administrator/components/com_admin/src/Model/HelpModel.php +++ b/administrator/components/com_admin/src/Model/HelpModel.php @@ -17,6 +17,10 @@ use Joomla\CMS\MVC\Model\BaseDatabaseModel; use Joomla\String\StringHelper; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Admin Component Help Model * @@ -74,7 +78,7 @@ class HelpModel extends BaseDatabaseModel public function &getHelpSearch() { if (\is_null($this->help_search)) { - $this->help_search = Factory::getApplication()->input->getString('helpsearch'); + $this->help_search = Factory::getApplication()->getInput()->getString('helpsearch'); } return $this->help_search; @@ -90,7 +94,7 @@ public function &getHelpSearch() public function &getPage() { if (\is_null($this->page)) { - $this->page = Help::createUrl(Factory::getApplication()->input->get('page', 'Start_Here')); + $this->page = Help::createUrl(Factory::getApplication()->getInput()->get('page', 'Start_Here')); } return $this->page; @@ -148,8 +152,8 @@ public function &getToc() } // Get Help files - $files = Folder::files(JPATH_BASE . '/help/' . $lang_tag, '\.xml$|\.html$'); - $this->toc = array(); + $files = Folder::files(JPATH_BASE . '/help/' . $lang_tag, '\.xml$|\.html$'); + $this->toc = []; foreach ($files as $file) { $buffer = file_get_contents(JPATH_BASE . '/help/' . $lang_tag . '/' . $file); diff --git a/administrator/components/com_admin/src/Model/SysinfoModel.php b/administrator/components/com_admin/src/Model/SysinfoModel.php index f05357d7a8e27..d9c003651419a 100644 --- a/administrator/components/com_admin/src/Model/SysinfoModel.php +++ b/administrator/components/com_admin/src/Model/SysinfoModel.php @@ -18,6 +18,10 @@ use Joomla\CMS\Version; use Joomla\Registry\Registry; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Model for the display of system information. * @@ -136,7 +140,7 @@ class SysinfoModel extends BaseDatabaseModel 'smtphost', 'tmp_path', 'open_basedir', - ] + ], ]; /** @@ -275,12 +279,12 @@ public function &getConfig(): array return $this->config; } - $registry = new Registry(new \JConfig()); + $registry = new Registry(new \JConfig()); $this->config = $registry->toArray(); - $hidden = [ + $hidden = [ 'host', 'user', 'password', 'ftp_user', 'ftp_pass', 'smtpuser', 'smtppass', 'redis_server_auth', 'session_redis_server_auth', - 'proxy_user', 'proxy_pass', 'secret' + 'proxy_user', 'proxy_pass', 'secret', ]; foreach ($hidden as $key) { @@ -332,7 +336,9 @@ public function &getInfo(): array */ public function phpinfoEnabled(): bool { - return !\in_array('phpinfo', explode(',', ini_get('disable_functions'))); + // remove any spaces from the ini value before exploding it + $disabledFunctions = str_replace(' ', '', ini_get('disable_functions')); + return !\in_array('phpinfo', explode(',', $disabledFunctions)); } /** @@ -389,13 +395,13 @@ public function &getPHPInfo(): string $phpInfo = ob_get_contents(); ob_end_clean(); preg_match_all('#]*>(.*)#siU', $phpInfo, $output); - $output = preg_replace('#]*>#', '', $output[1][0]); - $output = preg_replace('#(\w),(\w)#', '\1, \2', $output); - $output = preg_replace('#
#', '', $output); - $output = str_replace('
', '', $output); - $output = preg_replace('#
(.*)#', '$1', $output); - $output = str_replace('
', '', $output); - $output = str_replace('
', '', $output); + $output = preg_replace('#]*>#', '', $output[1][0]); + $output = preg_replace('#(\w),(\w)#', '\1, \2', $output); + $output = preg_replace('#
#', '', $output); + $output = str_replace('
', '', $output); + $output = preg_replace('#
(.*)#', '$1', $output); + $output = str_replace('
', '', $output); + $output = str_replace('', '', $output); $this->php_info = $output; return $this->php_info; @@ -432,8 +438,8 @@ public function getPhpInfoArray(): array public function getExtensions(): array { $installed = []; - $db = Factory::getContainer()->get('DatabaseDriver'); - $query = $db->getQuery(true) + $db = $this->getDatabase(); + $query = $db->getQuery(true) ->select('*') ->from($db->quoteName('#__extensions')); $db->setQuery($query); @@ -478,7 +484,7 @@ public function getExtensions(): array 'author' => $manifest->get('author', ''), 'version' => $manifest->get('version', ''), 'creationDate' => $manifest->get('creationDate', ''), - 'authorUrl' => $manifest->get('authorUrl', '') + 'authorUrl' => $manifest->get('authorUrl', ''), ]; $installed[$extension->name] = array_merge($installed[$extension->name], $extraData); @@ -677,15 +683,15 @@ public function &getEditor(): string */ protected function parsePhpInfo(string $html): array { - $html = strip_tags($html, '

'); - $html = preg_replace('/]*>([^<]+)<\/th>/', '\1', $html); - $html = preg_replace('/]*>([^<]+)<\/td>/', '\1', $html); - $t = preg_split('/(]*>[^<]+<\/h2>)/', $html, -1, PREG_SPLIT_DELIM_CAPTURE); - $r = []; + $html = strip_tags($html, '

'); + $html = preg_replace('/]*>([^<]+)<\/th>/', '\1', $html); + $html = preg_replace('/]*>([^<]+)<\/td>/', '\1', $html); + $t = preg_split('/(]*>[^<]+<\/h2>)/', $html, -1, PREG_SPLIT_DELIM_CAPTURE); + $r = []; $count = \count($t); - $p1 = '([^<]+)<\/info>'; - $p2 = '/' . $p1 . '\s*' . $p1 . '\s*' . $p1 . '/'; - $p3 = '/' . $p1 . '\s*' . $p1 . '/'; + $p1 = '([^<]+)<\/info>'; + $p2 = '/' . $p1 . '\s*' . $p1 . '\s*' . $p1 . '/'; + $p3 = '/' . $p1 . '\s*' . $p1 . '/'; for ($i = 1; $i < $count; $i++) { if (preg_match('/]*>([^<]+)<\/h2>/', $t[$i], $matches)) { diff --git a/administrator/components/com_admin/src/Service/HTML/Configuration.php b/administrator/components/com_admin/src/Service/HTML/Configuration.php index aaf7190f59c21..bc9058b9f6831 100644 --- a/administrator/components/com_admin/src/Service/HTML/Configuration.php +++ b/administrator/components/com_admin/src/Service/HTML/Configuration.php @@ -1,4 +1,5 @@ linkButton('download', 'COM_ADMIN_DOWNLOAD_SYSTEM_INFORMATION_TEXT') + ->url(Route::_('index.php?option=com_admin&view=sysinfo&format=text&' . Session::getFormToken() . '=1')); + + $toolbar->linkButton('download', 'COM_ADMIN_DOWNLOAD_SYSTEM_INFORMATION_JSON') + ->url(Route::_('index.php?option=com_admin&view=sysinfo&format=json&' . Session::getFormToken() . '=1')); + + $toolbar->help('Site_System_Information'); } } diff --git a/administrator/components/com_admin/src/View/Sysinfo/JsonView.php b/administrator/components/com_admin/src/View/Sysinfo/JsonView.php index b3d921509b363..4ea9d7d79ef07 100644 --- a/administrator/components/com_admin/src/View/Sysinfo/JsonView.php +++ b/administrator/components/com_admin/src/View/Sysinfo/JsonView.php @@ -17,6 +17,10 @@ use Joomla\CMS\MVC\View\AbstractView; use Joomla\Component\Admin\Administrator\Model\SysinfoModel; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Sysinfo View class for the Admin component * @@ -71,7 +75,7 @@ protected function getLayoutData(): array 'config' => $model->getSafeData('config'), 'directories' => $model->getSafeData('directory', true), 'phpInfo' => $model->getSafeData('phpInfoArray'), - 'extensions' => $model->getSafeData('extensions') + 'extensions' => $model->getSafeData('extensions'), ]; } } diff --git a/administrator/components/com_admin/src/View/Sysinfo/TextView.php b/administrator/components/com_admin/src/View/Sysinfo/TextView.php index ec4d1d579d68d..603c565aeaebe 100644 --- a/administrator/components/com_admin/src/View/Sysinfo/TextView.php +++ b/administrator/components/com_admin/src/View/Sysinfo/TextView.php @@ -17,6 +17,10 @@ use Joomla\CMS\MVC\View\AbstractView; use Joomla\Component\Admin\Administrator\Model\SysinfoModel; +// phpcs:disable PSR1.Files.SideEffects +\defined('_JEXEC') or die; +// phpcs:enable PSR1.Files.SideEffects + /** * Sysinfo View class for the Admin component * @@ -29,7 +33,7 @@ class TextView extends AbstractView * * @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. + * @return void * * @since 3.5 * @@ -81,28 +85,28 @@ protected function getLayoutData(): array return [ 'info' => [ 'title' => Text::_('COM_ADMIN_SYSTEM_INFORMATION', true), - 'data' => $model->getSafeData('info') + 'data' => $model->getSafeData('info'), ], 'phpSettings' => [ 'title' => Text::_('COM_ADMIN_PHP_SETTINGS', true), - 'data' => $model->getSafeData('phpSettings') + 'data' => $model->getSafeData('phpSettings'), ], 'config' => [ 'title' => Text::_('COM_ADMIN_CONFIGURATION_FILE', true), - 'data' => $model->getSafeData('config') + 'data' => $model->getSafeData('config'), ], 'directories' => [ 'title' => Text::_('COM_ADMIN_DIRECTORY_PERMISSIONS', true), - 'data' => $model->getSafeData('directory', true) + 'data' => $model->getSafeData('directory', true), ], 'phpInfo' => [ 'title' => Text::_('COM_ADMIN_PHP_INFORMATION', true), - 'data' => $model->getSafeData('phpInfoArray') + 'data' => $model->getSafeData('phpInfoArray'), ], 'extensions' => [ 'title' => Text::_('COM_ADMIN_EXTENSIONS', true), - 'data' => $model->getSafeData('extensions') - ] + 'data' => $model->getSafeData('extensions'), + ], ]; } diff --git a/administrator/components/com_admin/tmpl/help/default.php b/administrator/components/com_admin/tmpl/help/default.php index 1cfe5e816f6b3..69480f7d90311 100644 --- a/administrator/components/com_admin/tmpl/help/default.php +++ b/administrator/components/com_admin/tmpl/help/default.php @@ -32,7 +32,7 @@