- Run the development version from the adminer/ directory alone, copied anywhere and under any name
- Send the session cookie with SameSite=lax, the browsers not defaulting to it sent it also cross-site
- Send the cookies set by JavaScript with the same attributes as the other cookies
- Do not redirect outside Adminer after saving a row
- Do not count a request without credentials as an unsuccessful login
- Report a server accepting any password by its own message instead of the one about a missing password (bug #1318)
- Print the configuration of Adminer\Password when the database can be accessed without a password
- Print the help as a text, not HTML
- Verify the CSRF token also when logging in
- Verify the CSRF token before killing a query timed out on the client
- Send an error HTTP status on an invalid CSRF token and too large POST data
- Use the same font in <textarea> as in <input>, keep monospace in the SQL command and JSON values
- Autocomplete: Disable in the drivers not using SQL, e.g. Redis
- Autocomplete: Offer only the statements allowed in a trigger and no statement in a check constraint
- Create table: Print the success message in drivers not using SQL, e.g. Elasticsearch (regression from 6.0.0)
- Database schema: Arrange the tables in a grid by their foreign keys instead of in one column
- Database schema: Do not display the tables hidden by tableName() and the references to them
- Select: Search only the columns which can hold the searched value, convert the other types to text (bug #1216)
- Select: Modify or delete several rows in a transaction
- Edit: Keep the JSON value entered by the user after an error, it was replaced by null if it was invalid
- Edit: Print the query fetching the row, the same as in Select
- Import: Display the progress of the file upload
- MySQL: Support collation of routine parameters and return values
- MariaDB 12: Support triggers for multiple events and for UPDATE OF (bug #1306)
- PostgreSQL: Edit and delete rows identified by a column of a composite type (bug #1217)
- MS SQL: Display all result sets of a procedure, a message from the server stopped the iteration (bug #1180)
- MS SQL: Display the messages printed by the server as warnings, e.g. by PRINT
- MS SQL: Fix importing a CSV file to a table with an identity column through PDO, it silently did nothing
- Elasticsearch: Rename the database from elastic to data
- Elasticsearch: Redirect to the only database
- Elasticsearch: Print the executed commands in the messages
- Elasticsearch: Highlight the printed queries
- OpenSearch: Add support via Elasticsearch driver
- Redis: Redirect to the only table
- Editor: Do not access a database without a password, the same as Adminer
Plugins
- Method error() to modify the printed database error messages (bug #1249)
- Method dumpPrint() to print HTML code in the export form
- Method editRowPrint() receives the query which got the edited row and the time it took
- Plugin config: Save the settings by POST so that the CSRF token can be verified
- Plugin file-upload: Do not let the column name escape the upload directory
- Plugin login-otp: Do not create a permanent login without a valid OTP
- Plugin login-password-less: Moved to Adminer as the Adminer\Password class, the plugin only extends it
- Plugin login-reverse-proxy: Group the invalid logins also by the address of the proxy
- Plugin login-servers: Allow server description with special characters (bug #1320)
- Plugin login-ssl: Use also in the pdo_sqlsrv extension (bug #1324)
- Plugin login-table: Verify the password from column password_hash
- Plugin slugify: Print only a numeric maxlength
- Plugin sql-log: Write the log to the temp directory by default
- Driver plugins: Driver::select() assigns the executed query to $this->query
- Driver plugins: Bundle the syntax highlighter in the plugin file, adminer-plugins/jush-<driver>.js is not loaded anymore
- Driver plugins: Method jushAutocomplete() to disable or replace the autocomplete of the query <textarea>
Internal
- Move the submodules from externals/ to where they are used: adminer/static/jush, conf/JsShrink and conf/PhpShrink
- Tests: Cover the CSV import and export, pagination, modifying a value by Ctrl+click, the bulk table operations and the SQL file import in every driver
- Tests: Cover the bundled plugins by plugins.spec.js, which loads them from a fixed set in tests/plugins.php
- Tests: Move the entry points to tests/, they are fixtures and not examples to deploy
- Check the code style also by Slevomat Coding Standard and the compiled files by PHPCompatibility (composer compat)
- Enable the PHPStan strict rules which report no error
- Install PHPCS and PHPStan by composer install, like ESLint
- Skip all the linters in composer install --no-dev, it only initializes the submodules