Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36739aed39 | ||
|
|
ef8709bb5e | ||
|
|
df75f5a733 | ||
|
|
7aaf939b72 |
@ -13,12 +13,8 @@ indent_size = 4
|
||||
[{*.{sql,scss,css,twig,yml},package.json}]
|
||||
indent_size = 2
|
||||
|
||||
[*.svg]
|
||||
[*.twig]
|
||||
insert_final_newline = false
|
||||
|
||||
[tests/test_data/*]
|
||||
[test/test_data/*]
|
||||
insert_final_newline = false
|
||||
|
||||
[tests/unit/**/Fixtures/*.html]
|
||||
insert_final_newline = false
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
public/js/
|
||||
js/vendor/
|
||||
js/dist/
|
||||
tmp/
|
||||
vendor/
|
||||
webpack.config.cjs
|
||||
|
||||
@ -1,28 +1,41 @@
|
||||
{
|
||||
"extends": [
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:no-jquery/deprecated",
|
||||
"plugin:compat/recommended"
|
||||
],
|
||||
"parser": "@typescript-eslint/parser",
|
||||
"plugins": [ "@typescript-eslint", "no-jquery" ],
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 6,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"plugins": ["no-jquery"],
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true
|
||||
"es6": true,
|
||||
"jquery": true
|
||||
},
|
||||
"globals": {
|
||||
"AJAX": "readonly",
|
||||
"bootstrap": "readonly",
|
||||
"CodeMirror": "readonly",
|
||||
"CommonActions": "readonly",
|
||||
"CommonParams": "readonly",
|
||||
"Cookies": "readonly",
|
||||
"Functions": "readonly",
|
||||
"Messages": "readonly",
|
||||
"Navigation": "readonly",
|
||||
"OpenLayers": "readonly",
|
||||
"Sql": "readonly"
|
||||
},
|
||||
"rules": {
|
||||
"valid-jsdoc": ["error", {
|
||||
"prefer": {
|
||||
"returns": "return"
|
||||
},
|
||||
"requireReturn": false,
|
||||
"requireParamType": false,
|
||||
"requireReturnDescription": false,
|
||||
"requireParamDescription": false
|
||||
}],
|
||||
"array-bracket-spacing": "error",
|
||||
"array-bracket-newline": ["error", { "multiline": true }],
|
||||
"array-element-newline": ["error", "consistent"],
|
||||
"brace-style": "error",
|
||||
"camelcase": "error",
|
||||
"comma-dangle": ["error", "only-multiline"],
|
||||
"comma-style": ["error", "last"],
|
||||
"curly": "error",
|
||||
"dot-notation": "error",
|
||||
@ -30,7 +43,6 @@
|
||||
"eqeqeq": "error",
|
||||
"indent": ["error", 4],
|
||||
"keyword-spacing": "error",
|
||||
"lines-between-class-members": "error",
|
||||
"new-cap": "error",
|
||||
"no-array-constructor": "error",
|
||||
"no-eval": "error",
|
||||
@ -44,19 +56,9 @@
|
||||
"no-trailing-spaces": "error",
|
||||
"no-underscore-dangle": "error",
|
||||
"no-unneeded-ternary": "error",
|
||||
"no-var": "off",
|
||||
"object-curly-spacing": ["error", "always"],
|
||||
"one-var": ["error", "never"],
|
||||
"padded-blocks": ["error", "never"],
|
||||
"padding-line-between-statements": [
|
||||
"error",
|
||||
{ "blankLine": "always", "prev": "block-like", "next": "*" },
|
||||
{ "blankLine": "always", "prev": "multiline-expression", "next": "*" },
|
||||
{ "blankLine": "always", "prev": "*", "next": "return" }
|
||||
],
|
||||
"prefer-const": "off",
|
||||
"prefer-rest-params": "off",
|
||||
"prefer-spread": "off",
|
||||
"quotes": ["error", "single"],
|
||||
"semi": "error",
|
||||
"space-before-blocks": "error",
|
||||
@ -64,11 +66,6 @@
|
||||
"space-in-parens": "error",
|
||||
"space-infix-ops": "error",
|
||||
"spaced-comment": ["error", "always"],
|
||||
"wrap-iife": "error",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"@typescript-eslint/no-empty-function": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
"@typescript-eslint/no-this-alias": "off"
|
||||
"wrap-iife": "error"
|
||||
}
|
||||
}
|
||||
|
||||
21
.gitattributes
vendored
@ -3,7 +3,6 @@
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
.github export-ignore
|
||||
.phpstorm.meta.php export-ignore
|
||||
.scrutinizer.yml export-ignore
|
||||
.jshintrc export-ignore
|
||||
.stylelintrc.json export-ignore
|
||||
@ -11,7 +10,7 @@
|
||||
.eslintignore export-ignore
|
||||
.weblate export-ignore
|
||||
codecov.yml export-ignore
|
||||
infection.json5.dist export-ignore
|
||||
infection.json.dist export-ignore
|
||||
phpcs.xml.dist export-ignore
|
||||
phpstan.neon.dist export-ignore
|
||||
phpstan-baseline.neon export-ignore
|
||||
@ -19,16 +18,16 @@ psalm.xml export-ignore
|
||||
psalm-baseline.xml export-ignore
|
||||
DCO export-ignore
|
||||
.editorconfig export-ignore
|
||||
# Exclude only the following files and not all files in tests/
|
||||
# Exclude only the following files and not all files in test/
|
||||
# This is because some packaging teams need our test files but not the CI related files
|
||||
tests/doctum-config.php export-ignore
|
||||
tests/bootstrap-static.php export-ignore
|
||||
tests/config.e2e.inc.php export-ignore
|
||||
tests/phpstan-constants.php export-ignore
|
||||
tests/*-local-server export-ignore
|
||||
tests/*.conf export-ignore
|
||||
tests/*.ini export-ignore
|
||||
tests/ci-phplint export-ignore
|
||||
test/doctum-config.php export-ignore
|
||||
test/bootstrap-static.php export-ignore
|
||||
test/config.e2e.inc.php export-ignore
|
||||
test/phpstan-constants.php export-ignore
|
||||
test/*-local-server export-ignore
|
||||
test/*.conf export-ignore
|
||||
test/*.ini export-ignore
|
||||
test/ci-phplint export-ignore
|
||||
.browserslistrc export-ignore
|
||||
CODE_OF_CONDUCT.md export-ignore
|
||||
CONTRIBUTING.md export-ignore
|
||||
|
||||
2
.github/.readthedocs.yaml
vendored
@ -14,7 +14,7 @@ build:
|
||||
|
||||
# Build documentation in the "doc/" directory with Sphinx
|
||||
sphinx:
|
||||
configuration: docs/conf.py
|
||||
configuration: doc/conf.py
|
||||
# Fail on all warnings to avoid broken references
|
||||
# fail_on_warning: true
|
||||
|
||||
|
||||
85
.github/workflows/daily-snapshots.yml
vendored
@ -1,85 +0,0 @@
|
||||
name: Daily snapshots
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/daily-snapshots.yml'
|
||||
- 'bin/**'
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
generate-snapshots:
|
||||
name: Generate ${{ matrix.version }} snapshots
|
||||
runs-on: ubuntu-latest
|
||||
if: (github.event_name == 'schedule' && github.repository == 'phpmyadmin/phpmyadmin') || (github.event_name != 'schedule')
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { version: '5.2', branch: 'QA_5_2', php-version: '7.2', node-version: '12', python-version: '3.11' }
|
||||
- { version: '6.0', branch: 'master', php-version: '8.2', node-version: '20', python-version: '3.11' }
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ matrix.branch }}
|
||||
|
||||
- name: Install Gettext
|
||||
run: sudo apt-get install -y gettext
|
||||
|
||||
- name: Set up PHP ${{ matrix.php-version }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-version }}
|
||||
extensions: mbstring, iconv, mysqli, zip, gd
|
||||
coverage: none
|
||||
|
||||
- name: Set up Node ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Install Composer dependencies
|
||||
uses: ramsey/composer-install@v3
|
||||
|
||||
- name: Install Yarn modules
|
||||
run: yarn install --non-interactive
|
||||
|
||||
- name: Install Sphinx for the documentation build
|
||||
run: pip install 'Sphinx'
|
||||
|
||||
- name: Build the release
|
||||
if: matrix.branch == 'master'
|
||||
run: ./bin/internal/create-release.sh --daily ${{ matrix.version }}+snapshot ${{ matrix.branch }}
|
||||
|
||||
- name: Build the release
|
||||
if: matrix.branch != 'master'
|
||||
run: ./scripts/create-release.sh --daily ${{ matrix.version }}+snapshot ${{ matrix.branch }}
|
||||
|
||||
- name: Check release excludes
|
||||
if: matrix.branch == 'master'
|
||||
run: ./bin/internal/check-release-excludes.sh release/phpMyAdmin-${{ matrix.version }}+snapshot-all-languages.tar.gz
|
||||
continue-on-error: true
|
||||
|
||||
- name: Check release excludes
|
||||
if: matrix.branch != 'master'
|
||||
run: ./scripts/check-release-excludes.sh release/phpMyAdmin-${{ matrix.version }}+snapshot-all-languages.tar.gz
|
||||
continue-on-error: true
|
||||
|
||||
- name: Upload snapshots
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: phpMyAdmin-${{ matrix.version }}-snapshots
|
||||
path: release/*
|
||||
retention-days: 1
|
||||
76
.github/workflows/frontend-tests.yml
vendored
@ -1,76 +0,0 @@
|
||||
name: Frontend analysis and tests
|
||||
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'resources/js/**'
|
||||
- '**.s?css'
|
||||
- 'tests/javascript/**'
|
||||
- '.browserslistrc'
|
||||
- '.eslint*'
|
||||
- '*.cjs'
|
||||
- 'package.json'
|
||||
- 'tsconfig.json'
|
||||
- 'yarn.lock'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
javascript-test:
|
||||
name: Test JavaScript files
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install modules
|
||||
run: yarn install --non-interactive
|
||||
|
||||
- name: Run tests
|
||||
run: yarn test
|
||||
|
||||
javascript-lint:
|
||||
name: Lint JavaScript files
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install modules
|
||||
run: yarn install --non-interactive
|
||||
|
||||
- name: Lint JavaScript files
|
||||
run: yarn run js-lint --quiet
|
||||
|
||||
css-lint:
|
||||
name: Lint CSS files
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'yarn'
|
||||
|
||||
- name: Install modules
|
||||
run: yarn install --non-interactive
|
||||
|
||||
- name: Lint CSS files
|
||||
run: yarn run css-lint
|
||||
41
.github/workflows/lint-and-analyse-php.yml
vendored
@ -12,11 +12,43 @@ permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
lint-node:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 12
|
||||
|
||||
- name: Get Yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache Yarn dependencies
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install modules
|
||||
run: yarn install --non-interactive
|
||||
|
||||
- name: Lint JavaScript files
|
||||
run: yarn run js-lint --quiet
|
||||
|
||||
- name: Lint CSS files
|
||||
run: yarn run css-lint
|
||||
|
||||
lint-php-files:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-version: ["8.2"]
|
||||
php-version: ["7.2"]
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
@ -34,6 +66,7 @@ jobs:
|
||||
if: always()
|
||||
uses: ramsey/composer-install@v3
|
||||
with:
|
||||
dependency-versions: highest
|
||||
# Ignore zip for php-webdriver/webdriver
|
||||
composer-options: "--ignore-platform-req=ext-zip"
|
||||
|
||||
@ -48,7 +81,7 @@ jobs:
|
||||
- name: Lint PHP files
|
||||
# Allow the previous check to fail but not abort
|
||||
if: always()
|
||||
run: ./tests/ci-phplint
|
||||
run: ./test/ci-phplint
|
||||
|
||||
- name: Check coding-standard
|
||||
# Allow the previous check to fail but not abort
|
||||
@ -64,7 +97,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-version: ["8.2"]
|
||||
php-version: ["7.2"]
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
@ -77,6 +110,8 @@ jobs:
|
||||
|
||||
- name: Install Composer dependencies
|
||||
uses: ramsey/composer-install@v3
|
||||
with:
|
||||
dependency-versions: highest
|
||||
|
||||
- name: Analyse files with PHPStan
|
||||
run: composer phpstan -- --memory-limit 2G
|
||||
|
||||
2
.github/workflows/lint-docs.yml
vendored
@ -21,6 +21,6 @@ jobs:
|
||||
- name: Lint phpdoc blocks
|
||||
uses: sudo-bot/action-doctum@v5
|
||||
with:
|
||||
config-file: tests/doctum-config.php
|
||||
config-file: test/doctum-config.php
|
||||
method: "parse"
|
||||
cli-args: "--output-format=github --no-ansi --no-progress -v --ignore-parse-errors"
|
||||
|
||||
74
.github/workflows/mutation-tests.yml
vendored
@ -1,76 +1,68 @@
|
||||
# https://docs.github.com/en/actions
|
||||
|
||||
name: Mutation tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- 'src/**.php'
|
||||
- 'tests/unit/**.php'
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
paths:
|
||||
- 'src/**.php'
|
||||
- 'tests/unit/**.php'
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
branches: [master]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
infection:
|
||||
name: Infection
|
||||
tests:
|
||||
name: Mutation tests with PHP ${{ matrix.php-version }}
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
strategy:
|
||||
matrix:
|
||||
php-version:
|
||||
- "8.2"
|
||||
operating-system:
|
||||
- ubuntu-latest
|
||||
php-version: ["8.1"]
|
||||
operating-system: [ubuntu-latest]
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Checkout base ref code
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
ref: ${{ github.base_ref }}
|
||||
- name: Fetch github.base_ref (for diffing)
|
||||
if: ${{ github.base_ref != '' }}
|
||||
run: |
|
||||
git fetch --depth=1 origin +refs/heads/${{ github.base_ref }}:refs/remotes/origin/${{ github.base_ref }}
|
||||
|
||||
- name: Install Gettext
|
||||
run: sudo apt-get install -y gettext
|
||||
run: |
|
||||
sudo apt-get install -y gettext
|
||||
|
||||
- name: Generate mo files
|
||||
run: ./bin/generate-mo --quiet
|
||||
run: ./scripts/generate-mo --quiet
|
||||
|
||||
- name: Set up PHP ${{ matrix.php-version }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-version }}
|
||||
coverage: pcov
|
||||
tools: composer:v2, infection:0.27.11
|
||||
ini-values: memory_limit=-1
|
||||
tools: composer:v2, infection
|
||||
|
||||
- name: Install Composer dependencies
|
||||
uses: ramsey/composer-install@v3
|
||||
with:
|
||||
dependency-versions: highest
|
||||
|
||||
- name: Run Infection for changed files only
|
||||
if: github.event_name == 'push' || github.event_name == 'pull_request'
|
||||
- name: Collect coverage report
|
||||
run: |
|
||||
if [ "$GITHUB_EVENT_NAME" = "push" ]; then \
|
||||
INFECTION_GIT_DIFF_BASE="origin/$GITHUB_REF_NAME^"; else \
|
||||
INFECTION_GIT_DIFF_BASE="origin/$GITHUB_BASE_REF"; fi
|
||||
infection --threads=max --git-diff-lines --git-diff-base="$INFECTION_GIT_DIFF_BASE" \
|
||||
--logger-github --ignore-msi-with-no-mutations --only-covered --no-interaction --no-progress
|
||||
composer run phpunit -- --testsuite unit --stop-on-failure
|
||||
|
||||
- name: Run Infection for all files
|
||||
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
||||
- name: Infection
|
||||
if: ${{ github.base_ref != '' }}
|
||||
run: |
|
||||
CHANGED_FILES=$(git diff origin/$GITHUB_BASE_REF --diff-filter=AM --name-only | grep libraries/classes/ | paste -sd "," -);
|
||||
infection -j$(nproc) --skip-initial-tests --no-interaction --no-progress --coverage=build/logs \
|
||||
--ignore-msi-with-no-mutations \
|
||||
--filter=$CHANGED_FILES
|
||||
env:
|
||||
INFECTION_BADGE_API_KEY: ${{ secrets.INFECTION_BADGE_API_KEY }}
|
||||
|
||||
- name: Infection
|
||||
if: ${{ github.base_ref == '' }}
|
||||
run: |
|
||||
infection -j$(nproc) --skip-initial-tests --no-interaction --no-progress --coverage=build/logs
|
||||
env:
|
||||
INFECTION_BADGE_API_KEY: ${{ secrets.INFECTION_BADGE_API_KEY }}
|
||||
run: infection --threads=max --no-interaction --log-verbosity=none --logger-github=false
|
||||
|
||||
23
.github/workflows/other-tools.yml
vendored
@ -24,13 +24,13 @@ jobs:
|
||||
sudo apt-get install -y sphinx-doc python3-sphinx
|
||||
|
||||
- name: Build the documentation
|
||||
run: make -C docs html SPHINXOPTS='-n -W -a'
|
||||
run: make -C doc html SPHINXOPTS='-n -W -a'
|
||||
|
||||
build-release:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-version: ["8.2"]
|
||||
php-version: ["7.2"]
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
@ -47,12 +47,25 @@ jobs:
|
||||
|
||||
- name: Install Composer dependencies
|
||||
uses: ramsey/composer-install@v3
|
||||
with:
|
||||
dependency-versions: highest
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '20'
|
||||
cache: 'yarn'
|
||||
node-version: 12
|
||||
|
||||
- name: Get Yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache Yarn dependencies
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v6
|
||||
@ -63,4 +76,4 @@ jobs:
|
||||
run: pip install 'Sphinx'
|
||||
|
||||
- name: Build the release
|
||||
run: ./bin/internal/create-release.sh --ci
|
||||
run: ./scripts/create-release.sh --ci
|
||||
|
||||
27
.github/workflows/shellcheck.yml
vendored
@ -1,27 +0,0 @@
|
||||
name: ShellCheck
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'bin/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'bin/**'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
shellcheck:
|
||||
name: ShellCheck
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Run ShellCheck
|
||||
uses: reviewdog/action-shellcheck@v1
|
||||
with:
|
||||
path: bin
|
||||
check_all_files_with_shebangs: true
|
||||
fail_on_error: true
|
||||
24
.github/workflows/stale.yml
vendored
@ -1,24 +0,0 @@
|
||||
name: "Manage stale PRs/issues"
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
|
||||
jobs:
|
||||
run-stale-check:
|
||||
name: Check for stale PRs/issues
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
with:
|
||||
days-before-stale: 15
|
||||
days-before-close: -1
|
||||
only-issue-labels: "Awaiting Author Updates"
|
||||
close-issue-message: >
|
||||
The phpMyAdmin team is awaiting an update on this issue.
|
||||
Please check that all the questions have been answered.
|
||||
18
.github/workflows/test-selenium.yml
vendored
@ -12,8 +12,8 @@ permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
php-version: "8.2"
|
||||
node-version: "20"
|
||||
php-version: "7.2"
|
||||
node-version: "12"
|
||||
|
||||
jobs:
|
||||
generate-matrix:
|
||||
@ -29,7 +29,7 @@ jobs:
|
||||
name: Send test names to outputs
|
||||
run: |
|
||||
set -euo pipefail
|
||||
TEST_NAMES="[$(find $PWD/tests/end-to-end/ -type f -name '*Test.php' -print |sed -E "s,$PWD/tests/end-to-end/(.*)Test.php,{\"test-name\": \"\1\"}," | paste -sd ",")]"
|
||||
TEST_NAMES="[$(find $PWD/test/selenium/ -type f -name '*Test.php' -print |sed -E "s,$PWD/test/selenium/(.*)Test.php,{\"test-name\": \"\1\"}," | paste -sd ",")]"
|
||||
echo "tests=$(printf "$TEST_NAMES")" >> $GITHUB_OUTPUT
|
||||
selenium:
|
||||
name: "Selenium"
|
||||
@ -84,7 +84,7 @@ jobs:
|
||||
run: sudo apt-get update && sudo apt-get install -y gettext
|
||||
|
||||
- name: Generate mo files
|
||||
run: ./bin/generate-mo --quiet
|
||||
run: ./scripts/generate-mo --quiet
|
||||
|
||||
- name: Set up PHP ${{ env.php-version }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
@ -106,7 +106,7 @@ jobs:
|
||||
run: yarn install --non-interactive --production
|
||||
|
||||
- name: Copy the config
|
||||
run: cp tests/config.e2e.inc.php config.inc.php
|
||||
run: cp test/config.e2e.inc.php config.inc.php
|
||||
|
||||
- name: Start server
|
||||
env:
|
||||
@ -116,7 +116,7 @@ jobs:
|
||||
run: |
|
||||
sudo chown -R runner:docker /var/lib/nginx/
|
||||
sudo chown -R runner:docker /var/log/nginx/
|
||||
./tests/start-local-server
|
||||
./test/start-local-server
|
||||
echo "SELENIUM_TEMPDIR=$(cat /tmp/last_temp_dir_phpMyAdminTests)" >> $GITHUB_OUTPUT
|
||||
id: start-local-server
|
||||
|
||||
@ -126,12 +126,12 @@ jobs:
|
||||
TESTSUITE_SELENIUM_BROWSER: chrome
|
||||
TESTSUITE_USER: root
|
||||
TESTSUITE_PASSWORD: testbench
|
||||
# Port defined in tests/nginx.conf
|
||||
# Port defined in test/nginx.conf
|
||||
TESTSUITE_URL: http://docker-host-bridge:8000
|
||||
TESTSUITE_DATABASE_PREFIX: "selenium"
|
||||
TESTSUITE_SELENIUM_HOST: "127.0.0.1"
|
||||
TESTSUITE_SELENIUM_PORT: "4444"
|
||||
run: ./vendor/bin/phpunit --testsuite end-to-end --no-logging --no-coverage --stop-on-skipped --testdox tests/end-to-end/${{ matrix.test-name }}Test.php
|
||||
run: ./vendor/bin/phpunit --testsuite selenium --no-logging --no-coverage --stop-on-skipped --testdox test/selenium/${{ matrix.test-name }}Test.php
|
||||
|
||||
- name: Output logs and stop server
|
||||
env:
|
||||
@ -141,7 +141,7 @@ jobs:
|
||||
run: |
|
||||
if [ -f "${SELENIUM_TEMPDIR}/php.log" ] ; then cat "${SELENIUM_TEMPDIR}/php.log" ; fi
|
||||
if [ -f "${SELENIUM_TEMPDIR}/nginx-error.log" ] ; then cat "${SELENIUM_TEMPDIR}/nginx-error.log" ; fi
|
||||
./tests/stop-local-server
|
||||
./test/stop-local-server
|
||||
|
||||
- name: Upload screenshots
|
||||
uses: actions/upload-artifact@v6
|
||||
|
||||
155
.github/workflows/tests.yml
vendored
@ -20,12 +20,13 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- { php-version: '82', experimental: false, arch: 'amd64', exclude-phpunit-groups: '--exclude-group extension-iconv' }
|
||||
- { php-version: '82', experimental: false, arch: 'arm64/v8', exclude-phpunit-groups: '--exclude-group extension-iconv' }
|
||||
- { php-version: '82', experimental: false, arch: 'arm/v7', exclude-phpunit-groups: '--exclude-group extension-iconv --exclude-group 32bit-incompatible' }
|
||||
- { php-version: '82', experimental: false, arch: 'i386', exclude-phpunit-groups: '--exclude-group extension-iconv --exclude-group 32bit-incompatible' }
|
||||
- { php-version: '82', experimental: true, arch: 'ppc64le', exclude-phpunit-groups: '--exclude-group extension-iconv' }
|
||||
- { php-version: '82', experimental: false, arch: 's390x', exclude-phpunit-groups: '--exclude-group extension-iconv --exclude-group 32bit-incompatible' }
|
||||
- { php-version: '8', experimental: false, arch: 'amd64', exclude-phpunit-groups: 'extension-iconv' }
|
||||
- { php-version: '8', experimental: false, arch: 'arm64v8', exclude-phpunit-groups: 'extension-iconv' }
|
||||
- { php-version: '8', experimental: false, arch: 'arm32v7', exclude-phpunit-groups: 'extension-iconv,32bit-incompatible' }
|
||||
- { php-version: '8', experimental: false, arch: 'arm32v6', exclude-phpunit-groups: 'extension-iconv,32bit-incompatible' }
|
||||
- { php-version: '8', experimental: false, arch: 'i386', exclude-phpunit-groups: 'extension-iconv,32bit-incompatible' }
|
||||
- { php-version: '8', experimental: true, arch: 'ppc64le', exclude-phpunit-groups: 'extension-iconv' }
|
||||
- { php-version: '8', experimental: false, arch: 's390x', exclude-phpunit-groups: 'extension-iconv,32bit-incompatible' }
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
@ -40,40 +41,42 @@ jobs:
|
||||
printf "set -exu && \
|
||||
export V='%s' && \
|
||||
apk add --update --no-cache \
|
||||
php\$V-cli php\$V-mysqli php\$V-session php\$V-mbstring php\$V-ctype php\$V-sodium \
|
||||
php\$V-cli php\$V-mysqli php\$V-session php\$V-mbstring php\$V-ctype \
|
||||
php\$V-iconv php\$V-xml php\$V-tokenizer php\$V-xmlwriter php\$V-simplexml \
|
||||
php\$V-dom php\$V-json php\$V-bz2 php\$V-curl php\$V-gd php\$V-zip php\$V-bcmath \
|
||||
musl-locales musl-locales-lang \
|
||||
gettext composer git && \
|
||||
composer config version "$(php -r "define('VERSION_SUFFIX', ''); require_once('src/Version.php'); echo \PhpMyAdmin\Version::VERSION;")" && \
|
||||
composer install && \
|
||||
./bin/generate-mo && \
|
||||
php\$V -d memory_limit=512M ./vendor/bin/phpunit --no-logging --no-coverage --testsuite unit %s" \
|
||||
composer config version "$(php -r "define('VERSION_SUFFIX', ''); require_once('libraries/classes/Version.php'); echo \PhpMyAdmin\Version::VERSION;")" && \
|
||||
composer update && \
|
||||
./scripts/generate-mo && \
|
||||
php\$V -d memory_limit=512M ./vendor/bin/phpunit --no-coverage --testsuite unit --exclude-group=%s" \
|
||||
"${{ matrix.php-version }}" "${{ matrix.exclude-phpunit-groups }}" > ./do-tests.sh
|
||||
|
||||
- name: Set up multi arch support
|
||||
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
|
||||
- name: Print arch
|
||||
run: docker run --rm --platform linux/${{ matrix.arch }} alpine:3.19 uname -a
|
||||
run: docker run --rm ${{ matrix.arch }}/alpine:3.15 uname -a
|
||||
|
||||
- name: Run tests on php ${{ matrix.php-version }}
|
||||
run: docker run -v $PWD:/app --workdir /app --rm --platform linux/${{ matrix.arch }} alpine:3.19 sh /app/do-tests.sh
|
||||
run: docker run -v $PWD:/app --workdir /app --rm ${{ matrix.arch }}/alpine:3.15 sh /app/do-tests.sh
|
||||
|
||||
test-php:
|
||||
name: Test on PHP ${{ matrix.php-version }}, ${{ matrix.composer-dependency }} and ${{ matrix.os }}
|
||||
name: Test on PHP ${{ matrix.php-version }} and ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
continue-on-error: ${{ matrix.php-version == '8.5' }}
|
||||
continue-on-error: ${{ matrix.experimental }}
|
||||
strategy:
|
||||
matrix:
|
||||
php-version: ['8.2', '8.3', '8.4']
|
||||
php-version: ['7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4']
|
||||
experimental: [false]
|
||||
os: [ubuntu-latest]
|
||||
composer-dependency: [locked, highest]
|
||||
phpunit-options: ['--testsuite unit']
|
||||
php-extensions: ['mbstring, iconv, mysqli, zip, gd, bz2']
|
||||
include:
|
||||
- php-version: '8.5'
|
||||
experimental: true
|
||||
os: ubuntu-latest
|
||||
composer-dependency: locked
|
||||
phpunit-options: '--configuration test/phpunit-php-nightly.xml'
|
||||
composer-options: '--ignore-platform-req=php+'
|
||||
php-extensions: 'mbstring, iconv, mysqli, zip, bz2'
|
||||
steps:
|
||||
@ -87,7 +90,7 @@ jobs:
|
||||
run: sudo apt-get install -y gettext
|
||||
|
||||
- name: Generate mo files
|
||||
run: ./bin/generate-mo --quiet
|
||||
run: ./scripts/generate-mo --quiet
|
||||
|
||||
- name: Set up PHP ${{ matrix.php-version }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
@ -99,11 +102,11 @@ jobs:
|
||||
- name: Install Composer dependencies
|
||||
uses: ramsey/composer-install@v3
|
||||
with:
|
||||
dependency-versions: ${{ matrix.composer-dependency }}
|
||||
dependency-versions: highest
|
||||
composer-options: ${{ matrix.composer-options }}
|
||||
|
||||
- name: Run PHP tests
|
||||
run: composer run phpunit -- --testsuite unit --display-deprecations --display-notices --display-warnings --display-errors
|
||||
run: composer run phpunit -- ${{ matrix.phpunit-options }}
|
||||
|
||||
- name: Send coverage
|
||||
uses: codecov/codecov-action@v3
|
||||
@ -134,9 +137,9 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
php-version: ["8.2"]
|
||||
php-version: ["7.2"]
|
||||
os: [ubuntu-latest]
|
||||
extension: ["dbase"]
|
||||
extension: ["dbase", "recode"]
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
@ -148,7 +151,7 @@ jobs:
|
||||
run: sudo apt-get install -y gettext
|
||||
|
||||
- name: Generate mo files
|
||||
run: ./bin/generate-mo --quiet
|
||||
run: ./scripts/generate-mo --quiet
|
||||
|
||||
- name: Set up PHP ${{ matrix.php-version }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
@ -159,6 +162,8 @@ jobs:
|
||||
|
||||
- name: Install Composer dependencies
|
||||
uses: ramsey/composer-install@v3
|
||||
with:
|
||||
dependency-versions: highest
|
||||
|
||||
- name: Run PHP tests
|
||||
run: composer run phpunit -- --testsuite unit
|
||||
@ -167,7 +172,7 @@ jobs:
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
flags: ${{ matrix.extension }}-extension
|
||||
name: php-${{ matrix.php-version }}-${{ matrix.extension }}-enabled
|
||||
name: php-7.2-${{ matrix.extension }}-enabled
|
||||
|
||||
- name: Send coverage to Scrutinizer
|
||||
uses: sudo-bot/action-scrutinizer@latest
|
||||
@ -186,3 +191,103 @@ jobs:
|
||||
with:
|
||||
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
||||
coverage-reports: build/logs/clover.xml
|
||||
|
||||
test-php-psr7-implementations:
|
||||
name: Test on PHP ${{ matrix.php-version }} (+ psr7-${{ matrix.psr-7-library }})
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
php-version: ['7.2']
|
||||
php-extensions: ['mbstring, iconv, mysqli, zip, bz2']
|
||||
psr-7-library: ['guzzlehttp/psr7', 'slim/psr7', 'nyholm/psr7']
|
||||
include:
|
||||
# See: https://github.com/laminas/laminas-diactoros/releases/tag/2.18.0
|
||||
- {psr-7-library: 'laminas/laminas-diactoros', php-version: '8.0'}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
# Fetch some commits for Scrutinizer coverage upload
|
||||
fetch-depth: 15
|
||||
|
||||
- name: Install gettext
|
||||
run: sudo apt-get install -y gettext
|
||||
|
||||
- name: Generate mo files
|
||||
run: ./scripts/generate-mo --quiet
|
||||
|
||||
- name: Set up PHP ${{ matrix.php-version }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-version }}
|
||||
extensions: ${{ matrix.php-extensions }}
|
||||
coverage: pcov
|
||||
|
||||
- name: Install Composer dependencies
|
||||
uses: ramsey/composer-install@v3
|
||||
with:
|
||||
dependency-versions: highest
|
||||
|
||||
- name: Remove default PSR-7 implementation
|
||||
run: composer remove slim/psr7
|
||||
|
||||
- name: Add PSR-7 implementation
|
||||
run: composer require ${{ matrix.psr-7-library }}
|
||||
|
||||
- name: Run PHP tests
|
||||
run: composer run phpunit -- --testsuite unit
|
||||
|
||||
- name: Send coverage
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
flags: ${{ matrix.psr-7-library }}-psr-7
|
||||
name: php-7.2-psr-7
|
||||
|
||||
- name: Send coverage to Scrutinizer
|
||||
uses: sudo-bot/action-scrutinizer@latest
|
||||
# Do not run this step on forked versions of the main repository (example: contributor forks)
|
||||
if: github.repository == 'phpmyadmin/phpmyadmin'
|
||||
continue-on-error: true
|
||||
with:
|
||||
cli-args: "--format=php-clover build/logs/clover.xml --revision=${{ github.event.pull_request.head.sha || github.sha }}"
|
||||
|
||||
- name: Send coverage to Codacy
|
||||
uses: codacy/codacy-coverage-reporter-action@v1
|
||||
# Do not run this step on forked versions of the main repository (example: contributor forks)
|
||||
if: github.repository == 'phpmyadmin/phpmyadmin'
|
||||
# Upload can fail on forks or if the secret is missing
|
||||
continue-on-error: true
|
||||
with:
|
||||
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
||||
coverage-reports: build/logs/clover.xml
|
||||
|
||||
test-js:
|
||||
name: Test javascript files
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Node
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 12
|
||||
|
||||
- name: Get Yarn cache directory path
|
||||
id: yarn-cache-dir-path
|
||||
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Cache Yarn dependencies
|
||||
uses: actions/cache@v5
|
||||
with:
|
||||
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
|
||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-yarn-
|
||||
|
||||
- name: Install modules
|
||||
run: yarn install --non-interactive
|
||||
|
||||
- name: Run tests
|
||||
run: yarn test
|
||||
|
||||
6
.github/workflows/update-po.yml
vendored
@ -18,7 +18,7 @@ jobs:
|
||||
if: (github.event_name == 'schedule' && github.repository == 'phpmyadmin/phpmyadmin') || (github.event_name != 'schedule')
|
||||
strategy:
|
||||
matrix:
|
||||
php-version: ["8.2"]
|
||||
php-version: ["8.1"]
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v6
|
||||
@ -35,6 +35,8 @@ jobs:
|
||||
|
||||
- name: Install Composer dependencies
|
||||
uses: ramsey/composer-install@v3
|
||||
with:
|
||||
dependency-versions: highest
|
||||
|
||||
- name: Set up git config
|
||||
run: |
|
||||
@ -43,7 +45,7 @@ jobs:
|
||||
|
||||
- name: Update PO files
|
||||
run: |
|
||||
./bin/update-po
|
||||
./scripts/update-po
|
||||
|
||||
- name: Push changes
|
||||
run: |
|
||||
|
||||
68
.gitignore
vendored
@ -1,22 +1,17 @@
|
||||
# Directory for creating releases
|
||||
/release/
|
||||
|
||||
# Configuration files
|
||||
/config.inc.php
|
||||
/config.header.inc.php
|
||||
/config.footer.inc.php
|
||||
|
||||
# Upload/save dirs
|
||||
/upload/
|
||||
/save/
|
||||
/tmp/
|
||||
|
||||
# For setup script
|
||||
/config/
|
||||
|
||||
# ctags
|
||||
tags
|
||||
|
||||
# Editor files
|
||||
phpmyadmin.wpj
|
||||
.projectOptions
|
||||
@ -29,86 +24,47 @@ phpmyadmin.wpj
|
||||
.netbeans
|
||||
.vscode
|
||||
*.sw[op]
|
||||
|
||||
# Web server files
|
||||
web.config
|
||||
.htaccess
|
||||
|
||||
# Locales
|
||||
/locale/
|
||||
/resources/locale/
|
||||
|
||||
# Temporary files to generate locales for Twig
|
||||
/twig-templates/
|
||||
|
||||
# Backups
|
||||
*~
|
||||
|
||||
# API documentation
|
||||
/apidoc/
|
||||
/docs/_build
|
||||
/docs/doctrees
|
||||
/docs/html
|
||||
/docs/linkcheck/
|
||||
/docs/locale
|
||||
/docs/**/*.pyc
|
||||
|
||||
/doc/linkcheck/
|
||||
# Demo server
|
||||
revision-info.php
|
||||
|
||||
# PHP_CodeSniffer
|
||||
phpcs.xml
|
||||
.phpcs-cache
|
||||
|
||||
# PHPUnit
|
||||
.phpunit.result.cache
|
||||
phpunit.xml
|
||||
/tests/bootstrap.php
|
||||
/tests/gis/*-actual.json
|
||||
/tests/gis/*-actual.pdf
|
||||
/tests/gis/*-actual.png
|
||||
/tests/gis/*-actual.svg
|
||||
|
||||
/test/bootstrap.php
|
||||
.phpunit.result.cache
|
||||
# Jenkins
|
||||
/build/
|
||||
|
||||
# Netbeans ide stuff
|
||||
/nbproject/
|
||||
|
||||
# Eclipse ide stuff
|
||||
/.pydevproject
|
||||
|
||||
# Ant cache
|
||||
cache.properties
|
||||
|
||||
# Composer
|
||||
composer.lock
|
||||
/vendor/
|
||||
|
||||
# NPM
|
||||
/node_modules/
|
||||
phpstan.neon
|
||||
|
||||
# Infection
|
||||
infection.json5
|
||||
/js/
|
||||
/setup/
|
||||
/themes/
|
||||
|
||||
# App
|
||||
/app/cache/*
|
||||
!/app/cache/.gitkeep
|
||||
/app/language_stats_inc.php
|
||||
|
||||
# public
|
||||
/public/js/*
|
||||
!/public/js/.gitkeep
|
||||
/public/setup/*.css
|
||||
/public/setup/*.css.map
|
||||
/public/themes/*
|
||||
!/public/themes/dot.gif
|
||||
!/public/themes/bootstrap/
|
||||
!/public/themes/metro/
|
||||
!/public/themes/original/
|
||||
!/public/themes/pmahomme/
|
||||
/public/themes/*/css/*.css
|
||||
/public/themes/*/css/*.css.map
|
||||
infection.json
|
||||
infection.log
|
||||
/js/vendor/js.cookie.min.js
|
||||
/js/vendor/openlayers/OpenLayers.js.LICENSE.txt
|
||||
/setup/styles.rtl.css
|
||||
/test/test_data/gis/
|
||||
/public/
|
||||
/app/
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace PHPSTORM_META {
|
||||
override(\Psr\Container\ContainerInterface::get(0), map(['@']));
|
||||
}
|
||||
3
.rtlcssrc.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"map": true
|
||||
}
|
||||
@ -5,11 +5,12 @@ imports:
|
||||
filter:
|
||||
excluded_paths:
|
||||
- build/
|
||||
- js/vendor/
|
||||
- js/dist/
|
||||
- node_modules/
|
||||
- public/js/
|
||||
- tmp/
|
||||
- vendor/
|
||||
- tests/doctum-config.php
|
||||
- test/doctum-config.php
|
||||
checks:
|
||||
javascript: true
|
||||
php: true
|
||||
@ -18,14 +19,18 @@ tools:
|
||||
runs: 4 # php 7.x versions
|
||||
timeout: 900 # 15 min
|
||||
build:
|
||||
image: default-jammy # New NodeJS versions require newer versions of glibc (noble was not available on 12/09/2025)
|
||||
image: default-bionic # Needed to make PHP 7.2 compile
|
||||
nodes:
|
||||
analysis:
|
||||
environment:
|
||||
php: 8.2
|
||||
node: 20 # Scrutinizer uses nvm
|
||||
php:
|
||||
version: 7.2
|
||||
compile_options: '--enable-zip --enable-gd --with-openssl --with-curl --with-mysqli'
|
||||
node: 12 # Scrutinizer uses nvm
|
||||
dependencies:
|
||||
before:
|
||||
- sudo /home/scrutinizer/.phpenv/shims/php -f /usr/bin/composer.phar self-update --2
|
||||
- composer --version
|
||||
- composer config --unset repositories.0
|
||||
- composer install
|
||||
- composer require tecnickcom/tcpdf pragmarx/google2fa-qrcode bacon/bacon-qr-code code-lts/u2f-php-server
|
||||
|
||||
@ -4,20 +4,11 @@
|
||||
"stylelint-config-recommended-scss"
|
||||
],
|
||||
"rules": {
|
||||
"selector-class-pattern": null,
|
||||
"import-notation": null,
|
||||
"selector-attribute-quotes": null,
|
||||
"shorthand-property-no-redundant-values": null,
|
||||
"function-url-quotes": null,
|
||||
"selector-id-pattern": null,
|
||||
"alpha-value-notation": null,
|
||||
"color-function-notation": null,
|
||||
"scss/no-global-function-names": null,
|
||||
"scss/function-quote-no-quoted-strings-inside": null,
|
||||
"property-no-vendor-prefix": null,
|
||||
"declaration-block-no-redundant-longhand-properties": null,
|
||||
"no-descending-specificity": null,
|
||||
"no-duplicate-selectors": null,
|
||||
"block-closing-brace-newline-after": ["always", {
|
||||
"ignoreAtRules": ["if", "else"]
|
||||
}],
|
||||
"at-rule-empty-line-before": ["always", {
|
||||
"except": [
|
||||
"blockless-after-same-name-blockless",
|
||||
|
||||
102
CHANGELOG-6.0.md
@ -1,102 +0,0 @@
|
||||
# Changes in phpMyAdmin 6.0
|
||||
|
||||
All notable changes of the phpMyAdmin 6.0 release series are documented in this file following the [Keep a Changelog](https://keepachangelog.com/) format.
|
||||
|
||||
## [6.0.0] - YYYY-MM-DD
|
||||
|
||||
### Added
|
||||
|
||||
* [#17029](https://github.com/phpmyadmin/phpmyadmin/pull/17029): Enable Twig's `strict_variables` option in development environment
|
||||
* [#17361](https://github.com/phpmyadmin/phpmyadmin/pull/17361): Add webpack bundler
|
||||
* [#16500](https://github.com/phpmyadmin/phpmyadmin/pull/16500): Add paging to Routines page
|
||||
* [#17753](https://github.com/phpmyadmin/phpmyadmin/pull/17753): Adding `inputmode` numeric to integer fields
|
||||
* [#17765](https://github.com/phpmyadmin/phpmyadmin/pull/17765): Make search input field types match columns types (integer and float)
|
||||
* [#17809](https://github.com/phpmyadmin/phpmyadmin/pull/17809): Adds support for SHA2 function
|
||||
* [#18098](https://github.com/phpmyadmin/phpmyadmin/pull/18098): Added reCaptcha example for Cloudflare Turnstile
|
||||
* [#18223](https://github.com/phpmyadmin/phpmyadmin/pull/18223): Add a configuration option to (dis)allow shared bookmarks: `$cfg['AllowSharedBookmarks'] = true;`
|
||||
* [#18225](https://github.com/phpmyadmin/phpmyadmin/pull/18225): Make database and web server info separately configurable on `$cfg['ShowServerInfo']`
|
||||
* [#18257](https://github.com/phpmyadmin/phpmyadmin/pull/18257): Add support for theme color modes
|
||||
* [#17009](https://github.com/phpmyadmin/phpmyadmin/issues/17009): Implement the security header `Permissions-Policy`
|
||||
* [#18349](https://github.com/phpmyadmin/phpmyadmin/pull/18349): Allow rollbacking SET queries
|
||||
* [#18589](https://github.com/phpmyadmin/phpmyadmin/pull/18589): Add support for PSR-15 middleware
|
||||
* [#18649](https://github.com/phpmyadmin/phpmyadmin/pull/18649): Add color mode toggle at the top navigation bar
|
||||
* [#18668](https://github.com/phpmyadmin/phpmyadmin/pull/18668): Add number formatting to Total on Browse
|
||||
* [#18747](https://github.com/phpmyadmin/phpmyadmin/pull/18747): Add `composer.lock` to version control
|
||||
* [#18799](https://github.com/phpmyadmin/phpmyadmin/pull/18799): Add an user account menu button at top right
|
||||
* [#18812](https://github.com/phpmyadmin/phpmyadmin/pull/18812): Add role based auth for MySQL 8.x and compatibles
|
||||
* [#18916](https://github.com/phpmyadmin/phpmyadmin/pull/18916): Add format button to routine, event and trigger
|
||||
* [#18537](https://github.com/phpmyadmin/phpmyadmin/pull/18537): Add copy to clipboard for export as text
|
||||
* [#19287](https://github.com/phpmyadmin/phpmyadmin/pull/19287): Add optional support for binary data in database search
|
||||
* [#19308](https://github.com/phpmyadmin/phpmyadmin/pull/19308): Added an option in the SQL box to "Format as a single line"
|
||||
* [#19352](https://github.com/phpmyadmin/phpmyadmin/pull/19352): Added support for `BETWEEN` and `NOT BETWEEN` on the query generator
|
||||
* [#19525](https://github.com/phpmyadmin/phpmyadmin/pull/19525): Add support for `INSERT IGNORE` into for non table imports
|
||||
* [#19555](https://github.com/phpmyadmin/phpmyadmin/pull/19555): Add button for Copy Query in Query Generator
|
||||
* [#19691](https://github.com/phpmyadmin/phpmyadmin/pull/19691): Show hostname on main page
|
||||
* [#19751](https://github.com/phpmyadmin/phpmyadmin/pull/19751): Add Go button at the top of the insert row table
|
||||
* [#19812](https://github.com/phpmyadmin/phpmyadmin/pull/19812): Add show create table shortcuts when viewing tables
|
||||
|
||||
### Changed
|
||||
|
||||
* [#17116](https://github.com/phpmyadmin/phpmyadmin/pull/17116): Replace Change Password dialog to modal
|
||||
* [#17125](https://github.com/phpmyadmin/phpmyadmin/pull/17125): Replace Add Index dialog with modal
|
||||
* [#17127](https://github.com/phpmyadmin/phpmyadmin/pull/17127): Replace Page settings dialog with modal
|
||||
* [#17278](https://github.com/phpmyadmin/phpmyadmin/pull/17278): Improve NULL div design
|
||||
* [#17280](https://github.com/phpmyadmin/phpmyadmin/pull/17280): Improve theme card heights
|
||||
* [#17399](https://github.com/phpmyadmin/phpmyadmin/pull/17399): Handle connection errors with Exception instead of warnings
|
||||
* [#17515](https://github.com/phpmyadmin/phpmyadmin/pull/17515): Bump js-cookie version from 2.2.1 to 3.0.1
|
||||
* [#17561](https://github.com/phpmyadmin/phpmyadmin/pull/17561): Improve Change Password modal UI
|
||||
* [#17676](https://github.com/phpmyadmin/phpmyadmin/pull/17676): Extract `url.php` entry point into a route
|
||||
* [#17677](https://github.com/phpmyadmin/phpmyadmin/pull/17677): Extract `js/messages.php` entry point into `/messages` route
|
||||
* [#17801](https://github.com/phpmyadmin/phpmyadmin/pull/17801): Export page of Settings is not responsive
|
||||
* [#17842](https://github.com/phpmyadmin/phpmyadmin/issues/17842): Change js.cookie.js to js.cookie.min.js
|
||||
* [#17632](https://github.com/phpmyadmin/phpmyadmin/issues/17632): Improve tab keypress to text fields on the login form
|
||||
* [#18124](https://github.com/phpmyadmin/phpmyadmin/pull/18124): Invert svg gis viewer mouse wheel zoom direction
|
||||
* [#18136](https://github.com/phpmyadmin/phpmyadmin/pull/18136): Force a full page reload for top menu links
|
||||
* [#18145](https://github.com/phpmyadmin/phpmyadmin/pull/18145): Move public files to the public directory
|
||||
* [#18300](https://github.com/phpmyadmin/phpmyadmin/pull/18300): Convert JavaScript files to TypeScript
|
||||
* [#18310](https://github.com/phpmyadmin/phpmyadmin/pull/18310): Minimize form label column width in Routine, Event and Trigger modals
|
||||
* [#18311](https://github.com/phpmyadmin/phpmyadmin/pull/18311): Only allow resizing textarea vertically
|
||||
* [#18365](https://github.com/phpmyadmin/phpmyadmin/pull/18365): Change 'reCaptcha' text to 'Captcha'
|
||||
* [#18439](https://github.com/phpmyadmin/phpmyadmin/pull/18439): Redesign the SQL message card
|
||||
* [#18576](https://github.com/phpmyadmin/phpmyadmin/pull/18576): Wrap the Application::run() code with an HTTP handler
|
||||
* [#18652](https://github.com/phpmyadmin/phpmyadmin/pull/18652): Disable AJAX for navigation sidebar links
|
||||
* [#18658](https://github.com/phpmyadmin/phpmyadmin/pull/18658): Update OpenLayers
|
||||
* [#18703](https://github.com/phpmyadmin/phpmyadmin/pull/18703): Limit label width in create-view table
|
||||
* [#18512](https://github.com/phpmyadmin/phpmyadmin/issues/18512): New directory structure
|
||||
* [#18994](https://github.com/phpmyadmin/phpmyadmin/pull/18994): Refactor name generation of file imports
|
||||
* [#19110](https://github.com/phpmyadmin/phpmyadmin/pull/19110): Refactor recent/favorite tables buttons
|
||||
* [#19182](https://github.com/phpmyadmin/phpmyadmin/pull/19182): Refactor GIS editor modal
|
||||
* [#19214](https://github.com/phpmyadmin/phpmyadmin/pull/19214): Replace jqPlot library with Chart.js library
|
||||
* [#19294](https://github.com/phpmyadmin/phpmyadmin/pull/19294): Simplify IN, NOT IN criteria text in Query Generator
|
||||
* [#19327](https://github.com/phpmyadmin/phpmyadmin/pull/19327): Prevent IN / NOT IN duplicates in Query Generator
|
||||
* [835fc27](https://github.com/phpmyadmin/phpmyadmin/commit/835fc2715d6f7330fa5ed680e8315b98eaa96cec): Redesign the User Groups form page
|
||||
* [624126e](https://github.com/phpmyadmin/phpmyadmin/commit/624126edc8ea629ebbb222496bb4dad6cac9c6dd): Redesign the database and table privileges pages
|
||||
* [#19398](https://github.com/phpmyadmin/phpmyadmin/issues/19398): Use `application/json` instead of `text/plain` for JSON export
|
||||
* [#19496](https://github.com/phpmyadmin/phpmyadmin/pull/19496): Update CODE_OF_CONDUCT.md
|
||||
* [#19513](https://github.com/phpmyadmin/phpmyadmin/pull/19513): Hide unwanted input depending on chosen Op type in Query Generator
|
||||
* [#19536](https://github.com/phpmyadmin/phpmyadmin/pull/19536): Disable Search input on unary operators
|
||||
* [#19542](https://github.com/phpmyadmin/phpmyadmin/pull/19542): Made Search operators `= ''`/`!= ''` more obvious
|
||||
* [#19651](https://github.com/phpmyadmin/phpmyadmin/pull/19651): Stay the on same page when deleting a foreign key
|
||||
* [#19712](https://github.com/phpmyadmin/phpmyadmin/pull/19712): Import OpenLayers and Bootstrap directly using Webpack
|
||||
* [#19794](https://github.com/phpmyadmin/phpmyadmin/pull/19794): Use `jquery-ui-timepicker-addon.min.js` instead of `jquery-ui-timepicker-addon.js`
|
||||
* [#19795](https://github.com/phpmyadmin/phpmyadmin/pull/19795): Use `additional-methods.min.js` instead of `additional-methods.js`
|
||||
* [#19564](https://github.com/phpmyadmin/phpmyadmin/pull/19564): Update the table comment field to a textarea
|
||||
* [#19947](https://github.com/phpmyadmin/phpmyadmin/pull/19947): Export ODS column headers by default
|
||||
|
||||
### Removed
|
||||
|
||||
* [#17351](https://github.com/phpmyadmin/phpmyadmin/pull/17351): Drop `stripslashes`
|
||||
* [#17516](https://github.com/phpmyadmin/phpmyadmin/pull/17516): Remove `jquery-debounce-throttle` JavaScript dependency
|
||||
* [#17752](https://github.com/phpmyadmin/phpmyadmin/pull/17752): Remove Sodium polyfill and require the PHP sodium extension
|
||||
* [#18430](https://github.com/phpmyadmin/phpmyadmin/pull/18430): Remove Query-By-Example feature
|
||||
* [#18547](https://github.com/phpmyadmin/phpmyadmin/pull/18547): Remove support for the Recode extension
|
||||
* [#18587](https://github.com/phpmyadmin/phpmyadmin/pull/18587): Remove the `public/show_config_errors.php` file
|
||||
* [#19128](https://github.com/phpmyadmin/phpmyadmin/pull/19128): Remove the `phpmyadmin/twig-i18n-extension` package
|
||||
* [#19243](https://github.com/phpmyadmin/phpmyadmin/pull/19243): Bump minimum PHP version to 8.2.0
|
||||
* [#19408](https://github.com/phpmyadmin/phpmyadmin/pull/19408): Removed the popup that warned about having an auto-saved query
|
||||
* [#19409](https://github.com/phpmyadmin/phpmyadmin/pull/19409): Drop Protocol version
|
||||
* [#19550](https://github.com/phpmyadmin/phpmyadmin/pull/19550): Replace jQuery UI's tooltip with Bootstrap's Tooltip
|
||||
* [#19852](https://github.com/phpmyadmin/phpmyadmin/pull/19852): Bump Node version to 20
|
||||
* [#19854](https://github.com/phpmyadmin/phpmyadmin/pull/19854): Drop support for BaconQrCode v2
|
||||
|
||||
[6.0.0]: https://github.com/phpmyadmin/phpmyadmin/compare/QA_5_2...master
|
||||
@ -2,131 +2,45 @@
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||
identity and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
Examples of behavior that contributes to creating a positive environment include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the overall
|
||||
community
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||
any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address,
|
||||
without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
* Publishing others' private information, such as a physical or electronic address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
## Our Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official email address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
info@phpmyadmin.net.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at info@phpmyadmin.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series of
|
||||
actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or permanent
|
||||
ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||
community.
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct/][version]
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||
[https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
[homepage]: https://www.contributor-covenant.org/
|
||||
[version]: https://www.contributor-covenant.org/version/1/4/code-of-conduct/
|
||||
|
||||
@ -8,7 +8,7 @@ We appreciate your effort to improve phpMyAdmin by submitting a bug report. Befo
|
||||
|
||||
1. Check whether the bug you face **hasn't been already reported**. Duplicate reports take us time, that we could be used to fix other bugs or make improvements.
|
||||
|
||||
2. Please specify the phpMyAdmin, server, PHP, MySQL, and browser information that may be helpful in resolving the issue, especially the exact **version numbers**.
|
||||
2. Specify the phpMyAdmin, server, PHP, MySQL and browser information that may be helpful to fix the problem, especially exact **version numbers**.
|
||||
|
||||
3. If you got some error, please **describe what happened** and add an error message. Reports like "I get an error when I clicked on some link" are useless.
|
||||
|
||||
|
||||
335
ChangeLog
Normal file
@ -0,0 +1,335 @@
|
||||
phpMyAdmin - ChangeLog
|
||||
======================
|
||||
|
||||
5.2.4 (not yet released)
|
||||
- issue #19976 Fix Bootstrap theme icons are not visible on bigger screens
|
||||
- issue #19339 Re-apply JSON syntax highlighting after AJAX updates
|
||||
- issue Improve table list access error messages when available
|
||||
- issue #19964 Fix error when importing a CSV with more decimals than the column
|
||||
- issue #19950 Fix tooltip doesn't disappear when searching on date type
|
||||
|
||||
5.2.3 (2025-10-07)
|
||||
- issue #19548 Fix missing tooltip in status monitor log table
|
||||
- issue #19619 Fix horizontal scrollbar in server status pages
|
||||
- issue #17141 Fix table comment readability on original theme
|
||||
- issue #19138 Adjusted the chart size in System Monitor
|
||||
- issue #19351 Fixed paging with approximate number of rows
|
||||
- issue #18170 Fixed `window.makeGrid is not a function` partially
|
||||
- issue #17535 Fixed "Delete" button not asking for confirmation when deleting a row
|
||||
- issue Fixed not needed table names conversion to htmlentities when renaming a table
|
||||
- issue #18922 Remove the `maxlength` for routines names
|
||||
- issue #19641 Allow optional precision parameter for `NOW()`
|
||||
- issue Added size support for the CSV table type
|
||||
- issue #18903 Fix error 500 when simulating a `SET` statement
|
||||
- issue #19404 Fixed PHP 8.4 deprecations in `thecodingmachine/safe`
|
||||
- issue #19133 Updated documentation about Y2K38 as is fixed in MariaDB 11.5
|
||||
- issue #19685 Prevent "ol.css" being added multiple times
|
||||
- issue Fixed some bugs in relations tab with foreign keys having special names
|
||||
- issue #19715 Fix sorting with URL encryption enabled in results display
|
||||
- issue Fix duplicate Set-Cookie
|
||||
- issue Improved GIS visualization to work with huge tables
|
||||
- issue Fix horizontal scrollbar in server status pages
|
||||
- issue #19653 Fix body padding automatically using a MutationObserver
|
||||
- issue Fix criteria form visibility toggle in a multi-table query
|
||||
- issue #18807 Fixed range search on the search page
|
||||
- issue #19744 Fixed checking that curl is enabled
|
||||
- issue #19757 Fix move column with foreign key
|
||||
- issue #16869 Fix query time not showing for `SELECT COUNT(*)` queries
|
||||
- issue #19775 Fix copy to clipboard
|
||||
- issue #19073 Fix both replicated and not replicated icons are shown
|
||||
- issue #19772 Fix progress value in process list for multi-stage query
|
||||
- issue Fixed some PHP 8.4 and PHP 8.5 deprecations
|
||||
- issue #17329 Improve the handling of "The quota has been exceeded" when pasting multi megabytes queries
|
||||
- issue Improve the detection of PHP GD2
|
||||
- issue #19625 Fix special characters support in move columns
|
||||
- issue #19643 Fix upload progress showing a SyntaxError
|
||||
- issue #19593 Fix upload progress showing a SyntaxError
|
||||
- issue #19504 Fix Advisor rules are throwing some errors with `--skip-innodb`
|
||||
- issue #19760 Fixed `Variable 'lc_messages' can't be set to the value of 'fr_FR'` on misconfigured database servers
|
||||
- issue #19371 Fixed tablename doesn't match with csv filename when importing it
|
||||
- issue Fix `$http_response_header` deprecation for PHP 8.5
|
||||
- issue #19701 Add "symfony/polyfill-iconv" in case users do not have PHP "iconv" extension installed
|
||||
- issue #18066 Fixed "uncaught ReferenceError: u2f is not defined" on browsers that removed support for it
|
||||
- issue #19822 Fix incorrect usage/placement of 'SQL_NO_CACHE'
|
||||
- issue Add support for "bacon-qr-code" v3
|
||||
- issue #19850 Fix undefined array key 4 in PDF structure export
|
||||
- issue #19859 Fix deprecated null array offset
|
||||
- issue #18437 Fix SQL editor's alignment in rtl
|
||||
- issue #18472 Fix responsive table edit-box in rtl mode
|
||||
- issue #19109 Do not enforce character encoding when checking roles
|
||||
- issue #19611 Restore text operators order (`LIKE %...%` vs `LIKE` before)
|
||||
|
||||
5.2.2 (2025-01-21)
|
||||
- issue [security] Fix for a path disclosure leak in the Monitoring tab
|
||||
- issue Prevent the user from deleting system databases
|
||||
- issue [security] Fix an XSS vulnerability when checking tables (PMASA-2025-1)
|
||||
- issue [security] Fix an XSS vulnerability on the Insert tab (PMASA-2025-2)
|
||||
- issue [security] Fix a possible glibc/iconv vulnerability (CVE-2024-2961, assigned PMASA-2025-3 but please note that phpMyAdmin is not vulnerable by default)
|
||||
- issue Fix for sql-parser relating to quadratic complexity in certain queries, which could have caused long execution times.
|
||||
- issue #17851 Fix total count of rows in not accurate
|
||||
- issue #17766 Allow to open in a new tab copy and edit row actions
|
||||
- issue #17599 Fix error when handling an user that is not in privileges table
|
||||
- issue #17364 Fix error when trying to import a status monitor chart arrangement
|
||||
- issue #18106 Fix renaming database with a view
|
||||
- issue #18120 Fix bug with numerical tables during renaming database
|
||||
- issue #16851 Fix ($cfg['Order']) default column order doesn't have have any effect since phpMyAdmin 4.2.0
|
||||
- issue #18138 Fix some issues with numerical table names
|
||||
- issue #18112 Fix open base dir warning on git version class
|
||||
- issue #18211 Fix the themes route missing the server ID
|
||||
- issue Do not show "Original length undefined" on binary hex columns
|
||||
- issue Fix wrong time zone when handling Git information
|
||||
- issue #18195 Fix warning on non-existent table for XML export
|
||||
- issue #18196 Fix errors of import notification
|
||||
- issue #18093 Fix JS errors around "new user account" in some edge cases
|
||||
- issue #16451 Increase password characters limit to 2000 during login
|
||||
- issue #18177 Fix "IS NULL" is shown for non-nullable columns on search page
|
||||
- issue #16199 Fix dragging of tables in designer
|
||||
- issue #18268 Fix UI issue the theme manager is disabled
|
||||
- issue #18258 Speed improvements when exporting a database
|
||||
- issue #17702 Fix performance issue when handling large number of tables in a single database
|
||||
- issue #18324 Fix UI defect on tracking versions table first column
|
||||
- issue #18266 Fix disabling features (like `$cfg['Servers'][$i]['tracking'] = false;`) did not work
|
||||
- issue #18296 Fixed query time measurement - measure time only for user queries
|
||||
- issue #18235 Fix columns are misaligned for the "sys" database
|
||||
- issue #18249 Speed improvements when browsing a database with multiple tables
|
||||
- issue #18060 Fix Console height "Not a non-negative number" error
|
||||
- issue #18188 Fix issue when editing GIS data
|
||||
- issue Fix width/height of create routines modal and width of routines/triggers/events modals
|
||||
- issue Stop pmadb database detection when all features are disabled
|
||||
- issue Upgrade slim/psr7 to 1.4.1 for CVE-2023-30536 - GHSA-q2qj-628g-vhfw
|
||||
- issue #17654 Fix unprivileged user cannot change password on MySQL >= 5.7.37
|
||||
- issue #18385 Add CVE MITRE link to allowed domains and use cve.org
|
||||
- issue #18330 Fix TypeError when no-datetime field is modified
|
||||
- issue #18212 Fix Query Builder doesn't replace a table name with it's alias in the `WHERE` block
|
||||
- issue #18221 Keep the criteria box collapsed by the user when un-checking the criteria checkbox
|
||||
- issue #18363 Fix colspan for actions column on database table list
|
||||
- issue Fix double encoding on User Groups pages
|
||||
- issue Fix list of users of an user group not showing up
|
||||
- issue Fix duplicate query params in the SQL message card
|
||||
- issue #18314 Fix dragged row in index form
|
||||
- issue #17392 Fix the actions not being hidden in the Triggers, Routines, Events pages
|
||||
- issue #18441 Fix execute routine page not working when not in a modal
|
||||
- issue #18471 Fix SQL statement not being displayed correctly on RTL languages
|
||||
- issue Fix state times not getting summed in the profiling table
|
||||
- issue Fix a case where a fatal error message was not displayed
|
||||
- issue #17420 Fix profiling chart not loading when profiling is activated
|
||||
- issue #18159 Fix error when changing the number of chart columns in the monitor page
|
||||
- issue #18403 Fix Uncaught SyntaxError: JSON.parse on makegrid conditions
|
||||
- issue #17528 Fix double escaping of database group names in the navigation tree
|
||||
- issue #18473 Fix the NULL not applied after clearing nullable field
|
||||
- issue #18454 Fix date field calendar display when changing NULL state
|
||||
- issue #18481 Fix missing pagination when using SELECT DISTINCT
|
||||
- issue #18325 Allow hex representations for integers in the search box validation
|
||||
- issue #14411 Fixed double tap to edit on mobile devices
|
||||
- issue Update documentation to reflect that Node >= 12 is required to compile the JS and CSS files
|
||||
- issue #18578 Fixed PDF export NULL values gives a type error
|
||||
- issue #18605 Fixed issue when executing a stored procedure
|
||||
- issue #18650 Fixed double escaping on foreign key relation link title
|
||||
- issue #18533 Fixed wrong count for simulated queries
|
||||
- issue #18611 Fixed an error when searching a table without conditions
|
||||
- issue #18663 Fixed case where triggers are dropped when moving a table
|
||||
- issue #17404 Fixed an error message after dropping a database
|
||||
- issue #18714 Fixed incorrect formatting of the amount of table rows
|
||||
- issue #18717 Fixed issue when deleting bookmarks
|
||||
- issue #18713 Fixed some issues with the GIS editor
|
||||
- issue #18722 Fixed generic error message in the home page
|
||||
- issue #18693 Fixed enum/set value escaping
|
||||
- issue #18769 Improved collations support for MariaDB 10.10
|
||||
- issue #17381 Fixed JS errors when editing indexes on create table
|
||||
- issue #14402 Fix the PRIMARY label still shown when using two columns for a PK on create table
|
||||
- issue #17347 Fixed JS errors when changing index settings on create table
|
||||
- issue #18762 Fixed truncating tables when a VIEW is included
|
||||
- issue Fix BETWEEN search does not validate input because of spaces
|
||||
- issue Fix JS number validation does not validate when the input is empty or emptied
|
||||
- issue #18561 Fix issue when adding System Monitor charts
|
||||
- issue #17363 Fix duplicate route parameter after logging in
|
||||
- issue #15670 Fix case where the data is truncated after changing a longtext column's collation
|
||||
- issue #18797 Fixed support for ampersand as a arg separator
|
||||
- issue #18834 Fixed case where column hash is empty in table relation page
|
||||
- issue #17538 Fixed error when renaming an index
|
||||
- issue #18865 Fix missing text-nowrap for timestamps columns
|
||||
- issue #18613 Fixed routine editor showing wrong parameter type
|
||||
- issue #18890 Fixed wrong row count when query has UNION
|
||||
- issue #18949 Fixed natural sorting for items in the navigation section
|
||||
- issue #18930 Fixed import of empty tables from MediaWiki
|
||||
- issue #18940 Fixed issue when creating an unique key
|
||||
- issue #19022 Fix case where tables from wrong database is loaded in navigation tree
|
||||
- issue #18782 Fixed issue with role based auth for MySQL 8
|
||||
- issue #18593 Fix drop db line included in server export if exporting only data
|
||||
- issue #18049 Also check that curl_exec is enabled for the new version check
|
||||
- issue #19023 Fixed table size for ROCKSDB engine showing as unknown
|
||||
- issue #18451 Fix when editing inline central column, Null is always preselected
|
||||
- issue #18495 Fixed database export missing routines
|
||||
- issue #19117 Allow changing the virtuality of a column without any other changes
|
||||
- issue #18566 Fixed error when importing exported view with USE INDEX hint
|
||||
- issue #17920 Fixed moving column with empty default value will replace it with ''
|
||||
- issue #18006 Fixed moving columns causes the default uuid() value to get quotes around it
|
||||
- issue #18962 Fixed move columns with ENUM() & DEFAULT causes invalid SQL
|
||||
- issue #18276 Fix on update CURRENT_TIMESTAMP doesn't show as default in attributes
|
||||
- issue #18240 Fix inserting value with UNIX_TIMESTAMP() without a parameter
|
||||
- issue #19125 Fixed CodeMirror tooltip is below modals
|
||||
- issue #18674 Fix formatted sql in browse table result has a linebreak after each token
|
||||
- issue #18210 Fixed add replica replication user on MariaDB doesn't work (SQL syntax)
|
||||
- issue #19041 Fix footer.twig gets printed to Binary File Download
|
||||
- issue #19091 Fix to stop processing queries on error
|
||||
- issue #18241 Fix copy SQL query button on error messages
|
||||
- issue #17190 Fix an error with SELECT ... FOR UPDATE queries
|
||||
- issue #19145 Remove duplicate server and lang parameters from links
|
||||
- issue #19158 Fix an issue with backticks on the query generator
|
||||
- issue #19174 Fix an issue with column alias with asterisk on the query generator
|
||||
- issue #19146 Fix column sorting with limit subquery
|
||||
- issue #19152 Fix the number of lines being ignored in GIS visualization after a search
|
||||
- issue #19189 Fix issue with column sorting when using 'group by'
|
||||
- issue #19188 Fix issue with simulated queries reporting syntax errors
|
||||
- issue #19141 Add cookie prefix '-__Secure-' to cookies to help prevent cookie smuggling
|
||||
- issue #19218 Fix textarea horizontal resizing with Bootstap theme
|
||||
- issue #19199 Add support for fractional seconds to current_timestamp()
|
||||
- issue #19221 Fix query statistics for queries with count(*)
|
||||
- issue #19203 Fix single quotes and backslashes for the query generator
|
||||
- issue #19163 Fix queries with IS NULL or IS NOT NULL for the query generator
|
||||
- issue #19181 Fix query generator support for IN() and NOT IN()
|
||||
- issue #19167 Fix criteria on column '*' for the query generator
|
||||
- issue #19213 Fix possible issue when exporting a large data set
|
||||
- issue #19217 Fix issue when editing a cell of a JSON column
|
||||
- issue #19244 Add yarn 1.22 to the package.json's packageManager field
|
||||
- issue #19185 Fix visual issue when a row has only empty cells
|
||||
- issue #19257 Fix issue when adding an index with an invalid name
|
||||
- issue #19276 Fix compatibility with Twig 3.12
|
||||
- issue #19283 Fix issue when the server starts with skip-innodb option
|
||||
- issue #19299 Fix charset in procedure's parameter type
|
||||
- issue #19316 Fix input size for hexadecimal values
|
||||
- issue #19321 Suppress deprecation message of E_STRICT constant
|
||||
- issue Fix PHP 8.4 `str_getcsv` `$escape` parameter deprecation
|
||||
- issue #19426 Fix PHP warnings when the column is a `COMPRESSED BLOB`
|
||||
- issue Allow opening server breadcrumb links in new tab with Ctrl/Meta key
|
||||
- issue #19500 Use `KILL` instead of `CALL mysql.rds_kill` for non super users
|
||||
- issue Fix "copy to clipboard" was adding a blank row for each repeating header row
|
||||
- issue Fix TCPDF translations
|
||||
- issue Remove underline for links on Bootstrap theme
|
||||
- issue Fix sql editor height on multi-table query
|
||||
- issue #18852 Fix notification color scheme on the Bootstrap dark theme
|
||||
- issue #14542 Show the query even if no results are found in the Table search
|
||||
- issue #16936 Fixed import (e.g. ods) doesn't respect database default collation
|
||||
- issue #19000 Disable autocomplete for the create table/db name inputs
|
||||
|
||||
5.2.1 (2023-02-07)
|
||||
- issue #17522 Fix case where the routes cache file is invalid
|
||||
- issue #17506 Fix error when configuring 2FA without XMLWriter or Imagick
|
||||
- issue Fix blank page when some error occurs
|
||||
- issue #17519 Fix Export pages not working in certain conditions
|
||||
- issue #17496 Fix error in table operation page when partitions are broken
|
||||
- issue #17386 Fix system memory and system swap values on Windows
|
||||
- issue #17517 Fix Database Server panel not getting hidden by ShowServerInfo configuration directive
|
||||
- issue #17271 Fix database names not showing on Processes tab
|
||||
- issue #17424 Fix export limit size calculation
|
||||
- issue #17366 Fix refresh rate popup on Monitor page
|
||||
- issue #17577 Fix monitor charts size on RTL languages
|
||||
- issue #17121 Fix password_hash function incorrectly adding single quotes to password before hashing
|
||||
- issue #17586 Fix statistics not showing for empty databases
|
||||
- issue #17592 Clicking on the New index link on the sidebar does not throw an error anymore
|
||||
- issue #17584 It's now possible to browse a database that includes two % in its name
|
||||
- issue Fix PHP 8.2 deprecated string interpolation syntax
|
||||
- issue Some languages are now correctly detected from the HTTP header
|
||||
- issue #17617 Sorting is correctly remembered when $cfg['RememberSorting'] is true
|
||||
- issue #17593 Table filtering now works when action buttons are on the right side of the row
|
||||
- issue #17388 Find and Replace using regex now makes a valid query if no matching result set found
|
||||
- issue #17551 Enum/Set editor will not fail to open when creating a new column
|
||||
- issue #17659 Fix error when a database group is named tables, views, functions, procedures or events
|
||||
- issue #17673 Allow empty values to be inserted into columns
|
||||
- issue #17620 Fix error handling at phpMyAdmin startup for the JS SQL console
|
||||
- issue Fixed debug queries console broken UI for query time and group count
|
||||
- issue Fixed escaping of SQL query and errors for the debug console
|
||||
- issue Fix console toolbar UI when the bookmark feature is disabled and sql debug is enabled
|
||||
- issue #17543 Fix JS error on saving a new designer page
|
||||
- issue #17546 Fix JS error after using save as and open page operation on the designer
|
||||
- issue Fix PHP warning on GIS visualization when there is only one GIS column
|
||||
- issue #17728 Some select HTML tags will now have the correct UI style
|
||||
- issue #17734 PHP deprecations will only be shown when in a development environment
|
||||
- issue #17369 Fix server error when blowfish_secret is not exactly 32 bytes long
|
||||
- issue #17736 Add utf8mb3 as an alias of utf8 on the charset description page
|
||||
- issue #16418 Fix FAQ 1.44 about manually removing vendor folders
|
||||
- issue #12359 Setup page now sends the Content-Security-Policy headers
|
||||
- issue #17747 The Column Visibility Toggle will not be hidden by other elements
|
||||
- issue #17756 Edit/Copy/Delete row now works when using GROUP BY
|
||||
- issue #17248 Support the UUID data type for MariaDB >= 10.7
|
||||
- issue #17656 Fix replace/change/set table prefix is not working
|
||||
- issue Fix monitor page filter queries only filtering the first row
|
||||
- issue Fix "Link not found!" on foreign columns for tables having no char column to show
|
||||
- issue #17390 Fix "Create view" modal doesn't show on results and empty results
|
||||
- issue #17772 Fix wrong styles for add button from central columns
|
||||
- issue #17389 Fix HTML disappears when exporting settings to browser's storage
|
||||
- issue #17166 Fix "Warning: #1287 'X' is deprecated [...] Please use ST_X instead." on search page
|
||||
- issue Use jquery-migrate.min.js (14KB) instead of jquery-migrate.min.js (31KB)
|
||||
- issue #17842 Use jquery.validate.min.js (24 KB) instead of jquery.validate.js (50 KB)
|
||||
- issue #17281 Fix links to databases for information_schema.SCHEMATA
|
||||
- issue #17553 Fix Metro theme unreadable links above navigation tree
|
||||
- issue #17553 Metro theme UI fixes and improvements
|
||||
- issue #17553 Fix Metro theme login form with
|
||||
- issue #16042 Exported gzip file of database has first ~73 kB uncompressed and rest is gzip compressed in Firefox
|
||||
- issue #17705 Fix inline SQL query edit FK checkbox preventing submit buttons from working
|
||||
- issue #17777 Fix Uncaught TypeError: Cannot read properties of null (reading 'inline') on datepickers when re-opened
|
||||
- issue Fix Original theme buttons style and login form width
|
||||
- issue #17892 Fix closing index edit modal and reopening causes it to fire twice
|
||||
- issue #17606 Fix preview SQL modal not working inside "Add Index" modal
|
||||
- issue Fix PHP error on adding new column on create table form
|
||||
- issue #17482 Default to "Full texts" when running explain statements
|
||||
- issue Fixed Chrome scrolling performance issue on a textarea of an "export as text" page
|
||||
- issue #17703 Fix datepicker appears on all fields, not just date
|
||||
- issue Fix space in the tree line when a DB is expanded
|
||||
- issue #17340 Fix "New Table" page -> "VIRTUAL" attribute is lost when adding a new column
|
||||
- issue #17446 Fix missing option for STORED virtual column on MySQL and PERSISTENT is not supported on MySQL
|
||||
- issue #17446 Lower the check for virtual columns to MySQL>=5.7.6 nothing is supported on 5.7.5
|
||||
- issue Fix column names option for CSV Export
|
||||
- issue #17177 Fix preview SQL when reordering columns doesn't work on move columns
|
||||
- issue #15887 Fixed DROP TABLE errors ignored on multi table select for DROP
|
||||
- issue #17944 Fix unable to create a view from tree view button
|
||||
- issue #17927 Fix key navigation between select inputs (drop an old Firefox workaround)
|
||||
- issue #17967 Fix missing icon for collapse all button
|
||||
- issue #18006 Fixed UUID columns can't be moved
|
||||
- issue Add `spellcheck="false"` to all password fields and some text fields to avoid spell-jacking data leaks
|
||||
- issue Remove non working "Analyze Explain at MariaDB.org" button (MariaDB stopped this service)
|
||||
- issue #17229 Add support for Web Authentication API because Chrome removed support for the U2F API
|
||||
- issue #18019 Fix "Call to a member function fetchAssoc() on bool" with SQL mode ONLY_FULL_GROUP_BY on monitor search logs
|
||||
- issue Add back UUID and UUID_SHORT to functions on MySQL and all MariaDB versions
|
||||
- issue #17398 Fix clicking on JSON columns triggers update query
|
||||
- issue Fix silent JSON parse error on upload progress
|
||||
- issue #17833 Fix "Add Parameter" button not working for Add Routine Screen
|
||||
- issue #17365 Fixed "Uncaught Error: regexp too big" on server status variables page
|
||||
- issue [security] Fix an XSS attack through the drag-and-drop upload feature (PMASA-2023-01)
|
||||
|
||||
5.2.0 (2022-05-10)
|
||||
- issue #16521 Upgrade Bootstrap to version 5
|
||||
- issue #16521 Drop support for Internet Explorer and others
|
||||
- issue Upgrade to shapefile 3
|
||||
- issue #16555 Bump minimum PHP version to 7.2
|
||||
- issue Remove the phpseclib dependency
|
||||
- issue Upgrade Symfony components to version 5.2
|
||||
- issue Upgrade to Motranslator 4
|
||||
- issue #16005 Improve the performance of the Export logic
|
||||
- issue #16829 Add "NOT LIKE %...%" operator to Table search
|
||||
- issue #16845 Fixed some links not passing through url.php
|
||||
- issue #16382 Remove apc upload progress method (all upload progress code was removed from the PHP extension)
|
||||
- issue #16974 Replace zxcvbn by zxcvbn-ts
|
||||
- issue #15691 Disable the last column checkbox in the column list dropdown instead of not allowing un-check
|
||||
- issue #16138 Ignore the length of integer types and show a warning on MySQL >= 8.0.18
|
||||
- issue Add support for the Mroonga engine
|
||||
- issue Double click column name to directly copy to clipboard
|
||||
- issue #16425 Add "DELETE FROM" table on table operations page
|
||||
- issue #16482 Add a select all link for table-specific privileges
|
||||
- issue #14276 Add support for account locking
|
||||
- issue #17143 Use composer/ca-bundle to manage the CA cert file
|
||||
- issue #17143 Require the openssl PHP extension
|
||||
- issue #17171 Remove the printview.css file from themes
|
||||
- issue #17203 Redesign the export and the import pages
|
||||
- issue #16197 Replace the master/slave terminology
|
||||
- issue #17257 Replace libraries/vendor_config.php constants with an array
|
||||
- issue Add the Bootstrap theme
|
||||
- issue #17499 Remove stickyfilljs JavaScript dependency
|
||||
|
||||
--- Older ChangeLogs can be found on our project website ---
|
||||
https://www.phpmyadmin.net/old-stuff/ChangeLogs/
|
||||
|
||||
# vim: et ts=4 sw=4 sts=4
|
||||
# vim: ft=changelog fenc=utf-8
|
||||
# vim: fde=getline(v\:lnum-1)=~'^\\s*$'&&getline(v\:lnum)=~'\\S'?'>1'\:1&&v\:lnum>4&&getline(v\:lnum)!~'^#'
|
||||
# vim: fdn=1 fdm=expr
|
||||
6
README
@ -1,7 +1,7 @@
|
||||
phpMyAdmin - Readme
|
||||
===================
|
||||
|
||||
Version 6.0.0-dev
|
||||
Version 5.2.4-dev
|
||||
|
||||
A web interface for MySQL and MariaDB.
|
||||
|
||||
@ -12,7 +12,7 @@ Summary
|
||||
|
||||
phpMyAdmin is intended to handle the administration of MySQL over the web.
|
||||
For a summary of features, list of requirements, and installation instructions,
|
||||
please see the documentation in the ./docs/ folder or at https://docs.phpmyadmin.net/
|
||||
please see the documentation in the ./doc/ folder or at https://docs.phpmyadmin.net/
|
||||
|
||||
Copyright
|
||||
---------
|
||||
@ -22,7 +22,7 @@ Copyright © 1998 onwards -- the phpMyAdmin team
|
||||
Certain libraries are copyrighted by their respective authors;
|
||||
see the full copyright list for details.
|
||||
|
||||
For full copyright information, please see ./docs/copyright.rst
|
||||
For full copyright information, please see ./doc/copyright.rst
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
10
README.rst
@ -54,19 +54,19 @@ If you prefer to follow the Git repository, the following branch and tag names m
|
||||
|
||||
* ``STABLE`` is the current stable release.
|
||||
* ``master`` is the development branch.
|
||||
* Releases are tagged; for example, version 5.0.1 was tagged as ``RELEASE_5_0_1``.
|
||||
* Releases are tagged, for example version 5.0.1 was tagged as ``RELEASE_5_0_1``.
|
||||
|
||||
Note that phpMyAdmin uses `Composer <https://getcomposer.org/>`_ to manage library dependencies; when using Git
|
||||
Note that phpMyAdmin uses `Composer <https://getcomposer.org/>`_ to manage library dependencies, when using Git
|
||||
development versions, you must manually run Composer.
|
||||
Please see `the documentation <https://docs.phpmyadmin.net/en/latest/setup.html#installing-from-git>`_ for details.
|
||||
|
||||
More Information
|
||||
----------------
|
||||
|
||||
Please see https://docs.phpmyadmin.net/, or browse the documentation in the docs folder.
|
||||
Please see https://docs.phpmyadmin.net/, or browse the documentation in the doc folder.
|
||||
|
||||
For `support <https://www.phpmyadmin.net/support/>`_ or `security issues, <https://www.phpmyadmin.net/security/>`_ you can visit https://www.phpmyadmin.net/
|
||||
For `support <https://www.phpmyadmin.net/support/>`_ or `security issues <https://www.phpmyadmin.net/security/>`_ you can visit https://www.phpmyadmin.net/
|
||||
|
||||
Translations are welcome. You can `translate phpMyAdmin into your language <https://hosted.weblate.org/projects/phpmyadmin/>`_.
|
||||
Translations are welcome, you can `translate phpMyAdmin to your language <https://hosted.weblate.org/projects/phpmyadmin/>`_.
|
||||
|
||||
If you would like to contribute to the phpMyAdmin's codebase, you can read the `code contribution file <CONTRIBUTING.md>`_ or browse our website's `contributing page <https://www.phpmyadmin.net/contribute/>`_.
|
||||
|
||||
0
app/cache/.gitkeep
vendored
416
app/services.php
@ -1,416 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use PhpMyAdmin\Advisory\Advisor;
|
||||
use PhpMyAdmin\Application;
|
||||
use PhpMyAdmin\Bookmarks\BookmarkRepository;
|
||||
use PhpMyAdmin\BrowseForeigners;
|
||||
use PhpMyAdmin\Clock\Clock;
|
||||
use PhpMyAdmin\Config;
|
||||
use PhpMyAdmin\Config\UserPreferences;
|
||||
use PhpMyAdmin\Config\UserPreferencesHandler;
|
||||
use PhpMyAdmin\ConfigStorage\Relation;
|
||||
use PhpMyAdmin\ConfigStorage\RelationCleanup;
|
||||
use PhpMyAdmin\Console\Console;
|
||||
use PhpMyAdmin\Console\History;
|
||||
use PhpMyAdmin\CreateAddField;
|
||||
use PhpMyAdmin\Database\CentralColumns;
|
||||
use PhpMyAdmin\Database\Designer;
|
||||
use PhpMyAdmin\Database\Designer\Common;
|
||||
use PhpMyAdmin\Database\Events;
|
||||
use PhpMyAdmin\Database\Routines;
|
||||
use PhpMyAdmin\Dbal\DatabaseInterface;
|
||||
use PhpMyAdmin\DbTableExists;
|
||||
use PhpMyAdmin\Error\ErrorHandler;
|
||||
use PhpMyAdmin\Error\ErrorReport;
|
||||
use PhpMyAdmin\Export\Export;
|
||||
use PhpMyAdmin\Export\Options;
|
||||
use PhpMyAdmin\Export\OutputHandler;
|
||||
use PhpMyAdmin\Export\TemplateModel;
|
||||
use PhpMyAdmin\FileListing;
|
||||
use PhpMyAdmin\FlashMessenger;
|
||||
use PhpMyAdmin\Footer;
|
||||
use PhpMyAdmin\Header;
|
||||
use PhpMyAdmin\Http\Factory\ResponseFactory;
|
||||
use PhpMyAdmin\Http\Middleware;
|
||||
use PhpMyAdmin\I18n\LanguageManager;
|
||||
use PhpMyAdmin\Import\Import;
|
||||
use PhpMyAdmin\Import\SimulateDml;
|
||||
use PhpMyAdmin\InsertEdit;
|
||||
use PhpMyAdmin\Navigation\Navigation;
|
||||
use PhpMyAdmin\Normalization;
|
||||
use PhpMyAdmin\Operations;
|
||||
use PhpMyAdmin\Partitioning\Maintenance;
|
||||
use PhpMyAdmin\Plugins\AuthenticationPluginFactory;
|
||||
use PhpMyAdmin\Replication\Replication;
|
||||
use PhpMyAdmin\Replication\ReplicationGui;
|
||||
use PhpMyAdmin\ResponseRenderer;
|
||||
use PhpMyAdmin\Server\Plugins;
|
||||
use PhpMyAdmin\Server\Privileges;
|
||||
use PhpMyAdmin\Server\Privileges\AccountLocking;
|
||||
use PhpMyAdmin\Server\Status\Data;
|
||||
use PhpMyAdmin\Server\Status\Monitor;
|
||||
use PhpMyAdmin\Server\Status\Processes;
|
||||
use PhpMyAdmin\Sql;
|
||||
use PhpMyAdmin\SqlQueryForm;
|
||||
use PhpMyAdmin\Table\ColumnsDefinition;
|
||||
use PhpMyAdmin\Table\Indexes;
|
||||
use PhpMyAdmin\Table\Search;
|
||||
use PhpMyAdmin\Table\TableMover;
|
||||
use PhpMyAdmin\Template;
|
||||
use PhpMyAdmin\Theme\ThemeManager;
|
||||
use PhpMyAdmin\Tracking\Tracking;
|
||||
use PhpMyAdmin\Tracking\TrackingChecker;
|
||||
use PhpMyAdmin\Transformations;
|
||||
use PhpMyAdmin\Triggers\Triggers;
|
||||
use PhpMyAdmin\UrlRedirector;
|
||||
use PhpMyAdmin\UserPassword;
|
||||
use PhpMyAdmin\UserPrivilegesFactory;
|
||||
use PhpMyAdmin\Utils\HttpRequest;
|
||||
use PhpMyAdmin\VersionInformation;
|
||||
use Psr\Clock\ClockInterface;
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
|
||||
|
||||
return [
|
||||
Advisor::class => ['class' => Advisor::class, 'arguments' => [DatabaseInterface::class, ExpressionLanguage::class]],
|
||||
Application::class => [
|
||||
'class' => Application::class,
|
||||
'arguments' => [ResponseFactory::class, ResponseRenderer::class],
|
||||
],
|
||||
BrowseForeigners::class => [
|
||||
'class' => BrowseForeigners::class,
|
||||
'arguments' => [Template::class, Config::class, ThemeManager::class],
|
||||
],
|
||||
Config::class => ['class' => Config::class, 'factory' => [Config::class, 'getInstance']],
|
||||
Config\PageSettings::class => [
|
||||
'class' => Config\PageSettings::class,
|
||||
'arguments' => [UserPreferences::class, ResponseRenderer::class],
|
||||
],
|
||||
CentralColumns::class => ['class' => CentralColumns::class, 'arguments' => [DatabaseInterface::class]],
|
||||
CreateAddField::class => ['class' => CreateAddField::class, 'arguments' => [DatabaseInterface::class]],
|
||||
DatabaseInterface::class => [
|
||||
'class' => DatabaseInterface::class,
|
||||
'factory' => [DatabaseInterface::class, 'getInstance'],
|
||||
'arguments' => [Config::class],
|
||||
],
|
||||
DbTableExists::class => ['class' => DbTableExists::class, 'arguments' => [DatabaseInterface::class]],
|
||||
Designer::class => [
|
||||
'class' => Designer::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class, Template::class, Config::class],
|
||||
],
|
||||
Common::class => [
|
||||
'class' => Common::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class, Config::class],
|
||||
],
|
||||
ErrorHandler::class => ['class' => ErrorHandler::class, 'factory' => [ErrorHandler::class, 'getInstance']],
|
||||
ErrorReport::class => [
|
||||
'class' => ErrorReport::class,
|
||||
'arguments' => [HttpRequest::class, Relation::class, Template::class, Config::class],
|
||||
],
|
||||
Events::class => ['class' => Events::class, 'arguments' => [DatabaseInterface::class, Config::class]],
|
||||
Export::class => ['class' => Export::class, 'arguments' => [DatabaseInterface::class, OutputHandler::class]],
|
||||
Options::class => [
|
||||
'class' => Options::class,
|
||||
'arguments' => [Relation::class, TemplateModel::class, UserPreferencesHandler::class],
|
||||
],
|
||||
TemplateModel::class => ['class' => TemplateModel::class, 'arguments' => [DatabaseInterface::class]],
|
||||
ExpressionLanguage::class => ['class' => ExpressionLanguage::class],
|
||||
FileListing::class => ['class' => FileListing::class],
|
||||
FlashMessenger::class => ['class' => FlashMessenger::class],
|
||||
Header::class => [
|
||||
'class' => Header::class,
|
||||
'arguments' => [
|
||||
Template::class,
|
||||
Console::class,
|
||||
Config::class,
|
||||
DatabaseInterface::class,
|
||||
Relation::class,
|
||||
UserPreferences::class,
|
||||
UserPreferencesHandler::class,
|
||||
],
|
||||
],
|
||||
HttpRequest::class => ['class' => HttpRequest::class],
|
||||
ResponseFactory::class => ['class' => ResponseFactory::class, 'factory' => [ResponseFactory::class, 'create']],
|
||||
Import::class => [
|
||||
'class' => Import::class,
|
||||
'arguments' => [DatabaseInterface::class, ResponseRenderer::class, Config::class],
|
||||
],
|
||||
SimulateDml::class => ['class' => SimulateDml::class, 'arguments' => [DatabaseInterface::class]],
|
||||
InsertEdit::class => [
|
||||
'class' => InsertEdit::class,
|
||||
'arguments' => [
|
||||
DatabaseInterface::class,
|
||||
Relation::class,
|
||||
Transformations::class,
|
||||
FileListing::class,
|
||||
Template::class,
|
||||
Config::class,
|
||||
ResponseRenderer::class,
|
||||
],
|
||||
],
|
||||
Middleware\ErrorHandling::class => [
|
||||
'class' => Middleware\ErrorHandling::class,
|
||||
'arguments' => [ErrorHandler::class],
|
||||
],
|
||||
Middleware\OutputBuffering::class => ['class' => Middleware\OutputBuffering::class],
|
||||
Middleware\PhpExtensionsChecking::class => [
|
||||
'class' => Middleware\PhpExtensionsChecking::class,
|
||||
'arguments' => [Template::class, ResponseFactory::class],
|
||||
],
|
||||
Middleware\ServerConfigurationChecking::class => [
|
||||
'class' => Middleware\ServerConfigurationChecking::class,
|
||||
'arguments' => [Template::class, ResponseFactory::class],
|
||||
],
|
||||
Middleware\PhpSettingsConfiguration::class => ['class' => Middleware\PhpSettingsConfiguration::class],
|
||||
Middleware\RouteParsing::class => ['class' => Middleware\RouteParsing::class],
|
||||
Middleware\ConfigLoading::class => [
|
||||
'class' => Middleware\ConfigLoading::class,
|
||||
'arguments' => [Config::class, Template::class, ResponseFactory::class],
|
||||
],
|
||||
Middleware\UriSchemeUpdating::class => [
|
||||
'class' => Middleware\UriSchemeUpdating::class,
|
||||
'arguments' => [Config::class],
|
||||
],
|
||||
Middleware\SessionHandling::class => [
|
||||
'class' => Middleware\SessionHandling::class,
|
||||
'arguments' => [Config::class, ErrorHandler::class, Template::class, ResponseFactory::class],
|
||||
],
|
||||
Middleware\EncryptedQueryParamsHandling::class => ['class' => Middleware\EncryptedQueryParamsHandling::class],
|
||||
Middleware\UrlParamsSetting::class => [
|
||||
'class' => Middleware\UrlParamsSetting::class,
|
||||
'arguments' => [Config::class],
|
||||
],
|
||||
Middleware\TokenRequestParamChecking::class => [
|
||||
'class' => Middleware\TokenRequestParamChecking::class,
|
||||
'arguments' => [ResponseRenderer::class],
|
||||
],
|
||||
Middleware\DatabaseAndTableSetting::class => ['class' => Middleware\DatabaseAndTableSetting::class],
|
||||
Middleware\SqlQueryGlobalSetting::class => ['class' => Middleware\SqlQueryGlobalSetting::class],
|
||||
Middleware\LanguageLoading::class => ['class' => Middleware\LanguageLoading::class],
|
||||
Middleware\ConfigErrorAndPermissionChecking::class => [
|
||||
'class' => Middleware\ConfigErrorAndPermissionChecking::class,
|
||||
'arguments' => [Config::class, Template::class, ResponseFactory::class],
|
||||
],
|
||||
Middleware\RequestProblemChecking::class => [
|
||||
'class' => Middleware\RequestProblemChecking::class,
|
||||
'arguments' => [Template::class, ResponseFactory::class],
|
||||
],
|
||||
Middleware\CurrentServerGlobalSetting::class => [
|
||||
'class' => Middleware\CurrentServerGlobalSetting::class,
|
||||
'arguments' => [Config::class],
|
||||
],
|
||||
Middleware\ThemeInitialization::class => ['class' => Middleware\ThemeInitialization::class],
|
||||
Middleware\UrlRedirection::class => [
|
||||
'class' => Middleware\UrlRedirection::class,
|
||||
'arguments' => [UrlRedirector::class, UserPreferencesHandler::class],
|
||||
],
|
||||
Middleware\SetupPageRedirection::class => [
|
||||
'class' => Middleware\SetupPageRedirection::class,
|
||||
'arguments' => [Config::class, ResponseFactory::class, UserPreferencesHandler::class, ResponseRenderer::class],
|
||||
],
|
||||
Middleware\MinimumCommonRedirection::class => [
|
||||
'class' => Middleware\MinimumCommonRedirection::class,
|
||||
'arguments' => [ResponseFactory::class, UserPreferencesHandler::class, ResponseRenderer::class],
|
||||
],
|
||||
Middleware\LanguageAndThemeCookieSaving::class => [
|
||||
'class' => Middleware\LanguageAndThemeCookieSaving::class,
|
||||
'arguments' => [Config::class],
|
||||
],
|
||||
Middleware\LoginCookieValiditySetting::class => [
|
||||
'class' => Middleware\LoginCookieValiditySetting::class,
|
||||
'arguments' => [Config::class, UserPreferencesHandler::class],
|
||||
],
|
||||
Middleware\Authentication::class => [
|
||||
'class' => Middleware\Authentication::class,
|
||||
'arguments' => [
|
||||
Config::class,
|
||||
Template::class,
|
||||
ResponseFactory::class,
|
||||
AuthenticationPluginFactory::class,
|
||||
DatabaseInterface::class,
|
||||
Relation::class,
|
||||
ResponseRenderer::class,
|
||||
],
|
||||
],
|
||||
Middleware\DatabaseServerVersionChecking::class => [
|
||||
'class' => Middleware\DatabaseServerVersionChecking::class,
|
||||
'arguments' => [Config::class, Template::class, ResponseFactory::class],
|
||||
],
|
||||
Middleware\SqlDelimiterSetting::class => [
|
||||
'class' => Middleware\SqlDelimiterSetting::class,
|
||||
'arguments' => [Config::class],
|
||||
],
|
||||
Middleware\ResponseRendererLoading::class => [
|
||||
'class' => Middleware\ResponseRendererLoading::class,
|
||||
'arguments' => [Config::class, ResponseRenderer::class],
|
||||
],
|
||||
Middleware\ProfilingChecking::class => [
|
||||
'class' => Middleware\ProfilingChecking::class,
|
||||
'arguments' => [ResponseRenderer::class, DatabaseInterface::class],
|
||||
],
|
||||
Middleware\UserPreferencesLoading::class => [
|
||||
'class' => Middleware\UserPreferencesLoading::class,
|
||||
'arguments' => [UserPreferencesHandler::class],
|
||||
],
|
||||
Middleware\RecentTableHandling::class => [
|
||||
'class' => Middleware\RecentTableHandling::class,
|
||||
'arguments' => [Config::class],
|
||||
],
|
||||
Middleware\StatementHistory::class => [
|
||||
'class' => Middleware\StatementHistory::class,
|
||||
'arguments' => [Config::class, History::class],
|
||||
],
|
||||
Navigation::class => [
|
||||
'class' => Navigation::class,
|
||||
'arguments' => [Template::class, Relation::class, DatabaseInterface::class, Config::class],
|
||||
],
|
||||
Normalization::class => [
|
||||
'class' => Normalization::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class, Transformations::class, Template::class],
|
||||
],
|
||||
Operations::class => [
|
||||
'class' => Operations::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class, TableMover::class],
|
||||
],
|
||||
OutputHandler::class => ['class' => OutputHandler::class],
|
||||
Maintenance::class => ['class' => Maintenance::class, 'arguments' => [DatabaseInterface::class]],
|
||||
AuthenticationPluginFactory::class => [
|
||||
'class' => AuthenticationPluginFactory::class,
|
||||
'arguments' => [ResponseRenderer::class],
|
||||
],
|
||||
Relation::class => ['class' => Relation::class, 'arguments' => [DatabaseInterface::class, Config::class]],
|
||||
RelationCleanup::class => [
|
||||
'class' => RelationCleanup::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class],
|
||||
],
|
||||
Replication::class => ['class' => Replication::class, 'arguments' => [DatabaseInterface::class]],
|
||||
ReplicationGui::class => ['class' => ReplicationGui::class, 'arguments' => [Replication::class, Template::class]],
|
||||
ResponseRenderer::class => [
|
||||
'class' => ResponseRenderer::class,
|
||||
'factory' => [ResponseRenderer::class, 'getInstance'],
|
||||
'arguments' => [
|
||||
Config::class,
|
||||
Template::class,
|
||||
Header::class,
|
||||
Footer::class,
|
||||
ErrorHandler::class,
|
||||
DatabaseInterface::class,
|
||||
ResponseFactory::class,
|
||||
],
|
||||
],
|
||||
Routines::class => ['class' => Routines::class, 'arguments' => [DatabaseInterface::class, Config::class]],
|
||||
Plugins::class => ['class' => Plugins::class, 'arguments' => [DatabaseInterface::class]],
|
||||
Privileges::class => [
|
||||
'class' => Privileges::class,
|
||||
'arguments' => [
|
||||
Template::class,
|
||||
DatabaseInterface::class,
|
||||
Relation::class,
|
||||
RelationCleanup::class,
|
||||
Plugins::class,
|
||||
Config::class,
|
||||
],
|
||||
],
|
||||
AccountLocking::class => ['class' => AccountLocking::class, 'arguments' => [DatabaseInterface::class]],
|
||||
Sql::class => [
|
||||
'class' => Sql::class,
|
||||
'arguments' => [
|
||||
DatabaseInterface::class,
|
||||
Relation::class,
|
||||
RelationCleanup::class,
|
||||
Transformations::class,
|
||||
Template::class,
|
||||
BookmarkRepository::class,
|
||||
Config::class,
|
||||
ResponseRenderer::class,
|
||||
],
|
||||
],
|
||||
SqlQueryForm::class => [
|
||||
'class' => SqlQueryForm::class,
|
||||
'arguments' => [Template::class, DatabaseInterface::class, BookmarkRepository::class],
|
||||
],
|
||||
Data::class => ['class' => Data::class, 'arguments' => [DatabaseInterface::class, Config::class]],
|
||||
Monitor::class => ['class' => Monitor::class, 'arguments' => [DatabaseInterface::class]],
|
||||
Processes::class => ['class' => Processes::class, 'arguments' => [DatabaseInterface::class]],
|
||||
ColumnsDefinition::class => [
|
||||
'class' => ColumnsDefinition::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class, Transformations::class],
|
||||
],
|
||||
Indexes::class => ['class' => Indexes::class, 'arguments' => [DatabaseInterface::class]],
|
||||
\PhpMyAdmin\Table\Maintenance::class => [
|
||||
'class' => \PhpMyAdmin\Table\Maintenance::class,
|
||||
'arguments' => [DatabaseInterface::class],
|
||||
],
|
||||
Search::class => ['class' => Search::class, 'arguments' => [DatabaseInterface::class]],
|
||||
Template::class => ['class' => Template::class, 'arguments' => [Config::class]],
|
||||
ThemeManager::class => ['class' => ThemeManager::class],
|
||||
Tracking::class => [
|
||||
'class' => Tracking::class,
|
||||
'arguments' => [
|
||||
SqlQueryForm::class,
|
||||
Template::class,
|
||||
Relation::class,
|
||||
DatabaseInterface::class,
|
||||
TrackingChecker::class,
|
||||
],
|
||||
],
|
||||
TrackingChecker::class => [
|
||||
'class' => TrackingChecker::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class],
|
||||
],
|
||||
Transformations::class => [
|
||||
'class' => Transformations::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class],
|
||||
],
|
||||
Triggers::class => ['class' => Triggers::class, 'arguments' => [DatabaseInterface::class]],
|
||||
UserPassword::class => [
|
||||
'class' => UserPassword::class,
|
||||
'arguments' => [Privileges::class, AuthenticationPluginFactory::class, DatabaseInterface::class],
|
||||
],
|
||||
UserPreferences::class => [
|
||||
'class' => UserPreferences::class,
|
||||
'arguments' => [
|
||||
DatabaseInterface::class,
|
||||
Relation::class,
|
||||
Template::class,
|
||||
Config::class,
|
||||
ClockInterface::class,
|
||||
],
|
||||
],
|
||||
UserPrivilegesFactory::class => [
|
||||
'class' => UserPrivilegesFactory::class,
|
||||
'arguments' => [DatabaseInterface::class],
|
||||
],
|
||||
VersionInformation::class => ['class' => VersionInformation::class],
|
||||
BookmarkRepository::class => [
|
||||
'class' => BookmarkRepository::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class, Config::class],
|
||||
],
|
||||
Console::class => [
|
||||
'class' => Console::class,
|
||||
'arguments' => [Relation::class, Template::class, BookmarkRepository::class, History::class],
|
||||
],
|
||||
TableMover::class => ['class' => TableMover::class, 'arguments' => [DatabaseInterface::class, Relation::class]],
|
||||
History::class => [
|
||||
'class' => History::class,
|
||||
'arguments' => [DatabaseInterface::class, Relation::class, Config::class],
|
||||
],
|
||||
UserPreferencesHandler::class => [
|
||||
'class' => UserPreferencesHandler::class,
|
||||
'arguments' => [
|
||||
Config::class,
|
||||
DatabaseInterface::class,
|
||||
UserPreferences::class,
|
||||
LanguageManager::class,
|
||||
ThemeManager::class,
|
||||
],
|
||||
],
|
||||
LanguageManager::class => ['class' => LanguageManager::class, 'factory' => [LanguageManager::class, 'getInstance']],
|
||||
ClockInterface::class => ['class' => Clock::class],
|
||||
Footer::class => ['class' => Footer::class, 'arguments' => [Template::class, Config::class]],
|
||||
UrlRedirector::class => [
|
||||
'class' => UrlRedirector::class,
|
||||
'arguments' => [ResponseRenderer::class, Template::class, ResponseFactory::class],
|
||||
],
|
||||
];
|
||||
@ -1,18 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use PhpMyAdmin\Container\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
|
||||
|
||||
return static function (ContainerConfigurator $configurator): void {
|
||||
$services = $configurator->services();
|
||||
|
||||
/** @var array<string, array{class: string, arguments?: array<string>, factory?: callable}> $servicesFile */
|
||||
$servicesFile = include ROOT_PATH . 'app/services.php';
|
||||
ContainerBuilder::loadServices($servicesFile, $services);
|
||||
|
||||
/** @var array<string, array{class: string, arguments?: array<string>, factory?: callable}> $servicesFile */
|
||||
$servicesFile = include ROOT_PATH . 'app/services_controllers.php';
|
||||
ContainerBuilder::loadServices($servicesFile, $services);
|
||||
};
|
||||
@ -1,13 +1,4 @@
|
||||
{
|
||||
"presets": [
|
||||
[
|
||||
"@babel/preset-env",
|
||||
{
|
||||
"targets": {
|
||||
"node": "current"
|
||||
}
|
||||
}
|
||||
],
|
||||
"@babel/preset-typescript"
|
||||
]
|
||||
"presets": ["@babel/preset-env"],
|
||||
"sourceType": "script"
|
||||
}
|
||||
|
||||
@ -1,40 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Do not run as CGI
|
||||
if [ -n "$GATEWAY_INTERFACE" ] ; then
|
||||
echo 'Can not invoke as CGI!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" = --quiet ] ; then
|
||||
stats=""
|
||||
shift
|
||||
else
|
||||
stats="--statistics"
|
||||
fi
|
||||
|
||||
compile() {
|
||||
lang=$(echo "$1" | sed 's@resources/po/\(.*\)\.po@\1@')
|
||||
if [ -n "$stats" ] ; then
|
||||
printf "%s: " "$lang"
|
||||
fi
|
||||
mkdir -p resources/locale/"$lang"/LC_MESSAGES
|
||||
msgfmt $stats --check -o resources/locale/"$lang"/LC_MESSAGES/phpmyadmin.mo "$1"
|
||||
return $?
|
||||
}
|
||||
|
||||
if [ -n "$1" ] ; then
|
||||
compile resources/po/"$1".po
|
||||
exit $?
|
||||
fi
|
||||
|
||||
result=0
|
||||
for x in resources/po/*.po ; do
|
||||
compile "$x"
|
||||
ret=$?
|
||||
if [ $ret != 0 ] ; then
|
||||
echo Error when compiling "$x" >&2
|
||||
result=$ret
|
||||
fi
|
||||
done
|
||||
|
||||
exit $result
|
||||
@ -1,358 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
FILE="$1"
|
||||
|
||||
if [ ! -f "${FILE}" ]; then
|
||||
echo 'Please provide a file as a first argument.'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
FILE_LIST="$(tar --list --file="${FILE}")"
|
||||
|
||||
found=0;
|
||||
|
||||
echo 'Searching for files'
|
||||
|
||||
foundFile() {
|
||||
found=1
|
||||
printf "Found: %s\n" "${filePath}"
|
||||
}
|
||||
|
||||
foundFileExt() {
|
||||
found=1
|
||||
printf "Found unexpected file: %s with extension %s\n" "${pathWithoutFirst}" "${extension}"
|
||||
}
|
||||
|
||||
validateExtension() {
|
||||
if [ "${filePath: -1}" = "/" ]; then
|
||||
return;
|
||||
fi
|
||||
|
||||
pathWithoutFirst="$(echo "$filePath" | cut -d / -f 2-)"
|
||||
|
||||
filename=$(basename -- "$pathWithoutFirst")
|
||||
extension="${filename##*.}"
|
||||
|
||||
case $pathWithoutFirst in
|
||||
public/docs/*)
|
||||
if [ "${extension}" != "png" ] && [ "${extension}" != "txt" ] &&
|
||||
[ "${extension}" != "html" ] && [ "${extension}" != "js" ] &&
|
||||
[ "${extension}" != "css" ] && [ "${extension}" != "gif" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
resources/js/global.d.ts)
|
||||
;;
|
||||
public/js/vendor/*)
|
||||
if [ "${extension}" != "js" ] && [ "${extension}" != "map" ] &&
|
||||
[ "${extension}" != "css" ] && [ "${filename}" != "LICENSE" ] &&
|
||||
[ "${extension}" != "txt" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
public/js/*)
|
||||
if [ "${extension}" != "js" ] && [ "${extension}" != "map" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
resources/js/*)
|
||||
if [ "${extension}" != "ts" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
resources/sql/*)
|
||||
if [ "${extension}" != "sql" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
examples/*)
|
||||
if [ "${extension}" != "php" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
resources/locale/*)
|
||||
if [ "${extension}" != "mo" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
public/setup/*)
|
||||
if [ "${extension}" != "php" ] && [ "${extension}" != "twig" ] &&
|
||||
[ "${extension}" != "css" ] && [ "${extension}" != "scss" ] &&
|
||||
[ "${extension}" != "gif" ] && [ "${extension}" != "map" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
resources/templates/*)
|
||||
if [ "${extension}" != "twig" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
app/*)
|
||||
if [ "${extension}" != "php" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
src/*)
|
||||
if [ "${extension}" != "php" ] && [ "${extension}" != "md" ] &&
|
||||
[ "${filename}" != "README" ] && [ "${filename}" != "TEMPLATE" ] &&
|
||||
[ "${filename}" != "TEMPLATE_ABSTRACT" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
public/themes/*)
|
||||
if [ "${extension}" != "css" ] && [ "${extension}" != "png" ] &&
|
||||
[ "${extension}" != "scss" ] && [ "${extension}" != "map" ] &&
|
||||
[ "${extension}" != "svg" ] && [ "${extension}" != "ico" ] &&
|
||||
[ "${extension}" != "gif" ] && [ "${extension}" != "json" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
vendor/phpmyadmin/sql-parser/locale/*)
|
||||
if [ "${extension}" != "mo" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
vendor/composer/ca-bundle/res/cacert.pem)
|
||||
;;
|
||||
vendor/pragmarx/google2fa-qrcode/composer.lock)
|
||||
;;
|
||||
vendor/williamdes/mariadb-mysql-kbs/cliff.toml)
|
||||
;;
|
||||
vendor/williamdes/mariadb-mysql-kbs/dist/merged-ultraslim.json)
|
||||
;;
|
||||
vendor/composer/installed.json)
|
||||
;;
|
||||
vendor/tecnickcom/tcpdf/*)
|
||||
if [ "${extension}" != "php" ] && [ "${filename}" != "LICENSE.TXT" ] &&
|
||||
[ "${filename}" != "README.md" ] && [ "${filename}" != "CHANGELOG.TXT" ] &&
|
||||
[ "${filename}" != "VERSION" ] && [ "${filename}" != "composer.json" ] &&
|
||||
[ "${extension}" != "z" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
vendor/*)
|
||||
if [ "${extension}" != "php" ] && [ "${filename}" != "LICENSE" ] &&
|
||||
[ "${filename}" != "README" ] && [ "${filename}" != "CHANGELOG" ] &&
|
||||
[ "${filename}" != "composer.json" ] && [ "${filename}" != "CHANGELOG.md" ] &&
|
||||
[ "${filename}" != "README.md" ] && [ "${filename}" != "BACKERS.md" ] &&
|
||||
[ "${filename}" != "LICENSE.md" ] && [ "${filename}" != "ARCHITECTURE.md" ] &&
|
||||
[ "${filename}" != "LICENSE.txt" ] && [ "${filename}" != "AUTHORS" ] &&
|
||||
[ "${filename}" != "LICENCE.md" ] && [ "${filename}" != "LICENCE" ] &&
|
||||
[ "${filename}" != "COPYRIGHT.md" ]; then
|
||||
foundFileExt
|
||||
fi
|
||||
;;
|
||||
CHANGELOG-[5-9].[0-9].md)
|
||||
;;
|
||||
LICENSE)
|
||||
;;
|
||||
RELEASE-DATE-[1-9].[0-9].[0-9])
|
||||
;;
|
||||
RELEASE-DATE-[1-9].[0-9].[0-9]-dev)
|
||||
;;
|
||||
RELEASE-DATE-[1-9].[0-9]+snapshot)
|
||||
;;
|
||||
CONTRIBUTING.md)
|
||||
;;
|
||||
README)
|
||||
;;
|
||||
public/favicon.ico)
|
||||
;;
|
||||
tsconfig.json)
|
||||
;;
|
||||
webpack.config.cjs)
|
||||
;;
|
||||
babel.config.json)
|
||||
;;
|
||||
package.json)
|
||||
;;
|
||||
composer.json)
|
||||
;;
|
||||
composer.lock)
|
||||
;;
|
||||
yarn.lock)
|
||||
;;
|
||||
public/robots.txt)
|
||||
;;
|
||||
index.php)
|
||||
;;
|
||||
public/index.php)
|
||||
;;
|
||||
config.sample.inc.php)
|
||||
;;
|
||||
*)
|
||||
foundFileExt
|
||||
;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
for filePath in ${FILE_LIST}; do
|
||||
validateExtension
|
||||
case $filePath in
|
||||
*/composer-require-checker.json)
|
||||
foundFile;;
|
||||
*/CLAUDE.MD)
|
||||
foundFile;;
|
||||
*/Readme.php)
|
||||
foundFile;;
|
||||
*/rector*.php)
|
||||
foundFile;;
|
||||
*/.editorconfig)
|
||||
foundFile;;
|
||||
*/easy-coding-standard.neon)
|
||||
foundFile;;
|
||||
*/.travis.yml)
|
||||
foundFile;;
|
||||
*/psalm.xml.dist)
|
||||
foundFile;;
|
||||
*/phpdoc.xml)
|
||||
foundFile;;
|
||||
*/phpdoc.dist.xml)
|
||||
foundFile;;
|
||||
*/.coveralls.yml)
|
||||
foundFile;;
|
||||
*/.yamllint.yaml)
|
||||
foundFile;;
|
||||
*/appveyor.yml)
|
||||
foundFile;;
|
||||
*/phpunit.xml)
|
||||
foundFile;;
|
||||
*/phpunit.xml.dist)
|
||||
foundFile;;
|
||||
*/phive.xml)
|
||||
foundFile;;
|
||||
*/Makefile)
|
||||
foundFile;;
|
||||
*/splitsh.json)
|
||||
foundFile;;
|
||||
*/phpbench.json)
|
||||
foundFile;;
|
||||
*/phpbench.json.dist)
|
||||
foundFile;;
|
||||
*/.php-cs-fixer.dist.php)
|
||||
foundFile;;
|
||||
*/.php_cs)
|
||||
foundFile;;
|
||||
*/.php_cs.dist)
|
||||
foundFile;;
|
||||
*/.php_cs.cache)
|
||||
foundFile;;
|
||||
*/.php-cs-fixer.php)
|
||||
foundFile;;
|
||||
*/psalm.xml)
|
||||
foundFile;;
|
||||
*/phpcs.xml)
|
||||
foundFile;;
|
||||
*/phpcs.xml.dist)
|
||||
foundFile;;
|
||||
*/ecs.php)
|
||||
foundFile;;
|
||||
*/.scrutinizer.yml)
|
||||
foundFile;;
|
||||
*/.phpstorm.meta.php)
|
||||
foundFile;;
|
||||
*/codecov.yml)
|
||||
foundFile;;
|
||||
*/.gitattributes)
|
||||
foundFile;;
|
||||
*/.gitignore)
|
||||
foundFile;;
|
||||
*/.gitkeep)
|
||||
foundFile;;
|
||||
*/.mailmap)
|
||||
foundFile;;
|
||||
*/.env)
|
||||
foundFile;;
|
||||
*/infection.json.dist)
|
||||
foundFile;;
|
||||
*/infection.json)
|
||||
foundFile;;
|
||||
*/infection.json5.dist)
|
||||
foundFile;;
|
||||
*/infection.json5)
|
||||
foundFile;;
|
||||
*/makefile)
|
||||
foundFile;;
|
||||
*/.phpunit.result.cache)
|
||||
foundFile;;
|
||||
*/phpstan.neon)
|
||||
foundFile;;
|
||||
*/phpstan.neon.dist)
|
||||
foundFile;;
|
||||
*/phpstan-baseline.neon)
|
||||
foundFile;;
|
||||
*/phpmd.xml.dist)
|
||||
foundFile;;
|
||||
*/.travis.php.ini)
|
||||
foundFile;;
|
||||
*/vendor/*/tests/*)
|
||||
foundFile;;
|
||||
*/vendor/*/Tests/*)
|
||||
foundFile;;
|
||||
*/vendor/*/test/*)
|
||||
foundFile;;
|
||||
*/twig/twig/lib/Twig/Node/Expression/Test/*)
|
||||
;;
|
||||
*/twig/twig/lib/Twig/Test/*)
|
||||
;;
|
||||
*twig/twig/src/Node/Expression/Test/*)
|
||||
;;
|
||||
*/vendor/*/Test/*)
|
||||
foundFile;;
|
||||
*/.dependabot/*)
|
||||
foundFile;;
|
||||
*/.github/*)
|
||||
foundFile;;
|
||||
*/.circleci/*)
|
||||
foundFile;;
|
||||
*/vendor/examples/*)
|
||||
foundFile;;
|
||||
*/.git/*)
|
||||
foundFile;;
|
||||
*vendor/*.rst)
|
||||
foundFile;;
|
||||
*vendor/*.po)
|
||||
foundFile;;
|
||||
*vendor/*.pot)
|
||||
foundFile;;
|
||||
*vendor/*.m4)
|
||||
foundFile;;
|
||||
*vendor/*.c)
|
||||
foundFile;;
|
||||
*vendor/*.h)
|
||||
foundFile;;
|
||||
*vendor/*.sh)
|
||||
foundFile;;
|
||||
*vendor/*.w32)
|
||||
foundFile;;
|
||||
*.hhconfig)
|
||||
foundFile;;
|
||||
*.hhi)
|
||||
foundFile;;
|
||||
*.xsd)
|
||||
foundFile;;
|
||||
*.xml)
|
||||
foundFile;;
|
||||
*vendor/*CONTRIBUTING.md*)
|
||||
foundFile;;
|
||||
*CODE_OF_CONDUCT.md*)
|
||||
foundFile;;
|
||||
*PERFORMANCE.md*)
|
||||
foundFile;;
|
||||
*phar*)
|
||||
foundFile;;
|
||||
*) ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ ${found} -gt 0 ]; then
|
||||
echo 'Some new files to be excluded were found.'
|
||||
echo 'Please update create-release.sh'
|
||||
exit 1
|
||||
else
|
||||
echo 'Everything looks okay'
|
||||
exit 0
|
||||
fi
|
||||
@ -1,755 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# vim: expandtab sw=4 ts=4 sts=4:
|
||||
#
|
||||
|
||||
# Do not run as CGI
|
||||
if [ -n "$GATEWAY_INTERFACE" ] ; then
|
||||
echo 'Can not invoke as CGI!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# More documentation about making a release is available at:
|
||||
# https://wiki.phpmyadmin.net/pma/Releasing
|
||||
|
||||
# Fail on undefined variables
|
||||
set -u
|
||||
# Fail on failure
|
||||
set -e
|
||||
|
||||
KITS="all-languages english source"
|
||||
COMPRESSIONS="zip-7z txz tgz"
|
||||
# The version series this script is allowed to handle
|
||||
VERSION_SERIES="6.0"
|
||||
|
||||
# Process parameters
|
||||
|
||||
version=""
|
||||
branch=""
|
||||
do_tag=0
|
||||
do_stable=0
|
||||
do_test=0
|
||||
do_ci=0
|
||||
do_sign=1
|
||||
do_pull=0
|
||||
do_daily=0
|
||||
do_revision=0
|
||||
|
||||
while [ $# -gt 0 ] ; do
|
||||
case "$1" in
|
||||
--tag)
|
||||
do_tag=1
|
||||
;;
|
||||
--stable)
|
||||
do_stable=1
|
||||
;;
|
||||
--test)
|
||||
do_test=1
|
||||
;;
|
||||
--revision-info)
|
||||
do_revision=1
|
||||
;;
|
||||
--daily)
|
||||
do_sign=0
|
||||
do_pull=1
|
||||
do_daily=1
|
||||
do_test=1
|
||||
;;
|
||||
--ci)
|
||||
do_test=1
|
||||
do_ci=1
|
||||
if [ -z "$branch" ] ; then
|
||||
git branch ci
|
||||
branch="ci"
|
||||
fi
|
||||
;;
|
||||
--no-sign)
|
||||
do_sign=0
|
||||
;;
|
||||
--kits)
|
||||
KITS="$2"
|
||||
# Skip one position, the value
|
||||
shift
|
||||
;;
|
||||
--compressions)
|
||||
COMPRESSIONS="$2"
|
||||
# Skip one position, the value
|
||||
shift
|
||||
;;
|
||||
--help)
|
||||
echo "Usages:"
|
||||
echo " create-release.sh <version> <from_branch> [--tag] [--stable] [--test] [--ci] [--daily] [--revision-info] [--compressions] [--kits] [--no-sign]"
|
||||
echo ""
|
||||
echo "If --tag is specified, release tag is automatically created (use this for all releases including pre-releases)"
|
||||
echo "If --stable is specified, the STABLE branch is updated with this release"
|
||||
echo "If --test is specified, the testsuite is executed before creating the release"
|
||||
echo "If --ci is specified, the testsuite is executed and no actual release is created"
|
||||
echo "If --no-sign is specified, the output files will not be signed"
|
||||
echo "If --daily is specified, the output files will have snapshot information"
|
||||
echo "If --revision-info is specified, the output files will contain git revision info"
|
||||
echo "If --compressions is specified, it changes the compressions available. Space separated values. Valid values: $COMPRESSIONS"
|
||||
echo "If --kits is specified, it changes the kits to be built. Space separated values. Valid values: $KITS"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " create-release.sh 5.2.2-dev QA_5_2"
|
||||
echo " create-release.sh 5.2.2 QA_5_2 --tag --stable"
|
||||
exit 65
|
||||
;;
|
||||
*)
|
||||
do_test=1
|
||||
if [ -z "$version" ] ; then
|
||||
version=$(echo "$1" | tr -d -c '0-9a-z.+-')
|
||||
if [ "x$version" != "x$1" ] ; then
|
||||
echo "Invalid version: $1"
|
||||
exit 1
|
||||
fi
|
||||
elif [ -z "$branch" ] ; then
|
||||
branch=$(echo "$1" | tr -d -c '/0-9A-Za-z_-')
|
||||
if [ "x$branch" != "x$1" ] ; then
|
||||
echo "Invalid branch: $1"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Unknown parameter: $1!"
|
||||
echo "Use --help to check the syntax."
|
||||
exit 1
|
||||
fi
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -z "$version" ] && [ $do_ci -eq 0 ]; then
|
||||
echo "Version must be specified!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$branch" ]; then
|
||||
echo "Branch must be specified!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
kit_prefix="phpMyAdmin-$version"
|
||||
|
||||
# Checks whether remote branch has local tracking branch
|
||||
ensure_local_branch() {
|
||||
if ! git branch | grep -q '^..'"$1"'$' ; then
|
||||
git branch --track "$1" origin/"$1"
|
||||
fi
|
||||
}
|
||||
|
||||
# Marks current head of given branch as head of other branch
|
||||
# Used for STABLE tracking
|
||||
mark_as_release() {
|
||||
branch=$1
|
||||
rel_branch=$2
|
||||
echo "* Marking release as $rel_branch"
|
||||
ensure_local_branch "$rel_branch"
|
||||
git checkout "$rel_branch"
|
||||
git merge -s recursive -X theirs "$branch"
|
||||
git checkout master
|
||||
}
|
||||
|
||||
cleanup_composer_vendors() {
|
||||
echo "* Cleanup of composer packages"
|
||||
|
||||
rm -r \
|
||||
vendor/phpmyadmin/sql-parser/tests/ \
|
||||
vendor/phpmyadmin/sql-parser/src/Tools/ \
|
||||
vendor/phpmyadmin/sql-parser/locale/sqlparser.pot \
|
||||
vendor/phpmyadmin/sql-parser/locale/*/LC_MESSAGES/sqlparser.po \
|
||||
vendor/phpmyadmin/sql-parser/bin/ \
|
||||
vendor/phpmyadmin/sql-parser/phpunit.xml.dist \
|
||||
vendor/phpmyadmin/motranslator/phpunit.xml.dist \
|
||||
vendor/phpmyadmin/motranslator/psalm-baseline.xml \
|
||||
vendor/phpmyadmin/motranslator/psalm.xml \
|
||||
vendor/phpmyadmin/motranslator/tests/ \
|
||||
vendor/phpmyadmin/shapefile/phpunit.xml.dist \
|
||||
vendor/phpmyadmin/shapefile/tests/ \
|
||||
vendor/phpmyadmin/shapefile/examples/ \
|
||||
vendor/phpmyadmin/shapefile/data/ \
|
||||
vendor/symfony/service-contracts/Test/ \
|
||||
vendor/symfony/expression-language/Resources/ \
|
||||
vendor/symfony/dependency-injection/Loader/schema/services.schema.json \
|
||||
vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd \
|
||||
vendor/tecnickcom/tcpdf/tools/ \
|
||||
vendor/tecnickcom/tcpdf/fonts/ae_fonts_*/ \
|
||||
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.*/ \
|
||||
vendor/tecnickcom/tcpdf/fonts/freefont-*/ \
|
||||
vendor/tecnickcom/tcpdf/include/sRGB.icc \
|
||||
vendor/williamdes/mariadb-mysql-kbs/schemas/ \
|
||||
vendor/williamdes/mariadb-mysql-kbs/dist/merged-raw.json \
|
||||
vendor/williamdes/mariadb-mysql-kbs/dist/merged-raw.md \
|
||||
vendor/williamdes/mariadb-mysql-kbs/dist/merged-slim.json \
|
||||
vendor/williamdes/mariadb-mysql-kbs/dist/merged-ultraslim.php \
|
||||
vendor/google/recaptcha/app.yaml \
|
||||
vendor/laminas/laminas-httphandlerrunner/.laminas-ci.json \
|
||||
vendor/nikic/fast-route/.travis.yml \
|
||||
vendor/nikic/fast-route/.hhconfig \
|
||||
vendor/nikic/fast-route/FastRoute.hhi \
|
||||
vendor/nikic/fast-route/phpunit.xml \
|
||||
vendor/nikic/fast-route/psalm.xml \
|
||||
vendor/nikic/fast-route/test/ \
|
||||
vendor/twig/twig/README.rst \
|
||||
vendor/webmozart/assert/.php-cs-fixer.php \
|
||||
vendor/twig/twig/src/Test/ \
|
||||
vendor/psr/event-dispatcher/.editorconfig \
|
||||
vendor/psr/http-message/docs/ \
|
||||
vendor/pragmarx/google2fa/.github/ \
|
||||
vendor/pragmarx/google2fa-qrcode/.scrutinizer.yml \
|
||||
vendor/pragmarx/google2fa-qrcode/.travis.yml \
|
||||
vendor/pragmarx/google2fa-qrcode/phpunit.xml \
|
||||
vendor/pragmarx/google2fa-qrcode/tests \
|
||||
vendor/slim/psr7/phpunit.xml.dist \
|
||||
vendor/slim/psr7/tests/
|
||||
|
||||
rm \
|
||||
vendor/phpmyadmin/motranslator/CODE_OF_CONDUCT.md \
|
||||
vendor/phpmyadmin/motranslator/CONTRIBUTING.md \
|
||||
vendor/phpmyadmin/motranslator/PERFORMANCE.md \
|
||||
vendor/phpmyadmin/shapefile/CONTRIBUTING.md \
|
||||
vendor/spomky-labs/cbor-php/CODE_OF_CONDUCT.md \
|
||||
vendor/spomky-labs/cbor-php/RELEASES.md \
|
||||
vendor/spomky-labs/cbor-php/SECURITY.md \
|
||||
vendor/spomky-labs/pki-framework/SECURITY.md \
|
||||
vendor/web-auth/cose-lib/CODE_OF_CONDUCT.md \
|
||||
vendor/web-auth/cose-lib/RELEASES.md \
|
||||
vendor/web-auth/cose-lib/SECURITY.md
|
||||
|
||||
find vendor/tecnickcom/tcpdf/fonts/ -maxdepth 1 -type f \
|
||||
-not -name 'dejavusans.*' \
|
||||
-not -name 'dejavusansb.*' \
|
||||
-not -name 'helvetica.php' \
|
||||
-print0 | xargs -0 rm
|
||||
}
|
||||
|
||||
backup_vendor_folder() {
|
||||
TEMP_FOLDER="$(mktemp -d /tmp/phpMyAdmin.XXXXXXXXX)"
|
||||
cp -rp ./vendor "${TEMP_FOLDER}"
|
||||
}
|
||||
|
||||
restore_vendor_folder() {
|
||||
if [ ! -d "${TEMP_FOLDER}" ]; then
|
||||
echo 'No backup to restore'
|
||||
exit 1;
|
||||
fi
|
||||
rm -r ./vendor
|
||||
mv "${TEMP_FOLDER}/vendor" ./vendor
|
||||
rmdir "${TEMP_FOLDER}"
|
||||
}
|
||||
|
||||
get_composer_package_version() {
|
||||
awk '/require-dev/ {printline = 1; print; next } printline' composer.json | grep "$1" | awk -F [\"] '{print $4}'
|
||||
}
|
||||
|
||||
create_phpunit_sandbox() {
|
||||
PHPUNIT_VERSION="$(get_composer_package_version 'phpunit/phpunit')"
|
||||
TEMP_PHPUNIT_FOLDER="$(mktemp -d /tmp/phpMyAdmin-phpunit.XXXXXXXXX)"
|
||||
cd "${TEMP_PHPUNIT_FOLDER}"
|
||||
composer require --no-interaction --dev "phpunit/phpunit:${PHPUNIT_VERSION}"
|
||||
cd -
|
||||
}
|
||||
|
||||
delete_phpunit_sandbox() {
|
||||
if [ ! -d "${TEMP_PHPUNIT_FOLDER}" ]; then
|
||||
echo 'No phpunit sandbox to delete'
|
||||
exit 1;
|
||||
fi
|
||||
rm -r "${TEMP_PHPUNIT_FOLDER}"
|
||||
}
|
||||
|
||||
security_checkup() {
|
||||
if [ ! -f vendor/tecnickcom/tcpdf/tcpdf.php ]; then
|
||||
echo 'TCPDF should be installed, detection failed !'
|
||||
exit 1;
|
||||
fi
|
||||
if [ ! -f vendor/web-auth/webauthn-lib/src/PublicKeyCredential.php ]; then
|
||||
echo 'Webauthn-lib should be installed, detection failed !'
|
||||
exit 1;
|
||||
fi
|
||||
if [ ! -f vendor/code-lts/u2f-php-server/src/U2FServer.php ]; then
|
||||
echo 'U2F-server should be installed, detection failed !'
|
||||
exit 1;
|
||||
fi
|
||||
if [ ! -f vendor/pragmarx/google2fa-qrcode/src/Google2FA.php ]; then
|
||||
echo 'Google 2FA should be installed, detection failed !'
|
||||
exit 1;
|
||||
fi
|
||||
}
|
||||
|
||||
autoload_checkup() {
|
||||
php <<'CODE'
|
||||
<?php
|
||||
|
||||
$classMapFiles = require __DIR__ . '/vendor/composer/autoload_classmap.php';
|
||||
|
||||
$foundFiles = 0;
|
||||
$notFoundFiles = 0;
|
||||
|
||||
foreach ($classMapFiles as $classMapFile) {
|
||||
if (! file_exists($classMapFile)) {
|
||||
echo 'Does not exist: ' . $classMapFile . PHP_EOL;
|
||||
$notFoundFiles++;
|
||||
continue;
|
||||
}
|
||||
$foundFiles++;
|
||||
}
|
||||
|
||||
echo '[autoload class map checkup] Found files: ' . $foundFiles . PHP_EOL;
|
||||
echo '[autoload class map checkup] NOT found files: ' . $notFoundFiles . PHP_EOL;
|
||||
$minFilesToHave = 1100;// An arbitrary value based on how many files the autoload has on average
|
||||
|
||||
if ($foundFiles < $minFilesToHave) {
|
||||
echo '[autoload class map checkup] The project expects at least ' . $minFilesToHave . ' in the autoload class map' . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if ($notFoundFiles > 0) {
|
||||
echo '[autoload class map checkup] There is some missing files documented in the class map' . PHP_EOL;
|
||||
exit(1);
|
||||
}
|
||||
echo '[autoload class map checkup] The autoload class map seems okay' . PHP_EOL;
|
||||
CODE
|
||||
|
||||
}
|
||||
|
||||
# Ensure we have tracking branch
|
||||
ensure_local_branch "$branch"
|
||||
|
||||
VERSION_FILE=src/Version.php
|
||||
|
||||
# Keep in sync with update-po script
|
||||
fetchReleaseFromFile() {
|
||||
SUFFIX="${1:-}"
|
||||
php -r "define('VERSION_SUFFIX', '$SUFFIX'); require_once('$VERSION_FILE'); echo \PhpMyAdmin\Version::VERSION;"
|
||||
}
|
||||
|
||||
fetchVersionSeriesFromFile() {
|
||||
php -r "define('VERSION_SUFFIX', ''); require_once('$VERSION_FILE'); echo \PhpMyAdmin\Version::SERIES;"
|
||||
}
|
||||
|
||||
VERSION_FROM_FILE="$(fetchReleaseFromFile)"
|
||||
VERSION_SERIES_FROM_FILE="$(fetchVersionSeriesFromFile)"
|
||||
|
||||
if [ $do_ci -eq 1 ]; then
|
||||
VERSION_FROM_FILE="$(fetchReleaseFromFile '+ci')"
|
||||
version="${VERSION_FROM_FILE}"
|
||||
fi
|
||||
|
||||
if [ "${VERSION_SERIES_FROM_FILE}" != "${VERSION_SERIES}" ]; then
|
||||
echo "This script can not handle ${VERSION_SERIES_FROM_FILE} version series."
|
||||
echo "Only ${VERSION_SERIES} version series are allowed, please use your target branch directly or another branch."
|
||||
echo "By changing branches you will have a release script that was designed for your version series."
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
echo "The actual configured release is: $VERSION_FROM_FILE"
|
||||
echo "The actual configured release series is: $VERSION_SERIES_FROM_FILE"
|
||||
|
||||
if [ $do_ci -eq 0 ] && [ $do_daily -eq 0 ] ; then
|
||||
cat <<END
|
||||
|
||||
Please ensure you have incremented rc count or version in the repository :
|
||||
- run ./bin/console set-version $version
|
||||
- in $VERSION_FILE Version class:
|
||||
- check that VERSION, MAJOR, MINOR and PATCH are correct.
|
||||
- in docs/conf.py the line
|
||||
" version = '$version' "
|
||||
- in README the "Version" line
|
||||
- in package.json the line
|
||||
" "version": "$version", "
|
||||
- set release date in ChangeLog
|
||||
|
||||
Continue (y/n)?
|
||||
END
|
||||
read -r do_release
|
||||
|
||||
if [ "$do_release" != 'y' ]; then
|
||||
exit 100
|
||||
fi
|
||||
echo "The actual configured release is now: $(fetchReleaseFromFile)"
|
||||
fi
|
||||
|
||||
# Create working copy
|
||||
mkdir -p release
|
||||
git worktree prune
|
||||
workdir_name=phpMyAdmin-$version
|
||||
workdir=release/$workdir_name
|
||||
if [ -d "$workdir" ] ; then
|
||||
echo "Working directory '$workdir' already exists, please move it out of the way"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Add worktree with chosen branch
|
||||
git worktree add --force "$workdir" "$branch"
|
||||
cd "$workdir"
|
||||
if [ $do_pull -eq 1 ] ; then
|
||||
git pull -q
|
||||
fi
|
||||
if [ $do_daily -eq 1 ] ; then
|
||||
git_head=$(git log -n 1 --format=%H)
|
||||
git_head_short=$(git log -n 1 --format=%h)
|
||||
today_date=$(date +'%Y%m%d' -u)
|
||||
fi
|
||||
|
||||
if [ $do_daily -eq 1 ] ; then
|
||||
echo '* setting the version suffix for the snapshot'
|
||||
sed -i "s/'versionSuffix' => '.*'/'versionSuffix' => '+$today_date.$git_head_short'/" app/vendor_config.php
|
||||
php -l app/vendor_config.php
|
||||
|
||||
# Fetch it back and refresh $version
|
||||
VERSION_FROM_FILE="$(fetchReleaseFromFile "+$today_date.$git_head_short")"
|
||||
version="${VERSION_FROM_FILE}"
|
||||
echo "The actual configured release is: $VERSION_FROM_FILE"
|
||||
fi
|
||||
|
||||
# Check release version
|
||||
if [ $do_ci -eq 0 ] && [ -$do_daily -eq 0 ] ; then
|
||||
if ! grep -q "VERSION = '$version'" $VERSION_FILE ; then
|
||||
echo "There seems to be wrong version in $VERSION_FILE!"
|
||||
exit 2
|
||||
fi
|
||||
if ! grep -q "version = '$version'" docs/conf.py ; then
|
||||
echo "There seems to be wrong version in docs/conf.py"
|
||||
exit 2
|
||||
fi
|
||||
if ! grep -q "Version $version\$" README ; then
|
||||
echo "There seems to be wrong version in README"
|
||||
exit 2
|
||||
fi
|
||||
if ! grep -q "\"version\": \"$version\"," package.json ; then
|
||||
echo "There seems to be wrong version in package.json"
|
||||
exit 2
|
||||
fi
|
||||
fi
|
||||
|
||||
# Save the build date
|
||||
if [ $do_daily -eq 1 ] ; then
|
||||
LC_ALL=C date -u > RELEASE-DATE-"$VERSION_SERIES_FROM_FILE"+snapshot
|
||||
else
|
||||
LC_ALL=C date -u > RELEASE-DATE-"$version"
|
||||
fi
|
||||
|
||||
# Building documentation
|
||||
echo "* Running sphinx-build (version: $(sphinx-build --version))"
|
||||
echo "* Generating documentation"
|
||||
LC_ALL=C make -C docs html
|
||||
find docs -name '*.pyc' -print0 | xargs -0 -r rm -f
|
||||
|
||||
# Check for gettext support
|
||||
if [ -d resources/po ] ; then
|
||||
echo "* Generating mo files"
|
||||
./bin/generate-mo
|
||||
if [ -f ./bin/remove-incomplete-mo ] ; then
|
||||
echo "* Removing incomplete translations"
|
||||
./bin/remove-incomplete-mo
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f ./bin/line-counts.sh ] ; then
|
||||
echo "* Generating line counts"
|
||||
./bin/line-counts.sh
|
||||
fi
|
||||
|
||||
echo "* Removing unneeded files"
|
||||
|
||||
# Remove developer information
|
||||
rm -r .github CODE_OF_CONDUCT.md DCO
|
||||
|
||||
# Testsuite setup
|
||||
rm .scrutinizer.yml .weblate codecov.yml
|
||||
|
||||
# Remove Doctum config file
|
||||
rm tests/doctum-config.php
|
||||
|
||||
# Remove readme for github
|
||||
rm README.rst
|
||||
|
||||
if [ -f ./bin/console ]; then
|
||||
# Update the vendors to have the dev vendors
|
||||
composer install --no-interaction
|
||||
# Warm up the routing cache for 5.1+ releases
|
||||
./bin/console cache:warmup --routing
|
||||
if [ $do_revision -eq 1 ] ; then
|
||||
./bin/console write-revision-info
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "* Writing the version to composer.json (version: $version)"
|
||||
composer config version "$version"
|
||||
|
||||
# Okay, there is no way to tell composer to install
|
||||
# suggested package. Let's require it and then revert
|
||||
# composer.json to original state.
|
||||
cp composer.json composer.json.backup
|
||||
COMPOSER_VERSION="$(composer --version)"
|
||||
echo "* Running composer (version: $COMPOSER_VERSION)"
|
||||
composer install --no-interaction --no-dev
|
||||
|
||||
# Parse the required versions from composer.json
|
||||
PACKAGE_LIST='tecnickcom/tcpdf pragmarx/google2fa-qrcode bacon/bacon-qr-code code-lts/u2f-php-server web-auth/webauthn-lib'
|
||||
|
||||
set --
|
||||
|
||||
for PACKAGES in $PACKAGE_LIST
|
||||
do
|
||||
PKG_VERSION="$(get_composer_package_version "$PACKAGES")"
|
||||
set -- "$@" "$PACKAGES:$PKG_VERSION"
|
||||
done
|
||||
|
||||
echo "* Installing composer packages '$*'"
|
||||
|
||||
# Allows word splitting
|
||||
# shellcheck disable=SC2086
|
||||
composer require --no-interaction --update-no-dev "$@"
|
||||
|
||||
echo "* Running a security checkup"
|
||||
security_checkup
|
||||
|
||||
echo "* Cleaning up vendor folders"
|
||||
mv composer.json.backup composer.json
|
||||
cleanup_composer_vendors
|
||||
|
||||
echo "* Re-generating the autoload class map"
|
||||
# https://getcomposer.org/doc/articles/autoloader-optimization.md#what-does-it-do-
|
||||
# We removed some files, we also need that composer removes them from autoload class maps
|
||||
# If the class is in the class map (as explained in the link above) then it is assumed to exist as a file
|
||||
composer dump-autoload --no-interaction --optimize --dev
|
||||
|
||||
echo "* Running an autoload checkup"
|
||||
autoload_checkup
|
||||
|
||||
echo "* Running a security checkup"
|
||||
security_checkup
|
||||
|
||||
if [ -f package.json ] ; then
|
||||
echo "* Running Yarn"
|
||||
yarn install --production
|
||||
fi
|
||||
|
||||
# Remove git metadata
|
||||
rm .git
|
||||
find . -name .gitignore -print0 | xargs -0 -r rm
|
||||
find . -name .gitkeep -print0 | xargs -0 -r rm
|
||||
find . -name .gitattributes -print0 | xargs -0 -r rm
|
||||
|
||||
if [ $do_test -eq 1 ] ; then
|
||||
# Move the folder out and install dev vendors
|
||||
create_phpunit_sandbox
|
||||
# Backup the files because the new autoloader will change the composer vendor
|
||||
backup_vendor_folder
|
||||
# Generate an autoload for test class files (and include dev namespaces)
|
||||
composer dump-autoload --dev || php -r "echo 'Requires: composer >= v2.1.2' . PHP_EOL; exit(1);"
|
||||
"${TEMP_PHPUNIT_FOLDER}/vendor/bin/phpunit" --no-coverage --testsuite unit
|
||||
test_ret=$?
|
||||
if [ $do_ci -eq 1 ] ; then
|
||||
cd ../..
|
||||
rm -r "$workdir"
|
||||
git worktree prune
|
||||
if [ "$branch" = "ci" ] ; then
|
||||
git branch -D ci
|
||||
fi
|
||||
exit $test_ret
|
||||
fi
|
||||
if [ $test_ret -ne 0 ] ; then
|
||||
exit $test_ret
|
||||
fi
|
||||
# Remove PHPUnit cache file
|
||||
rm -f .phpunit.result.cache
|
||||
# Generate an normal autoload (this is just a security, because normally the vendor folder will be restored)
|
||||
composer dump-autoload
|
||||
# Remove libs installed for testing
|
||||
rm -r build
|
||||
delete_phpunit_sandbox
|
||||
restore_vendor_folder
|
||||
fi
|
||||
|
||||
security_checkup
|
||||
|
||||
cd ..
|
||||
|
||||
SIGN_FILES=""
|
||||
|
||||
# Prepare all kits
|
||||
for kit in $KITS ; do
|
||||
echo "* Building kit: $kit"
|
||||
# Copy all files
|
||||
name=$kit_prefix-$kit
|
||||
cp -r "$workdir_name" "$name"
|
||||
|
||||
# Cleanup translations
|
||||
cd "$name"
|
||||
./bin/internal/lang-cleanup.sh "$kit"
|
||||
|
||||
# Remove tests, source code,...
|
||||
if [ "$kit" != source ] ; then
|
||||
echo "* Removing source files"
|
||||
# Testsuite
|
||||
rm -r tests/
|
||||
# Template test files
|
||||
rm -r resources/templates/test/
|
||||
rm phpunit.xml.*
|
||||
rm .editorconfig .browserslistrc .eslintignore .jshintrc .eslintrc.json .stylelintrc.json psalm.xml psalm-baseline.xml phpstan.neon.dist phpstan-baseline.neon phpcs.xml.dist jest.config.cjs infection.json5.dist .phpstorm.meta.php
|
||||
# Gettext po files (if they were not removed by ./bin/internal/lang-cleanup.sh)
|
||||
rm -rf resources/po
|
||||
# Documentation source code
|
||||
mv docs/html htmldoc
|
||||
rm -r docs
|
||||
mkdir public/docs
|
||||
mv htmldoc public/docs/html
|
||||
rm public/docs/html/.buildinfo public/docs/html/objects.inv
|
||||
rm -r node_modules
|
||||
# Remove bin files for non source version
|
||||
# https://github.com/phpmyadmin/phpmyadmin/issues/16033
|
||||
rm -r vendor/bin
|
||||
|
||||
# Remove developer scripts
|
||||
rm -r bin
|
||||
fi
|
||||
|
||||
# Remove possible tmp folder
|
||||
rm -rf tmp
|
||||
|
||||
cd ..
|
||||
|
||||
# Remove tar file possibly left from previous run
|
||||
rm -f "$name".tar
|
||||
|
||||
# Prepare distributions
|
||||
for comp in $COMPRESSIONS ; do
|
||||
case $comp in
|
||||
tbz|tgz|txz)
|
||||
if [ ! -f "$name".tar ] ; then
|
||||
echo "* Creating $name.tar"
|
||||
tar --owner=root --group=root --numeric-owner --sort=name -cf "$name".tar "$name"
|
||||
fi
|
||||
if [ "$comp" = txz ] ; then
|
||||
echo "* Creating $name.tar.xz"
|
||||
xz -9k "$name".tar
|
||||
SIGN_FILES="$SIGN_FILES $name.tar.xz"
|
||||
fi
|
||||
if [ "$comp" = tgz ] ; then
|
||||
echo "* Creating $name.tar.gz"
|
||||
gzip -9c "$name".tar > "$name".tar.gz
|
||||
SIGN_FILES="$SIGN_FILES $name.tar.gz"
|
||||
fi
|
||||
;;
|
||||
zip-7z)
|
||||
echo "* Creating $name.zip"
|
||||
7za a -bd -tzip "$name".zip "$name" > /dev/null
|
||||
SIGN_FILES="$SIGN_FILES $name.zip"
|
||||
;;
|
||||
*)
|
||||
echo "WARNING: ignoring compression '$comp', not known!"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
# Cleanup
|
||||
rm -f "$name".tar
|
||||
# Remove directory with current dist set
|
||||
rm -r "$name"
|
||||
done
|
||||
|
||||
# Cleanup
|
||||
rm -r "$workdir_name"
|
||||
git worktree prune
|
||||
|
||||
# Signing of files with default GPG key
|
||||
if [ $do_sign -eq 1 ] ; then
|
||||
echo "* Signing and making .sha{1,256} files"
|
||||
else
|
||||
echo "* Making .sha{1,256} files"
|
||||
fi
|
||||
|
||||
for file in $SIGN_FILES; do
|
||||
if [ $do_sign -eq 1 ] ; then
|
||||
gpg --detach-sign --armor "$file"
|
||||
fi
|
||||
sha1sum "$file" > "$file".sha1
|
||||
sha256sum "$file" > "$file".sha256
|
||||
done
|
||||
|
||||
if [ $do_daily -eq 1 ] ; then
|
||||
cat > "$kit_prefix".json << EOT
|
||||
{
|
||||
"date": "$(date --iso-8601=seconds)",
|
||||
"commit": "$git_head"
|
||||
}
|
||||
EOT
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
||||
echo ""
|
||||
echo ""
|
||||
echo ""
|
||||
echo "Files:"
|
||||
echo "------"
|
||||
|
||||
ls -la $SIGN_FILES
|
||||
|
||||
cd ..
|
||||
|
||||
# Tag as release
|
||||
if [ $do_tag -eq 1 ] ; then
|
||||
echo
|
||||
echo "Additional tasks:"
|
||||
tagname=RELEASE_$(echo "$version" | tr . _ | tr '[:lower:]' '[:upper:]' | tr -d -)
|
||||
echo "* Tagging release as $tagname"
|
||||
git tag -s -a -m "Released $version" "$tagname" "$branch"
|
||||
echo " Dont forget to push tags using: git push --tags"
|
||||
fi
|
||||
|
||||
# Mark as stable release
|
||||
if [ $do_stable -eq 1 ] ; then
|
||||
mark_as_release "$branch" STABLE
|
||||
fi
|
||||
|
||||
cat <<END
|
||||
|
||||
|
||||
Todo now:
|
||||
---------
|
||||
|
||||
1. Push the new tag upstream, with a command like git push origin --tags
|
||||
|
||||
2. Push the new STABLE branch upstream
|
||||
|
||||
3. prepare a release/phpMyAdmin-$version-notes.html explaining in short the goal of
|
||||
this release and paste into it the ChangeLog for this release, followed
|
||||
by the notes of all previous incremental versions (i.e. 4.4.9 through 4.4.0)
|
||||
|
||||
4. upload the files to our file server, use bin/internal/upload-release, eg.:
|
||||
|
||||
./bin/internal/upload-release $version release
|
||||
|
||||
5. add a news item to our website; a good idea is to include a link to the release notes such as https://www.phpmyadmin.net/files/4.4.10/
|
||||
|
||||
6. send a short mail (with list of major changes) to
|
||||
developers@phpmyadmin.net
|
||||
news@phpmyadmin.net
|
||||
|
||||
Don't forget to update the Description section in the announcement,
|
||||
based on documentation.
|
||||
|
||||
7. increment rc count or version in the repository :
|
||||
- run ./bin/console set-version $version
|
||||
- in $VERSION_FILE Version class:
|
||||
- check that VERSION, MAJOR, MINOR and PATCH are correct.
|
||||
- in README the "Version" line
|
||||
" Version 2.7.1-dev "
|
||||
- in package.json the line
|
||||
" "version": " 2.7.1-dev", "
|
||||
- in docs/conf.py (if it exists) the line
|
||||
" version = '2.7.1-dev' "
|
||||
|
||||
8. on https://github.com/phpmyadmin/phpmyadmin/milestones close the milestone corresponding to the released version (if this is a stable release) and open a new one for the next minor release
|
||||
|
||||
9. for a major release, update demo/php/versions.ini in the scripts repository so that the demo server shows current versions
|
||||
|
||||
10. in case of a new major release ('y' in x.y.0), update the pmaweb/settings.py in website repository to include the new major releases
|
||||
|
||||
11. update the Dockerfile in the docker repository to reflect the new version and create a new annotated tag (such as with git tag -s -a 4.7.9-1 -m "Version 4.7.9-1"). Remember to push the tag with git push origin {tagName}
|
||||
|
||||
END
|
||||
@ -1,52 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# vim: expandtab sw=4 ts=4 sts=4:
|
||||
#
|
||||
# Script for removing language selection from phpMyAdmin
|
||||
|
||||
# Do not run as CGI
|
||||
if [ -n "$GATEWAY_INTERFACE" ] ; then
|
||||
echo 'Can not invoke as CGI!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $# -lt 1 ] ; then
|
||||
echo "Usage: lang-cleanup.sh type"
|
||||
echo "Type can be one of:"
|
||||
echo " all-languages - nothing will be done"
|
||||
echo " source - nothing will be done"
|
||||
echo " english - no translations will be kept"
|
||||
echo " langcode - keeps language"
|
||||
echo
|
||||
echo "Languages can be specified multiple times"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Expression for find
|
||||
match=""
|
||||
for type in "$@" ; do
|
||||
case $type in
|
||||
all-languages|source)
|
||||
exit 0
|
||||
;;
|
||||
english)
|
||||
rm -rf resources/po
|
||||
rm -rf resources/locale
|
||||
rm -rf vendor/phpmyadmin/sql-parser/locale
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
match="$match -and -not -name $type.po -and -not -path resources/locale/$type/LC_MESSAGES/phpmyadmin.mo -and -not -path vendor/phpmyadmin/sql-parser/locale/$type/LC_MESSAGES/sqlparser.mo"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Delete unwanted languages
|
||||
# shellcheck disable=SC2086
|
||||
find resources/po resources/locale vendor/phpmyadmin/sql-parser/locale -type f $match -print0 | xargs -0r rm
|
||||
|
||||
# Delete empty directories
|
||||
rmdir --ignore-fail-on-non-empty resources/locale/*/*
|
||||
rmdir --ignore-fail-on-non-empty resources/locale/*
|
||||
rmdir --ignore-fail-on-non-empty vendor/phpmyadmin/sql-parser/locale/*/*
|
||||
rmdir --ignore-fail-on-non-empty vendor/phpmyadmin/sql-parser/locale/*
|
||||
@ -1,11 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Do not run as CGI
|
||||
if [ -n "$GATEWAY_INTERFACE" ] ; then
|
||||
echo 'Can not invoke as CGI!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for x in resources/po/*.po ; do
|
||||
grep 'Team' "$x" | sed 's/.*: \(.*\)<.*/\1/'
|
||||
git shortlog -sne --no-merges -- "$x" | grep '^ [ 0-9][0-9]\{3\}'
|
||||
done
|
||||
@ -1,76 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# vim: expandtab sw=4 ts=4 sts=4:
|
||||
#
|
||||
# This requires Bash for the search and replace substitution to escape dots
|
||||
|
||||
# Do not run as CGI
|
||||
if [ -n "$GATEWAY_INTERFACE" ] ; then
|
||||
echo 'Can not invoke as CGI!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Fail on undefined variables
|
||||
set -u
|
||||
# Fail on failure
|
||||
set -e
|
||||
|
||||
printHelp () {
|
||||
echo
|
||||
echo "Please pass the new version number as a command line argument such as"
|
||||
echo "$0 -v 5.0.0-dev"
|
||||
echo
|
||||
}
|
||||
|
||||
if [ $# -eq 0 ]
|
||||
then
|
||||
printHelp
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$1" = '-v' ]
|
||||
then
|
||||
newVersion=$2
|
||||
else
|
||||
printHelp
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# If we're in the scripts directory, we need to do all our work up a directory level
|
||||
if [ "$(basename "$(pwd)")" = 'bin' ]
|
||||
then
|
||||
dir='../'
|
||||
else
|
||||
dir=''
|
||||
fi
|
||||
|
||||
# There are half a dozen ways to do this, including individually recreating the line of
|
||||
# each file (search for 'version =' in conf.py and replace it with 'version = 5.0.0-dev'
|
||||
# for instance), and while that's more precise this should work with less to fix if a line changes.
|
||||
# This method wasn't selected for any particular strength.
|
||||
|
||||
oldVersion="$(grep 'version =' "${dir}"docs/conf.py | cut -d "'" -f2)"
|
||||
|
||||
echo "Changing from ${oldVersion} to ${newVersion}..."
|
||||
|
||||
# Escape the dot for sed
|
||||
oldVersion=${oldVersion//./\.}
|
||||
newVersion=${newVersion//./\.}
|
||||
|
||||
for f in README docs/conf.py package.json
|
||||
do
|
||||
if ! grep --quiet "${oldVersion}" "${dir}${f}"
|
||||
then
|
||||
# There may be a better way to test for a failure of the substitution itself, such as using the 'q' directive with sed
|
||||
# See https://stackoverflow.com/questions/15965073/return-code-of-sed-for-no-match
|
||||
echo "FAILED! Substitution string ${oldVersion} not found in ${dir}${f}"
|
||||
fi
|
||||
sed -i "s/${oldVersion}/${newVersion}/g" "${dir}${f}"
|
||||
done
|
||||
|
||||
echo
|
||||
echo "- Next, you need to manually edit ChangeLog to manually change the version number and set the release date, and verify the changes with 'git diff'."
|
||||
echo "- You will probably want to call: \"./bin/console set-version ${newVersion}\" afterwards"
|
||||
echo "- You should check if you need to change the composer.json file and the theme.json file for each bundled theme."
|
||||
echo " To change the composer.json file you can call something like: \"composer config extra.branch-alias.dev-master \"5.2.x-dev\"\""
|
||||
echo "- Suggested commit message: Prepare for version ${newVersion}"
|
||||
@ -1,75 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Removes mo files for incomplete translations
|
||||
#
|
||||
|
||||
# Do not run as CGI
|
||||
if [ -n "$GATEWAY_INTERFACE" ] ; then
|
||||
echo 'Can not invoke as CGI!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -e
|
||||
|
||||
#
|
||||
# How many percent needs to be translated
|
||||
#
|
||||
THRESHOLD=40
|
||||
|
||||
#
|
||||
# Generated output file
|
||||
#
|
||||
TMPOUTPUTFILE=app/language_stats.inc.php.tmp
|
||||
OUTPUTFILE=app/language_stats.inc.php
|
||||
|
||||
if [ -n "$1" ] ; then
|
||||
THRESHOLD=$1
|
||||
fi
|
||||
|
||||
{
|
||||
echo '<?php'
|
||||
echo '/**'
|
||||
echo ' * Automatically generated file, do not edit!'
|
||||
echo ' * Generated by bin/remove-incomplete-mo'
|
||||
echo ' */'
|
||||
echo ''
|
||||
echo "return ["
|
||||
} > $TMPOUTPUTFILE
|
||||
|
||||
check() {
|
||||
TMPOUTPUTFILE=$2
|
||||
lang=$(echo "$1" | sed 's@resources/po/\(.*\)\.po@\1@')
|
||||
STATS=$(LC_ALL=C msgfmt --statistics -o /dev/null "$1" 2>&1)
|
||||
if echo "$STATS" | grep -q ' translated ' ; then
|
||||
TRANSLATED=$(echo "$STATS" | sed 's/\(^\|.* \)\([0-9]*\) translated.*/\2/')
|
||||
else
|
||||
TRANSLATED=0
|
||||
fi
|
||||
if echo "$STATS" | grep -q ' fuzzy ' ; then
|
||||
FUZZY=$(echo "$STATS" | sed 's/\(^\|.* \)\([0-9]*\) fuzzy.*/\2/')
|
||||
else
|
||||
FUZZY=0
|
||||
fi
|
||||
if echo "$STATS" | grep -q ' untranslated ' ; then
|
||||
UNTRANSLATED=$(echo "$STATS" | sed 's/\(^\|.* \)\([0-9]*\) untranslated.*/\2/')
|
||||
else
|
||||
UNTRANSLATED=0
|
||||
fi
|
||||
PERCENT=$((100 * TRANSLATED / ( TRANSLATED + FUZZY + UNTRANSLATED )))
|
||||
echo " '$lang' => $PERCENT," >> "$TMPOUTPUTFILE"
|
||||
|
||||
if [ "$PERCENT" -lt "$THRESHOLD" ] ; then
|
||||
echo "Removing $lang, only $PERCENT%"
|
||||
rm -f resources/locale/"$lang"/LC_MESSAGES/phpmyadmin.mo
|
||||
rmdir resources/locale/"$lang"/LC_MESSAGES
|
||||
rmdir resources/locale/"$lang"
|
||||
fi
|
||||
}
|
||||
|
||||
for x in resources/po/*.po ; do
|
||||
check "$x" "$TMPOUTPUTFILE"
|
||||
done
|
||||
|
||||
echo '];' >> "$TMPOUTPUTFILE"
|
||||
|
||||
mv "$TMPOUTPUTFILE" $OUTPUTFILE
|
||||
@ -1,63 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Shell script that creates a new transformation plug-in (both main and
|
||||
# abstract class) using a template.
|
||||
#
|
||||
# The 'description' parameter will add a new entry in the language file.
|
||||
# Watch out for special escaping.
|
||||
#
|
||||
# $1: MIMEType
|
||||
# $2: MIMESubtype
|
||||
# $3: Transformation Name
|
||||
# $4: (optional) Description
|
||||
|
||||
# Do not run as CGI
|
||||
if [ -n "$GATEWAY_INTERFACE" ] ; then
|
||||
echo 'Can not invoke as CGI!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $# -ne 3 ] && [ $# -ne 4 ]; then
|
||||
echo -e "Usage: ./generator_plugin.sh MIMEType MIMESubtype TransformationName [Description]\n"
|
||||
exit 65
|
||||
fi
|
||||
|
||||
# make sure that the MIME Type, MIME Subtype and Transformation names
|
||||
# are in the correct format
|
||||
|
||||
# make all names lowercase
|
||||
MT="$(echo "$1" | tr '[:upper:]' '[:lower:]')"
|
||||
MS="$(echo "$2" | tr '[:upper:]' '[:lower:]')"
|
||||
TN="$(echo "$3" | tr '[:upper:]' '[:lower:]')"
|
||||
# make first letter uppercase
|
||||
MT="${MT^}"
|
||||
MS="${MS^}"
|
||||
TN="${TN^}"
|
||||
|
||||
# make the first letter after each underscore uppercase
|
||||
# define the name of the main class file and of its template
|
||||
CLASS_NAME=$(echo "$MT"_"$MS"_"$TN" | sed -e 's/_./\U&\E/g')
|
||||
BASE_DIR="./src/Plugins/Transformations"
|
||||
ClassFile="$BASE_DIR"/"$CLASS_NAME".php
|
||||
Template="$BASE_DIR"/TEMPLATE
|
||||
# define the name of the abstract class file and its template
|
||||
AbstractClassFile="$BASE_DIR"/Abs/"$TN"TransformationsPlugin.php
|
||||
AbstractTemplate="$BASE_DIR"/TEMPLATE_ABSTRACT
|
||||
# replace template names with argument names
|
||||
sed "s/\[MIMEType]/$MT/; s/\[MIMESubtype\]/$MS/; s/\[TransformationName\]/$TN/;" < $Template > "$ClassFile"
|
||||
echo "Created $ClassFile"
|
||||
|
||||
GenerateAbstractClass=1
|
||||
if [ -n "$4" ]; then
|
||||
if [ "$4" == "--generate_only_main_class" ]; then
|
||||
if [ -e "$AbstractClassFile" ]; then
|
||||
GenerateAbstractClass=0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $GenerateAbstractClass -eq 1 ]; then
|
||||
# replace template names with argument names
|
||||
sed "s/\[TransformationName\]/$TN/; s/Description of the transformation./$4/;" < $AbstractTemplate > "$AbstractClassFile"
|
||||
echo "Created $AbstractClassFile"
|
||||
fi
|
||||
@ -1,79 +0,0 @@
|
||||
#!/bin/sh
|
||||
# vim: expandtab sw=4 ts=4 sts=4:
|
||||
export LC_ALL=C
|
||||
|
||||
# Do not run as CGI
|
||||
if [ -n "$GATEWAY_INTERFACE" ] ; then
|
||||
echo 'Can not invoke as CGI!'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Exit on failure
|
||||
set -e
|
||||
|
||||
# Generate Twig template cache in clean dir
|
||||
rm -rf twig-templates/
|
||||
php bin/console cache:warmup --twig-po --env development
|
||||
|
||||
# Update pot (template), ensure that advisor is at the end
|
||||
LOCS=$(find resources/po -name '*.po' | sed 's@.*/\(.*\)\.po@\1@')
|
||||
|
||||
find . -name '*.php' -not -path './tests/*' -not -path './resources/po/*' -not -path './tmp/*' -not -path './release/*' -not -path './node_modules/*' -not -path './vendor/*' > twig-templates/filesList
|
||||
|
||||
php ./bin/match-twig-cache
|
||||
sort --dictionary-order --ignore-case --output ./twig-templates/filesListTemp < ./twig-templates/filesList
|
||||
mv ./twig-templates/filesListTemp ./twig-templates/filesList
|
||||
php ./bin/match-twig-cache --reverse
|
||||
|
||||
# Allows word splitting for files list.
|
||||
# shellcheck disable=SC2046
|
||||
xgettext \
|
||||
-d phpmyadmin \
|
||||
--msgid-bugs-address=translators@phpmyadmin.net \
|
||||
-o resources/po/phpmyadmin.pot \
|
||||
--language=PHP \
|
||||
--add-comments=l10n \
|
||||
--add-location \
|
||||
--debug \
|
||||
--from-code=utf-8 \
|
||||
--keyword=__ --keyword=_gettext --keyword=_pgettext:1c,2 --keyword=_ngettext:1,2 \
|
||||
--copyright-holder="phpMyAdmin devel team" \
|
||||
$(cat ./twig-templates/filesList)
|
||||
|
||||
# Fixup filenames for Twig templates
|
||||
php bin/console fix-po-twig
|
||||
|
||||
# Remote twig templates
|
||||
rm -rf twig-templates/
|
||||
|
||||
# Keep in sync with create-release.sh
|
||||
fetchReleaseFromFile() {
|
||||
php -r "define('VERSION_SUFFIX', ''); require_once('src/Version.php'); echo \PhpMyAdmin\Version::VERSION;"
|
||||
}
|
||||
|
||||
ver="$(fetchReleaseFromFile)"
|
||||
|
||||
sed -i.~ '
|
||||
s/SOME DESCRIPTIVE TITLE/phpMyAdmin translation/;
|
||||
s/PACKAGE/phpMyAdmin/;
|
||||
s/(C) YEAR/(C) 2003 - '"$(date +%Y)"'/;
|
||||
s/VERSION/'"$ver"'/;
|
||||
' resources/po/phpmyadmin.pot
|
||||
|
||||
# Update po files (translations)
|
||||
for loc in $LOCS ; do
|
||||
sed -i.~ '
|
||||
s/SOME DESCRIPTIVE TITLE/phpMyAdmin translation/;
|
||||
s/PACKAGE/phpMyAdmin/;
|
||||
s/(C) YEAR/(C) 2003 - '"$(date +%Y)"'/;
|
||||
s/VERSION/'"$ver"'/;
|
||||
s/Project-Id-Version: phpMyAdmin .*/Project-Id-Version: phpMyAdmin '"$ver"'\\n"/;
|
||||
' resources/po/"$loc".po
|
||||
msgmerge --previous -U resources/po/"$loc".po resources/po/phpmyadmin.pot
|
||||
done
|
||||
|
||||
# Commit changes
|
||||
git add resources/po/*.po resources/po/phpmyadmin.pot
|
||||
git commit -s -m 'Update po files
|
||||
|
||||
[ci skip]'
|
||||
111
composer.json
@ -23,10 +23,11 @@
|
||||
"non-feature-branches": ["RELEASE_.*"],
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PhpMyAdmin\\": "src"
|
||||
"PhpMyAdmin\\": "libraries/classes"
|
||||
},
|
||||
"files": ["vendor/phpmyadmin/motranslator/src/functions.php"],
|
||||
"exclude-from-classmap": [
|
||||
"/tests/",
|
||||
"/test/",
|
||||
"/vendor/tecnickcom/tcpdf/tcpdf_barcodes_*.php",
|
||||
"/vendor/tecnickcom/tcpdf/tcpdf_import.php",
|
||||
"/vendor/tecnickcom/tcpdf/tcpdf_parser.php",
|
||||
@ -36,49 +37,50 @@
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"PhpMyAdmin\\Tests\\": "tests/unit",
|
||||
"PhpMyAdmin\\Tests\\Selenium\\": "tests/end-to-end/"
|
||||
"PhpMyAdmin\\Tests\\": "test/classes",
|
||||
"PhpMyAdmin\\Tests\\Selenium\\": "test/selenium/"
|
||||
}
|
||||
},
|
||||
"repositories": [
|
||||
{
|
||||
"type": "composer",
|
||||
"url": "https://www.phpmyadmin.net"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/MauricioFauth/thecodingmachine-safe.git",
|
||||
"no-api": true
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"php": "^7.2.5 || ^8.0",
|
||||
"ext-hash": "*",
|
||||
"ext-iconv": "*",
|
||||
"ext-json": "*",
|
||||
"ext-mysqli": "*",
|
||||
"ext-openssl": "*",
|
||||
"ext-pcre": "*",
|
||||
"ext-sodium": "*",
|
||||
"ext-xml": "*",
|
||||
"composer/ca-bundle": "^1.2",
|
||||
"fig/http-message-util": "^1.1",
|
||||
"google/recaptcha": "^1.3",
|
||||
"laminas/laminas-httphandlerrunner": "^2.6",
|
||||
"google/recaptcha": "^1.1",
|
||||
"nikic/fast-route": "^1.3",
|
||||
"phpmyadmin/motranslator": "^6.0",
|
||||
"phpmyadmin/shapefile": "^4.0",
|
||||
"phpmyadmin/sql-parser": "^6.0",
|
||||
"psr/clock": "^1.0",
|
||||
"psr/container": "^2.0",
|
||||
"paragonie/sodium_compat": "^1.17",
|
||||
"phpmyadmin/motranslator": "^5.0",
|
||||
"phpmyadmin/shapefile": "^3.0.1",
|
||||
"phpmyadmin/sql-parser": "^5.8",
|
||||
"phpmyadmin/twig-i18n-extension": "^4.1.3 || ^5.0.0",
|
||||
"psr/http-factory": "^1.0",
|
||||
"psr/http-message": "^2",
|
||||
"psr/http-server-handler": "^1.0",
|
||||
"psr/http-server-middleware": "^1.0",
|
||||
"slim/psr7": "^1.6.1",
|
||||
"symfony/config": "^7.1",
|
||||
"symfony/dependency-injection": "^7.1",
|
||||
"symfony/expression-language": "^7.1",
|
||||
"symfony/polyfill-ctype": "^1.24",
|
||||
"psr/http-message": "^1.0",
|
||||
"slim/psr7": "^1.4.1",
|
||||
"symfony/config": "^5.2.3",
|
||||
"symfony/dependency-injection": "^5.2.3",
|
||||
"symfony/expression-language": "^5.2.3",
|
||||
"symfony/polyfill-ctype": "^1.17.0",
|
||||
"symfony/polyfill-iconv": "^1.33",
|
||||
"symfony/polyfill-mbstring": "^1.24",
|
||||
"symfony/polyfill-mbstring": "^1.17.0",
|
||||
"symfony/polyfill-php80": "^1.16",
|
||||
"symfony/polyfill-php84": "^1.33",
|
||||
"twig/twig": "^3.21",
|
||||
"twig/twig": "^3.11.3",
|
||||
"webmozart/assert": "^1.10",
|
||||
"williamdes/mariadb-mysql-kbs": "^1.2"
|
||||
},
|
||||
@ -95,38 +97,36 @@
|
||||
"ext-zip": "For zip import and export",
|
||||
"ext-gd2": "For image transformations",
|
||||
"ext-mbstring": "For best performance",
|
||||
"ext-sodium": "Better encryption performance",
|
||||
"tecnickcom/tcpdf": "For PDF support",
|
||||
"pragmarx/google2fa-qrcode": "^2.1 or ^3.0 - For 2FA authentication",
|
||||
"bacon/bacon-qr-code": "^3.0 - For 2FA authentication",
|
||||
"pragmarx/google2fa-qrcode": "^2.1 - For 2FA authentication",
|
||||
"bacon/bacon-qr-code": "^2.0 - For 2FA authentication",
|
||||
"code-lts/u2f-php-server": "For FIDO U2F authentication",
|
||||
"web-auth/webauthn-lib": "For better WebAuthn/FIDO2 authentication support"
|
||||
},
|
||||
"require-dev": {
|
||||
"bacon/bacon-qr-code": "^3.0",
|
||||
"bacon/bacon-qr-code": "^2.0 || ^3.0",
|
||||
"code-lts/u2f-php-server": "^1.2",
|
||||
"guzzlehttp/psr7": "^2.5",
|
||||
"httpsoft/http-message": "^1.1",
|
||||
"laminas/laminas-diactoros": "^3.0",
|
||||
"nyholm/psr7": "^1.8",
|
||||
"php-webdriver/webdriver": "^1.14",
|
||||
"phpmyadmin/coding-standard": "^4.0",
|
||||
"php-webdriver/webdriver": "^1.13",
|
||||
"phpmyadmin/coding-standard": "^3.0.0",
|
||||
"phpstan/extension-installer": "^1.4",
|
||||
"phpstan/phpstan": "^2.0",
|
||||
"phpstan/phpstan-deprecation-rules": "^2.0",
|
||||
"phpstan/phpstan-phpunit": "^2.0",
|
||||
"phpstan/phpstan-strict-rules": "^2.0",
|
||||
"phpstan/phpstan-webmozart-assert": "^2.0",
|
||||
"phpunit/phpunit": "^11.5",
|
||||
"pragmarx/google2fa-qrcode": "^3.0",
|
||||
"psalm/plugin-phpunit": "^0.19",
|
||||
"symfony/console": "^7.1",
|
||||
"phpstan/phpstan": "^1.12",
|
||||
"phpstan/phpstan-deprecation-rules": "^1.2",
|
||||
"phpstan/phpstan-phpunit": "^1.4",
|
||||
"phpstan/phpstan-strict-rules": "^1.6",
|
||||
"phpstan/phpstan-webmozart-assert": "^1.2",
|
||||
"phpunit/phpunit": "^8.5.16 || ^9.6",
|
||||
"pragmarx/google2fa-qrcode": "^2.1",
|
||||
"psalm/plugin-phpunit": "^0.16.1",
|
||||
"symfony/console": "^5.2.3",
|
||||
"tecnickcom/tcpdf": "^6.4.4",
|
||||
"vimeo/psalm": "^6.0",
|
||||
"web-auth/webauthn-lib": "^4.9"
|
||||
"thecodingmachine/safe": "1.3.3.1",
|
||||
"vimeo/psalm": "^4.30",
|
||||
"web-auth/webauthn-lib": "^3.3.2"
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "6.0.x-dev"
|
||||
"dev-master": "5.2.x-dev"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
@ -145,7 +145,7 @@
|
||||
"@php phpstan analyse --generate-baseline",
|
||||
"@php psalm --no-cache --threads=max --set-baseline=psalm-baseline.xml"
|
||||
],
|
||||
"twig-lint": "@php bin/console lint:twig --ansi --show-deprecations"
|
||||
"twig-lint": "@php scripts/console lint:twig --ansi --show-deprecations"
|
||||
},
|
||||
"config":{
|
||||
"sort-packages": true,
|
||||
@ -155,8 +155,23 @@
|
||||
"phpstan/extension-installer": true,
|
||||
"composer/package-versions-deprecated": true
|
||||
},
|
||||
"platform": {
|
||||
"php": "8.2.99"
|
||||
"audit": {
|
||||
"ignore": [
|
||||
"CVE-2026-24425",
|
||||
"CVE-2026-46627",
|
||||
"CVE-2026-46628",
|
||||
"CVE-2026-46633",
|
||||
"CVE-2026-46634",
|
||||
"CVE-2026-46635",
|
||||
"CVE-2026-46636",
|
||||
"CVE-2026-46638",
|
||||
"CVE-2026-47730",
|
||||
"CVE-2026-47732",
|
||||
"CVE-2026-48805",
|
||||
"CVE-2026-48806",
|
||||
"CVE-2026-48807",
|
||||
"CVE-2026-48808"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
8949
composer.lock
generated
@ -3,7 +3,7 @@
|
||||
* phpMyAdmin sample configuration, you can use it as base for
|
||||
* manual configuration. For easier setup you can use setup/
|
||||
*
|
||||
* All directives are explained in documentation in the docs/ folder
|
||||
* All directives are explained in documentation in the doc/ folder
|
||||
* or at <https://docs.phpmyadmin.net/>.
|
||||
*/
|
||||
|
||||
@ -108,7 +108,7 @@ $cfg['SaveDir'] = '';
|
||||
|
||||
/**
|
||||
* Default language to use, if not browser-defined or user-defined
|
||||
* (you find all languages in the 'resources/locale' folder)
|
||||
* (you find all languages in the locale folder)
|
||||
* uncomment the desired line:
|
||||
* default = 'en'
|
||||
*/
|
||||
@ -156,5 +156,5 @@ $cfg['SaveDir'] = '';
|
||||
|
||||
/**
|
||||
* You can find more configuration options in the documentation
|
||||
* in the docs/ folder or at <https://docs.phpmyadmin.net/>.
|
||||
* in the doc/ folder or at <https://docs.phpmyadmin.net/>.
|
||||
*/
|
||||
|
||||
6
doc/.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
*.swp
|
||||
/_build
|
||||
/doctrees
|
||||
/html
|
||||
/locale
|
||||
*.pyc
|
||||
@ -24,7 +24,7 @@ A window layer "Display chart" is shown in which you can customize the chart wit
|
||||
Chart implementation
|
||||
--------------------
|
||||
|
||||
Charts in phpMyAdmin are drawn using the `Chart.js <https://www.chartjs.org/>`_ library.
|
||||
Charts in phpMyAdmin are drawn using `jqPlot <http://www.jqplot.com/>`_ jQuery library.
|
||||
|
||||
Examples
|
||||
--------
|
||||
@ -51,7 +51,7 @@ copyright = u'2012 - 2026, The phpMyAdmin devel team'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '6.0.0-dev'
|
||||
version = '5.2.4-dev'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = version
|
||||
|
||||
@ -100,11 +100,15 @@ pygments_style = 'sphinx'
|
||||
# a list of builtin themes.
|
||||
html_theme = 'default'
|
||||
|
||||
try:
|
||||
import sphinx_rtd_theme
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
except:
|
||||
print('WARNING: The python module sphinx_rtd_theme was not found, using the default theme. Debian package: python3-sphinx-rtd-theme')
|
||||
# See: https://docs.readthedocs.io/en/stable/reference/environment-variables.html#envvar-READTHEDOCS
|
||||
on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
|
||||
|
||||
if on_rtd: # only import and set the theme if we're building docs on readthedocs
|
||||
try:
|
||||
import sphinx_rtd_theme
|
||||
html_theme = 'sphinx_rtd_theme'
|
||||
except:
|
||||
html_theme = 'default'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
@ -8,7 +8,8 @@ Configuration
|
||||
All configurable data is placed in :file:`config.inc.php` in phpMyAdmin's
|
||||
toplevel directory. If this file does not exist, please refer to the
|
||||
:ref:`setup` section to create one. This file only needs to contain the
|
||||
parameters you want to change from their corresponding default value.
|
||||
parameters you want to change from their corresponding default value in
|
||||
:file:`libraries/config.default.php` (this file is not intended for changes).
|
||||
|
||||
.. seealso::
|
||||
|
||||
@ -122,10 +123,6 @@ Basic settings
|
||||
:type: boolean
|
||||
:default: false
|
||||
|
||||
.. deprecated:: 6.0.0
|
||||
|
||||
This setting has been removed. The Suhosin extension is no longer supported.
|
||||
|
||||
A warning is displayed on the main page if Suhosin is detected.
|
||||
|
||||
You can set this parameter to ``true`` to stop this message from appearing.
|
||||
@ -234,7 +231,9 @@ Server connection settings
|
||||
added which contains the login information for the different servers. The
|
||||
first :config:option:`$cfg['Servers'][$i]['host']` contains the hostname of
|
||||
the first server, the second :config:option:`$cfg['Servers'][$i]['host']`
|
||||
the hostname of the second server, etc. You can put as many sections for server definition as you need in
|
||||
the hostname of the second server, etc. In
|
||||
:file:`libraries/config.default.php`, there is only one section for server
|
||||
definition, however you can put as many as you need in
|
||||
:file:`config.inc.php`, copy that block or needed parts (you don't have to
|
||||
define all settings, just those you need to change).
|
||||
|
||||
@ -598,10 +597,7 @@ Server connection settings
|
||||
:config:option:`$cfg['Servers'][$i]['ssl_ca']`,
|
||||
:config:option:`$cfg['Servers'][$i]['ssl_ca_path']`,
|
||||
:config:option:`$cfg['Servers'][$i]['ssl_ciphers']`,
|
||||
:config:option:`$cfg['Servers'][$i]['ssl_verify']`,
|
||||
:config:option:`$cfg['Servers'][$i]['socket']`,
|
||||
:config:option:`$cfg['Servers'][$i]['compress']`,
|
||||
:config:option:`$cfg['Servers'][$i]['hide_connection_errors']`
|
||||
:config:option:`$cfg['Servers'][$i]['ssl_verify']`
|
||||
|
||||
.. config:option:: $cfg['Servers'][$i]['auth_type']
|
||||
|
||||
@ -963,7 +959,7 @@ Server connection settings
|
||||
transformation system to work. phpMyAdmin will upgrade it automatically
|
||||
for you by analyzing your current ``column_info`` table structure.
|
||||
However, if something goes wrong with the auto-upgrade then you can
|
||||
use the SQL script found in ``./resources/sql/upgrade_column_info_4_3_0+.sql``
|
||||
use the SQL script found in ``./sql/upgrade_column_info_4_3_0+.sql``
|
||||
to upgrade it manually.
|
||||
|
||||
To allow the usage of this functionality:
|
||||
@ -983,7 +979,7 @@ Server connection settings
|
||||
ADD `transformation` VARCHAR( 255 ) NOT NULL,
|
||||
ADD `transformation_options` VARCHAR( 255 ) NOT NULL;
|
||||
* to update your PRE-4.3.0 ``column_info`` table manually use this
|
||||
``./resources/sql/upgrade_column_info_4_3_0+.sql`` SQL script.
|
||||
``./sql/upgrade_column_info_4_3_0+.sql`` SQL script.
|
||||
|
||||
This feature can be disabled by setting the configuration to ``false``.
|
||||
|
||||
@ -1668,14 +1664,6 @@ Generic settings
|
||||
The maximum number of table names to be displayed in the main panel's
|
||||
list (except on the Export page).
|
||||
|
||||
.. config:option:: $cfg['MaxRoutineList']
|
||||
|
||||
:type: integer
|
||||
:default: 250
|
||||
|
||||
The maximum number of routine names to be displayed in the main panel's
|
||||
routine list.
|
||||
|
||||
.. config:option:: $cfg['ShowHint']
|
||||
|
||||
:type: boolean
|
||||
@ -1728,11 +1716,9 @@ Generic settings
|
||||
|
||||
.. config:option:: $cfg['MysqlSslWarningSafeHosts']
|
||||
|
||||
:type: array [list of non-empty strings]
|
||||
:type: array
|
||||
:default: ``['127.0.0.1', 'localhost']``
|
||||
|
||||
.. versionadded:: 5.1.0
|
||||
|
||||
This search is case-sensitive and will match the exact string only.
|
||||
If your setup does not use SSL but is safe because you are using a
|
||||
local connection or private network, you can add your hostname or :term:`IP` to the list.
|
||||
@ -1740,11 +1726,14 @@ Generic settings
|
||||
|
||||
This check uses the value of :config:option:`$cfg['Servers'][$i]['host']`.
|
||||
|
||||
Example configuration:
|
||||
.. versionadded:: 5.1.0
|
||||
|
||||
Example configuration
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$cfg['MysqlSslWarningSafeHosts'] = ['127.0.0.1', '::1', 'mariadb.local'];
|
||||
$cfg['MysqlSslWarningSafeHosts'] = ['127.0.0.1', 'localhost', 'mariadb.local'];
|
||||
|
||||
|
||||
.. config:option:: $cfg['ExecTimeLimit']
|
||||
|
||||
@ -2183,8 +2172,7 @@ Navigation panel setup
|
||||
:type: boolean
|
||||
:default: true
|
||||
|
||||
Defines whether to display databases in the navigation panel as a tree
|
||||
instead of in a dropdown selector.
|
||||
In the navigation panel, replaces the database tree with a selector
|
||||
|
||||
.. config:option:: $cfg['FirstLevelNavigationItems']
|
||||
|
||||
@ -2351,7 +2339,8 @@ Navigation panel setup
|
||||
:default: ``'structure'``
|
||||
|
||||
Defines the tab displayed by default when clicking the small icon next
|
||||
to each table name in the navigation panel. The possible values are:
|
||||
to each table name in the navigation panel. The possible values are the
|
||||
localized equivalent of:
|
||||
|
||||
* ``structure``
|
||||
* ``sql``
|
||||
@ -2365,7 +2354,8 @@ Navigation panel setup
|
||||
:default: null
|
||||
|
||||
Defines the tab displayed by default when clicking the second small icon next
|
||||
to each table name in the navigation panel. The possible values are:
|
||||
to each table name in the navigation panel. The possible values are the
|
||||
localized equivalent of:
|
||||
|
||||
* ``(empty)``
|
||||
* ``structure``
|
||||
@ -2439,27 +2429,19 @@ Main panel
|
||||
:default: true
|
||||
|
||||
Defines whether or not to display space usage and statistics about
|
||||
databases and tables.
|
||||
databases and tables. Note that statistics requires at least MySQL
|
||||
3.23.3 and that, at this date, MySQL doesn't return such information
|
||||
for Berkeley DB tables.
|
||||
|
||||
.. config:option:: $cfg['ShowServerInfo']
|
||||
|
||||
:type: boolean|string
|
||||
:type: boolean
|
||||
:default: true
|
||||
|
||||
Defines whether to display detailed server information on main page.
|
||||
Possible values are:
|
||||
|
||||
* ``true`` to show all server information
|
||||
* ``false`` to hide server information
|
||||
* ``'database-server'`` to show only database server information
|
||||
* ``'web-server'`` to show only web server information
|
||||
|
||||
You can additionally hide more information by using
|
||||
:config:option:`$cfg['Servers'][$i]['verbose']`.
|
||||
|
||||
.. versionchanged:: 6.0.0
|
||||
Added ``'database-server'`` and ``'web-server'`` options.
|
||||
|
||||
.. config:option:: $cfg['ShowPhpInfo']
|
||||
|
||||
:type: boolean
|
||||
@ -2904,7 +2886,7 @@ Tabs display settings
|
||||
:default: ``'welcome'``
|
||||
|
||||
Defines the tab displayed by default on server view. The possible values
|
||||
are:
|
||||
are the localized equivalent of:
|
||||
|
||||
* ``welcome`` (recommended for multi-user setups)
|
||||
* ``databases``,
|
||||
@ -2918,7 +2900,7 @@ Tabs display settings
|
||||
:default: ``'structure'``
|
||||
|
||||
Defines the tab displayed by default on database view. The possible values
|
||||
are:
|
||||
are the localized equivalent of:
|
||||
|
||||
* ``structure``
|
||||
* ``sql``
|
||||
@ -2931,7 +2913,7 @@ Tabs display settings
|
||||
:default: ``'browse'``
|
||||
|
||||
Defines the tab displayed by default on table view. The possible values
|
||||
are:
|
||||
are the localized equivalent of:
|
||||
|
||||
* ``structure``
|
||||
* ``sql``
|
||||
@ -3006,21 +2988,18 @@ Languages
|
||||
You can select here which functions will be used for character set
|
||||
conversion. Possible values are:
|
||||
|
||||
* ``'auto'`` - automatically use available one (first is tested ``iconv``, then ``mbstring``)
|
||||
* ``'iconv'`` - use iconv or ``libiconv`` functions
|
||||
* ``'mb'`` - use :term:`mbstring` extension
|
||||
* ``'none'`` - disable encoding conversion
|
||||
* ``auto`` - automatically use available one (first is tested ``iconv``, then
|
||||
``recode``)
|
||||
* ``iconv`` - use ``iconv`` or ``libiconv`` functions
|
||||
* ``recode`` - use ``recode_string`` function
|
||||
* ``mb`` - use :term:`mbstring` extension
|
||||
* ``none`` - disable encoding conversion
|
||||
|
||||
Enabled charset conversion activates a pull-down menu in the Export
|
||||
and Import pages, to choose the character set when exporting a file.
|
||||
The default value in this menu comes from
|
||||
:config:option:`$cfg['Export']['charset']` and :config:option:`$cfg['Import']['charset']`.
|
||||
|
||||
.. versionchanged:: 6.0.0
|
||||
|
||||
Support for the Recode extension has been removed. The ``'recode'`` value is ignored and the
|
||||
default value (``'auto'``) is used instead.
|
||||
|
||||
.. config:option:: $cfg['IconvExtraParams']
|
||||
|
||||
:type: string
|
||||
@ -3034,20 +3013,14 @@ Languages
|
||||
|
||||
.. config:option:: $cfg['AvailableCharsets']
|
||||
|
||||
:type: array [list of strings]
|
||||
:type: array
|
||||
:default: ``[...]``
|
||||
|
||||
Available character sets for MySQL conversion. You can add your own
|
||||
(any of supported by mbstring/iconv) or remove these which you don't
|
||||
(any of supported by recode/iconv) or remove these which you don't
|
||||
use. Character sets will be shown in same order as here listed, so if
|
||||
you frequently use some of these move them to the top.
|
||||
|
||||
Example configuration:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$cfg['AvailableCharsets'] = ['utf-8', 'iso-8859-1'];
|
||||
|
||||
Web server settings
|
||||
-------------------
|
||||
|
||||
@ -3064,10 +3037,6 @@ Web server settings
|
||||
a certain patch is known to cause data corruption when having enabled
|
||||
buffering.
|
||||
|
||||
.. deprecated:: 6.0.0
|
||||
|
||||
This setting was removed.
|
||||
|
||||
.. config:option:: $cfg['TrustedProxies']
|
||||
|
||||
:type: array
|
||||
@ -3570,15 +3539,6 @@ Various display setting
|
||||
specify the amount of saved history items using
|
||||
:config:option:`$cfg['QueryHistoryMax']`.
|
||||
|
||||
.. config:option:: $cfg['AllowSharedBookmarks']
|
||||
|
||||
:type: boolean
|
||||
:default: true
|
||||
|
||||
.. versionadded:: 6.0.0
|
||||
|
||||
Allow users to create bookmarks that are available for all other users
|
||||
|
||||
.. config:option:: $cfg['BrowseMIME']
|
||||
|
||||
:type: boolean
|
||||
@ -3622,9 +3582,9 @@ Various display setting
|
||||
:type: boolean
|
||||
:default: true
|
||||
|
||||
Sorts database, table names and foreign key constaint according to natural order (for
|
||||
example, t1, t2, t10). Currently implemented in the navigation panel,
|
||||
in Database view for the table list and Relation view while listing Foreign key constraints.
|
||||
Sorts database and table names according to natural order (for
|
||||
example, t1, t2, t10). Currently implemented in the navigation panel
|
||||
and in Database view, for the table list.
|
||||
|
||||
.. config:option:: $cfg['InitialSlidersState']
|
||||
|
||||
@ -3642,7 +3602,7 @@ Various display setting
|
||||
|
||||
Contains names of configuration options (keys in ``$cfg`` array) that
|
||||
users can't set through user preferences. For possible values, refer
|
||||
to classes under :file:`src/Config/Forms/User/`.
|
||||
to classes under :file:`libraries/classes/Config/Forms/User/`.
|
||||
|
||||
.. config:option:: $cfg['UserprefsDeveloperTab']
|
||||
|
||||
@ -3696,7 +3656,7 @@ Theme manager settings
|
||||
:type: string
|
||||
:default: ``'pmahomme'``
|
||||
|
||||
The default theme (a subdirectory under :file:`./public/themes/`).
|
||||
The default theme (a subdirectory under :file:`./themes/`).
|
||||
|
||||
.. config:option:: $cfg['ThemePerServer']
|
||||
|
||||
@ -34,9 +34,9 @@ Third party licenses
|
||||
phpMyAdmin includes several third-party libraries which come under their
|
||||
respective licenses.
|
||||
|
||||
jQuery's license, which is where we got the files under public/js/vendor/jquery/ is
|
||||
jQuery's license, which is where we got the files under js/vendor/jquery/ is
|
||||
(MIT|GPL), a copy of each license is available in this repository (GPL
|
||||
is available as LICENSE, MIT as public/js/vendor/jquery/MIT-LICENSE.txt).
|
||||
is available as LICENSE, MIT as js/vendor/jquery/MIT-LICENSE.txt).
|
||||
|
||||
The download kit additionally includes several composer libraries. See their
|
||||
licensing information in the vendor/ directory.
|
||||
@ -825,7 +825,6 @@ Following people have contributed to translation of phpMyAdmin:
|
||||
|
||||
* Spanish
|
||||
|
||||
* Daniel Hinostroza, MD <phpmyadmin\_at\_cerebroperiferico.com>
|
||||
* Luis García Sevillano <floss.dev\_at\_gmail.com>
|
||||
* Franco <fulanodetal.github1\_at\_openaliasbox.org>
|
||||
* Luis Ruiz <luisan00\_at\_hotmail.com>
|
||||
@ -63,7 +63,7 @@ Please use instead the cookie authentication mode.
|
||||
|
||||
This seems to be a PWS bug. Filippo Simoncini found a workaround (at
|
||||
this time there is no better fix): remove or comment the ``DOCTYPE``
|
||||
declarations (2 lines) from the scripts :file:`src/Header.php`
|
||||
declarations (2 lines) from the scripts :file:`libraries/classes/Header.php`
|
||||
and :file:`index.php`.
|
||||
|
||||
.. _faq1_7:
|
||||
@ -436,7 +436,6 @@ HHVM is supported up to phpMyAdmin 4.8.
|
||||
|
||||
Since release 5.0, phpMyAdmin supports only PHP 7.1 and newer.
|
||||
Since release 5.2, phpMyAdmin supports only PHP 7.2 and newer.
|
||||
Since release 6.0, phpMyAdmin supports only PHP 8.2 and newer.
|
||||
|
||||
.. _faq1_32:
|
||||
|
||||
@ -532,8 +531,65 @@ extension which works fine in this case.
|
||||
|
||||
.. _faq1_38:
|
||||
|
||||
1.38 (withdrawn).
|
||||
-----------------
|
||||
1.38 Can I use phpMyAdmin on a server on which Suhosin is enabled?
|
||||
------------------------------------------------------------------
|
||||
|
||||
Yes but the default configuration values of Suhosin are known to cause
|
||||
problems with some operations, for example editing a table with many
|
||||
columns and no :term:`primary key` or with textual :term:`primary key`.
|
||||
|
||||
Suhosin configuration might lead to malfunction in some cases and it
|
||||
can not be fully avoided as phpMyAdmin is kind of application which
|
||||
needs to transfer big amounts of columns in single HTTP request, what
|
||||
is something what Suhosin tries to prevent. Generally all
|
||||
``suhosin.request.*``, ``suhosin.post.*`` and ``suhosin.get.*``
|
||||
directives can have negative effect on phpMyAdmin usability. You can
|
||||
always find in your error logs which limit did cause dropping of
|
||||
variable, so you can diagnose the problem and adjust matching
|
||||
configuration variable.
|
||||
|
||||
The default values for most Suhosin configuration options will work in
|
||||
most scenarios, however you might want to adjust at least following
|
||||
parameters:
|
||||
|
||||
* `suhosin.request.max\_vars <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-request-max-vars>`_ should
|
||||
be increased (eg. 2048)
|
||||
* `suhosin.post.max\_vars <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-post-max-vars>`_ should be
|
||||
increased (eg. 2048)
|
||||
* `suhosin.request.max\_array\_index\_length <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-request-max-array-index-length>`_
|
||||
should be increased (eg. 256)
|
||||
* `suhosin.post.max\_array\_index\_length <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-post-max-array-index-length>`_
|
||||
should be increased (eg. 256)
|
||||
* `suhosin.request.max\_totalname\_length <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-request-max-totalname-length>`_
|
||||
should be increased (eg. 8192)
|
||||
* `suhosin.post.max\_totalname\_length <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-post-max-totalname-length>`_ should be
|
||||
increased (eg. 8192)
|
||||
* `suhosin.get.max\_value\_length <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-get-max-value-length>`_
|
||||
should be increased (eg. 1024)
|
||||
* `suhosin.sql.bailout\_on\_error <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-sql-bailout-on-error>`_
|
||||
needs to be disabled (the default)
|
||||
* `suhosin.log.\* <https://suhosin5.suhosin.org/stories/configuration.html#logging-configuration>`_ should not
|
||||
include :term:`SQL`, otherwise you get big
|
||||
slowdown
|
||||
* `suhosin.sql.union <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-
|
||||
sql-union>`_ must be disabled (which is the default).
|
||||
* `suhosin.sql.multiselect <https://suhosin5.suhosin.org/stories/configuration.html#
|
||||
suhosin-sql-multiselect>`_ must be disabled (which is the default).
|
||||
* `suhosin.sql.comment <https://suhosin5.suhosin.org/stories/configuration.html#suhosin-
|
||||
sql-comment>`_ must be disabled (which is the default).
|
||||
|
||||
To further improve security, we also recommend these modifications:
|
||||
|
||||
* `suhosin.executor.include.max\_traversal <https://suhosin5.suhosin.org/stories/
|
||||
configuration.html#suhosin-executor-include-max-traversal>`_ should be
|
||||
enabled as a mitigation against local file inclusion attacks. We suggest
|
||||
setting this to 2 as ``../`` is used with the ReCaptcha library.
|
||||
* `suhosin.cookie.encrypt <https://suhosin5.suhosin.org/stories/configuration.html#
|
||||
suhosin-cookie-encrypt>`_ should be enabled.
|
||||
* `suhosin.executor.disable_emodifier <https://suhosin5.suhosin.org/stories/config
|
||||
uration.html#suhosin-executor-disable-emodifier>`_ should be enabled.
|
||||
|
||||
You can also disable the warning using the :config:option:`$cfg['SuhosinDisableWarning']`.
|
||||
|
||||
.. _faq1_39:
|
||||
|
||||
@ -630,14 +686,15 @@ Some users have requested to be able to reduce the size of the phpMyAdmin instal
|
||||
This is not recommended and could lead to confusion over missing features, but can be done.
|
||||
A list of files and corresponding functionality which degrade gracefully when removed include:
|
||||
|
||||
* :file:`./resources/locale/` folder, or unused subfolders (interface translations)
|
||||
* Any unused themes in :file:`./public/themes/` except the default theme `pmahomme`.
|
||||
* :file:`./app/language_stats.inc.php` (translation statistics)
|
||||
* :file:`./docs/` (documentation)
|
||||
* :file:`./locale/` folder, or unused subfolders (interface translations)
|
||||
* Any unused themes in :file:`./themes/` except the default theme `pmahomme`.
|
||||
* :file:`./libraries/language_stats.inc.php` (translation statistics)
|
||||
* :file:`./doc/` (documentation)
|
||||
* :file:`./setup/` (setup script)
|
||||
* :file:`./examples/` (configuration examples)
|
||||
* :file:`./resources/sql/` (SQL scripts to configure advanced functionalities)
|
||||
* :file:`./resources/js/` (Source files to re-build `./public/js/`)
|
||||
* :file:`./sql/` (SQL scripts to configure advanced functionalities)
|
||||
* :file:`./js/src/` (Source files to re-build `./js/dist/`)
|
||||
* :file:`./js/config/` (Configuration files to re-build `./js/dist/`)
|
||||
* Run `rm -rv vendor/tecnickcom/tcpdf && composer dump-autoload --no-interaction --optimize --dev` (exporting to PDF)
|
||||
* Run `rm -rv vendor/williamdes/mariadb-mysql-kbs && composer dump-autoload --no-interaction --optimize --dev` (external links to MariaDB and MySQL documentations)
|
||||
* Run `rm -rv vendor/code-lts/u2f-php-server && composer dump-autoload --no-interaction --optimize --dev` (U2F second factor authentication)
|
||||
@ -814,6 +871,8 @@ Here are a few points to check:
|
||||
Dorninger for the hint).
|
||||
* In the :file:`php.ini` directive ``arg_separator.input``, a value of ";"
|
||||
will cause this error. Replace it with "&;".
|
||||
* If you are using `Suhosin <https://suhosin5.suhosin.org/stories/index.html>`_, you
|
||||
might want to increase `request limits <https://suhosin5.suhosin.org/stories/faq.html>`_.
|
||||
* The directory specified in the :file:`php.ini` directive
|
||||
``session.save_path`` does not exist or is read-only (this can be caused
|
||||
by `bug in the PHP installer <https://bugs.php.net/bug.php?id=39842>`_).
|
||||
@ -824,10 +883,13 @@ Here are a few points to check:
|
||||
---------------------------------
|
||||
|
||||
To be able to see a progress bar during your uploads, your server must
|
||||
have the `uploadprogress <https://pecl.php.net/package/uploadprogress>`_ extension enabled.
|
||||
have the `uploadprogress <https://pecl.php.net/package/uploadprogress>`_ extension, and
|
||||
you must be running PHP 5.4.0 or higher. Moreover, the JSON extension
|
||||
has to be enabled in your PHP.
|
||||
|
||||
You must set ``session.upload_progress.enabled`` to ``1`` in your :file:`php.ini`.
|
||||
However, starting from phpMyAdmin version 4.0.4, session-based upload progress has
|
||||
If using PHP 5.4.0 or higher, you must set
|
||||
``session.upload_progress.enabled`` to ``1`` in your :file:`php.ini`. However,
|
||||
starting from phpMyAdmin version 4.0.4, session-based upload progress has
|
||||
been temporarily deactivated due to its problematic behavior.
|
||||
|
||||
.. _faq2_10:
|
||||
@ -858,7 +920,7 @@ And then this hexadecimal value can be used in the configuration file.
|
||||
|
||||
$cfg['blowfish_secret'] = sodium_hex2bin('f16ce59f45714194371b48fe362072dc3b019da7861558cd4ad29e4d6fb13851');
|
||||
|
||||
The `sodium_hex2bin <https://www.php.net/sodium_hex2bin>`_ function is used here to convert the hexadecimal value back to the
|
||||
The `sodium_hex2bin <https://www.php.net/sodium_hex2bin>`_ is used here to convert the hexadecimal value back to the
|
||||
binary format.
|
||||
|
||||
.. _faqlimitations:
|
||||
@ -2193,10 +2255,9 @@ logs. Currently there are two variables available:
|
||||
User name of currently active user (they do not have to be logged in).
|
||||
``userStatus``
|
||||
Status of currently active user, one of ``ok`` (user is logged in),
|
||||
``server-denied`` (database server denied user login), ``allow-denied`` (user denied
|
||||
``mysql-denied`` (MySQL denied user login), ``allow-denied`` (user denied
|
||||
by allow/deny rules), ``root-denied`` (root is denied in configuration),
|
||||
``empty-denied`` (empty password is denied),
|
||||
``no-activity`` (automatically logged out due to inactivity).
|
||||
``empty-denied`` (empty password is denied).
|
||||
|
||||
``LogFormat`` directive for Apache can look like following:
|
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
@ -264,13 +264,6 @@ rendered, for example in following document:
|
||||
|
||||
\end{document}
|
||||
|
||||
TOON
|
||||
----
|
||||
|
||||
Data can be exported to TOON `(Token-Oriented Object Notation) <https://en.wikipedia.org/wiki/Token-Oriented_Object_Notation>`_,
|
||||
which is a text-based data format. It encodes the JSON data model in a compact way.
|
||||
TOON is designed to reduce token usage in LLM prompts while staying human-readable.
|
||||
|
||||
MediaWiki
|
||||
---------
|
||||
|
||||
@ -30,6 +30,8 @@ Currently phpMyAdmin can:
|
||||
* administer multiple servers
|
||||
* add, edit, and remove MySQL user accounts and privileges
|
||||
* check referential integrity in MyISAM tables
|
||||
* using Query-by-example (QBE), create complex queries automatically
|
||||
connecting required tables
|
||||
* create :term:`PDF` graphics of your
|
||||
database layout
|
||||
* search globally in a database or a subset of it
|
||||
65
doc/require.rst
Normal file
@ -0,0 +1,65 @@
|
||||
.. _require:
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
Web server
|
||||
----------
|
||||
|
||||
Since phpMyAdmin's interface is based entirely in your browser, you'll need a
|
||||
web server (such as Apache, nginx, :term:`IIS`) to install phpMyAdmin's files into.
|
||||
|
||||
PHP
|
||||
---
|
||||
|
||||
* You need PHP 7.2.5 or newer, with ``session`` support, the Standard PHP Library
|
||||
(SPL) extension, hash, ctype, and JSON support.
|
||||
|
||||
* The ``mbstring`` extension (see :term:`mbstring`) is strongly recommended
|
||||
for performance reasons.
|
||||
|
||||
* To support uploading of ZIP files, you need the PHP ``zip`` extension.
|
||||
|
||||
* You need GD2 support in PHP to display inline thumbnails of JPEGs
|
||||
("image/jpeg: inline") with their original aspect ratio.
|
||||
|
||||
* When using the cookie authentication (the default), the `openssl
|
||||
<https://www.php.net/openssl>`_ extension is strongly suggested.
|
||||
|
||||
* To support upload progress bars, see :ref:`faq2_9`.
|
||||
|
||||
* To support XML and Open Document Spreadsheet importing, you need the
|
||||
`libxml <https://www.php.net/libxml>`_ extension.
|
||||
|
||||
* To support reCAPTCHA on the login page, you need the
|
||||
`openssl <https://www.php.net/openssl>`_ extension.
|
||||
|
||||
* To support displaying phpMyAdmin's latest version, you need to enable
|
||||
``allow_url_open`` in your :file:`php.ini` or to have the
|
||||
`curl <https://www.php.net/curl>`_ extension.
|
||||
|
||||
.. seealso:: :ref:`faq1_31`, :ref:`authentication_modes`
|
||||
|
||||
Database
|
||||
--------
|
||||
|
||||
phpMyAdmin supports MySQL-compatible databases.
|
||||
|
||||
* MySQL 5.5 or newer
|
||||
* MariaDB 5.5 or newer
|
||||
|
||||
.. seealso:: :ref:`faq1_17`
|
||||
|
||||
Web browser
|
||||
-----------
|
||||
|
||||
To access phpMyAdmin you need a web browser with cookies and JavaScript
|
||||
enabled.
|
||||
|
||||
You need a browser which is supported by Bootstrap 4.5, see
|
||||
<https://getbootstrap.com/docs/4.5/getting-started/browsers-devices/>.
|
||||
|
||||
.. versionchanged:: 5.2.0
|
||||
|
||||
You need a browser which is supported by Bootstrap 5.0, see
|
||||
<https://getbootstrap.com/docs/5.0/getting-started/browsers-devices/>.
|
||||
@ -64,7 +64,7 @@ mysql control connection. This controlconnection can have additional privileges
|
||||
which the logged in user does not poses. E.g. access the :ref:`linked-tables`.
|
||||
|
||||
User data that is included in (administrative) queries should always be run
|
||||
through DatabaseInterface::quoteString().
|
||||
through DatabaseInterface::escapeString().
|
||||
|
||||
.. seealso::
|
||||
|
||||
@ -90,7 +90,7 @@ In order to install from Git, you'll need a few supporting applications:
|
||||
|
||||
* `Git <https://git-scm.com/downloads>`_ to download the source, or you can download the most recent source directly from `Github <https://codeload.github.com/phpmyadmin/phpmyadmin/zip/QA_5_2>`_
|
||||
* `Composer <https://getcomposer.org/download/>`__
|
||||
* `Node.js <https://nodejs.org/en/download/>`_ (version 20 or higher)
|
||||
* `Node.js <https://nodejs.org/en/download/>`_ (version 12 or higher)
|
||||
* `Yarn <https://classic.yarnpkg.com/en/docs/install>`_
|
||||
|
||||
You can clone current phpMyAdmin source from
|
||||
@ -104,14 +104,14 @@ Additionally you need to install dependencies using `Composer <https://getcompos
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
composer install
|
||||
composer update
|
||||
|
||||
If you do not intend to develop, you can skip the installation of developer tools
|
||||
by invoking:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
composer install --no-dev
|
||||
composer update --no-dev
|
||||
|
||||
Finally, you'll need to use `Yarn`_ to install some JavaScript dependencies:
|
||||
|
||||
@ -926,7 +926,7 @@ Zero configuration
|
||||
|
||||
In many cases, this database structure can be automatically created and
|
||||
configured. This is called “Zero Configuration” mode and can be particularly
|
||||
useful in shared hosting situations. “ZeroConf” mode is on by default, to
|
||||
useful in shared hosting situations. “Zeroconf” mode is on by default, to
|
||||
disable set :config:option:`$cfg['ZeroConf']` to false.
|
||||
|
||||
The following three scenarios are covered by the Zero Configuration mode:
|
||||
@ -948,27 +948,27 @@ The following three scenarios are covered by the Zero Configuration mode:
|
||||
Manual configuration
|
||||
--------------------
|
||||
|
||||
Please look at your ``./resources/sql/`` directory, where you should find a
|
||||
Please look at your ``./sql/`` directory, where you should find a
|
||||
file called *create\_tables.sql*. (If you are using a Windows server,
|
||||
pay special attention to :ref:`faq1_23`).
|
||||
|
||||
If you already had this infrastructure and:
|
||||
|
||||
* upgraded to MySQL 4.1.2 or newer, please use
|
||||
:file:`resources/sql/upgrade_tables_mysql_4_1_2+.sql`.
|
||||
:file:`sql/upgrade_tables_mysql_4_1_2+.sql`.
|
||||
* upgraded to phpMyAdmin 4.3.0 or newer from 2.5.0 or newer (<= 4.2.x),
|
||||
please use :file:`resources/sql/upgrade_column_info_4_3_0+.sql`.
|
||||
please use :file:`sql/upgrade_column_info_4_3_0+.sql`.
|
||||
* upgraded to phpMyAdmin 4.7.0 or newer from 4.3.0 or newer,
|
||||
please use :file:`resources/sql/upgrade_tables_4_7_0+.sql`.
|
||||
please use :file:`sql/upgrade_tables_4_7_0+.sql`.
|
||||
|
||||
and then create new tables by importing :file:`resources/sql/create_tables.sql`.
|
||||
and then create new tables by importing :file:`sql/create_tables.sql`.
|
||||
|
||||
You can use your phpMyAdmin to create the tables for you. Please be
|
||||
aware that you may need special (administrator) privileges to create
|
||||
the database and tables, and that the script may need some tuning,
|
||||
depending on the database name.
|
||||
|
||||
After having imported the :file:`resources/sql/create_tables.sql` file, you
|
||||
After having imported the :file:`sql/create_tables.sql` file, you
|
||||
should specify the table names in your :file:`config.inc.php` file. The
|
||||
directives used for that can be found in the :ref:`config`.
|
||||
|
||||
@ -1036,12 +1036,12 @@ The complete upgrade can be performed in a few simple steps:
|
||||
If you have upgraded your MySQL server from a version previous to 4.1.2 to
|
||||
version 5.x or newer and if you use the phpMyAdmin configuration storage, you
|
||||
should run the :term:`SQL` script found in
|
||||
:file:`resources/sql/upgrade_tables_mysql_4_1_2+.sql`.
|
||||
:file:`sql/upgrade_tables_mysql_4_1_2+.sql`.
|
||||
|
||||
If you have upgraded your phpMyAdmin to 4.3.0 or newer from 2.5.0 or
|
||||
newer (<= 4.2.x) and if you use the phpMyAdmin configuration storage, you
|
||||
should run the :term:`SQL` script found in
|
||||
:file:`resources/sql/upgrade_column_info_4_3_0+.sql`.
|
||||
:file:`sql/upgrade_column_info_4_3_0+.sql`.
|
||||
|
||||
Do not forget to clear the browser cache and to empty the old session by
|
||||
logging out and logging in again.
|
||||
@ -1227,7 +1227,7 @@ are always ways to make your installation more secure:
|
||||
* Ensure your PHP setup follows recommendations for production sites, for example
|
||||
`display_errors <https://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors>`_
|
||||
should be disabled.
|
||||
* Remove the ``tests`` directory from phpMyAdmin, unless you are developing and need a test suite.
|
||||
* Remove the ``test`` directory from phpMyAdmin, unless you are developing and need a test suite.
|
||||
* Remove the ``setup`` directory from phpMyAdmin, you will probably not
|
||||
use it after the initial setup.
|
||||
* Properly choose an authentication method - :ref:`cookie`
|
||||
@ -10,7 +10,7 @@ Configuration
|
||||
-------------
|
||||
|
||||
Themes are configured with :config:option:`$cfg['ThemeManager']` and
|
||||
:config:option:`$cfg['ThemeDefault']`. Under :file:`./public/themes/`, you should not
|
||||
:config:option:`$cfg['ThemeDefault']`. Under :file:`./themes/`, you should not
|
||||
delete the directory ``pmahomme`` or its underlying structure, because this is
|
||||
the system theme used by phpMyAdmin. ``pmahomme`` contains all images and
|
||||
styles, for backwards compatibility and for all themes that would not include
|
||||
@ -23,7 +23,7 @@ Creating custom theme
|
||||
|
||||
To create a theme:
|
||||
|
||||
* make a new subdirectory (for example "your\_theme\_name") under :file:`./public/themes/`.
|
||||
* make a new subdirectory (for example "your\_theme\_name") under :file:`./themes/`.
|
||||
* copy the files and directories from ``pmahomme`` to "your\_theme\_name"
|
||||
* edit the css-files in "your\_theme\_name/css"
|
||||
* put your new images in "your\_theme\_name/img"
|
||||
@ -103,9 +103,9 @@ File structure
|
||||
++++++++++++++
|
||||
|
||||
All specific transformations for mimetypes are defined through class
|
||||
files in the directory :file:`src/Plugins/Transformations/`. Each of
|
||||
files in the directory :file:`libraries/classes/Plugins/Transformations/`. Each of
|
||||
them extends a certain transformation abstract class declared in
|
||||
:file:`src/Plugins/Transformations/Abs`.
|
||||
:file:`libraries/classes/Plugins/Transformations/Abs`.
|
||||
|
||||
They are stored in files to ease customization and to allow easy adding of
|
||||
new or custom transformations.
|
||||
@ -115,7 +115,7 @@ the transformations will always work. It makes no sense to apply a
|
||||
transformation to a mimetype the transform-function doesn't know to
|
||||
handle.
|
||||
|
||||
There is a file called :file:`src/Plugins/Transformations.php` that provides some
|
||||
There is a file called :file:`libraries/classes/Plugins/Transformations.php` that provides some
|
||||
basic functions which can be included by any other transform function.
|
||||
|
||||
The file name convention is ``[Mimetype]_[Subtype]_[Transformation
|
||||
@ -133,13 +133,13 @@ getInfo() returns the transformation's description and possible
|
||||
options it may receive and applyTransformation() is the method that
|
||||
does the actual work of the transformation plug-in.
|
||||
|
||||
Please see the :file:`src/Plugins/Transformations/TEMPLATE` and
|
||||
:file:`src/Plugins/Transformations/TEMPLATE\_ABSTRACT` files for adding
|
||||
Please see the :file:`libraries/classes/Plugins/Transformations/TEMPLATE` and
|
||||
:file:`libraries/classes/Plugins/Transformations/TEMPLATE\_ABSTRACT` files for adding
|
||||
your own transformation plug-in. You can also generate a new
|
||||
transformation plug-in (with or without the abstract transformation
|
||||
class), by using
|
||||
:file:`bin/transformations_generator_plugin.sh` or
|
||||
:file:`bin/transformations_generator_main_class.sh`.
|
||||
:file:`scripts/transformations_generator_plugin.sh` or
|
||||
:file:`scripts/transformations_generator_main_class.sh`.
|
||||
|
||||
The applyTransformation() method always gets passed three variables:
|
||||
|
||||
@ -7,7 +7,7 @@ distribution or some all in one package including web server and MySQL
|
||||
server.
|
||||
|
||||
Generally, you can customize some basic aspects (paths to some files and
|
||||
behavior) in :file:`app/vendor_config.php`.
|
||||
behavior) in :file:`libraries/vendor_config.php`.
|
||||
|
||||
For example, if you want setup script to generate a config file in var, change
|
||||
``SETUP_CONFIG_FILE`` to :file:`/var/lib/phpmyadmin/config.inc.php` and you
|
||||
@ -24,7 +24,7 @@ one we ship.
|
||||
|
||||
Currently known list of external libraries:
|
||||
|
||||
public/js/vendor
|
||||
js/vendor
|
||||
jQuery js framework libraries and various js libraries.
|
||||
|
||||
vendor/
|
||||
@ -1,81 +0,0 @@
|
||||
.. _require:
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
Web server
|
||||
----------
|
||||
|
||||
Since phpMyAdmin's interface is based entirely in your browser, you'll need a
|
||||
web server (such as Apache, nginx, :term:`IIS`) to install phpMyAdmin's files into.
|
||||
|
||||
PHP
|
||||
---
|
||||
|
||||
* You need PHP 8.2.0 or newer.
|
||||
|
||||
* You need the following PHP extensions
|
||||
(``php -m`` or ``phpinfo()`` will indicate the enabled ones):
|
||||
|
||||
* normally bundled into PHP and enabled by default:
|
||||
|
||||
- `json <https://www.php.net/json>`_ provides JSON functions
|
||||
- `session <https://www.php.net/session>`_ provides session storage
|
||||
- `pcre <https://www.php.net/pcre>`_ provides regular expression functions
|
||||
- `hash <https://www.php.net/hash>`_ provides basic hashing functions
|
||||
- `spl <https://www.php.net/spl>`_ the Standard PHP Library (SPL) extension
|
||||
- `sodium <https://www.php.net/sodium>`_ a modern cryptography library
|
||||
|
||||
* manual installation required:
|
||||
|
||||
- `mysqli <https://www.php.net/mysqli>`_ To connect to MySQL/MariaDB databases
|
||||
- `ctype <https://www.php.net/ctype>`_ To check the type of strings
|
||||
|
||||
* The `mbstring <https://www.php.net/mbstring>`_ extension (see :term:`mbstring`) is strongly recommended
|
||||
for performance reasons.
|
||||
|
||||
* To support uploading of ZIP files, you need the PHP `zip <https://www.php.net/zip>`_ extension.
|
||||
|
||||
* You need `GD2 <https://www.php.net/gd>`_ support in PHP to display inline thumbnails of JPEGs
|
||||
(``"image/jpeg: inline"``) with their original aspect ratio.
|
||||
|
||||
* When using the cookie authentication (the default), the `openssl
|
||||
<https://www.php.net/openssl>`_ extension is strongly suggested.
|
||||
|
||||
* To support upload progress bars, see :ref:`faq2_9`.
|
||||
|
||||
* To support XML and Open Document Spreadsheet importing, you need the
|
||||
`libxml <https://www.php.net/libxml>`_ extension.
|
||||
|
||||
* To support reCAPTCHA on the login page, you need the
|
||||
`openssl <https://www.php.net/openssl>`_ extension.
|
||||
|
||||
* To support displaying phpMyAdmin's latest version, you need to enable
|
||||
``allow_url_open`` in your :file:`php.ini` or to have the
|
||||
`curl <https://www.php.net/curl>`_ extension.
|
||||
|
||||
.. seealso:: :ref:`faq1_31`, :ref:`authentication_modes`
|
||||
|
||||
Database
|
||||
--------
|
||||
|
||||
phpMyAdmin supports MySQL-compatible databases.
|
||||
|
||||
* MySQL 5.5 or newer
|
||||
* MariaDB 5.5 or newer
|
||||
|
||||
.. seealso:: :ref:`faq1_17`
|
||||
|
||||
Web browser
|
||||
-----------
|
||||
|
||||
To access phpMyAdmin you need a web browser with cookies and JavaScript
|
||||
enabled.
|
||||
|
||||
You need a browser which is supported by Bootstrap 4.5, see
|
||||
<https://getbootstrap.com/docs/4.5/getting-started/browsers-devices/>.
|
||||
|
||||
.. versionchanged:: 5.2.0
|
||||
|
||||
You need a browser which is supported by Bootstrap 5.0, see
|
||||
<https://getbootstrap.com/docs/5.0/getting-started/browsers-devices/>.
|
||||
@ -9,7 +9,12 @@
|
||||
declare(strict_types=1);
|
||||
|
||||
$i = 0;
|
||||
$hosts = ['foo.example.com', 'bar.example.com', 'baz.example.com', 'quux.example.com'];
|
||||
$hosts = [
|
||||
'foo.example.com',
|
||||
'bar.example.com',
|
||||
'baz.example.com',
|
||||
'quux.example.com',
|
||||
];
|
||||
|
||||
foreach ($hosts as $host) {
|
||||
$i++;
|
||||
|
||||
@ -19,12 +19,17 @@ if (false === @include_once 'OpenID/RelyingParty.php') {
|
||||
}
|
||||
|
||||
/* Change this to true if using phpMyAdmin over https */
|
||||
$secureCookie = false;
|
||||
$secure_cookie = false;
|
||||
|
||||
/**
|
||||
* Map of authenticated users to MySQL user/password pairs.
|
||||
*/
|
||||
$authMap = ['https://launchpad.net/~username' => ['user' => 'root', 'password' => '']];
|
||||
$AUTH_MAP = [
|
||||
'https://launchpad.net/~username' => [
|
||||
'user' => 'root',
|
||||
'password' => '',
|
||||
],
|
||||
];
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects,Squiz.Functions.GlobalFunction
|
||||
|
||||
@ -33,7 +38,7 @@ $authMap = ['https://launchpad.net/~username' => ['user' => 'root', 'password' =
|
||||
*
|
||||
* @param string $contents Content to include in page
|
||||
*/
|
||||
function Show_page(string $contents): void
|
||||
function Show_page($contents): void
|
||||
{
|
||||
header('Content-Type: text/html; charset=utf-8');
|
||||
|
||||
@ -62,7 +67,7 @@ function Show_page(string $contents): void
|
||||
*
|
||||
* @param Exception $e Exception object
|
||||
*/
|
||||
function Die_error(Throwable $e): void
|
||||
function Die_error($e): void
|
||||
{
|
||||
$contents = "<div class='relyingparty_results'>\n";
|
||||
$contents .= '<pre>' . htmlspecialchars($e->getMessage()) . "</pre>\n";
|
||||
@ -74,10 +79,10 @@ function Die_error(Throwable $e): void
|
||||
// phpcs:enable
|
||||
|
||||
/* Need to have cookie visible from parent directory */
|
||||
session_set_cookie_params(0, '/', '', $secureCookie, true);
|
||||
session_set_cookie_params(0, '/', '', $secure_cookie, true);
|
||||
/* Create signon session */
|
||||
$sessionName = 'SignonSession';
|
||||
session_name($sessionName);
|
||||
$session_name = 'SignonSession';
|
||||
session_name($session_name);
|
||||
@session_start();
|
||||
|
||||
// Determine realm and return_to
|
||||
@ -153,13 +158,13 @@ try {
|
||||
|
||||
$id = $message->get('openid.claimed_id');
|
||||
|
||||
if (empty($id) || ! isset($authMap[$id])) {
|
||||
if (empty($id) || ! isset($AUTH_MAP[$id])) {
|
||||
Show_page('<p>User not allowed!</p>');
|
||||
exit;
|
||||
}
|
||||
|
||||
$_SESSION['PMA_single_signon_user'] = $authMap[$id]['user'];
|
||||
$_SESSION['PMA_single_signon_password'] = $authMap[$id]['password'];
|
||||
$_SESSION['PMA_single_signon_user'] = $AUTH_MAP[$id]['user'];
|
||||
$_SESSION['PMA_single_signon_password'] = $AUTH_MAP[$id]['password'];
|
||||
$_SESSION['PMA_single_signon_HMAC_secret'] = hash('sha1', uniqid(strval(random_int(0, mt_getrandmax())), true));
|
||||
session_write_close();
|
||||
/* Redirect to phpMyAdmin (should use absolute URL here!) */
|
||||
|
||||
@ -18,15 +18,21 @@ declare(strict_types=1);
|
||||
*
|
||||
* @param string $user User name
|
||||
*
|
||||
* @return array<int,string>
|
||||
* @return array
|
||||
*/
|
||||
function get_login_credentials(string $user): array
|
||||
function get_login_credentials($user)
|
||||
{
|
||||
/* Optionally we can use passed username */
|
||||
if ($user !== '') {
|
||||
return [$user, 'password'];
|
||||
if (! empty($user)) {
|
||||
return [
|
||||
$user,
|
||||
'password',
|
||||
];
|
||||
}
|
||||
|
||||
/* Here we would retrieve the credentials */
|
||||
return ['root', ''];
|
||||
return [
|
||||
'root',
|
||||
'',
|
||||
];
|
||||
}
|
||||
|
||||
@ -12,12 +12,12 @@ declare(strict_types=1);
|
||||
/* Use cookies for session */
|
||||
ini_set('session.use_cookies', 'true');
|
||||
/* Change this to true if using phpMyAdmin over https */
|
||||
$secureCookie = false;
|
||||
$secure_cookie = false;
|
||||
/* Need to have cookie visible from parent directory */
|
||||
session_set_cookie_params(0, '/', '', $secureCookie, true);
|
||||
session_set_cookie_params(0, '/', '', $secure_cookie, true);
|
||||
/* Create signon session */
|
||||
$sessionName = 'SignonSession';
|
||||
session_name($sessionName);
|
||||
$session_name = 'SignonSession';
|
||||
session_name($session_name);
|
||||
// Uncomment and change the following line to match your $cfg['SessionSavePath']
|
||||
//session_save_path('/foobar');
|
||||
@session_start();
|
||||
@ -32,6 +32,7 @@ if (isset($_POST['user'])) {
|
||||
/* Update another field of server configuration */
|
||||
$_SESSION['PMA_single_signon_cfgupdate'] = ['verbose' => 'Signon test'];
|
||||
$_SESSION['PMA_single_signon_HMAC_secret'] = hash('sha1', uniqid(strval(random_int(0, mt_getrandmax())), true));
|
||||
$id = session_id();
|
||||
/* Close that session */
|
||||
@session_write_close();
|
||||
/* Redirect to phpMyAdmin (should use absolute URL here!) */
|
||||
|
||||
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
65
index.php
@ -1,22 +1,43 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>phpMyAdmin</title>
|
||||
<meta http-equiv="expires" content="0">
|
||||
<meta http-equiv="Pragma" content="no-cache">
|
||||
<meta http-equiv="Cache-Control" content="no-cache">
|
||||
<meta http-equiv="Refresh" content="0;url=./public/">
|
||||
<script>
|
||||
//<![CDATA[
|
||||
setTimeout(function() { window.location = decodeURI('./public/'); }, 2000);
|
||||
//]]>
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
//<![CDATA[
|
||||
document.write('<p>Redirecting to the <a href="./public/">phpMyAdmin interface</a>. If you are not redirected automatically, click the link.</p>');
|
||||
//]]>
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use PhpMyAdmin\Common;
|
||||
use PhpMyAdmin\Routing;
|
||||
|
||||
if (! defined('ROOT_PATH')) {
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
define('ROOT_PATH', __DIR__ . DIRECTORY_SEPARATOR);
|
||||
// phpcs:enable
|
||||
}
|
||||
|
||||
if (PHP_VERSION_ID < 70205) {
|
||||
die('<p>PHP 7.2.5+ is required.</p><p>Currently installed version is: ' . PHP_VERSION . '</p>');
|
||||
}
|
||||
|
||||
// phpcs:disable PSR1.Files.SideEffects
|
||||
define('PHPMYADMIN', true);
|
||||
// phpcs:enable
|
||||
|
||||
require_once ROOT_PATH . 'libraries/constants.php';
|
||||
|
||||
/**
|
||||
* Activate autoloader
|
||||
*/
|
||||
if (! @is_readable(AUTOLOAD_FILE)) {
|
||||
die(
|
||||
'<p>File <samp>' . AUTOLOAD_FILE . '</samp> missing or not readable.</p>'
|
||||
. '<p>Most likely you did not run Composer to '
|
||||
. '<a href="https://docs.phpmyadmin.net/en/latest/setup.html#installing-from-git">'
|
||||
. 'install library files</a>.</p>'
|
||||
);
|
||||
}
|
||||
|
||||
require AUTOLOAD_FILE;
|
||||
|
||||
global $route, $containerBuilder, $request;
|
||||
|
||||
Common::run();
|
||||
|
||||
$dispatcher = Routing::getDispatcher();
|
||||
Routing::callControllerForRoute($request, $route, $dispatcher, $containerBuilder);
|
||||
|
||||
18
infection.json.dist
Normal file
@ -0,0 +1,18 @@
|
||||
{
|
||||
"source": {
|
||||
"directories": [
|
||||
"libraries\/classes"
|
||||
]
|
||||
},
|
||||
"logs": {
|
||||
"text": "build/logs/infection.log",
|
||||
"stryker": {
|
||||
"report": "master"
|
||||
}
|
||||
},
|
||||
"mutators": {
|
||||
"@default": true
|
||||
},
|
||||
"minMsi": 31,
|
||||
"minCoveredMsi": 61
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
{
|
||||
"source": {
|
||||
"directories": [
|
||||
"src"
|
||||
]
|
||||
},
|
||||
"logs": {
|
||||
"text": "build/logs/infection.log",
|
||||
"stryker": {
|
||||
"report": "master"
|
||||
}
|
||||
},
|
||||
"mutators": {
|
||||
"@default": true
|
||||
},
|
||||
"minMsi": 41,
|
||||
"minCoveredMsi": 65
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
/* eslint-env node */
|
||||
|
||||
module.exports = {
|
||||
extensionsToTreatAsEsm: ['.ts'],
|
||||
coverageDirectory: '<rootDir>/build/javascript/',
|
||||
collectCoverageFrom: ['<rootDir>/resources/js/**/*.ts'],
|
||||
projects: [
|
||||
{
|
||||
coveragePathIgnorePatterns: [
|
||||
'<rootDir>/node_modules/',
|
||||
'<rootDir>/public/js/vendor/',
|
||||
],
|
||||
displayName: 'phpMyAdmin',
|
||||
testMatch: ['<rootDir>/tests/javascript/**/*.ts'],
|
||||
transform: { '\\.[jt]sx?$': 'babel-jest' },
|
||||
moduleNameMapper: {
|
||||
'^phpmyadmin/(.*)$': '<rootDir>/resources/js/$1',
|
||||
'^@vendor/(.*)$': '<rootDir>/public/js/vendor/$1',
|
||||
},
|
||||
testEnvironment: 'jsdom',
|
||||
}
|
||||
]
|
||||
};
|
||||
26
jest.config.js
Normal file
@ -0,0 +1,26 @@
|
||||
/* eslint-env node */
|
||||
|
||||
module.exports = {
|
||||
coverageDirectory: '<rootDir>/build/javascript/',
|
||||
collectCoverageFrom: ['<rootDir>/js/src/**/*.js'],
|
||||
projects: [
|
||||
{
|
||||
verbose: true,
|
||||
setupFiles: ['<rootDir>/test/jest/test-env.js'],
|
||||
coveragePathIgnorePatterns: [
|
||||
'<rootDir>/node_modules/',
|
||||
'<rootDir>/js/vendor/',
|
||||
],
|
||||
displayName: 'phpMyAdmin',
|
||||
testMatch: ['<rootDir>/test/javascript/**/*.js'],
|
||||
transform: {
|
||||
'^.+\\.js$': '<rootDir>/test/jest/file-transformer.js'
|
||||
},
|
||||
moduleNameMapper: {
|
||||
'^phpmyadmin/(.*)$': '<rootDir>/js/src/$1',
|
||||
'^@vendor/(.*)$': '<rootDir>/js/vendor/$1',
|
||||
},
|
||||
testEnvironment: 'jsdom',
|
||||
}
|
||||
]
|
||||
};
|
||||