1
0
mirror of https://github.com/vrana/adminer.git synced 2025-09-05 04:01:48 +02:00

Compare commits

..

56 Commits
v4.11 ... v4.14

Author SHA1 Message Date
Peter Knut
2993ee4ea7 Release 4.14 2025-02-02 23:37:23 +01:00
Peter Knut
27ae5e7895 Switch JsShrink library to a custom fork (issue #17) 2025-02-02 00:52:54 +01:00
Peter Knut
c54e6fb589 Fix link to language files in README.md (issue #18) 2025-02-02 00:24:26 +01:00
Peter Knut
f8bff19898 PostgreSQL: Fix renaming database 2025-01-31 17:05:58 +01:00
Peter Knut
3195023248 PostgreSQL: Fix starting value of exported autoincrement
Thanks to @OmlineEditor (https://github.com/adminerevo/adminerevo/issues/113)
2025-01-30 20:50:57 +01:00
Peter Knut
4a65703334 MariaDB: Fix missing uca1400 collations
Since MariaDB 10.10, one collation can be compatible with more character sets, so collations no longer have unique IDs.

Thanks to @shionryuu (https://github.com/adminerevo/adminerevo/issues/50)
2025-01-30 20:50:57 +01:00
Peter Knut
5c9e0f6d5a Modify naming of new foreign rows
Regexp is used to unify implementation with other similar situations. This also prevents false detection in CodeQL security scanning.
2025-01-29 12:21:56 +01:00
Peter Knut
8e2745ab4f Reconfigure CodeQL analysis 2025-01-29 10:12:20 +01:00
Adrian Jones
f4d06b50fc A few changes from pematon/adminer to adminerneo/adminerneo as well as from master to main 2025-01-29 09:22:38 +01:00
Lucas Sandery
1abaa642ae Update lucas-sandery theme
::file-selector-button got standardised.
2025-01-29 00:09:15 +01:00
Peter Knut
cad67e2c68 Add support for page scrolling while dragging sortable rows (issue #11) 2025-01-29 00:09:15 +01:00
Peter Knut
d53c966ef7 Add a screenshot to readme file 2025-01-29 00:09:15 +01:00
Peter Knut
5490c1654c Change project's name to AdminerNeo 2025-01-29 00:09:15 +01:00
Peter Knut
e69f0afc2a Remove unused git modules 2025-01-27 23:26:39 +01:00
Peter Knut
3380f3aaea Bump version to 4.14-dev 2025-01-27 19:57:38 +01:00
Peter Knut
ddb7dedfa4 Fix warnings in language detection 2025-01-25 23:02:29 +01:00
Peter Knut
0590d7d3ef Compile adminer to "export" directory 2025-01-25 00:21:46 +01:00
Peter Knut
44e59cd698 Referencing contributors in changelog file 2025-01-23 11:18:05 +01:00
Peter Knut
c6bb5b80a8 Release 4.13 2025-01-23 10:57:54 +01:00
Peter Knut
c50cdef293 Fix main visual glitches in designs, remove broken designs 2025-01-23 09:51:01 +01:00
Peter Knut
69dbf1b83f SQLite: Fix exporting and recreating tables with UNIQUE column constraint
- Fix using 'false' query result as array

Note that conflict clause (https://www.sqlite.org/syntax/conflict-clause.html) is not supported at all.

Thanks to @everslick (https://github.com/adminerevo/adminerevo/issues/227)
2025-01-22 10:45:48 +01:00
Peter Knut
4c68b268a6 Declare compatibility with PHP 8.4 2025-01-14 00:08:06 +01:00
Peter Knut
ae327d9a15 Ignore folders with compiled files from version 5 2025-01-13 22:44:28 +01:00
Peter Knut
edd6d6c117 Bump version to 4.12.1-dev 2025-01-13 22:42:30 +01:00
Peter Knut
c24af3087c Update German translation
Thanks to @odysseuscm (8de7d61da8 (commitcomment-151238844))
2025-01-13 22:37:43 +01:00
Kian-Meng Ang
7fc071c716 Fix some typos
https://github.com/adminerevo/adminerevo/pull/210
2025-01-11 22:53:16 +01:00
Peter Knut
3cbf8a8eb2 Remove donation link from logout message 2025-01-10 22:14:32 +01:00
Peter Knut
8de7d61da8 Update German translation
Thanks to wintstar (https://github.com/adminerevo/adminerevo/issues/219)
2024-12-03 14:39:43 +01:00
Peter Knut
4112aaf26f Release 4.12 2024-11-21 12:54:30 +01:00
Peter Knut
5fdc9dc427 Update docs 2024-11-21 09:59:57 +01:00
Peter Knut
cc646de4ca Remove funding config 2024-11-19 23:41:47 +01:00
Peter Knut
b6b379a8ce Improve arrays formatting in dump method 2024-11-19 23:11:36 +01:00
Peter Knut
f93db81c0e Update translations 2024-11-19 22:58:20 +01:00
Peter Knut
2cafcd7fc8 Handle the situation when no driver is found
This can happen if Adminer for MySQL with existing login is replaced by Adminer for PostgreSQL.
2024-11-19 22:58:20 +01:00
Peter Knut
53799ff6ab Update Spanish translations
Thanks to isaacpolaino (https://github.com/adminerevo/adminerevo/discussions/21#discussioncomment-11283326)
2024-11-19 22:00:12 +01:00
Peter Knut
638288cc04 Cleanup: Definition of custom PDO statement class 2024-11-19 22:00:12 +01:00
Peter Knut
99f4c22c72 MSSQL: Allow to set Encrypt and TrustServerCertificate with AdminerLoginSsl plugin (issue #5)
https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/connection-string-syntax#use-trustservercertificate
2024-11-19 22:00:12 +01:00
Peter Knut
55e0c348b8 MSSQL, MongoDB: Connect to localhost with default port if server is not specified 2024-11-19 22:00:12 +01:00
Peter Knut
379003fc8d MongoDB: Fix parsing WHERE condition from SQL query
Thanks to herobank110 (https://github.com/vrana/adminer/pull/491)
2024-11-19 22:00:12 +01:00
Peter Knut
0933e4e67d MongoDB: Small cleanup 2024-11-19 22:00:12 +01:00
Peter Knut
ee26735ac6 Refactor drivers definition and compilation
- Rename 'server' driver to 'mysql'
- MySQL driver is no longer the required default
- Fix compiled SQLite single-driver Adminer
- Allow to compile only selected drivers
2024-11-19 22:00:11 +01:00
Peter Knut
214d7745a7 Compiler: Refactor languages compilation
- Allow to compile only selected languages
- Fix translations in plugins
2024-11-07 10:52:13 +01:00
Peter Knut
99b7c08e3a Compiler: Add new lines before selected keywords, not after 2024-11-05 22:16:39 +01:00
Peter Knut
b1ecb0649e Improve dumping methods if run from terminal 2024-11-05 15:56:57 +01:00
vukbgit
2430ad2702 MariaDB: Add support for UUID data type
- MariaDB >= 10.7
- UUID string data type
- uuid() function for UUID type on new/edit item form
2024-11-04 14:40:50 +01:00
Peter Knut
9eeeca6b0e Fix highlighting default submit button in indexes form 2024-11-03 22:31:45 +01:00
Peter Knut
d165cd9aec Change logo link to main page (login) 2024-11-03 22:31:45 +01:00
Peter Knut
a0a0d44c7c Update project URL and info 2024-11-03 22:31:45 +01:00
Peter Knut
316754af47 Enhance checking of new version
- Do not verify version on login page
- Do not show error from version checking
- Sync expiration of version cookie with file
- Clean up the code
2024-11-03 22:31:45 +01:00
Peter Knut
47f1f19970 Fix SQL query code direction if RTL language is used 2024-11-03 22:31:45 +01:00
Peter Knut
5c4dc82081 PostgreSQL: Fix layout of stored function parameters 2024-11-03 22:31:45 +01:00
Peter Knut
226d4ad54b MySQL: Print comments of stored procedures and functions 2024-11-03 22:31:45 +01:00
Peter Knut
85c0c8f003 Fix disappearing dragged row 2024-11-03 22:31:45 +01:00
Peter Knut
c815ea875b Fix compiling single language version 2024-11-03 22:31:45 +01:00
Peter Knut
872991fa14 Docs: Update migration section 2024-11-03 22:31:45 +01:00
Peter Knut
35411d8f4e Bump version to 4.12-dev 2024-11-03 22:31:45 +01:00
113 changed files with 2039 additions and 2160 deletions

2
.github/FUNDING.yml vendored
View File

@@ -1,2 +0,0 @@
patreon: jakubvrana
custom: ["https://sourceforge.net/p/adminer/donate/"]

View File

@@ -1,67 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '20 16 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1

3
.gitignore vendored
View File

@@ -1,6 +1,7 @@
/adminer/adminer.css /adminer/adminer.css
/adminer*.php /adminer*.php
/editor*.php /editor*.php
/**/compiled
/vendor/ /vendor/
/composer.lock /composer.lock
/temp /export/

6
.gitmodules vendored
View File

@@ -1,6 +0,0 @@
[submodule "designs/hydra"]
path = designs/hydra
url = https://github.com/Niyko/Hydra-Dark-Theme-for-Adminer
[submodule "designs/pepa-linha-dark"]
path = designs/pepa-linha-dark
url = https://github.com/pepa-linha/Adminer-Design-Dark/

View File

@@ -1,48 +1,132 @@
# Changelog Changelog
=========
AdminerNeo 4.14 (2025-02-02)
----------------------------
### Changes
- Change project's name to AdminerNeo
- Add support for page scrolling while dragging sortable rows (issue #11)
- Update lucas-sandery theme (by @lucas-sandery)
- Switch JsShrink library to a custom fork (issue #17)
- Compile adminer into the "export" directory
- Small JS tuning for better CodeQL analysis
### Bugfixes
- MariaDB: Fix missing uca1400 collations
- PostgreSQL: Fix initial value of exported autoincrement
- PostgreSQL: Fix renaming a database
- Fix warnings in language detection
- Fix link to language files in README.md (issue #18)
Thanks for help with invalid links: @adrianbj.
AdminerNeo 4.13 (2025-01-23)
----------------------------
### Changes
- Remove donation link from logout message
- Update German translation (by @wintstar, @odysseuscm)
- Declare compatibility with PHP 8.4
- Remove too broken designs
### Bugfixes
- SQLite: Fix exporting and recreating tables with UNIQUE column constraint
- Fix main visual glitches in designs
AdminerNeo 4.12 (2024-11-21)
----------------------------
### New features
- MySQL: Print comments of stored procedures and functions
- MariaDB: Add support for UUID data type (by @vukbgit)
- MS SQL: Allow to set Encrypt and TrustServerCertificate with AdminerLoginSsl plugin (issue #5)
- MS SQL, MongoDB: Connect to localhost with default port if server is not specified
- Compiler: Allow to compile only selected drivers and languages
### Changes
- Change logo link to main page (login)
- Enhance checking of new version
- Update project URL and info
- Rename 'server' driver to 'mysql'
- Compiler: MySQL driver is no longer the required default
- Update Spanish translations (by @isaacpolaino)
### Bugfixes
- PostgreSQL: Fix layout of stored function parameters
- MongoDB: Fix parsing WHERE condition from SQL query
- Fix SQL query code direction if RTL language is used
- Fix disappearing dragged row
- Fix highlighting default submit button in indexes form
- Compiler: Fix translations in plugins
- Compiler: Fix compiled SQLite single-driver Adminer
AdminerNeo 4.11 (2024-10-30)
----------------------------
### New features
- PostgreSQL, MS SQL: Show list of schemas in database, unify lists of sequences and user types
### Changes
## Adminer 4.11 (2024-10-30)
- Support drag-n-drop moving on touch screens - Support drag-n-drop moving on touch screens
- Fix drag-n-drop moving of function parameters
- Update project information in comments - Update project information in comments
- Update CS and SK translations - Update CS and SK translations
- Show help popup after a short delay - Show help popup after a short delay
- PostgreSQL: Show list of schemas in database, unify lists of sequences and user types - Small CSS tuning
### Bugfixes
- Fix drag-n-drop moving of function parameters
- MariaDB: Fix several links to documentation pages - MariaDB: Fix several links to documentation pages
- MySQL: Fix highlighting current table in menu on macOS - MySQL: Fix highlighting current table in menu on macOS
- MS SQL: Prefix Unicode strings with 'N' so they are treated correctly - MS SQL: Prefix Unicode strings with 'N' so they are treated correctly
- Fix printing error message while validating server URL - Fix printing error message while validating server URL
- Small CSS tuning
## Adminer 4.10 (2024-10-22) AdminerNeo 4.10 (2024-10-22)
----------------------------
### New features
### UI changes and improvements
- Add drag-n-drop moving of rows in table selection filter - Add drag-n-drop moving of rows in table selection filter
- Add drag-n-drop moving of rows in table editing - Add drag-n-drop moving of rows in table editing
- Add removal buttons to table selection filter - Add removal buttons to table selection filter (by @Roy-Orbison)
- Enable regular expressions when searching data in all tables (by @Roy-Orbison)
- Integrate tables-filter plugin into the base code - Integrate tables-filter plugin into the base code
- Full width design for database select box - Plugin to auto-include adminer.js when present (by @Roy-Orbison)
- Add 'Home' to breadcrumb navigation
- Print username next to the logout button - Print username next to the logout button
- Show partitioning info in table structure page - Show partitioning info in table structure page
- Show second link for editing a table under the table view - Show second link for editing a table under the table view
### Changes
- Check new version against GitHub pages (by @adrianbj)
- Add 'Home' to breadcrumb navigation
- Full width design for database select box
- Add table head to the list of indexes - Add table head to the list of indexes
- Hide edited value if selected function will not use it - Hide edited value if selected function will not use it
- Hide arrow buttons in number input fields - Hide arrow buttons in number input fields
- Do not display empty action links in main menu - Do not display empty action links in main menu
- Remove deprecated HTML table parameters - Remove deprecated HTML table parameters
- Remove option to hide default values - Remove option to hide default values
### Functional enhancements
- Enable regular expressions when searching data in all tables
- Elasticsearch: New condition operators as the combination of query type and match type - Elasticsearch: New condition operators as the combination of query type and match type
- Elasticsearch: Proper formatting of boolean values - Elasticsearch: Proper formatting of boolean values
- Plugin to auto-include adminer.js when present
- Check new version against GitHub pages
### Bugfixes ### Bugfixes
- Fix missing SQL statement if warnings are printed (regression from 4.9) - Fix missing SQL statement if warnings are printed (regression from 4.9)
## Adminer 4.9.4 (2024-10-09) AdminerNeo 4.9.4 (2024-10-09)
-----------------------------
- Fix the width of inline edit field - Fix the width of inline edit field
- Unify displaying of 'New item' action based on privileges - Unify displaying of 'New item' action based on privileges
- Better default value for object definition `(*.*)` while creating new database user - Better default value for object definition `(*.*)` while creating new database user
@@ -53,49 +137,57 @@
- Editor: Fix building links with array parameters - Editor: Fix building links with array parameters
- Clean up the code for PHP < 5.6 - Clean up the code for PHP < 5.6
## Adminer 4.9.3 (2024-10-02) AdminerNeo 4.9.3 (2024-10-02)
-----------------------------
- MySQL, PostgreSQL: Fix queries splitting and string constants - MySQL, PostgreSQL: Fix queries splitting and string constants
- MySQL: Fix where clause for `JSON` column - MySQL: Fix where clause for `JSON` column (by @SeaEagle)
- MySQL: Fix editing user's proxy privilege, refactoring - MySQL: Fix editing user's proxy privilege, refactoring
- MariaDB: Fix comparing `CURRENT_TIMESTAMP` definition while altering a table - MariaDB: Fix comparing `CURRENT_TIMESTAMP` definition while altering a table
- PostgreSQL: Fix editing record that contains a field with `GENERATED ALWAYS` default value - PostgreSQL: Fix editing record that contains a field with `GENERATED ALWAYS` default value
- Fix using undefined Min_DB::info property - Fix using undefined Min_DB::info property
- Do not include unchanged `PARTITION BY` definition into `ALTER TABLE` query - Do not include unchanged `PARTITION BY` definition into `ALTER TABLE` query
- Do not limit unlimited memory while executing queries - Do not limit unlimited memory while executing queries (by @oksiquatzel)
- Fix number conversion warning while reading INI settings - Fix number conversion warning while reading INI settings
- Hide invalid edit form if table record is not found - Hide invalid edit form if table record is not found
- CSS: Fix background color of `<pre>` used as edit field - CSS: Fix background color of `<pre>` used as edit field
- CSS: Bigger font size for code blocks - CSS: Bigger font size for code blocks
## Adminer 4.9.2 (2024-09-18) AdminerNeo 4.9.2 (2024-09-18)
-----------------------------
- Fix textarea height for single-line inputs (used typically for SQLite text field) - Fix textarea height for single-line inputs (used typically for SQLite text field)
- Fix undefined property in error message if driver does not support error number (e.g. PostgreSQL) - Fix undefined property in error message if driver does not support error number (e.g. PostgreSQL)
- PostgreSQL: Fix search fields configuration (regression from 4.9) - PostgreSQL: Fix search fields configuration (regression from 4.9)
- PostgreSQL: Fix search condition for network address types, add macaddr8 type - PostgreSQL: Fix search condition for network address types, add macaddr8 type
- PostgreSQL: Fix exporting `CREATE TABLE` query with `GENERATED` default values - PostgreSQL: Fix exporting `CREATE TABLE` query with `GENERATED` default values
- PostgreSQL: Fix exporting `CREATE TABLE` query with sequence default value - PostgreSQL: Fix exporting `CREATE TABLE` query with sequence default value (by @khoazero123)
- PostgreSQL: Allow to set connection's sslmode with AdminerLoginSsl plugin - PostgreSQL: Allow to set connection's sslmode with AdminerLoginSsl plugin
- MySQL: Do not show `empty` enum value in strict mode - MySQL: Do not show `empty` enum value in strict mode
- Editor: Fix searching in tables - Editor: Fix searching in tables
- Function to retrieve driver name that can be used in plugins - Add function to retrieve driver name that can be used in plugins (by @Roy-Orbison)
## Adminer 4.9.1 (2024-09-09) AdminerNeo 4.9.1 (2024-09-09)
- Compatibility with PHP 8.3 -----------------------------
- Compatibility with PHP 8.3 (by @Sneda8)
- Fix compiling jush external files - Fix compiling jush external files
- Improved displaying of long table names in menu - Improved displaying of long table names in menu
- Replace deprecated `<acronym>` with `<abbr>` - Replace deprecated `<acronym>` with `<abbr>`
- Add support for translations in plugins - Add support for translations in plugins
- Add .editorconfig file - Add .editorconfig file
- MySQL: Add `unix_timestamp` to functions - MySQL: Add `unix_timestamp` to functions (by @bbaronSVK)
- PostgreSQL: Show only accessible databases - PostgreSQL: Show only accessible databases (by @thomas-daniels)
- PostgreSQL: Make data length calculation more accurate - PostgreSQL: Make data length calculation more accurate (by @caltong)
- PostgreSQL: Fix documentation link for `SERIAL` type - PostgreSQL: Fix documentation link for `SERIAL` type
- PostgreSQL: Fix undefined properties on PHP 8 - PostgreSQL: Fix undefined properties on PHP 8
- Elasticsearch: Fix field selection - Elasticsearch: Fix field selection
- AdminerEditForeign: Refactor and fix the plugin - AdminerEditForeign: Refactor and fix the plugin
- AdminerLoginOtp: Autocomplete hints for OTP input field, code refactoring - AdminerLoginOtp: Autocomplete hints for OTP input field, code refactoring
## Adminer 4.9 (2024-08-19) AdminerNeo 4.9 (2024-08-19)
---------------------------
- Validate server input in login form - Validate server input in login form
- Validate connection to server in HTTP based drivers - Validate connection to server in HTTP based drivers
- Move dependencies from submodules to Composer - Move dependencies from submodules to Composer
@@ -104,21 +196,26 @@
- Add new Elasticsearch 7 driver - Add new Elasticsearch 7 driver
- Set saving to file as a default export option - Set saving to file as a default export option
- Improve URL and email detection - Improve URL and email detection
- Fix AdminerVersionNoverify plugin blocking other plugins to modify HTML head - Fix AdminerVersionNoverify plugin blocking other plugins to modify HTML head (by @Roy-Orbison)
- Fix several bugs and security issues in AdminerFileUpload plugin - Fix several bugs and security issues in AdminerFileUpload plugin
- Skip dump of generated columns - Skip dump of generated columns (by @Denitz)
- Fix uninitialized string offset (by @adrianbj)
- Update composer.json - Update composer.json
- Add script for exporting compiled adminer variants - Add script for exporting compiled adminer variants
## Adminer 4.8.2 (2024-03-16) AdminerNeo 4.8.2 (2024-03-16)
-----------------------------
- Support multi-line table comments - Support multi-line table comments
- MySQL: Use `ST_SRID()` instead of `SRID()` for MySQL 8 (PR #418) - MySQL: Use `ST_SRID()` instead of `SRID()` for MySQL 8 (PR #418)
- PostgreSQL: Don't reset table comments (regression from 4.2.0) - PostgreSQL: Don't reset table comments (regression from 4.2.0)
- PostgreSQL PDO: Allow editing rows identified by boolean column (PR #380) - PostgreSQL PDO: Allow editing rows identified by boolean column (PR #380)
- Update several translations: lv, bn, fr, it, nl, ru, cs, sk - Update several translations: lv, bn, fr, it, nl, ru, cs, sk
- Allow responsive styles on larger devices - Allow responsive styles on larger devices (by @lucas-sandery)
Adminer 4.8.1 (2021-05-14)
--------------------------
## Adminer 4.8.1 (2021-05-14)
- Internet Explorer or PDO in ## Adminer 4.7.8-4.8.0: Fix XSS in doc_link (bug #797) - Internet Explorer or PDO in ## Adminer 4.7.8-4.8.0: Fix XSS in doc_link (bug #797)
- Fix more PHP 8 warnings (bug #781) - Fix more PHP 8 warnings (bug #781)
- Avoid PHP warnings with PDO drivers (bug #786, regression from 4.7.8) - Avoid PHP warnings with PDO drivers (bug #786, regression from 4.7.8)
@@ -130,7 +227,9 @@
- PostgreSQL < 10 PDO: Avoid displaying GENERATED ALWAYS BY IDENTITY everywhere (bug #785, regression from 4.7.9) - PostgreSQL < 10 PDO: Avoid displaying GENERATED ALWAYS BY IDENTITY everywhere (bug #785, regression from 4.7.9)
- SQLite: Fix displayed types (bug #784, regression from 4.8.0) - SQLite: Fix displayed types (bug #784, regression from 4.8.0)
## Adminer 4.8.0 (2021-02-10) Adminer 4.8.0 (2021-02-10)
--------------------------
- Support function default values in insert (bug #713) - Support function default values in insert (bug #713)
- Allow SQL pseudo-function in insert - Allow SQL pseudo-function in insert
- Skip date columns for non-date values in search anywhere - Skip date columns for non-date values in search anywhere
@@ -150,7 +249,9 @@
- MongoDB: Handle errors - MongoDB: Handle errors
- SimpleDB, Firebird, ClickHouse: Move to plugin - SimpleDB, Firebird, ClickHouse: Move to plugin
## Adminer 4.7.9 (2021-02-07) Adminer 4.7.9 (2021-02-07)
--------------------------
- Fix XSS in browsers which don't encode URL parameters (bug #775, regression from 4.7.0) - Fix XSS in browsers which don't encode URL parameters (bug #775, regression from 4.7.0)
- Elasticsearch, ClickHouse: Do not print response if HTTP code is not 200 - Elasticsearch, ClickHouse: Do not print response if HTTP code is not 200
- Don't syntax highlight during IME composition (bug #747) - Don't syntax highlight during IME composition (bug #747)
@@ -176,14 +277,20 @@
- Editor: Cast to string when searching (bug #325) - Editor: Cast to string when searching (bug #325)
- Editor: Avoid trailing dot in export filename - Editor: Avoid trailing dot in export filename
## Adminer 4.7.8 (2020-12-06) Adminer 4.7.8 (2020-12-06)
--------------------------
- Support PHP 8 - Support PHP 8
- Disallow connecting to privileged ports (bug #769) - Disallow connecting to privileged ports (bug #769)
## Adminer 4.7.7 (2020-05-11) Adminer 4.7.7 (2020-05-11)
--------------------------
- Fix open redirect if Adminer is accessible at //adminer.php%2F@ - Fix open redirect if Adminer is accessible at //adminer.php%2F@
## Adminer 4.7.6 (2020-01-31) Adminer 4.7.6 (2020-01-31)
--------------------------
- Speed up alter table form (regression from 4.4.0) - Speed up alter table form (regression from 4.4.0)
- Fix clicking on non-input fields in alter table (regression from 4.6.2) - Fix clicking on non-input fields in alter table (regression from 4.6.2)
- Display time of procedure execution - Display time of procedure execution
@@ -192,17 +299,23 @@
- PostgreSQL: Support exporting views - PostgreSQL: Support exporting views
- Editor: Fix focusing foreign key search in select - Editor: Fix focusing foreign key search in select
## Adminer 4.7.5 (2019-11-13) Adminer 4.7.5 (2019-11-13)
--------------------------
- Add id="" to cells with failed inline edit (bug #708) - Add id="" to cells with failed inline edit (bug #708)
- PostgreSQL: Fix getting default value in PostgreSQL 12 (bug #719) - PostgreSQL: Fix getting default value in PostgreSQL 12 (bug #719)
- PostgreSQL, Oracle: Set schema for EXPLAIN queries in SQL command (bug #706) - PostgreSQL, Oracle: Set schema for EXPLAIN queries in SQL command (bug #706)
- ClickHouse: SQL command - ClickHouse: SQL command
- Swedish translation - Swedish translation
## Adminer 4.7.4 (2019-10-22) Adminer 4.7.4 (2019-10-22)
--------------------------
- Fix XSS if Adminer is accessible at URL /data: - Fix XSS if Adminer is accessible at URL /data:
## Adminer 4.7.3 (2019-08-27) Adminer 4.7.3 (2019-08-27)
--------------------------
- Allow editing foreign keys pointing to tables in other database/schema (bug #694) - Allow editing foreign keys pointing to tables in other database/schema (bug #694)
- Fix blocking of concurrent instances in PHP >7.2 (bug #703) - Fix blocking of concurrent instances in PHP >7.2 (bug #703)
- MySQL: Speed up displaying tables in large databases (bug #700, regression from 4.7.2) - MySQL: Speed up displaying tables in large databases (bug #700, regression from 4.7.2)
@@ -215,7 +328,9 @@
- MS SQL: Support foreign keys to other DB - MS SQL: Support foreign keys to other DB
- MongoDB: Allow setting authSource from environment variable - MongoDB: Allow setting authSource from environment variable
## Adminer 4.7.2 (2019-07-18) Adminer 4.7.2 (2019-07-18)
--------------------------
- Do not attempt logging in without password (bug #676) - Do not attempt logging in without password (bug #676)
- Stretch footer over the whole table width (bug #624) - Stretch footer over the whole table width (bug #624)
- Allow overwriting tables when copying them - Allow overwriting tables when copying them
@@ -230,7 +345,9 @@
- MS SQL: Support comments - MS SQL: Support comments
- Elasticsearch: Fix setting number of rows - Elasticsearch: Fix setting number of rows
## Adminer 4.7.1 (2019-01-24) Adminer 4.7.1 (2019-01-24)
--------------------------
- Display the tables scrollbar (bug #647) - Display the tables scrollbar (bug #647)
- Remember visible columns in Create Table form (bug #493) - Remember visible columns in Create Table form (bug #493)
- Add autocomplete attributes to login form - Add autocomplete attributes to login form
@@ -238,7 +355,9 @@
- SQLite: Hide server field in login form - SQLite: Hide server field in login form
- Editor: Allow disabling boolean fields in PostgreSQL (bug #640) - Editor: Allow disabling boolean fields in PostgreSQL (bug #640)
## Adminer 4.7.0 (2018-11-24) Adminer 4.7.0 (2018-11-24)
--------------------------
- Simplify storing executed SQL queries to bookmarks - Simplify storing executed SQL queries to bookmarks
- Warn when using password with leading or trailing spaces - Warn when using password with leading or trailing spaces
- Hide import from server if importServerPath() returns an empty string - Hide import from server if importServerPath() returns an empty string
@@ -259,7 +378,9 @@
- ClickHouse: Connect, databases list, tables list, select, SQL command - ClickHouse: Connect, databases list, tables list, select, SQL command
- Georgian translation - Georgian translation
## Adminer 4.6.3 (2018-06-28) Adminer 4.6.3 (2018-06-28)
--------------------------
- Disallow using password-less databases - Disallow using password-less databases
- Copy triggers when copying table - Copy triggers when copying table
- Stop session before connecting - Stop session before connecting
@@ -277,7 +398,9 @@
- MS SQL: Support port with sqlsrv - MS SQL: Support port with sqlsrv
- Editor: Do not check boolean checkboxes with false in PostgreSQL (bug #607) - Editor: Do not check boolean checkboxes with false in PostgreSQL (bug #607)
## Adminer 4.6.2 (2018-02-20) Adminer 4.6.2 (2018-02-20)
--------------------------
- Semi-transparent border on table actions - Semi-transparent border on table actions
- Shorten JSON values in select (bug #594) - Shorten JSON values in select (bug #594)
- Speed up alter table form (regression from 4.4.0) - Speed up alter table form (regression from 4.4.0)
@@ -287,7 +410,9 @@
- PostgreSQL: Add IF EXISTS to DROP SEQUENCE in export (bug #595) - PostgreSQL: Add IF EXISTS to DROP SEQUENCE in export (bug #595)
- Editor: Fix displaying of true boolean values (regression from 4.5.0) - Editor: Fix displaying of true boolean values (regression from 4.5.0)
## Adminer 4.6.1 (2018-02-09) Adminer 4.6.1 (2018-02-09)
--------------------------
- Sticky position of table actions - Sticky position of table actions
- Speed up rendering of long tables (regression from 4.4.0) - Speed up rendering of long tables (regression from 4.4.0)
- Display notification about performing action after relogin - Display notification about performing action after relogin
@@ -304,7 +429,9 @@
- Customization: Support connecting to MySQL via SSL - Customization: Support connecting to MySQL via SSL
- Customization: Allow specifying server name displayed in breadcrumbs - Customization: Allow specifying server name displayed in breadcrumbs
## Adminer 4.6.0 (2018-02-05) Adminer 4.6.0 (2018-02-05)
--------------------------
- Fix counting selected rows after going back to select page - Fix counting selected rows after going back to select page
- PHP <5.3 compatibility even with Elasticsearch enabled - PHP <5.3 compatibility even with Elasticsearch enabled
- Fully support functions in default values - Fully support functions in default values
@@ -324,7 +451,9 @@
- SimpleDB: Document that allow_url_fopen is required - SimpleDB: Document that allow_url_fopen is required
- Malay translation - Malay translation
## Adminer 4.5.0 (2018-01-24) Adminer 4.5.0 (2018-01-24)
--------------------------
- Display name of the object in confirmation when dropping it - Display name of the object in confirmation when dropping it
- Display newlines in column comments (bug #573) - Display newlines in column comments (bug #573)
- Support current_timestamp() as default of time fields (bug #572) - Support current_timestamp() as default of time fields (bug #572)
@@ -348,7 +477,9 @@
- MongoDB: Support mongodb PHP extension - MongoDB: Support mongodb PHP extension
- Editor: Fix displaying of false values in PostgreSQL (bug #568) - Editor: Fix displaying of false values in PostgreSQL (bug #568)
## Adminer 4.4.0 (2018-01-17) Adminer 4.4.0 (2018-01-17)
--------------------------
- Add Content Security Policy - Add Content Security Policy
- Disallow scripts without nonce - Disallow scripts without nonce
- Rate limit password-less login attempts from the same IP address - Rate limit password-less login attempts from the same IP address
@@ -360,19 +491,23 @@
- PostgreSQL: Sort table names (regression from 4.3.1) - PostgreSQL: Sort table names (regression from 4.3.1)
- Editor: Don't set time zone from PHP, fixes DST - Editor: Don't set time zone from PHP, fixes DST
- Editor: Display field comment's text inside [] only in edit form - Editor: Display field comment's text inside [] only in edit form
- Editor: Fix doubleclick on database page - Editor: Fix double-click on database page
- Editor: Fix Search data in tables - Editor: Fix Search data in tables
- Customization: Always send security headers - Customization: Always send security headers
- Hebrew translation - Hebrew translation
## Adminer 4.3.1 (2017-04-14) Adminer 4.3.1 (2017-04-14)
--------------------------
- Fix permanent login after logout (bug #539) - Fix permanent login after logout (bug #539)
- Fix SQL command autofocus (regression from 4.0.0) - Fix SQL command autofocus (regression from 4.0.0)
- PostgreSQL: Support JSON and JSONB data types - PostgreSQL: Support JSON and JSONB data types
- PostgreSQL: Fix index size computation in PostgreSQL < 9.0 (regression from 4.3.0) - PostgreSQL: Fix index size computation in PostgreSQL < 9.0 (regression from 4.3.0)
- PostgreSQL: Fix nullable fields in export - PostgreSQL: Fix nullable fields in export
## Adminer 4.3.0 (2017-03-15) Adminer 4.3.0 (2017-03-15)
--------------------------
- Make maxlength in edit fields a soft limit - Make maxlength in edit fields a soft limit
- Add accessibility labels - Add accessibility labels
- Add Cache-Control: immutable to static files - Add Cache-Control: immutable to static files
@@ -385,34 +520,46 @@
- MS SQL: Support pdo_dblib - MS SQL: Support pdo_dblib
- Elasticsearch: Support HTTPS by inputting https://server - Elasticsearch: Support HTTPS by inputting https://server
## Adminer 4.2.5 (2016-06-01) Adminer 4.2.5 (2016-06-01)
--------------------------
- Fix remote execution in SQLite query - Fix remote execution in SQLite query
- SQLite: Require credentials to use - SQLite: Require credentials to use
- PostgreSQL: Support KILL - PostgreSQL: Support KILL
## Adminer 4.2.4 (2016-02-06) Adminer 4.2.4 (2016-02-06)
--------------------------
- Fix remote execution in SQLite query - Fix remote execution in SQLite query
- MySQL: Support PHP 7 - MySQL: Support PHP 7
- Bosnian translation - Bosnian translation
- Finnish translation - Finnish translation
## Adminer 4.2.3 (2015-11-15) Adminer 4.2.3 (2015-11-15)
--------------------------
- Fix XSS in indexes (non-MySQL only) - Fix XSS in indexes (non-MySQL only)
- Support PHP 7 - Support PHP 7
- Greek translation - Greek translation
- Galician translation - Galician translation
- Bulgarian translation - Bulgarian translation
## Adminer 4.2.2 (2015-08-05) Adminer 4.2.2 (2015-08-05)
--------------------------
- Fix XSS in alter table (found by HP Fortify) - Fix XSS in alter table (found by HP Fortify)
## Adminer 4.2.1 (2015-03-10) Adminer 4.2.1 (2015-03-10)
--------------------------
- Send referrer header to the same domain - Send referrer header to the same domain
- MySQL: Fix usage of utf8mb4 if the client library doesn't support it - MySQL: Fix usage of utf8mb4 if the client library doesn't support it
- MySQL: Use utf8mb4 in export only if required - MySQL: Use utf8mb4 in export only if required
- SQLite: Use EXPLAIN QUERY PLAN in SQL query - SQLite: Use EXPLAIN QUERY PLAN in SQL query
## Adminer 4.2.0 (2015-02-07) Adminer 4.2.0 (2015-02-07)
--------------------------
- Fix XSS in login form (bug #436) - Fix XSS in login form (bug #436)
- Allow limiting number of displayed rows in SQL command - Allow limiting number of displayed rows in SQL command
- Fix reading routine column collations - Fix reading routine column collations
@@ -435,7 +582,9 @@
- Firebird: Alpha version - Firebird: Alpha version
- Danish translation - Danish translation
## Adminer 4.1.0 (2014-04-18) Adminer 4.1.0 (2014-04-18)
--------------------------
- Provide size of all databases in the overview - Provide size of all databases in the overview
- Prevent against brute force login attempts from the same IP address - Prevent against brute force login attempts from the same IP address
- Compute number of tables in the overview explicitly - Compute number of tables in the overview explicitly
@@ -455,18 +604,24 @@
- Translate numbers in ar, bn, fa - Translate numbers in ar, bn, fa
- Vietnamese translation - Vietnamese translation
## Adminer 4.0.3 (2014-02-01) Adminer 4.0.3 (2014-02-01)
--------------------------
- MongoDB: insert, truncate, indexes - MongoDB: insert, truncate, indexes
- SimpleDB, MongoDB: insert more fields at once - SimpleDB, MongoDB: insert more fields at once
- SQLite: Fix creating table and altering primary key, bug since ## Adminer 4.0.0 - SQLite: Fix creating table and altering primary key, bug since ## Adminer 4.0.0
- Don't store invalid credentials to session, bug since ## Adminer 4.0.0 - Don't store invalid credentials to session, bug since ## Adminer 4.0.0
- Norweigan translation - Norweigan translation
## Adminer 4.0.2 (2014-01-11) Adminer 4.0.2 (2014-01-11)
--------------------------
- Fix handling of long text in SQL textarea - Fix handling of long text in SQL textarea
- Support paste to SQL textarea in Opera - Support paste to SQL textarea in Opera
## Adminer 4.0.1 (2014-01-11) Adminer 4.0.1 (2014-01-11)
--------------------------
- Don't use type=number if a SQL function is used - Don't use type=number if a SQL function is used
- Disable highlighting in textareas with long texts - Disable highlighting in textareas with long texts
- Don't autofocus SQL textarea in Firefox - Don't autofocus SQL textarea in Firefox
@@ -476,7 +631,9 @@
- MongoDB: Count tables, display ObjectIds, sort, limit, offset, count rows - MongoDB: Count tables, display ObjectIds, sort, limit, offset, count rows
- Elasticsearch: Fix compiled version, create and drop DB, drop table - Elasticsearch: Fix compiled version, create and drop DB, drop table
## Adminer 4.0.0 (2014-01-08) Adminer 4.0.0 (2014-01-08)
--------------------------
- Driver for SimpleDB, MongoDB and Elasticsearch - Driver for SimpleDB, MongoDB and Elasticsearch
- Highlight SQL in textareas - Highlight SQL in textareas
- Save and continue edit by AJAX - Save and continue edit by AJAX
@@ -509,7 +666,9 @@
- Portugal Portuguese translation - Portugal Portuguese translation
- Thai translation - Thai translation
## Adminer 3.7.1 (2013-06-29) Adminer 3.7.1 (2013-06-29)
--------------------------
- Increase click target for checkboxes - Increase click target for checkboxes
- Use shadow for highlighting default button - Use shadow for highlighting default button
- Don't use LIMIT 1 if inline updating unique row - Don't use LIMIT 1 if inline updating unique row
@@ -527,7 +686,9 @@
- PostgreSQL: Handle timestamp types (bug #324) - PostgreSQL: Handle timestamp types (bug #324)
- Add Korean translation - Add Korean translation
## Adminer 3.7.0 (2013-05-19) Adminer 3.7.0 (2013-05-19)
--------------------------
- Allow more SQL files to be uploaded at the same time - Allow more SQL files to be uploaded at the same time
- Print run time next to executed queries - Print run time next to executed queries
- Don't drop original view and routine before creating the new one - Don't drop original view and routine before creating the new one
@@ -541,7 +702,7 @@
- Fix resetting search (bug #318) - Fix resetting search (bug #318)
- Don't use LIMIT 1 if updating unique row (bug #320) - Don't use LIMIT 1 if updating unique row (bug #320)
- Restrict editing rows without unique identifier to search results - Restrict editing rows without unique identifier to search results
- Display navigation bellow main content on mobile browsers - Display navigation below main content on mobile browsers
- Get number of rows on export page asynchronously - Get number of rows on export page asynchronously
- Respect 'whole result' even if some rows are checked (bug #339 since Adminer 3.7.0) - Respect 'whole result' even if some rows are checked (bug #339 since Adminer 3.7.0)
- MySQL: Optimize create table page and Editor navigation - MySQL: Optimize create table page and Editor navigation
@@ -553,7 +714,9 @@
- SQLite: Export views - SQLite: Export views
- PostgreSQL: Fix swapped NULL and NOT NULL columns in PDO - PostgreSQL: Fix swapped NULL and NOT NULL columns in PDO
## Adminer 3.6.4 (2013-04-26) Adminer 3.6.4 (2013-04-26)
--------------------------
- Display pagination on a fixed position - Display pagination on a fixed position
- Increase default select limit to 50 - Increase default select limit to 50
- Display SQL edit form on Ctrl+click on the select query - Display SQL edit form on Ctrl+click on the select query
@@ -576,14 +739,18 @@
- MySQL: Link processlist documentation - MySQL: Link processlist documentation
- SQLite: Export indexes - SQLite: Export indexes
## Adminer 3.6.3 (2013-01-23) Adminer 3.6.3 (2013-01-23)
--------------------------
- Display error code in SQL query - Display error code in SQL query
- Allow specifying external links - Allow specifying external links
- Treat Meta key same as Ctrl - Treat Meta key same as Ctrl
- Fix XSS in displaying non-UTF-8 strings - Fix XSS in displaying non-UTF-8 strings
- Don't use type="number" for decimal numbers - Don't use type="number" for decimal numbers
## Adminer 3.6.2 (2012-12-21) Adminer 3.6.2 (2012-12-21)
--------------------------
- Edit values by Ctrl+click instead of double click - Edit values by Ctrl+click instead of double click
- Don't select row on double click - Don't select row on double click
- Support NULL in routine calls - Support NULL in routine calls
@@ -598,10 +765,14 @@
- PostgreSQL: Fix process list in version 9.2 - PostgreSQL: Fix process list in version 9.2
- MS SQL: Support databases starting with number - MS SQL: Support databases starting with number
## Adminer 3.6.1 (2012-09-17) Adminer 3.6.1 (2012-09-17)
--------------------------
- Fix compiled version on PHP with multibyte support - Fix compiled version on PHP with multibyte support
## Adminer 3.6.0 (2012-09-16) Adminer 3.6.0 (2012-09-16)
--------------------------
- Load more data in select - Load more data in select
- Edit strings with \n in textarea - Edit strings with \n in textarea
- Time out long running database list and select count - Time out long running database list and select count
@@ -615,11 +786,15 @@
- selectQueryBuild() method (customization) - selectQueryBuild() method (customization)
- Serbian translation - Serbian translation
## Adminer 3.5.1 (2012-08-10) Adminer 3.5.1 (2012-08-10)
--------------------------
- Support same name fields in CSV export - Support same name fields in CSV export
- Support Shift+click in export - Support Shift+click in export
## Adminer 3.5.0 (2012-08-05) Adminer 3.5.0 (2012-08-05)
--------------------------
- Links for column search in select - Links for column search in select
- Autohide column context menu in select - Autohide column context menu in select
- Autodisplay long table names in tables list - Autodisplay long table names in tables list
@@ -628,7 +803,9 @@
- SQLite: Better editing in tables without primary key - SQLite: Better editing in tables without primary key
- SQLite: Display number of rows in database overview - SQLite: Display number of rows in database overview
## Adminer 3.4.0 (2012-06-30) Adminer 3.4.0 (2012-06-30)
--------------------------
- Link to descending order - Link to descending order
- Shift+click on checkbox to select consecutive rows - Shift+click on checkbox to select consecutive rows
- Print current time next to executed SQL queries - Print current time next to executed SQL queries
@@ -650,7 +827,9 @@
- Ukrainian translation - Ukrainian translation
- Bengali translation - Bengali translation
## Adminer 3.3.4 (2012-03-07) Adminer 3.3.4 (2012-03-07)
--------------------------
- Foreign keys default actions (bug #188) - Foreign keys default actions (bug #188)
- SET DEFAULT foreign key action - SET DEFAULT foreign key action
- Fix minor parser bug in SQL command with webserver file - Fix minor parser bug in SQL command with webserver file
@@ -673,14 +852,18 @@
- Boolean search (Editor) - Boolean search (Editor)
- Persian translation - Persian translation
## Adminer 3.3.3 (2011-08-12) Adminer 3.3.3 (2011-08-12)
--------------------------
- Highlight checked rows - Highlight checked rows
- Titles of links in database overview and navigation - Titles of links in database overview and navigation
- Fix trigger export (SQLite) - Fix trigger export (SQLite)
- Default trigger statement (SQLite, PostgreSQL) - Default trigger statement (SQLite, PostgreSQL)
- Remove search by expression (PostgreSQL, MS SQL) - Remove search by expression (PostgreSQL, MS SQL)
## Adminer 3.3.2 (2011-08-08) Adminer 3.3.2 (2011-08-08)
--------------------------
- Display error with non-existent row in edit - Display error with non-existent row in edit
- Fix minor parser bug in SQL command with webserver file - Fix minor parser bug in SQL command with webserver file
- Fix SQL command Stop on error - Fix SQL command Stop on error
@@ -688,12 +871,16 @@
- Fast number of rows with big tables (PostgreSQL) - Fast number of rows with big tables (PostgreSQL)
- Sort databases and schemas (PostgreSQL) - Sort databases and schemas (PostgreSQL)
## Adminer 3.3.1 (2011-07-27) Adminer 3.3.1 (2011-07-27)
--------------------------
- Fix XSS introduced in Adminer 3.2.0 - Fix XSS introduced in Adminer 3.2.0
- Fix altering default values (PostgreSQL) - Fix altering default values (PostgreSQL)
- Process list (PostgreSQL) - Process list (PostgreSQL)
## Adminer 3.3.0 (2011-07-19) Adminer 3.3.0 (2011-07-19)
--------------------------
- Use Esc to disable in-place edit - Use Esc to disable in-place edit
- Shortcut for database privileges - Shortcut for database privileges
- Editable index names - Editable index names
@@ -719,10 +906,14 @@
- Easier sending of default headers (customization) - Easier sending of default headers (customization)
- Lithuanian and Romanian translation - Lithuanian and Romanian translation
## Adminer 3.2.2 (2011-03-28) Adminer 3.2.2 (2011-03-28)
--------------------------
- Fix AJAX history after reload - Fix AJAX history after reload
## Adminer 3.2.1 (2011-03-23) Adminer 3.2.1 (2011-03-23)
--------------------------
- Ability to save expression in edit - Ability to save expression in edit
- Respect default database collation (bug #119) - Respect default database collation (bug #119)
- Don't export triggers without table (bug #123) - Don't export triggers without table (bug #123)
@@ -743,7 +934,9 @@
- Allow own code in `<head>` (customization) - Allow own code in `<head>` (customization)
- Polish translation - Polish translation
## Adminer 3.2.0 (2011-02-24) Adminer 3.2.0 (2011-02-24)
--------------------------
- Get long texts and slow information by AJAX - Get long texts and slow information by AJAX
- Most links and forms by AJAX in browsers with support for history.pushState - Most links and forms by AJAX in browsers with support for history.pushState
- Copy tables - Copy tables
@@ -766,7 +959,9 @@
- Fix saving schema to cookie in Opera - Fix saving schema to cookie in Opera
- Portuguese, Slovenian and Turkish translation - Portuguese, Slovenian and Turkish translation
## Adminer 3.1.0 (2010-11-16) Adminer 3.1.0 (2010-11-16)
--------------------------
- TSV export and import - TSV export and import
- Customizable export - Customizable export
- Option to show only errors in SQL command - Option to show only errors in SQL command
@@ -783,7 +978,9 @@
- Arabic translation and RTL support - Arabic translation and RTL support
- Dual licensing: Apache or GPL - Dual licensing: Apache or GPL
## Adminer 3.0.1 (2010-10-18) Adminer 3.0.1 (2010-10-18)
--------------------------
- Send the form by Ctrl+Enter in all textareas - Send the form by Ctrl+Enter in all textareas
- Disable creating SQLite databases with extension other than db, sdb, sqlite - Disable creating SQLite databases with extension other than db, sdb, sqlite
- Ability to use Adminer in a frame through customization - Ability to use Adminer in a frame through customization
@@ -791,7 +988,9 @@
- MS SQL 2005 compatibility - MS SQL 2005 compatibility
- PostgreSQL: connect if the eponymous database does not exist - PostgreSQL: connect if the eponymous database does not exist
## Adminer 3.0.0 (2010-10-15) Adminer 3.0.0 (2010-10-15)
--------------------------
- Drivers for MS SQL, SQLite, PostgreSQL, Oracle - Drivers for MS SQL, SQLite, PostgreSQL, Oracle
- Allow concurrent logins on the same server - Allow concurrent logins on the same server
- Allow permanent login without customization - Allow permanent login without customization
@@ -817,18 +1016,24 @@
- Defer table information in database overview to JavaScript (performance) - Defer table information in database overview to JavaScript (performance)
- Big tables optimizations (performance) - Big tables optimizations (performance)
## Adminer 2.3.2 (2010-04-21) Adminer 2.3.2 (2010-04-21)
--------------------------
- Fix COUNT(*) link - Fix COUNT(*) link
- Fix Save and continue edit - Fix Save and continue edit
## Adminer 2.3.1 (2010-04-06) Adminer 2.3.1 (2010-04-06)
--------------------------
- Add Drop button to Alter pages (regression from 2.0.0) - Add Drop button to Alter pages (regression from 2.0.0)
- Link COUNT(*) result to listing - Link COUNT(*) result to listing
- Newlines in select query edit - Newlines in select query edit
- Return to referrer after edit - Return to referrer after edit
- Respect session.auto_start (bug #42) - Respect session.auto_start (bug #42)
## Adminer 2.3.0 (2010-02-26) Adminer 2.3.0 (2010-02-26)
--------------------------
- Support for permanent login (customization required) - Support for permanent login (customization required)
- Search in all tables - Search in all tables
- Show status variables - Show status variables
@@ -840,14 +1045,18 @@
- Delete length when changing type in alter table - Delete length when changing type in alter table
- Ability to check table prefix in export - Ability to check table prefix in export
## Adminer 2.2.1 (2009-11-26) Adminer 2.2.1 (2009-11-26)
--------------------------
- Highlight current links - Highlight current links
- Improve concurrency - Improve concurrency
- Move number of tables to DB info (performance) - Move number of tables to DB info (performance)
- Search by foreign keys (Editor) - Search by foreign keys (Editor)
- Link new item in backward keys (Editor) - Link new item in backward keys (Editor)
## Adminer 2.2.0 (2009-10-20) Adminer 2.2.0 (2009-10-20)
--------------------------
- Database list - bulk drop, number of tables - Database list - bulk drop, number of tables
- Enlarge field for enum and set definition - Enlarge field for enum and set definition
- Display table links above table structure - Display table links above table structure
@@ -864,7 +1073,9 @@
- Move `<h1>` to $adminer->navigation (customization) - Move `<h1>` to $adminer->navigation (customization)
- Rename get_dbh to connection (customization) - Rename get_dbh to connection (customization)
## Adminer 2.1.0 (2009-09-12) Adminer 2.1.0 (2009-09-12)
--------------------------
- Edit default values directly in table creation - Edit default values directly in table creation
- Execute SQL file stored on server disk - Execute SQL file stored on server disk
- Display EXPLAIN in SQL query - Display EXPLAIN in SQL query
@@ -878,7 +1089,9 @@
- Speed up simple alter table - Speed up simple alter table
- Traditional Chinese translation - Traditional Chinese translation
## Adminer 2.0.0 (2009-08-06) Adminer 2.0.0 (2009-08-06)
--------------------------
- Editor: User friendly data editor - Editor: User friendly data editor
- Customization: Adminer class - Customization: Adminer class
- Create single column foreign key in table structure - Create single column foreign key in table structure
@@ -904,10 +1117,14 @@
- Fix CSV import - Fix CSV import
- Fix work with default values - Fix work with default values
## Adminer 1.11.1 (2009-07-03) Adminer 1.11.1 (2009-07-03)
--------------------------
- Fix problem with enabled Filter extension - Fix problem with enabled Filter extension
## Adminer 1.11.0 (2009-07-02) Adminer 1.11.0 (2009-07-02)
--------------------------
- Connection through socket by server :/path/to/socket - Connection through socket by server :/path/to/socket
- Simplify export - Simplify export
- Display execution time in SQL query - Display execution time in SQL query
@@ -928,12 +1145,16 @@
- Automatically add new fields in table creation - Automatically add new fields in table creation
- Use \n in SQL commands - Use \n in SQL commands
## phpMinAdmin 1.10.1 (2009-05-07) phpMinAdmin 1.10.1 (2009-05-07)
-------------------------------
- Highlight odd and hover rows - Highlight odd and hover rows
- Partition editing comfort (bug #12) - Partition editing comfort (bug #12)
- Allow full length in limited int - Allow full length in limited int
## phpMinAdmin 1.10.0 (2009-04-28) phpMinAdmin 1.10.0 (2009-04-28)
-------------------------------
- Partitioning (MySQL 5.1) - Partitioning (MySQL 5.1)
- CSV import - CSV import
- Plus and minus functions - Plus and minus functions
@@ -945,10 +1166,14 @@
- Size reduction by minification of variables and functions - Size reduction by minification of variables and functions
- Russian translation - Russian translation
## phpMinAdmin 1.9.1 (2008-10-27) phpMinAdmin 1.9.1 (2008-10-27)
------------------------------
- Update translations - Update translations
## phpMinAdmin 1.9.0 (2008-10-16) phpMinAdmin 1.9.0 (2008-10-16)
------------------------------
- List of tables and views with maintenance commands - List of tables and views with maintenance commands
- Clone rows - Clone rows
- Bulk edit and clone - Bulk edit and clone
@@ -964,7 +1189,9 @@
- Order by function result working also in older MySQL versions - Order by function result working also in older MySQL versions
- Tested on IIS - Tested on IIS
## phpMinAdmin 1.8.0 (2008-09-12) phpMinAdmin 1.8.0 (2008-09-12)
------------------------------
- Events (MySQL 5.1) - Events (MySQL 5.1)
- Access without login - accept ?username= - Access without login - accept ?username=
- Print SQL query in select, messages and warnings - Print SQL query in select, messages and warnings
@@ -973,7 +1200,9 @@
- Italian and Estonian translation - Italian and Estonian translation
- Order by COUNT(*) - Order by COUNT(*)
## phpMinAdmin 1.7.0 (2008-08-26) phpMinAdmin 1.7.0 (2008-08-26)
------------------------------
- Customizable export (select objects to export, SQL or CSV) - Customizable export (select objects to export, SQL or CSV)
- Ability to alter existing tables and drop old tables in export - Ability to alter existing tables and drop old tables in export
- Choose columns in select, aggregation - Choose columns in select, aggregation
@@ -987,10 +1216,14 @@
- Cache static files - Cache static files
- Faster checking of number of results - Faster checking of number of results
## phpMinAdmin 1.6.1 (2008-05-22) phpMinAdmin 1.6.1 (2008-05-22)
------------------------------
- Set session parameters only if not session.auto_start - Set session parameters only if not session.auto_start
## phpMinAdmin 1.6.0 (2008-05-16) phpMinAdmin 1.6.0 (2008-05-16)
------------------------------
- Order of columns in table - Order of columns in table
- Set max_allowed_packet in dump and use extended insert - Set max_allowed_packet in dump and use extended insert
- Spanish and German translations - Spanish and German translations
@@ -1002,7 +1235,9 @@
- Last-Modified header for files - Last-Modified header for files
- Several bug fixes - Several bug fixes
## phpMinAdmin 1.5.0 (2008-01-09) phpMinAdmin 1.5.0 (2008-01-09)
------------------------------
- Mass delete - Mass delete
- Vertical privileges - Vertical privileges
- Specify connection port by colon in server - Specify connection port by colon in server
@@ -1013,14 +1248,18 @@
- Uncheck NULL by change - Uncheck NULL by change
- Mark shortened fields in select - Mark shortened fields in select
## phpMinAdmin 1.4.0 (2007-08-15) phpMinAdmin 1.4.0 (2007-08-15)
------------------------------
- Privileges - Privileges
- New design - New design
- Dutch translation - Dutch translation
- Use NULL for auto_increment (bug #1) - Use NULL for auto_increment (bug #1)
- Fix dropping procedure parameters - Fix dropping procedure parameters
## phpMinAdmin 1.3.2 (2007-08-06) phpMinAdmin 1.3.2 (2007-08-06)
------------------------------
- Next field by JavaScript in foreign keys - Next field by JavaScript in foreign keys
- Set time zone in dump - Set time zone in dump
- Refresh lang cookie - Refresh lang cookie
@@ -1028,12 +1267,16 @@
- Move vertical lines in schema properly - Move vertical lines in schema properly
- Fix maximum page in select - Fix maximum page in select
## phpMinAdmin 1.3.1 (2007-07-31) phpMinAdmin 1.3.1 (2007-07-31)
------------------------------
- Move references lines in schema - Move references lines in schema
- Fix dump - Fix dump
- Fix update links - Fix update links
## phpMinAdmin 1.3.0 (2007-07-27) phpMinAdmin 1.3.0 (2007-07-27)
------------------------------
- Breadcrumb navigation - Breadcrumb navigation
- Operator IN - Operator IN
- Timestamp default values - Timestamp default values
@@ -1043,13 +1286,17 @@
- More friendly user interface - More friendly user interface
- Slovak translation - Slovak translation
## phpMinAdmin 1.2.0 (2007-07-25) phpMinAdmin 1.2.0 (2007-07-25)
------------------------------
- Manipulate triggers - Manipulate triggers
- PDO Abstraction - PDO Abstraction
- Auto_increment value - Auto_increment value
- JavaScript for adding rows - JavaScript for adding rows
## phpMinAdmin 1.1.0 (2007-07-19) phpMinAdmin 1.1.0 (2007-07-19)
------------------------------
- Routines manipulation - Routines manipulation
- Views manipulation - Views manipulation
- Foreign keys manipulation - Foreign keys manipulation
@@ -1060,5 +1307,7 @@
- JavaScript for next rows in table edit - JavaScript for next rows in table edit
- Cache databases list - Cache databases list
## phpMinAdmin 1.0.0 (2007-07-11) phpMinAdmin 1.0.0 (2007-07-11)
------------------------------
- First official release - First official release

View File

@@ -1,6 +1,7 @@
# Licenses Licenses
========
You may use Adminer under the terms of either the Apache License Version 2.0 You may use AdminerNeo under the terms of either the Apache License Version 2.0
or the GNU General Public License (GPL) version 2. or the GNU General Public License (GPL) version 2.
- [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) - [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)

View File

@@ -1,55 +1,70 @@
# Adminer AdminerNeo
==========
**Adminer** is a full-featured database management tool written in PHP. It consists of a single file ready to deploy to **AdminerNeo** is a full-featured database management tool written in PHP. It consists of a single file ready to deploy
the target server. As a companion, **Adminer Editor** offers data manipulation for end-users. to the target server. As a companion, **AdminerNeo Editor** offers data manipulation for end-users.
Supported database drivers: Supported database drivers:
- MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, MongoDB - MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, MongoDB
- With plugin: SimpleDB, Elasticsearch (beta), Firebird (alpha), ClickHouse (alpha) - With plugin: SimpleDB, Elasticsearch (beta), Firebird (alpha), ClickHouse (alpha)
## Requirements AdminerNeo is based on the [Adminer](https://www.adminer.org/) project by Jakub Vrána.
<img src="docs/images/screenshot.webp" width="830px" alt="Screenshot"/>
Requirements
------------
- PHP 5.6+ with enabled sessions. - PHP 5.6+ with enabled sessions.
## Migration from original Adminer Migration from Adminer
----------------------
No action is needed for now. But please, read 👉 **[What to expect](#what-to-expect)** section before you decide to - Remove plugin AdminerTablesFilter (plugins/tables-filter.php).
switch to this project. - If you use complex custom theme, you will probably need to adjust a thing or two.
## Usage More information can be found in [Upgrade Guide](docs/upgrade.md).
Download one for the latest [release files](https://github.com/pematon/adminer/releases), upload to the HTTP server Please, read also 👉 **[What to expect](#what-to-expect)** section before you decide to switch to this project.
Usage
-----
Download one for the latest [release files](https://github.com/adminerneo/adminerneo/releases), upload to the HTTP server
with PHP and enjoy 😉 If you are not satisfied with any combination of the database driver and language, you can with PHP and enjoy 😉 If you are not satisfied with any combination of the database driver and language, you can
download the source code and compile your own Adminer: download the source code and compile your own AdminerNeo:
- Download the source code. - Download the source code.
- Run `composer install` to install dependencies. - Run `composer install` to install dependencies.
- Run compile.php: - Run compile.php:
```shell ```shell
# Adminer # AdminerNeo
php compile.php <driver> <language> php compile.php <drivers> <languages>
# Editor # AdminerNeo Editor
php compile.php editor <driver> <language> php compile.php editor <drivers> <languages>
``` ```
For example: For example:
```shell ```shell
php compile.php pgsql cs php compile.php pgsql cs
php compile.php mysql,pgsql en,de,cs,sk
``` ```
[Available drivers](https://github.com/pematon/adminer/tree/master/adminer/drivers), [Available drivers](https://github.com/adminerneo/adminerneo/tree/main/adminer/drivers),
[languages](https://github.com/pematon/adminer/tree/master/adminer/lang). [languages](https://github.com/adminerneo/adminerneo/tree/main/adminer/lang).
## Security Security
--------
Adminer does not allow connecting to databases without a password and it rate-limits the connection attempts to protect AdminerNeo does not allow connecting to databases without a password and it rate-limits the connection attempts to protect
against brute-force attacks. Still, it is highly recommended to 🔒 **restrict access to Adminer** 🔒 by whitelisting IP against brute-force attacks. Still, it is highly recommended to 🔒 **restrict access to AdminerNeo** 🔒 by whitelisting IP
addresses allowed to connect to it, by password-protecting the access in your web server or by enabling security plugins addresses allowed to connect to it, by password-protecting the access in your web server or by enabling security plugins
(e.g. to require an OTP). (e.g. to require an OTP).
## Plugins Plugins
-------
* Download plugins you want and place them into the `plugins` folder. * Download plugins you want and place them into the `plugins` folder.
* Create `index.php` file specifying which plugins do you want to use. * Create `index.php` file specifying which plugins do you want to use.
@@ -103,41 +118,47 @@ function adminer_object() {
include "./adminer.php"; include "./adminer.php";
``` ```
[Available plugins](https://github.com/pematon/adminer/tree/master/plugins). [Available plugins](https://github.com/adminerneo/adminerneo/tree/main/plugins).
## Main project files Main project files
- adminer/index.php - Run development version of Adminer. ------------------
- editor/index.php - Run development version of Adminer Editor.
- adminer/index.php - Run development version of AdminerNeo.
- editor/index.php - Run development version of AdminerNeo Editor.
- editor/example.php - Example customization. - editor/example.php - Example customization.
- plugins/readme.txt - Plugins for Adminer and Adminer Editor. - plugins/readme.txt - Plugins for AdminerNeo and AdminerNeo Editor.
- adminer/plugin.php - Plugin demo. - adminer/plugin.php - Plugin demo.
- adminer/sqlite.php - Development version of Adminer with SQLite allowed. - adminer/sqlite.php - Development version of AdminerNeo with SQLite allowed.
- editor/sqlite.php - Development version of Editor with SQLite allowed. - editor/sqlite.php - Development version of Editor with SQLite allowed.
- adminer/designs.php - Development version of Adminer with adminer.css switcher. - adminer/designs.php - Development version of AdminerNeo with adminer.css switcher.
- compile.php - Create a single file version. - compile.php - Create a single file version.
- lang.php - Update translations. - lang.php - Update translations.
- tests/katalon.html - Katalon Automation Recorder test suite. - tests/katalon.html - Katalon Automation Recorder test suite.
## Project history Project history
---------------
Adminer was originally developed by Jakub Vrana, and it can be still found on [official pages](https://www.adminer.org/). Adminer was originally developed by Jakub Vrána, and it can be still found on [official pages](https://www.adminer.org/).
Unfortunately, it is not maintained for several years. In the meantime, I (@peterpp) created for my company a set of Unfortunately, it is not maintained for several years. In the meantime, I (@peterpp) created for my company a set of
custom plugins, modern theme, fixed some bugs and practically rewrote the Elasticsearch driver. I also looked closely custom plugins, modern theme, fixed some bugs and practically rewrote the Elasticsearch driver. I also looked closely
and contributed to the [AdminerEvo](https://www.adminerevo.org/) project that looked promising. However, I finally and contributed to the [AdminerEvo](https://www.adminerevo.org/) project that looked promising. However, I finally
decided to continue working on this fork and fulfill my own vision. decided to continue working on this fork and fulfill my own vision.
## What to expect What to expect
--------------
Our top priority is fixing the security issues and reported bugs. But we really want to move forward and transform Our top priority is fixing the security issues and reported bugs. But we really want to move forward and transform
Adminer to a tool that will keep its simplicity, yet looks much better, is even easier to use and can be configured AdminerNeo to a tool that will keep its simplicity, yet looks much better, is even easier to use and can be configured
without requirement of additional plugins. without requirement of additional plugins.
### Version 4.x ### Version 4.x
Original design and backward compatibility is kept. Many issues were fixed, and we introduced several functional and Original design and backward compatibility is kept. Many issues were fixed, and we introduced several functional and
UI improvements. UI improvements.
### Version 5 ### Version 5
Bridges will be burned 🔥🔥🔥. It's in development already, so you [can check](https://github.com/pematon/adminer/tree/version-5)
Bridges will be burned 🔥🔥🔥. It's in development already, so you [can check](https://github.com/adminerneo/adminerneo/tree/version-5)
what's going on. Or you can become the early adopter and help us with testing 😉 what's going on. Or you can become the early adopter and help us with testing 😉
Our goals are: Our goals are:
@@ -148,6 +169,3 @@ support dark mode, configurable color variants for production/devel environment.
- **Plugins** - Integrate several basic plugins, enable them by optional configuration. - **Plugins** - Integrate several basic plugins, enable them by optional configuration.
- **Codebase** - Prefer code readability before minimalism, use PER coding style, add namespaces. - **Codebase** - Prefer code readability before minimalism, use PER coding style, add namespaces.
- **Compilation** - Allow to export selected drivers, themes, languages and plugins into a single adminer.php file. - **Compilation** - Allow to export selected drivers, themes, languages and plugins into a single adminer.php file.
We are also thinking to change the project's name, so people will clearly distinguish between original Adminer and
other forks. Any suggestions are welcome.

View File

@@ -1,11 +1,13 @@
# Reporting security issues Reporting security issues
=========================
To report a security issue, please [open a draft security advisory](https://github.com/pematon/adminer/security/advisories). To report a security issue, please [open a draft security advisory](https://github.com/adminerneo/adminerneo/security/advisories).
Security issues are handled with top priority. Once acknowledged, a fix should be available and new version released Security issues are handled with top priority. Once acknowledged, a fix should be available and new version released
as soon as possible. Security advisories will be made public after a fix and new version have been released, as soon as possible. Security advisories will be made public after a fix and new version have been released,
or the advisory has been declined. or the advisory has been declined.
## Supported versions Supported versions
------------------
Only the last published version and the last development version (last commit) are supported. Only the last published version and the last development version (last commit) are supported.

View File

@@ -1,5 +1,6 @@
<?php <?php
$PROCEDURE = ($_GET["name"] ? $_GET["name"] : $_GET["call"]);
$PROCEDURE = ($_GET["name"] ?: $_GET["call"]);
page_header(lang('Call') . ": " . h($PROCEDURE), $error); page_header(lang('Call') . ": " . h($PROCEDURE), $error);
$routine = routine($_GET["call"], (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDURE")); $routine = routine($_GET["call"], (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDURE"));
@@ -28,13 +29,13 @@ if (!$error && $_POST) {
} }
$call[] = (isset($out[$key]) ? "@" . idf_escape($field["field"]) : $val); $call[] = (isset($out[$key]) ? "@" . idf_escape($field["field"]) : $val);
} }
$query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . table($PROCEDURE) . "(" . implode(", ", $call) . ")"; $query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . table($PROCEDURE) . "(" . implode(", ", $call) . ")";
$start = microtime(true); $start = microtime(true);
$result = $connection->multi_query($query); $result = $connection->multi_query($query);
$affected = $connection->affected_rows; // getting warnigns overwrites this $affected = $connection->affected_rows; // getting warnings overwrites this
echo $adminer->selectQuery($query, $start, !$result); echo $adminer->selectQuery($query, $start, !$result);
if (!$result) { if (!$result) {
echo "<p class='error'>" . error() . "\n"; echo "<p class='error'>" . error() . "\n";
} else { } else {
@@ -42,7 +43,7 @@ if (!$error && $_POST) {
if (is_object($connection2)) { if (is_object($connection2)) {
$connection2->select_db(DB); $connection2->select_db(DB);
} }
do { do {
$result = $connection->store_result(); $result = $connection->store_result();
if (is_object($result)) { if (is_object($result)) {
@@ -53,16 +54,15 @@ if (!$error && $_POST) {
; ;
} }
} while ($connection->next_result()); } while ($connection->next_result());
if ($out) { if ($out) {
select($connection->query("SELECT " . implode(", ", $out))); select($connection->query("SELECT " . implode(", ", $out)));
} }
} }
} }
?>
<form action="" method="post"> echo "<form action='' method='post'>\n";
<?php
if ($in) { if ($in) {
echo "<table cellspacing='0' class='layout'>\n"; echo "<table cellspacing='0' class='layout'>\n";
foreach ($in as $key) { foreach ($in as $key) {
@@ -83,8 +83,28 @@ if ($in) {
} }
echo "</table>\n"; echo "</table>\n";
} }
?>
<p> echo "<p>",
<input type="submit" value="<?php echo lang('Call'); ?>"> "<input type='submit' value='", lang('Call'), "'>",
<input type="hidden" name="token" value="<?php echo $token; ?>"> "<input type='hidden' name='token' value='$token'>",
</form> "</p>\n",
"</form>\n";
$comment = $routine["comment"];
if ($comment !== null && $comment !== "") {
$comment = h(trim($routine["comment"], "\n"));
// Remove indenting of all lines (used in MySQL routines in 'sys' database).
if (preg_match('~^ +~', $comment, $matches)) {
preg_match_all("~^($matches[0]|$)~m", $comment, $linesWithIndent);
if (count($linesWithIndent[0]) == substr_count($comment, "\n")) {
$comment = preg_replace("~^($matches[0])~m", "", $comment);
}
}
// Format common headlines (used in MySQL routines in 'sys' database).
$comment = preg_replace('~(^|[^\n]\n)(Description|Parameters|Example)\n~', "$1\n<strong>$2</strong>\n", $comment);
echo "<pre class='comment'>$comment</pre>\n";
}

View File

@@ -182,25 +182,43 @@ if ($adminer->homepage()) {
if (support("routine")) { if (support("routine")) {
echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n"; echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n";
$routines = routines(); $routines = routines();
if ($routines) { if ($routines) {
$commentsSupported = $routines[0]["ROUTINE_COMMENT"] !== null;
echo "<table>\n"; echo "<table>\n";
echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td></thead>\n"; echo '<thead><tr>',
'<th>', lang('Name'), '</th><td>', lang('Type'), '</td><td>', lang('Return type'), "</td>";
if ($commentsSupported) {
echo "<td>", lang('Comment'), "</td>";
}
echo "<td></td>",
"</tr></thead>\n";
odd(''); odd('');
foreach ($routines as $row) { foreach ($routines as $row) {
$name = ($row["SPECIFIC_NAME"] == $row["ROUTINE_NAME"] ? "" : "&name=" . urlencode($row["ROUTINE_NAME"])); // not computed on the pages to be able to print the header first // not computed on the pages to be able to print the header first
echo '<tr' . odd() . '>'; $name = ($row["SPECIFIC_NAME"] == $row["ROUTINE_NAME"] ? "" : "&name=" . urlencode($row["ROUTINE_NAME"]));
echo '<th><a href="' . h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'callf=' : 'call=') . urlencode($row["SPECIFIC_NAME"]) . $name) . '">' . h($row["ROUTINE_NAME"]) . '</a>';
echo '<td>' . h($row["ROUTINE_TYPE"]); echo '<tr', odd(), '>',
echo '<td>' . h($row["DTD_IDENTIFIER"]); '<th><a href="', h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'callf=' : 'call=') . urlencode($row["SPECIFIC_NAME"]) . $name), '">', h($row["ROUTINE_NAME"]), '</a></th>',
echo '<td><a href="' . h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'function=' : 'procedure=') . urlencode($row["SPECIFIC_NAME"]) . $name) . '">' . lang('Alter') . "</a>"; '<td>', h($row["ROUTINE_TYPE"]), '</td>',
'<td>', h($row["DTD_IDENTIFIER"]), '</td>';
if ($commentsSupported) {
echo '<td>', shorten_utf8(preg_replace('~\s{2,}~', " ", trim($row["ROUTINE_COMMENT"])), 50), '</td>';
}
echo '<td><a href="' . h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'function=' : 'procedure=') . urlencode($row["SPECIFIC_NAME"]) . $name) . '">' . lang('Alter') . "</a></td>";
} }
echo "</table>\n"; echo "</table>\n";
} }
echo '<p class="links">'
. (support("procedure") ? '<a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a>' : '') echo '<p class="links">',
. '<a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n" (support("procedure") ? '<a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a>' : ''),
; '<a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n";
} }
if (support("sequence")) { if (support("sequence")) {

View File

@@ -205,9 +205,6 @@ if (isset($_GET["mongo"])) {
return $connection->_db->selectCollection($_GET["select"])->count($where); return $connection->_db->selectCollection($_GET["select"])->count($where);
} }
$operators = array("=");
$operator_regexp = null;
} elseif (class_exists('MongoDB\Driver\Manager')) { } elseif (class_exists('MongoDB\Driver\Manager')) {
class Min_DB { class Min_DB {
var $extension = "MongoDB", $server_info = MONGODB_VERSION, $affected_rows, $error, $last_id; var $extension = "MongoDB", $server_info = MONGODB_VERSION, $affected_rows, $error, $last_id;
@@ -216,15 +213,14 @@ if (isset($_GET["mongo"])) {
var $_db, $_db_name; var $_db, $_db_name;
function connect($uri, $options) { function connect($uri, $options) {
$class = 'MongoDB\Driver\Manager';
$this->_link = new $class($uri, $options); $this->_link = new MongoDB\Driver\Manager($uri, $options);
$this->executeCommand('admin', array('ping' => 1)); $this->executeCommand('admin', array('ping' => 1));
} }
function executeCommand($db, $command) { function executeCommand($db, $command) {
$class = 'MongoDB\Driver\Command';
try { try {
return $this->_link->executeCommand($db, new $class($command)); return $this->_link->executeCommand($db, new MongoDB\Driver\Command($command));
} catch (Exception $e) { } catch (Exception $e) {
$this->error = $e->getMessage(); $this->error = $e->getMessage();
return array(); return array();
@@ -341,9 +337,8 @@ if (isset($_GET["mongo"])) {
} }
$limit = min(200, max(1, (int) $limit)); $limit = min(200, max(1, (int) $limit));
$skip = $page * $limit; $skip = $page * $limit;
$class = 'MongoDB\Driver\Query';
try { try {
return new Min_Result($connection->_link->executeQuery("$connection->_db_name.$table", new $class($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort)))); return new Min_Result($connection->_link->executeQuery("$connection->_db_name.$table", new MongoDB\Driver\Query($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort))));
} catch (Exception $e) { } catch (Exception $e) {
$connection->error = $e->getMessage(); $connection->error = $e->getMessage();
return false; return false;
@@ -354,8 +349,7 @@ if (isset($_GET["mongo"])) {
global $connection; global $connection;
$db = $connection->_db_name; $db = $connection->_db_name;
$where = sql_query_where_parser($queryWhere); $where = sql_query_where_parser($queryWhere);
$class = 'MongoDB\Driver\BulkWrite'; $bulk = new MongoDB\Driver\BulkWrite(array());
$bulk = new $class(array());
if (isset($set['_id'])) { if (isset($set['_id'])) {
unset($set['_id']); unset($set['_id']);
} }
@@ -378,8 +372,7 @@ if (isset($_GET["mongo"])) {
global $connection; global $connection;
$db = $connection->_db_name; $db = $connection->_db_name;
$where = sql_query_where_parser($queryWhere); $where = sql_query_where_parser($queryWhere);
$class = 'MongoDB\Driver\BulkWrite'; $bulk = new MongoDB\Driver\BulkWrite(array());
$bulk = new $class(array());
$bulk->delete($where, array('limit' => $limit)); $bulk->delete($where, array('limit' => $limit));
return $connection->executeBulkWrite("$db.$table", $bulk, 'getDeletedCount'); return $connection->executeBulkWrite("$db.$table", $bulk, 'getDeletedCount');
} }
@@ -387,8 +380,7 @@ if (isset($_GET["mongo"])) {
function insert($table, $set) { function insert($table, $set) {
global $connection; global $connection;
$db = $connection->_db_name; $db = $connection->_db_name;
$class = 'MongoDB\Driver\BulkWrite'; $bulk = new MongoDB\Driver\BulkWrite(array());
$bulk = new $class(array());
if ($set['_id'] == '') { if ($set['_id'] == '') {
unset($set['_id']); unset($set['_id']);
} }
@@ -483,7 +475,11 @@ if (isset($_GET["mongo"])) {
} }
function sql_query_where_parser($queryWhere) { function sql_query_where_parser($queryWhere) {
$queryWhere = preg_replace('~^\sWHERE \(?\(?(.+?)\)?\)?$~', '\1', $queryWhere); $queryWhere = preg_replace('~^\s*WHERE\s*~', "", $queryWhere);
while ($queryWhere[0] == "(") {
$queryWhere = preg_replace('~^\((.*)\)$~', "$1", $queryWhere);
}
$wheres = explode(' AND ', $queryWhere); $wheres = explode(' AND ', $queryWhere);
$wheresOr = explode(') OR (', $queryWhere); $wheresOr = explode(') OR (', $queryWhere);
$where = array(); $where = array();
@@ -517,8 +513,7 @@ if (isset($_GET["mongo"])) {
$op = $match[1]; $op = $match[1];
} elseif (preg_match('~^\(date\)(.+)~', $op, $match)) { } elseif (preg_match('~^\(date\)(.+)~', $op, $match)) {
$dateTime = new DateTime($val); $dateTime = new DateTime($val);
$class = 'MongoDB\BSON\UTCDatetime'; $val = new MongoDB\BSON\UTCDatetime($dateTime->getTimestamp() * 1000);
$val = new $class($dateTime->getTimestamp() * 1000);
$op = $match[1]; $op = $match[1];
} }
switch ($op) { switch ($op) {
@@ -556,30 +551,6 @@ if (isset($_GET["mongo"])) {
} }
return $data; return $data;
} }
$operators = array(
"=",
"!=",
">",
"<",
">=",
"<=",
"regex",
"(f)=",
"(f)!=",
"(f)>",
"(f)<",
"(f)>=",
"(f)<=",
"(date)=",
"(date)!=",
"(date)>",
"(date)<",
"(date)>=",
"(date)<=",
);
$operator_regexp = 'regex';
} }
function table($idf) { function table($idf) {
@@ -629,6 +600,11 @@ if (isset($_GET["mongo"])) {
global $adminer; global $adminer;
$connection = new Min_DB; $connection = new Min_DB;
list($server, $username, $password) = $adminer->credentials(); list($server, $username, $password) = $adminer->credentials();
if ($server == "") {
$server = "localhost:27017";
}
$options = array(); $options = array();
if ($username . $password != "") { if ($username . $password != "") {
$options["username"] = $username; $options["username"] = $username;
@@ -736,7 +712,38 @@ if (isset($_GET["mongo"])) {
} }
function driver_config() { function driver_config() {
global $operators, $operator_regexp; if (class_exists('MongoDB')) {
$operators = ["="];
$operator_regexp = null;
} elseif (class_exists('MongoDB\Driver\Manager')) {
$operators = [
"=",
"!=",
">",
"<",
">=",
"<=",
"regex",
"(f)=",
"(f)!=",
"(f)>",
"(f)<",
"(f)>=",
"(f)<=",
"(date)=",
"(date)!=",
"(date)>",
"(date)<",
"(date)>=",
"(date)<=",
];
$operator_regexp = 'regex';
} else {
$operators = ["="];
$operator_regexp = null;
}
return array( return array(
'possible_drivers' => array("mongo", "mongodb"), 'possible_drivers' => array("mongo", "mongodb"),
'jush' => "mongo", 'jush' => "mongo",

View File

@@ -24,11 +24,26 @@ if (isset($_GET["mssql"])) {
function connect($server, $username, $password) { function connect($server, $username, $password) {
global $adminer; global $adminer;
$connection_info = [
"UID" => $username,
"PWD" => $password,
"CharacterSet" => "UTF-8",
];
$ssl = $adminer->connectSsl();
if (isset($ssl["Encrypt"])) {
$connection_info["Encrypt"] = $ssl["Encrypt"];
}
if (isset($ssl["TrustServerCertificate"])) {
$connection_info["TrustServerCertificate"] = $ssl["TrustServerCertificate"];
}
$db = $adminer->database(); $db = $adminer->database();
$connection_info = array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8");
if ($db != "") { if ($db != "") {
$connection_info["Database"] = $db; $connection_info["Database"] = $db;
} }
$this->_link = @sqlsrv_connect(preg_replace('~:~', ',', $server), $connection_info); $this->_link = @sqlsrv_connect(preg_replace('~:~', ',', $server), $connection_info);
if ($this->_link) { if ($this->_link) {
$info = sqlsrv_server_info($this->_link); $info = sqlsrv_server_info($this->_link);
@@ -36,6 +51,7 @@ if (isset($_GET["mssql"])) {
} else { } else {
$this->_get_error(); $this->_get_error();
} }
return (bool) $this->_link; return (bool) $this->_link;
} }
@@ -303,6 +319,11 @@ if (isset($_GET["mssql"])) {
global $adminer; global $adminer;
$connection = new Min_DB; $connection = new Min_DB;
$credentials = $adminer->credentials(); $credentials = $adminer->credentials();
if ($credentials[0] == "") {
$credentials[0] = "localhost:1433";
}
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) { if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
return $connection; return $connection;
} }

View File

@@ -1,8 +1,8 @@
<?php <?php
$drivers = array("server" => "MySQL") + $drivers; $drivers["mysql"] = "MySQL";
if (!defined("DRIVER")) { if (isset($_GET["mysql"])) {
define("DRIVER", "server"); // server - backwards compatibility define("DRIVER", "mysql");
// MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable // MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable
if (extension_loaded("mysqli")) { if (extension_loaded("mysqli")) {
class Min_DB extends MySQLi { class Min_DB extends MySQLi {
@@ -371,16 +371,28 @@ if (!defined("DRIVER")) {
* @return mixed Min_DB or string for error * @return mixed Min_DB or string for error
*/ */
function connect() { function connect() {
global $adminer, $types, $structured_types; global $adminer, $types, $structured_types, $edit_functions;
$connection = new Min_DB; $connection = new Min_DB;
$credentials = $adminer->credentials(); $credentials = $adminer->credentials();
if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) { if ($connection->connect($credentials[0], $credentials[1], $credentials[2])) {
$connection->set_charset(charset($connection)); $connection->set_charset(charset($connection));
$connection->query("SET sql_quote_show_create = 1, autocommit = 1"); $connection->query("SET sql_quote_show_create = 1, autocommit = 1");
if (min_version('5.7.8', 10.2, $connection)) {
if (min_version('5.7.8', '10.2', $connection)) {
$structured_types[lang('Strings')][] = "json"; $structured_types[lang('Strings')][] = "json";
$types["json"] = 4294967295; $types["json"] = 4294967295;
} }
// UUID data type for Mariadb >= 10.7
if (min_version('', '10.7', $connection)) {
$structured_types[lang('Strings')][] = "uuid";
$types["uuid"] = 128;
// insert/update function
$edit_functions[0]['uuid'] = 'uuid';
}
return $connection; return $connection;
} }
$return = $connection->error; $return = $connection->error;
@@ -630,8 +642,17 @@ if (!defined("DRIVER")) {
* @return array * @return array
*/ */
function collations() { function collations() {
global $connection;
$return = array(); $return = array();
foreach (get_rows("SHOW COLLATION") as $row) {
// Since MariaDB 10.10, one collation can be compatible with more character sets, so collations no longer have unique IDs.
// All combinations can be selected from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY table.
$query = min_version('', '10.10', $connection) ?
"SELECT CHARACTER_SET_NAME AS Charset, FULL_COLLATION_NAME AS Collation, IS_DEFAULT AS `Default` FROM information_schema.COLLATION_CHARACTER_SET_APPLICABILITY" :
"SHOW COLLATION";
foreach (get_rows($query) as $row) {
if ($row["Default"]) { if ($row["Default"]) {
$return[$row["Charset"]][-1] = $row["Collation"]; $return[$row["Charset"]][-1] = $row["Collation"];
} else { } else {
@@ -639,9 +660,11 @@ if (!defined("DRIVER")) {
} }
} }
ksort($return); ksort($return);
foreach ($return as $key => $val) { foreach ($return as $key => $val) {
asort($return[$key]); asort($return[$key]);
} }
return $return; return $return;
} }
@@ -901,23 +924,30 @@ if (!defined("DRIVER")) {
); );
} }
/** Get information about stored routine /**
* @param string * Gets information about stored routine.
* @param string "FUNCTION" or "PROCEDURE" *
* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => , "language" => ) * @param string $name
*/ * @param string $type "FUNCTION" or "PROCEDURE"
*
* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => , "language" => )
*/
function routine($name, $type) { function routine($name, $type) {
global $connection, $enum_length, $inout, $types; global $connection, $enum_length, $inout, $types;
$aliases = array("bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar");
$info = get_rows("SELECT ROUTINE_BODY, ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB) . " AND ROUTINE_NAME = " . q($name))[0];
$aliases = ["bool", "boolean", "integer", "double precision", "real", "dec", "numeric", "fixed", "national char", "national varchar"];
$space = "(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)"; $space = "(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";
$type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]|$enum_length)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?"; $type_pattern = "((" . implode("|", array_merge(array_keys($types), $aliases)) . ")\\b(?:\\s*\\(((?:[^'\")]|$enum_length)++)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?)(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s,]+)['\"]?)?";
$pattern = "$space*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern"; $pattern = "$space*(" . ($type == "FUNCTION" ? "" : $inout) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern";
$create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2); $create = $connection->result("SHOW CREATE $type " . idf_escape($name), 2);
preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match); preg_match("~\\(((?:$pattern\\s*,?)*)\\)\\s*" . ($type == "FUNCTION" ? "RETURNS\\s+$type_pattern\\s+" : "") . "(.*)~is", $create, $match);
$fields = array(); $fields = [];
preg_match_all("~$pattern\\s*,?~is", $match[1], $matches, PREG_SET_ORDER); preg_match_all("~$pattern\\s*,?~is", $match[1], $matches, PREG_SET_ORDER);
foreach ($matches as $param) { foreach ($matches as $param) {
$fields[] = array( $fields[] = [
"field" => str_replace("``", "`", $param[2]) . $param[3], "field" => str_replace("``", "`", $param[2]) . $param[3],
"type" => strtolower($param[5]), "type" => strtolower($param[5]),
"length" => preg_replace_callback("~$enum_length~s", 'normalize_enum', $param[6]), "length" => preg_replace_callback("~$enum_length~s", 'normalize_enum', $param[6]),
@@ -926,24 +956,29 @@ if (!defined("DRIVER")) {
"full_type" => $param[4], "full_type" => $param[4],
"inout" => strtoupper($param[1]), "inout" => strtoupper($param[1]),
"collation" => strtolower($param[9]), "collation" => strtolower($param[9]),
); ];
} }
if ($type != "FUNCTION") {
return array("fields" => $fields, "definition" => $match[11]); return $type == "FUNCTION" ? [
}
return array(
"fields" => $fields, "fields" => $fields,
"returns" => array("type" => $match[12], "length" => $match[13], "unsigned" => $match[15], "collation" => $match[16]), "returns" => ["type" => $match[12], "length" => $match[13], "unsigned" => $match[15], "collation" => $match[16]],
"definition" => $match[17], "definition" => $match[17],
"language" => "SQL", // available in information_schema.ROUTINES.PARAMETER_STYLE "language" => $info["ROUTINE_BODY"],
); "comment" => $info["ROUTINE_COMMENT"],
] : [
"fields" => $fields,
"returns" => null,
"definition" => $match[11],
"language" => $info["ROUTINE_BODY"],
"comment" => $info["ROUTINE_COMMENT"],
];
} }
/** Get list of routines /** Get list of routines
* @return array ("SPECIFIC_NAME" => , "ROUTINE_NAME" => , "ROUTINE_TYPE" => , "DTD_IDENTIFIER" => ) * @return array ("SPECIFIC_NAME" => , "ROUTINE_NAME" => , "ROUTINE_TYPE" => , "DTD_IDENTIFIER" => )
*/ */
function routines() { function routines() {
return get_rows("SELECT ROUTINE_NAME AS SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB)); return get_rows("SELECT ROUTINE_NAME AS SPECIFIC_NAME, ROUTINE_NAME, ROUTINE_TYPE, DTD_IDENTIFIER, ROUTINE_COMMENT FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = " . q(DB));
} }
/** Get list of available routine languages /** Get list of available routine languages

View File

@@ -71,6 +71,11 @@ if (isset($_GET["pgsql"])) {
} }
function query($query, $unbuffered = false) { function query($query, $unbuffered = false) {
if (!$this->_link) {
$this->error = "Invalid connection";
return false;
}
$result = @pg_query($this->_link, $query); $result = @pg_query($this->_link, $query);
$this->error = ""; $this->error = "";
if (!$result) { if (!$result) {
@@ -497,12 +502,17 @@ ORDER BY connamespace, conname") as $row) {
function drop_databases($databases) { function drop_databases($databases) {
global $connection; global $connection;
$connection->close(); $connection->close();
return apply_queries("DROP DATABASE", $databases, 'idf_escape'); return apply_queries("DROP DATABASE", $databases, 'idf_escape');
} }
function rename_database($name, $collation) { function rename_database($name, $collation) {
//! current database cannot be renamed global $connection;
$connection->close();
return queries("ALTER DATABASE " . idf_escape(DB) . " RENAME TO " . idf_escape($name)); return queries("ALTER DATABASE " . idf_escape(DB) . " RENAME TO " . idf_escape($name));
} }
@@ -668,23 +678,29 @@ ORDER BY connamespace, conname") as $row) {
} }
function routine($name, $type) { function routine($name, $type) {
$rows = get_rows('SELECT routine_definition AS definition, LOWER(external_language) AS language, * $info = get_rows('SELECT routine_definition, external_language, type_udt_name
FROM information_schema.routines FROM information_schema.routines
WHERE routine_schema = current_schema() AND specific_name = ' . q($name)); WHERE routine_schema = current_schema() AND specific_name = ' . q($name))[0];
$return = $rows[0];
$return["returns"] = array("type" => $return["type_udt_name"]); $fields = get_rows('SELECT parameter_name AS field, data_type AS type, character_maximum_length AS length, parameter_mode AS inout
$return["fields"] = get_rows('SELECT parameter_name AS field, data_type AS type, character_maximum_length AS length, parameter_mode AS inout FROM information_schema.parameters
FROM information_schema.parameters WHERE specific_schema = current_schema() AND specific_name = ' . q($name) . '
WHERE specific_schema = current_schema() AND specific_name = ' . q($name) . ' ORDER BY ordinal_position');
ORDER BY ordinal_position');
return $return; return [
"fields" => $fields,
"returns" => ["type" => $info["type_udt_name"]],
"definition" => $info["routine_definition"],
"language" => strtolower($info["external_language"]),
"comment" => null, // Comments are not supported.
];
} }
function routines() { function routines() {
return get_rows('SELECT specific_name AS "SPECIFIC_NAME", routine_type AS "ROUTINE_TYPE", routine_name AS "ROUTINE_NAME", type_udt_name AS "DTD_IDENTIFIER" return get_rows('SELECT specific_name AS "SPECIFIC_NAME", routine_name AS "ROUTINE_NAME", routine_type AS "ROUTINE_TYPE", type_udt_name AS "DTD_IDENTIFIER", null AS ROUTINE_COMMENT
FROM information_schema.routines FROM information_schema.routines
WHERE routine_schema = current_schema() WHERE routine_schema = current_schema()
ORDER BY SPECIFIC_NAME'); ORDER BY SPECIFIC_NAME');
} }
function routine_languages() { function routine_languages() {
@@ -770,8 +786,6 @@ AND typelem = 0"
} }
function create_sql($table, $auto_increment, $style) { function create_sql($table, $auto_increment, $style) {
global $connection;
$return = '';
$return_parts = array(); $return_parts = array();
$sequences = array(); $sequences = array();
@@ -806,8 +820,11 @@ AND typelem = 0"
: "SELECT * FROM $sequence_name" : "SELECT * FROM $sequence_name"
); );
$sq = reset($rows); $sq = reset($rows);
$sequences[] = ($style == "DROP+CREATE" ? "DROP SEQUENCE IF EXISTS $sequence_name;\n" : "")
. "CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value]" . ($auto_increment && $sq['last_value'] ? " START $sq[last_value]" : "") . " CACHE $sq[cache_value];"; $sequences[] = ($style == "DROP+CREATE" ? "DROP SEQUENCE IF EXISTS $sequence_name;\n" : "") .
"CREATE SEQUENCE $sequence_name INCREMENT $sq[increment_by] MINVALUE $sq[min_value] MAXVALUE $sq[max_value]" .
($auto_increment && $sq['last_value'] ? " START " . ($sq["last_value"] + 1) : "") .
" CACHE $sq[cache_value];";
} }
} }
@@ -841,7 +858,7 @@ AND typelem = 0"
} }
} }
// coments for table & fields // comments for table & fields
if ($status['Comment']) { if ($status['Comment']) {
$return .= "\n\nCOMMENT ON TABLE " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " IS " . q($status['Comment']) . ";"; $return .= "\n\nCOMMENT ON TABLE " . idf_escape($status['nspname']) . "." . idf_escape($status['Name']) . " IS " . q($status['Comment']) . ";";
} }

View File

@@ -47,7 +47,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
return false; return false;
} }
$row = $result->_result->fetchArray(); $row = $result->_result->fetchArray();
return $row[$field]; return $row ? $row[$field] : false;
} }
} }
@@ -483,6 +483,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) { function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
global $connection; global $connection;
$use_all_fields = ($table == "" || $foreign); $use_all_fields = ($table == "" || $foreign);
foreach ($fields as $field) { foreach ($fields as $field) {
if ($field[0] != "" || !$field[1] || $field[2]) { if ($field[0] != "" || !$field[1] || $field[2]) {
@@ -490,84 +491,105 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
break; break;
} }
} }
$alter = array();
$originals = array(); $alter_fields = [];
$originals = [];
foreach ($fields as $field) { foreach ($fields as $field) {
if ($field[1]) { if (!$field[1]) continue;
$alter[] = ($use_all_fields ? $field[1] : "ADD " . implode($field[1]));
if ($field[0] != "") { if ($field[0] != "") {
$originals[$field[0]] = $field[1][0]; $originals[$field[0]] = $field[1][0];
}
} }
$alter_fields[] = ($use_all_fields ? $field[1] : "ADD " . implode($field[1]));
} }
if (!$use_all_fields) { if (!$use_all_fields) {
foreach ($alter as $val) { foreach ($alter_fields as $val) {
if (!queries("ALTER TABLE " . table($table) . " $val")) { if (!queries("ALTER TABLE " . table($table) . " $val")) {
return false; return false;
} }
} }
if ($table != $name && !queries("ALTER TABLE " . table($table) . " RENAME TO " . table($name))) { if ($table != $name && !queries("ALTER TABLE " . table($table) . " RENAME TO " . table($name))) {
return false; return false;
} }
} elseif (!recreate_table($table, $name, $alter, $originals, $foreign, $auto_increment)) { } elseif (!recreate_table($table, $name, $alter_fields, $originals, $foreign, $auto_increment)) {
return false; return false;
} }
if ($auto_increment) { if ($auto_increment) {
queries("BEGIN"); queries("BEGIN");
queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error
if (!$connection->affected_rows) { if (!$connection->affected_rows) {
queries("INSERT INTO sqlite_sequence (name, seq) VALUES (" . q($name) . ", $auto_increment)"); queries("INSERT INTO sqlite_sequence (name, seq) VALUES (" . q($name) . ", $auto_increment)");
} }
queries("COMMIT"); queries("COMMIT");
} }
return true; return true;
} }
function recreate_table($table, $name, $fields, $originals, $foreign, $auto_increment, $indexes = array()) { function recreate_table($table, $name, $fields, $originals, $foreign, $auto_increment, $indexes = []) {
global $connection; global $connection;
if ($table != "") { if ($table != "") {
if (!$fields) { if (!$fields) {
foreach (fields($table) as $key => $field) { foreach (fields($table) as $key => $field) {
if ($indexes) { if ($indexes) {
$field["auto_increment"] = 0; $field["auto_increment"] = 0;
} }
$fields[] = process_field($field, $field); $fields[] = process_field($field, $field);
$originals[$key] = idf_escape($key); $originals[$key] = idf_escape($key);
} }
} }
$primary_key = false; $primary_key = false;
foreach ($fields as $field) { foreach ($fields as $field) {
if ($field[6]) { if ($field[6]) {
$primary_key = true; $primary_key = true;
} }
} }
$drop_indexes = array();
$drop_indexes = [];
foreach ($indexes as $key => $val) { foreach ($indexes as $key => $val) {
if ($val[2] == "DROP") { if ($val[2] == "DROP") {
$drop_indexes[$val[1]] = true; $drop_indexes[$val[1]] = true;
unset($indexes[$key]); unset($indexes[$key]);
} }
} }
foreach (indexes($table) as $key_name => $index) { foreach (indexes($table) as $key_name => $index) {
$columns = array(); $columns = [];
foreach ($index["columns"] as $key => $column) { foreach ($index["columns"] as $key => $column) {
if (!$originals[$column]) { if (!isset($originals[$column])) {
continue 2; continue 2;
} }
$columns[] = $originals[$column] . ($index["descs"][$key] ? " DESC" : ""); $columns[] = $originals[$column] . ($index["descs"][$key] ? " DESC" : "");
} }
if (!$drop_indexes[$key_name]) { if (!$drop_indexes[$key_name]) {
if ($index["type"] != "PRIMARY" || !$primary_key) { if ($index["type"] != "PRIMARY" || !$primary_key) {
// Remove sqlite_ prefix from internal index created by UNIQUE column constraint.
// This will transform column constrain to basic index.
$key_name = preg_replace('~^sqlite_~', "", $key_name);
$indexes[] = array($index["type"], $key_name, $columns); $indexes[] = array($index["type"], $key_name, $columns);
} }
} }
} }
foreach ($indexes as $key => $val) { foreach ($indexes as $key => $val) {
if ($val[0] == "PRIMARY") { if ($val[0] == "PRIMARY") {
unset($indexes[$key]); unset($indexes[$key]);
$foreign[] = " PRIMARY KEY (" . implode(", ", $val[2]) . ")"; $foreign[] = " PRIMARY KEY (" . implode(", ", $val[2]) . ")";
} }
} }
foreach (foreign_keys($table) as $key_name => $foreign_key) { foreach (foreign_keys($table) as $key_name => $foreign_key) {
foreach ($foreign_key["source"] as $key => $column) { foreach ($foreign_key["source"] as $key => $column) {
if (!$originals[$column]) { if (!$originals[$column]) {
@@ -575,30 +597,37 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
} }
$foreign_key["source"][$key] = idf_unescape($originals[$column]); $foreign_key["source"][$key] = idf_unescape($originals[$column]);
} }
if (!isset($foreign[" $key_name"])) { if (!isset($foreign[" $key_name"])) {
$foreign[] = " " . format_foreign_key($foreign_key); $foreign[] = " " . format_foreign_key($foreign_key);
} }
} }
queries("BEGIN"); queries("BEGIN");
} }
foreach ($fields as $key => $field) { foreach ($fields as $key => $field) {
$fields[$key] = " " . implode($field); $fields[$key] = " " . implode($field);
} }
$fields = array_merge($fields, array_filter($foreign)); $fields = array_merge($fields, array_filter($foreign));
$temp_name = ($table == $name ? "adminer_$name" : $name); $temp_name = ($table == $name ? "adminer_$name" : $name);
if (!queries("CREATE TABLE " . table($temp_name) . " (\n" . implode(",\n", $fields) . "\n)")) { if (!queries("CREATE TABLE " . table($temp_name) . " (\n" . implode(",\n", $fields) . "\n)")) {
// implicit ROLLBACK to not overwrite $connection->error // implicit ROLLBACK to not overwrite $connection->error
return false; return false;
} }
if ($table != "") { if ($table != "") {
if ($originals && !queries("INSERT INTO " . table($temp_name) . " (" . implode(", ", $originals) . ") SELECT " . implode(", ", array_map('idf_escape', array_keys($originals))) . " FROM " . table($table))) { if ($originals && !queries("INSERT INTO " . table($temp_name) . " (" . implode(", ", $originals) . ") SELECT " . implode(", ", array_map('idf_escape', array_keys($originals))) . " FROM " . table($table))) {
return false; return false;
} }
$triggers = array();
$triggers = [];
foreach (triggers($table) as $trigger_name => $timing_event) { foreach (triggers($table) as $trigger_name => $timing_event) {
$trigger = trigger($trigger_name); $trigger = trigger($trigger_name);
$triggers[] = "CREATE TRIGGER " . idf_escape($trigger_name) . " " . implode(" ", $timing_event) . " ON " . table($name) . "\n$trigger[Statement]"; $triggers[] = "CREATE TRIGGER " . idf_escape($trigger_name) . " " . implode(" ", $timing_event) . " ON " . table($name) . "\n$trigger[Statement]";
} }
$auto_increment = $auto_increment ? 0 : $connection->result("SELECT seq FROM sqlite_sequence WHERE name = " . q($table)); // if $auto_increment is set then it will be updated later $auto_increment = $auto_increment ? 0 : $connection->result("SELECT seq FROM sqlite_sequence WHERE name = " . q($table)); // if $auto_increment is set then it will be updated later
if (!queries("DROP TABLE " . table($table)) // drop before creating indexes and triggers to allow using old names if (!queries("DROP TABLE " . table($table)) // drop before creating indexes and triggers to allow using old names
|| ($table == $name && !queries("ALTER TABLE " . table($temp_name) . " RENAME TO " . table($name))) || ($table == $name && !queries("ALTER TABLE " . table($temp_name) . " RENAME TO " . table($name)))
@@ -606,16 +635,20 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
) { ) {
return false; return false;
} }
if ($auto_increment) { if ($auto_increment) {
queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error
} }
foreach ($triggers as $trigger) { foreach ($triggers as $trigger) {
if (!queries($trigger)) { if (!queries($trigger)) {
return false; return false;
} }
} }
queries("COMMIT"); queries("COMMIT");
} }
return true; return true;
} }
@@ -628,11 +661,12 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
} }
function alter_indexes($table, $alter) { function alter_indexes($table, $alter) {
foreach ($alter as $primary) { foreach ($alter as $index) {
if ($primary[0] == "PRIMARY") { if ($index[0] == "PRIMARY" || (preg_match('~^sqlite_~', $index[1]))) {
return recreate_table($table, $table, array(), array(), array(), 0, $alter); return recreate_table($table, $table, [], [], [], 0, $alter);
} }
} }
foreach (array_reverse($alter) as $val) { foreach (array_reverse($alter) as $val) {
if (!queries($val[2] == "DROP" if (!queries($val[2] == "DROP"
? "DROP INDEX " . idf_escape($val[1]) ? "DROP INDEX " . idf_escape($val[1])
@@ -641,6 +675,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
return false; return false;
} }
} }
return true; return true;
} }
@@ -734,13 +769,17 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
function create_sql($table, $auto_increment, $style) { function create_sql($table, $auto_increment, $style) {
global $connection; global $connection;
$return = $connection->result("SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = " . q($table)); $return = $connection->result("SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = " . q($table));
foreach (indexes($table) as $name => $index) { foreach (indexes($table) as $name => $index) {
if ($name == '') { // Skip primary key and internal indexes.
if ($name == '' || strpos($name, "sqlite_") === 0) {
continue; continue;
} }
$return .= ";\n\n" . index_sql($table, $index['type'], $name, "(" . implode(", ", array_map('idf_escape', $index['columns'])) . ")"); $return .= ";\n\n" . index_sql($table, $index['type'], $name, "(" . implode(", ", array_map('idf_escape', $index['columns'])) . ")");
} }
return $return; return $return;
} }

View File

@@ -13,7 +13,7 @@ class Adminer {
* @return string HTML code * @return string HTML code
*/ */
function name() { function name() {
return "<a href='https://www.adminer.org/'" . target_blank() . " id='h1'>Adminer</a>"; return "<a id='h1' href='" . h(HOME_URL) . "'>AdminerNeo</a>";
} }
/** Connection parameters /** Connection parameters
@@ -1038,18 +1038,26 @@ class Adminer {
*/ */
function navigation($missing) { function navigation($missing) {
global $VERSION, $jush, $drivers, $connection; global $VERSION, $jush, $drivers, $connection;
?> ?>
<h1> <h1>
<?php echo $this->name(); ?> <?php echo $this->name(); ?>
<?php if ($missing != "auth"): ?>
<span class="version"> <?php if ($missing != "auth"): ?>
<?php echo $VERSION; ?> <span class="version">
<a href="https://github.com/pematon/adminer/releases"<?php echo target_blank(); ?> id="version"> <?php echo $VERSION; ?>
<?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?> <a href="https://github.com/adminerneo/adminerneo/releases"<?php echo target_blank(); ?> id="version">
</a> <?php echo (version_compare($VERSION, $_COOKIE["adminer_version"]) < 0 ? h($_COOKIE["adminer_version"]) : ""); ?>
</span> </a>
</span>
<?php
if (!isset($_COOKIE["adminer_version"])) {
echo script("verifyVersion('" . js_escape(ME) . "', '" . get_token() . "');");
}
?>
<?php endif; ?> <?php endif; ?>
</h1> </h1>
<?php <?php
if ($missing == "auth") { if ($missing == "auth") {
$output = ""; $output = "";

View File

@@ -147,7 +147,7 @@ if ($auth) {
set_session($key, null); set_session($key, null);
} }
unset_permanent(); unset_permanent();
redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.') . ' ' . lang('Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.')); redirect(HOME_URL, lang('Logout successful.'));
} elseif ($permanent && !$_SESSION["pwds"]) { } elseif ($permanent && !$_SESSION["pwds"]) {
session_regenerate_id(); session_regenerate_id();
@@ -214,6 +214,12 @@ function auth_error($error) {
exit; exit;
} }
if (isset($_GET["username"]) && !DRIVER) {
page_header(lang('No driver'), lang('Database driver not found.'), false);
page_footer("auth");
exit;
}
if (isset($_GET["username"]) && !class_exists("Min_DB")) { if (isset($_GET["username"]) && !class_exists("Min_DB")) {
unset($_SESSION["pwds"][DRIVER]); unset($_SESSION["pwds"][DRIVER]);
unset_permanent(); unset_permanent();

View File

@@ -39,7 +39,7 @@ if ($_GET["script"] == "version") {
exit; exit;
} }
global $adminer, $connection, $driver, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $permanent, $structured_types, $has_token, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function global $adminer, $connection, $driver, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $languages, $on_actions, $permanent, $structured_types, $has_token, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"]; $_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
@@ -73,39 +73,73 @@ if (function_exists("get_magic_quotes_runtime") && get_magic_quotes_runtime()) {
@ini_set("zend.ze1_compatibility_mode", false); // @ - deprecated @ini_set("zend.ze1_compatibility_mode", false); // @ - deprecated
@ini_set("precision", 15); // @ - can be disabled, 15 - internal PHP precision @ini_set("precision", 15); // @ - can be disabled, 15 - internal PHP precision
// Migration for backward compatibility. This will keep MySQL users logged in.
if (isset($_GET["username"])) {
// Old 'server' URL param.
if (isset($_GET["server"])) {
$_GET["mysql"] = $_GET["server"];
unset($_GET["server"]);
}
// No URL param for any driver.
$driver_params = array_filter(["mysql", "pgsql", "sqlite", "sqlite2", "oracle", "mssql", "mongo", "clickhouse", "elastic", "elastic5", "firebird", "simpledb"], function ($driver) {
return isset($_GET[$driver]);
});
if (!$driver_params) {
$_GET["mysql"] = "";
}
// Migrate session data.
if (isset($_SESSION["pwds"]["server"])) {
foreach (["pwds", "db", "dbs", "queries"] as $key) {
if (isset($_SESSION[$key]["server"])) {
$_SESSION[$key]["mysql"] = $_SESSION[$key]["server"];
unset($_SESSION[$key]["server"]);
}
}
}
}
include "../adminer/include/lang.inc.php"; include "../adminer/include/lang.inc.php";
include "../adminer/lang/$LANG.inc.php"; include "../adminer/lang/$LANG.inc.php";
include "../adminer/include/pdo.inc.php"; include "../adminer/include/pdo.inc.php";
include "../adminer/include/driver.inc.php"; include "../adminer/include/driver.inc.php";
include "../adminer/drivers/sqlite.inc.php";
include "../adminer/drivers/mysql.inc.php";
include "../adminer/drivers/pgsql.inc.php"; include "../adminer/drivers/pgsql.inc.php";
include "../adminer/drivers/sqlite.inc.php";
include "../adminer/drivers/oracle.inc.php"; include "../adminer/drivers/oracle.inc.php";
include "../adminer/drivers/mssql.inc.php"; include "../adminer/drivers/mssql.inc.php";
include "../adminer/drivers/mongo.inc.php"; include "../adminer/drivers/mongo.inc.php";
include "./include/adminer.inc.php"; include "./include/adminer.inc.php";
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer); $adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer());
include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
$config = driver_config(); if (defined("DRIVER")) {
$possible_drivers = $config['possible_drivers']; $config = driver_config();
$jush = $config['jush']; $possible_drivers = $config['possible_drivers'];
$types = $config['types']; $jush = $config['jush'];
$structured_types = $config['structured_types']; $types = $config['types'];
$unsigned = $config['unsigned']; $structured_types = $config['structured_types'];
$operators = $config['operators']; $unsigned = $config['unsigned'];
$operator_like = $config['operator_like']; $operators = $config['operators'];
$operator_regexp = $config['operator_regexp']; $operator_like = $config['operator_like'];
$functions = $config['functions']; $operator_regexp = $config['operator_regexp'];
$grouping = $config['grouping']; $functions = $config['functions'];
$edit_functions = $config['edit_functions']; $grouping = $config['grouping'];
$edit_functions = $config['edit_functions'];
if ($adminer->operators === null) { if ($adminer->operators === null) {
$adminer->operators = $operators; $adminer->operators = $operators;
$adminer->operator_like = $operator_like; $adminer->operator_like = $operator_like;
$adminer->operator_regexp = $operator_regexp; $adminer->operator_regexp = $operator_regexp;
}
} else {
define("DRIVER", null);
} }
define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost define("SERVER", DRIVER ? $_GET[DRIVER] : null); // read from pgsql=localhost
define("DB", $_GET["db"]); // for the sake of speed and size define("DB", $_GET["db"]); // for the sake of speed and size
define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?' define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?'
. (sid() ? SID . '&' : '') . (sid() ? SID . '&' : '')
@@ -113,6 +147,7 @@ define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?'
. (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '')
. (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '') . (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '')
); );
define("HOME_URL", substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1) ?: ".");
include "../adminer/include/version.inc.php"; include "../adminer/include/version.inc.php";
include "../adminer/include/design.inc.php"; include "../adminer/include/design.inc.php";

View File

@@ -2,9 +2,22 @@
function dump($value) function dump($value)
{ {
echo "<pre>"; $cli = PHP_SAPI == 'cli';
var_export($value);
echo "</pre>\n"; if (!$cli) {
echo "<pre>";
}
$export = var_export($value, true);
$export = preg_replace('~=>\s+array\s*~', "=> array", $export);
$export = preg_replace('~\(\s+\)~', "()", $export);
echo $export;
if (!$cli) {
echo "</pre>";
}
echo "\n";
} }
function dumpe($value) function dumpe($value)

View File

@@ -18,10 +18,11 @@ function page_header($title, $error = "", $breadcrumb = [], $title2 = "") {
// Load Adminer version from file if cookie is missing. // Load Adminer version from file if cookie is missing.
$filename = get_temp_dir() . "/adminer.version"; $filename = get_temp_dir() . "/adminer.version";
if (!$_COOKIE["adminer_version"] && file_exists($filename) && filemtime($filename) + 86400 > time()) { // 86400 - 1 day in seconds if (!$_COOKIE["adminer_version"] && file_exists($filename) && ($lifetime = filemtime($filename) + 86400 - time()) > 0) { // 86400 - 1 day in seconds
$data = unserialize(file_get_contents($filename)); $data = unserialize(file_get_contents($filename));
$_COOKIE["adminer_version"] = $data["version"]; $_COOKIE["adminer_version"] = $data["version"];
cookie("adminer_version", $data["version"], 24 * 3600); cookie("adminer_version", $data["version"], $lifetime); // Sync expiration with the file.
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@@ -42,12 +43,12 @@ function page_header($title, $error = "", $breadcrumb = [], $title2 = "") {
<body class="<?php echo lang('ltr'); ?> nojs"> <body class="<?php echo lang('ltr'); ?> nojs">
<script<?php echo nonce(); ?>> <script<?php echo nonce(); ?>>
document.body.onkeydown = bodyKeydown; const body = document.body;
document.body.onclick = bodyClick;
<?php if (!isset($_COOKIE["adminer_version"])): ?> body.onkeydown = bodyKeydown;
document.body.onload = function () { verifyVersion('<?php echo $VERSION; ?>', '<?php echo js_escape(ME); ?>', '<?php echo get_token(); ?>') }; body.onclick = bodyClick;
<?php endif; ?> body.classList.remove("nojs");
document.body.className = document.body.className.replace(/ nojs/, ' js'); body.classList.add("js");
var offlineMessage = '<?php echo js_escape(lang('You are offline.')); ?>'; var offlineMessage = '<?php echo js_escape(lang('You are offline.')); ?>';
var thousandsSeparator = '<?php echo js_escape(lang(',')); ?>'; var thousandsSeparator = '<?php echo js_escape(lang(',')); ?>';
@@ -61,8 +62,7 @@ function page_header($title, $error = "", $breadcrumb = [], $title2 = "") {
if ($breadcrumb !== null) { if ($breadcrumb !== null) {
echo '<p id="breadcrumb">'; echo '<p id="breadcrumb">';
$link = substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1); echo '<a href="' . h(HOME_URL) . '">' . lang('Home') . '</a> » ';
echo '<a href="' . h($link ?: ".") . '">' . lang('Home') . '</a> » ';
$server = ""; $server = "";
if ($breadcrumb === false) { if ($breadcrumb === false) {
@@ -143,7 +143,7 @@ function csp() {
[ [
// 'self' is a fallback for browsers not supporting 'strict-dynamic', 'unsafe-inline' is a fallback for browsers not supporting 'nonce-' // 'self' is a fallback for browsers not supporting 'strict-dynamic', 'unsafe-inline' is a fallback for browsers not supporting 'nonce-'
"script-src" => "'self' 'unsafe-inline' 'nonce-" . get_nonce() . "' 'strict-dynamic'", "script-src" => "'self' 'unsafe-inline' 'nonce-" . get_nonce() . "' 'strict-dynamic'",
"connect-src" => "'self' https://api.github.com/repos/pematon/adminer/releases/latest", "connect-src" => "'self' https://api.github.com/repos/adminerneo/adminerneo/releases/latest",
"frame-src" => "'self'", "frame-src" => "'self'",
"object-src" => "'none'", "object-src" => "'none'",
"base-uri" => "'none'", "base-uri" => "'none'",
@@ -188,19 +188,19 @@ function page_messages($error) {
/** /**
* Prints HTML footer. * Prints HTML footer.
* *
* @param $missing string "auth", "db", "ns" * @param ?string $missing "auth", "db", "ns"
*/ */
function page_footer($missing = "") function page_footer($missing = null)
{ {
global $adminer, $token; global $adminer, $token;
echo "</div>"; // #content echo "</div>"; // #content
echo "<div id='footer'>\n"; echo "<div id='footer'>\n";
switch_lang(); language_select();
if ($missing != "auth") { if ($missing != "auth") {
?> ?>
<div class="logout"> <div class="logout">
<form action="" method="post"> <form action="" method="post">

View File

@@ -637,7 +637,7 @@ function doc_link(array $paths, $text = "<sup>?</sup>") {
* @return string * @return string
*/ */
function ob_gzencode($string) { function ob_gzencode($string) {
// ob_start() callback recieves an optional parameter $phase but gzencode() accepts optional parameter $level // ob_start() callback receives an optional parameter $phase but gzencode() accepts optional parameter $level
return gzencode($string); return gzencode($string);
} }

View File

@@ -108,6 +108,9 @@ function min_version($version, $maria_db = "", $connection2 = null) {
$server_info = $match[1]; $server_info = $match[1];
$version = $maria_db; $version = $maria_db;
} }
if ($version == "") {
return false;
}
return (version_compare($server_info, $version) >= 0); return (version_compare($server_info, $version) >= 0);
} }
@@ -320,7 +323,7 @@ function ini_bool($ini) {
return (preg_match('~^(on|true|yes)$~i', $val) || (int) $val); // boolean values set by php_value are strings return (preg_match('~^(on|true|yes)$~i', $val) || (int) $val); // boolean values set by php_value are strings
} }
/** Check if SID is neccessary /** Check if SID is necessary
* @return bool * @return bool
*/ */
function sid() { function sid() {
@@ -611,7 +614,7 @@ function auth_url($vendor, $server, $username, $db = null) {
preg_match('~([^?]*)\??(.*)~', remove_from_uri(implode("|", array_keys($drivers)) . "|username|" . ($db !== null ? "db|" : "") . session_name()), $match); preg_match('~([^?]*)\??(.*)~', remove_from_uri(implode("|", array_keys($drivers)) . "|username|" . ($db !== null ? "db|" : "") . session_name()), $match);
return "$match[1]?" return "$match[1]?"
. (sid() ? SID . "&" : "") . (sid() ? SID . "&" : "")
. ($vendor != "server" || $server != "" ? urlencode($vendor) . "=" . urlencode($server) . "&" : "") . urlencode($vendor) . "=" . urlencode($server) . "&"
. "username=" . urlencode($username) . "username=" . urlencode($username)
. ($db != "" ? "&db=" . urlencode($db) : "") . ($db != "" ? "&db=" . urlencode($db) : "")
. ($match[2] ? "&$match[2]" : "") . ($match[2] ? "&$match[2]" : "")
@@ -830,6 +833,8 @@ function is_utf8($val) {
* @return string escaped string with appended ... * @return string escaped string with appended ...
*/ */
function shorten_utf8($string, $length = 80, $suffix = "") { function shorten_utf8($string, $length = 80, $suffix = "") {
if ($string == "") return $suffix;
if (!preg_match("(^(" . repeat_pattern("[\t\r\n -\x{10FFFF}]", $length) . ")($)?)u", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\n) is slow if (!preg_match("(^(" . repeat_pattern("[\t\r\n -\x{10FFFF}]", $length) . ")($)?)u", $string, $match)) { // ~s causes trash in $match[2] under some PHP versions, (.|\n) is slow
preg_match("(^(" . repeat_pattern("[\t\r\n -~]", $length) . ")($)?)", $string, $match); preg_match("(^(" . repeat_pattern("[\t\r\n -~]", $length) . ")($)?)", $string, $match);
} }
@@ -1573,6 +1578,10 @@ function edit_form($table, $fields, $row, $update) {
$value = ""; $value = "";
$function = "now"; $function = "now";
} }
if ($field["type"] == "uuid" && $value == "uuid()") {
$value = "";
$function = "uuid";
}
input($field, $value, $function); input($field, $value, $function);
echo "\n"; echo "\n";
} }

View File

@@ -1,7 +1,6 @@
<?php <?php
// not used in a single language version
$langs = array( $languages = [
'en' => 'English', // Jakub Vrána - https://www.vrana.cz 'en' => 'English', // Jakub Vrána - https://www.vrana.cz
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr 'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
'bg' => 'Български', // Deyan Delchev 'bg' => 'Български', // Deyan Delchev
@@ -25,8 +24,8 @@ $langs = array(
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/ 'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org 'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
'ko' => '한국어', // dalli - skcha67@gmail.com 'ko' => '한국어', // dalli - skcha67@gmail.com
'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com 'lv' => 'Latviešu', // Kristaps Lediņš - https://krysits.com
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt 'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
'ms' => 'Bahasa Melayu', // Pisyek 'ms' => 'Bahasa Melayu', // Pisyek
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be 'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com 'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
@@ -46,24 +45,59 @@ $langs = array(
'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail 'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail
'zh' => '简体中文', // Mr. Lodar, vea - urn2.net - vea.urn2@gmail.com 'zh' => '简体中文', // Mr. Lodar, vea - urn2.net - vea.urn2@gmail.com
'zh-tw' => '繁體中文', // http://tzangms.com 'zh-tw' => '繁體中文', // http://tzangms.com
); ];
/** Get current language /**
* @return string * Returns the list of available languages.
*/ * In compiled version, only selected languages are returned.
function get_lang() { *
* @return array
*/
function get_available_languages()
{
global $languages;
return $languages; // compile: available languages
}
/**
* Converts translation key into the right form.
* In compiled version, string keys used in plugins are dynamically translated to numeric keys.
*
* @param string|int $key
*
* @return string|int
*/
function convert_translation_key($key)
{
return $key; // compile: convert translation key
}
/**
* Returns current language.
*
* @return string
*/
function get_lang()
{
global $LANG; global $LANG;
return $LANG; return $LANG;
} }
/** Translate string /**
* @param string * Returns translated text.
* @param int *
* @return string * @param string|int $key Numeric key is used in compiled version.
*/ * @param ?int $number
function lang($idf, $number = null) { *
* @return string
*/
function lang($key, $number = null)
{
global $LANG, $translations; global $LANG, $translations;
$translation = ($translations[$idf] ? $translations[$idf] : $idf);
$key = convert_translation_key($key);
$translation = $translations[$key] ?: $key;
if (is_array($translation)) { if (is_array($translation)) {
$pos = ($number == 1 ? 0 $pos = ($number == 1 ? 0
: ($LANG == 'cs' || $LANG == 'sk' ? ($number && $number < 5 ? 1 : 2) // different forms for 1, 2-4, other : ($LANG == 'cs' || $LANG == 'sk' ? ($number && $number < 5 ? 1 : 2) // different forms for 1, 2-4, other
@@ -74,21 +108,39 @@ function lang($idf, $number = null) {
: ($LANG == 'bs' || $LANG == 'ru' || $LANG == 'sr' || $LANG == 'uk' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1 except 11, 2-4 except 12-14, other : ($LANG == 'bs' || $LANG == 'ru' || $LANG == 'sr' || $LANG == 'uk' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1 except 11, 2-4 except 12-14, other
: 1 // different forms for 1, other : 1 // different forms for 1, other
))))))); // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html ))))))); // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
$translation = $translation[$pos]; $translation = $translation[$pos];
} }
$args = func_get_args(); $args = func_get_args();
array_shift($args); array_shift($args);
$format = str_replace("%d", "%s", $translation); $format = str_replace("%d", "%s", $translation);
if ($format != $translation) { if ($format != $translation) {
$args[0] = format_number($number); $args[0] = format_number($number);
} }
return vsprintf($format, $args); return vsprintf($format, $args);
} }
function switch_lang() { function language_select()
global $LANG, $langs; {
global $LANG, $languages;
$available_languages = get_available_languages();
if (count($available_languages) == 1) {
return;
}
$options = [];
foreach ($languages as $language => $title) {
if (isset($available_languages[$language])) {
$options[$language] = $title;
}
}
echo "<div id='lang'><form action='' method='post'>\n"; echo "<div id='lang'><form action='' method='post'>\n";
echo lang('Language') . ": " . html_select("lang", $langs, $LANG, "this.form.submit();"); echo lang('Language') . ": " . html_select("lang", $options, $LANG, "this.form.submit();");
echo " <input type='submit' value='" . lang('Use') . "' class='hidden'>\n"; echo " <input type='submit' value='" . lang('Use') . "' class='hidden'>\n";
echo "<input type='hidden' name='token' value='" . get_token() . "'>\n"; // $token may be empty in auth.inc.php echo "<input type='hidden' name='token' value='" . get_token() . "'>\n"; // $token may be empty in auth.inc.php
echo "</form></div>\n"; echo "</form></div>\n";
@@ -96,31 +148,37 @@ function switch_lang() {
if (isset($_POST["lang"]) && verify_token()) { // $error not yet available if (isset($_POST["lang"]) && verify_token()) { // $error not yet available
cookie("adminer_lang", $_POST["lang"]); cookie("adminer_lang", $_POST["lang"]);
$_SESSION["lang"] = $_POST["lang"]; // cookies may be disabled $_SESSION["lang"] = $_POST["lang"]; // cookies may be disabled
$_SESSION["translations"] = array(); // used in compiled version $_SESSION["translations"] = []; // used in compiled version
redirect(remove_from_uri()); redirect(remove_from_uri());
} }
$LANG = "en"; $available_languages = get_available_languages();
if (isset($langs[$_COOKIE["adminer_lang"]])) { $LANG = array_keys($available_languages)[0];
if (isset($_COOKIE["adminer_lang"]) && isset($available_languages[$_COOKIE["adminer_lang"]])) {
cookie("adminer_lang", $_COOKIE["adminer_lang"]); cookie("adminer_lang", $_COOKIE["adminer_lang"]);
$LANG = $_COOKIE["adminer_lang"]; $LANG = $_COOKIE["adminer_lang"];
} elseif (isset($langs[$_SESSION["lang"]])) { } elseif (isset($available_languages[$_SESSION["lang"]])) {
$LANG = $_SESSION["lang"]; $LANG = $_SESSION["lang"];
} else { } elseif (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) {
$accept_language = array(); $accept_language = [];
preg_match_all('~([-a-z]+)(;q=([0-9.]+))?~', str_replace("_", "-", strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"])), $matches, PREG_SET_ORDER); preg_match_all('~([-a-z]+)(;q=([0-9.]+))?~', str_replace("_", "-", strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"])), $matches, PREG_SET_ORDER);
foreach ($matches as $match) { foreach ($matches as $match) {
$accept_language[$match[1]] = (isset($match[3]) ? $match[3] : 1); $accept_language[$match[1]] = (isset($match[3]) ? $match[3] : 1);
} }
arsort($accept_language); arsort($accept_language);
foreach ($accept_language as $key => $q) { foreach ($accept_language as $key => $q) {
if (isset($langs[$key])) { if (isset($available_languages[$key])) {
$LANG = $key; $LANG = $key;
break; break;
} }
$key = preg_replace('~-.*~', '', $key); $key = preg_replace('~-.*~', '', $key);
if (!isset($accept_language[$key]) && isset($langs[$key])) { if (!isset($accept_language[$key]) && isset($available_languages[$key])) {
$LANG = $key; $LANG = $key;
break; break;
} }

View File

@@ -3,7 +3,7 @@
if (extension_loaded('pdo')) { if (extension_loaded('pdo')) {
/*abstract*/ class Min_PDO { /*abstract*/ class Min_PDO {
var $_result, $server_info, $affected_rows, $errno, $error, $pdo; var $_result, $server_info, $affected_rows, $errno, $error, $pdo;
function __construct() { function __construct() {
global $adminer; global $adminer;
$pos = array_search("SQL", $adminer->operators); $pos = array_search("SQL", $adminer->operators);
@@ -11,10 +11,10 @@ if (extension_loaded('pdo')) {
unset($adminer->operators[$pos]); unset($adminer->operators[$pos]);
} }
} }
function dsn($dsn, $username, $password, $options = array()) { function dsn($dsn, $username, $password, $options = []) {
$options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_SILENT; $options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_SILENT;
$options[PDO::ATTR_STATEMENT_CLASS] = array('Min_PDOStatement'); $options[PDO::ATTR_STATEMENT_CLASS] = [Min_PDOStatement::class];
try { try {
$this->pdo = new PDO($dsn, $username, $password, $options); $this->pdo = new PDO($dsn, $username, $password, $options);
} catch (Exception $ex) { } catch (Exception $ex) {
@@ -22,13 +22,13 @@ if (extension_loaded('pdo')) {
} }
$this->server_info = @$this->pdo->getAttribute(PDO::ATTR_SERVER_VERSION); $this->server_info = @$this->pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
} }
/*abstract function select_db($database);*/ /*abstract function select_db($database);*/
function quote($string) { function quote($string) {
return $this->pdo->quote($string); return $this->pdo->quote($string);
} }
function query($query, $unbuffered = false) { function query($query, $unbuffered = false) {
$result = $this->pdo->query($query); $result = $this->pdo->query($query);
$this->error = ""; $this->error = "";
@@ -42,11 +42,11 @@ if (extension_loaded('pdo')) {
$this->store_result($result); $this->store_result($result);
return $result; return $result;
} }
function multi_query($query) { function multi_query($query) {
return $this->_result = $this->query($query); return $this->_result = $this->query($query);
} }
function store_result($result = null) { function store_result($result = null) {
if (!$result) { if (!$result) {
$result = $this->_result; $result = $this->_result;
@@ -61,7 +61,7 @@ if (extension_loaded('pdo')) {
$this->affected_rows = $result->rowCount(); $this->affected_rows = $result->rowCount();
return true; return true;
} }
function next_result() { function next_result() {
if (!$this->_result) { if (!$this->_result) {
return false; return false;
@@ -69,7 +69,7 @@ if (extension_loaded('pdo')) {
$this->_result->_offset = 0; $this->_result->_offset = 0;
return @$this->_result->nextRowset(); // @ - PDO_PgSQL doesn't support it return @$this->_result->nextRowset(); // @ - PDO_PgSQL doesn't support it
} }
function result($query, $field = 0) { function result($query, $field = 0) {
$result = $this->query($query); $result = $this->query($query);
if (!$result) { if (!$result) {
@@ -79,18 +79,18 @@ if (extension_loaded('pdo')) {
return $row[$field]; return $row[$field];
} }
} }
class Min_PDOStatement extends PDOStatement { class Min_PDOStatement extends PDOStatement {
var $_offset = 0, $num_rows; var $_offset = 0, $num_rows;
function fetch_assoc() { function fetch_assoc() {
return $this->fetch(PDO::FETCH_ASSOC); return $this->fetch(PDO::FETCH_ASSOC);
} }
function fetch_row() { function fetch_row() {
return $this->fetch(PDO::FETCH_NUM); return $this->fetch(PDO::FETCH_NUM);
} }
function fetch_field() { function fetch_field() {
$row = (object) $this->getColumnMeta($this->_offset++); $row = (object) $this->getColumnMeta($this->_offset++);
$row->orgtable = $row->table; $row->orgtable = $row->table;

View File

@@ -1,2 +1,2 @@
<?php <?php
$VERSION = "4.11"; $VERSION = "4.14";

View File

@@ -1,8 +1,8 @@
<?php <?php
/** /**
* Adminer - Database management in a single PHP file * AdminerNeo - Database management in a single PHP file
* *
* @link https://github.com/pematon/adminer * @link https://github.com/adminerneo/adminerneo
* @author Jakub Vrana (https://www.vrana.cz/) * @author Jakub Vrana (https://www.vrana.cz/)
* @author Peter Knut * @author Peter Knut
* @copyright 2007-2021 Jakub Vrana, 2024 Peter Knut * @copyright 2007-2021 Jakub Vrana, 2024 Peter Knut

View File

@@ -31,7 +31,6 @@ $translations = array(
'Create database' => 'إنشاء قاعدة بيانات', 'Create database' => 'إنشاء قاعدة بيانات',
'SQL command' => 'استعلام SQL', 'SQL command' => 'استعلام SQL',
'Logout' => 'تسجيل الخروج', 'Logout' => 'تسجيل الخروج',
'database' => 'قاعدة بيانات',
'Use' => 'استعمال', 'Use' => 'استعمال',
'No tables.' => 'لا توجد جداول.', 'No tables.' => 'لا توجد جداول.',
'select' => 'تحديد', 'select' => 'تحديد',
@@ -68,7 +67,6 @@ $translations = array(
'Unable to select the table' => 'يتعذر اختيار الجدول', 'Unable to select the table' => 'يتعذر اختيار الجدول',
'Invalid CSRF token. Send the form again.' => 'رمز CSRF غير صالح. المرجو إرسال الاستمارة مرة أخرى.', 'Invalid CSRF token. Send the form again.' => 'رمز CSRF غير صالح. المرجو إرسال الاستمارة مرة أخرى.',
'Comment' => 'تعليق', 'Comment' => 'تعليق',
'Default values' => 'القيم الافتراضية',
'%d byte(s)' => '%d بايت', '%d byte(s)' => '%d بايت',
'No commands to execute.' => 'لا توجد أوامر للتنفيذ.', 'No commands to execute.' => 'لا توجد أوامر للتنفيذ.',
'Unable to upload a file.' => 'يتعذر رفع ملف ما.', 'Unable to upload a file.' => 'يتعذر رفع ملف ما.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -17,6 +17,8 @@ $translations = array(
'Language' => 'Език', 'Language' => 'Език',
'Invalid CSRF token. Send the form again.' => 'Невалиден шифроващ ключ. Попълнете и изпратете формуляра отново.', 'Invalid CSRF token. Send the form again.' => 'Невалиден шифроващ ключ. Попълнете и изпратете формуляра отново.',
'If you did not send this request from Adminer then close this page.' => 'Ако не сте изпратили тази заявка през Adminer, затворете тази страница.', 'If you did not send this request from Adminer then close this page.' => 'Ако не сте изпратили тази заявка през Adminer, затворете тази страница.',
'No driver' => null,
'Database driver not found.' => null,
'No extension' => 'Няма разширение', 'No extension' => 'Няма разширение',
'None of the supported PHP extensions (%s) are available.' => 'Никое от поддържаните PHP разширения (%s) не е налично.', 'None of the supported PHP extensions (%s) are available.' => 'Никое от поддържаните PHP разширения (%s) не е налично.',
'Session support must be enabled.' => 'Поддръжката на сесии трябва да е разрешена.', 'Session support must be enabled.' => 'Поддръжката на сесии трябва да е разрешена.',
@@ -79,7 +81,6 @@ $translations = array(
'Data' => 'Данни', 'Data' => 'Данни',
'Database' => 'База данни', 'Database' => 'База данни',
'database' => 'база данни',
'Use' => 'Избор', 'Use' => 'Избор',
'Select database' => 'Избор на база данни', 'Select database' => 'Избор на база данни',
'Invalid database.' => 'Невалидна база данни.', 'Invalid database.' => 'Невалидна база данни.',
@@ -166,7 +167,6 @@ $translations = array(
'Options' => 'Опции', 'Options' => 'Опции',
'Comment' => 'Коментар', 'Comment' => 'Коментар',
'Default value' => 'Стойност по подразбиране', 'Default value' => 'Стойност по подразбиране',
'Default values' => 'Стойности по подразбиране',
'Drop' => 'Премахване', 'Drop' => 'Премахване',
'Are you sure?' => 'Сигурни ли сте?', 'Are you sure?' => 'Сигурни ли сте?',
'Size' => 'Големина', 'Size' => 'Големина',
@@ -314,12 +314,15 @@ $translations = array(
'Please use one of the extensions %s.' => 'Моля, използвайте някое от разширенията %s.', 'Please use one of the extensions %s.' => 'Моля, използвайте някое от разширенията %s.',
// PostgreSQL and MS SQL schema support // PostgreSQL and MS SQL schema support
'Schema' => 'Схема',
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'Alter schema' => 'Промяна на схемата', 'Alter schema' => 'Промяна на схемата',
'Create schema' => 'Създаване на схема', 'Create schema' => 'Създаване на схема',
'Schema has been dropped.' => 'Схемата беше премахната.', 'Schema has been dropped.' => 'Схемата беше премахната.',
'Schema has been created.' => 'Схемата беше създадена.', 'Schema has been created.' => 'Схемата беше създадена.',
'Schema has been altered.' => 'Схемата беше променена.', 'Schema has been altered.' => 'Схемата беше променена.',
'Schema' => 'Схема',
'Invalid schema.' => 'Невалидна схема.', 'Invalid schema.' => 'Невалидна схема.',
// PostgreSQL sequences support // PostgreSQL sequences support
@@ -343,7 +346,6 @@ $translations = array(
'ATTACH queries are not supported.' => null, 'ATTACH queries are not supported.' => null,
'Warnings' => null, 'Warnings' => null,
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
'There is a space in the input password which might be the cause.' => null, 'There is a space in the input password which might be the cause.' => null,

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'ডাটাবেজ তৈরী করুন', 'Create database' => 'ডাটাবেজ তৈরী করুন',
'SQL command' => 'SQL-কমান্ড', 'SQL command' => 'SQL-কমান্ড',
'Logout' => 'লগআউট', 'Logout' => 'লগআউট',
'database' => 'ডাটাবেজ',
'Use' => 'ব্যবহার', 'Use' => 'ব্যবহার',
'No tables.' => 'কোন টেবিল নাই।', 'No tables.' => 'কোন টেবিল নাই।',
'select' => 'নির্বাচন', 'select' => 'নির্বাচন',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'টেবিল নির্বাচন করতে অক্ষম', 'Unable to select the table' => 'টেবিল নির্বাচন করতে অক্ষম',
'Invalid CSRF token. Send the form again.' => 'অবৈধ CSRF টোকেন। ফর্মটি আবার পাঠান।', 'Invalid CSRF token. Send the form again.' => 'অবৈধ CSRF টোকেন। ফর্মটি আবার পাঠান।',
'Comment' => 'মন্তব্য', 'Comment' => 'মন্তব্য',
'Default values' => 'ডিফল্ট মান',
'%d byte(s)' => array('%d বাইট', '%d বাইটসমূহ'), '%d byte(s)' => array('%d বাইট', '%d বাইটসমূহ'),
'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নেই।', 'No commands to execute.' => 'সম্পাদন করার মত কোন নির্দেশ নেই।',
'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।', 'Unable to upload a file.' => 'ফাইল আপলোড করা সম্ভব হচ্ছে না।',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -74,7 +74,6 @@ $translations = array(
'Data' => 'Podaci', 'Data' => 'Podaci',
'Database' => 'Baza podataka', 'Database' => 'Baza podataka',
'database' => 'baza podataka',
'Use' => 'Koristi', 'Use' => 'Koristi',
'Select database' => 'Izaberite bazu', 'Select database' => 'Izaberite bazu',
'Invalid database.' => 'Neispravna baza podataka.', 'Invalid database.' => 'Neispravna baza podataka.',
@@ -159,7 +158,6 @@ $translations = array(
'Auto Increment' => 'Auto-priraštaj', 'Auto Increment' => 'Auto-priraštaj',
'Options' => 'Opcije', 'Options' => 'Opcije',
'Comment' => 'Komentar', 'Comment' => 'Komentar',
'Default values' => 'Podrazumijevane vrijednosti',
'Drop' => 'Izbriši', 'Drop' => 'Izbriši',
'Are you sure?' => 'Da li ste sigurni?', 'Are you sure?' => 'Da li ste sigurni?',
'Move up' => 'Pomijeri na gore', 'Move up' => 'Pomijeri na gore',
@@ -335,7 +333,6 @@ $translations = array(
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Default value' => null, 'Default value' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -358,4 +355,10 @@ $translations = array(
'No' => 'Ne', 'No' => 'Ne',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Crea una base de dades', 'Create database' => 'Crea una base de dades',
'SQL command' => 'Ordre SQL', 'SQL command' => 'Ordre SQL',
'Logout' => 'Desconnecta', 'Logout' => 'Desconnecta',
'database' => 'base de dades',
'Use' => 'Utilitza', 'Use' => 'Utilitza',
'No tables.' => 'No hi ha cap taula.', 'No tables.' => 'No hi ha cap taula.',
'select' => 'registres', 'select' => 'registres',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Impossible seleccionar la taula', 'Unable to select the table' => 'Impossible seleccionar la taula',
'Invalid CSRF token. Send the form again.' => 'Token CSRF invàlid. Torna a enviar el formulari.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF invàlid. Torna a enviar el formulari.',
'Comment' => 'Comentari', 'Comment' => 'Comentari',
'Default values' => 'Valors per defecte',
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'No commands to execute.' => 'Cap comanda per executar.', 'No commands to execute.' => 'Cap comanda per executar.',
'Unable to upload a file.' => 'Impossible adjuntar el fitxer.', 'Unable to upload a file.' => 'Impossible adjuntar el fitxer.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -11,7 +11,6 @@ $translations = array(
'Logout' => 'Odhlásit', 'Logout' => 'Odhlásit',
'Logged as: %s' => 'Přihlášen jako: %s', 'Logged as: %s' => 'Přihlášen jako: %s',
'Logout successful.' => 'Odhlášení proběhlo v pořádku.', 'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Díky za použití Admineru, <a href="https://www.adminer.org/cs/donation/">přispějte</a> na vývoj.',
'Invalid server or credentials.' => 'Neplatný server nebo přihlašovací údaje.', 'Invalid server or credentials.' => 'Neplatný server nebo přihlašovací údaje.',
'There is a space in the input password which might be the cause.' => 'Problém může být, že je v zadaném hesle mezera.', 'There is a space in the input password which might be the cause.' => 'Problém může být, že je v zadaném hesle mezera.',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href="https://www.adminer.org/cs/password/"%s>více informací</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href="https://www.adminer.org/cs/password/"%s>více informací</a>.',
@@ -21,6 +20,8 @@ $translations = array(
'Language' => 'Jazyk', 'Language' => 'Jazyk',
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.', 'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
'If you did not send this request from Adminer then close this page.' => 'Pokud jste tento požadavek neposlali z Adminera, tak tuto stránku zavřete.', 'If you did not send this request from Adminer then close this page.' => 'Pokud jste tento požadavek neposlali z Adminera, tak tuto stránku zavřete.',
'No driver' => 'Žádný ovladač',
'Database driver not found.' => 'Databázový ovladač se nenašel.',
'No extension' => 'Žádné rozšíření', 'No extension' => 'Žádné rozšíření',
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).', 'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
'Connecting to privileged ports is not allowed.' => 'Připojování k privilegovaným portům není povoleno.', 'Connecting to privileged ports is not allowed.' => 'Připojování k privilegovaným portům není povoleno.',
@@ -89,7 +90,6 @@ $translations = array(
'Data' => 'Data', 'Data' => 'Data',
'Database' => 'Databáze', 'Database' => 'Databáze',
'database' => 'databáze',
'DB' => 'DB', 'DB' => 'DB',
'Use' => 'Vybrat', 'Use' => 'Vybrat',
'Select database' => 'Vybrat databázi', 'Select database' => 'Vybrat databázi',
@@ -178,7 +178,6 @@ $translations = array(
'Options' => 'Volby', 'Options' => 'Volby',
'Comment' => 'Komentář', 'Comment' => 'Komentář',
'Default value' => 'Výchozí hodnota', 'Default value' => 'Výchozí hodnota',
'Default values' => 'Výchozí hodnoty',
'Drop' => 'Odstranit', 'Drop' => 'Odstranit',
'Drop %s?' => 'Odstranit %s?', 'Drop %s?' => 'Odstranit %s?',
'Are you sure?' => 'Opravdu?', 'Are you sure?' => 'Opravdu?',
@@ -327,12 +326,15 @@ $translations = array(
'Please use one of the extensions %s.' => 'Prosím použijte jednu z koncovek %s.', 'Please use one of the extensions %s.' => 'Prosím použijte jednu z koncovek %s.',
// PostgreSQL and MS SQL schema support // PostgreSQL and MS SQL schema support
'Schema' => 'Schéma',
'Schemas' => 'Schémy',
'No schemas.' => 'Žádné schémy.',
'Show schema' => 'Zobrazit schéma',
'Alter schema' => 'Pozměnit schéma', 'Alter schema' => 'Pozměnit schéma',
'Create schema' => 'Vytvořit schéma', 'Create schema' => 'Vytvořit schéma',
'Schema has been dropped.' => 'Schéma bylo odstraněno.', 'Schema has been dropped.' => 'Schéma bylo odstraněno.',
'Schema has been created.' => 'Schéma bylo vytvořeno.', 'Schema has been created.' => 'Schéma bylo vytvořeno.',
'Schema has been altered.' => 'Schéma bylo změněno.', 'Schema has been altered.' => 'Schéma bylo změněno.',
'Schema' => 'Schéma',
'Invalid schema.' => 'Nesprávné schéma.', 'Invalid schema.' => 'Nesprávné schéma.',
// PostgreSQL sequences support // PostgreSQL sequences support

View File

@@ -65,7 +65,6 @@ $translations = array(
'Format' => 'Format', 'Format' => 'Format',
'Data' => 'Data', 'Data' => 'Data',
'Database' => 'Database', 'Database' => 'Database',
'database' => 'database',
'Use' => 'Brug', 'Use' => 'Brug',
'Select database' => 'Vælg database', 'Select database' => 'Vælg database',
'Invalid database.' => 'Ugyldig database.', 'Invalid database.' => 'Ugyldig database.',
@@ -144,7 +143,6 @@ $translations = array(
'Auto Increment' => 'Auto Increment', 'Auto Increment' => 'Auto Increment',
'Options' => 'Valg', 'Options' => 'Valg',
'Comment' => 'Kommentarer', 'Comment' => 'Kommentarer',
'Default values' => 'Standardværdier',
'Drop' => 'Drop', 'Drop' => 'Drop',
'Are you sure?' => 'Er du sikker?', 'Are you sure?' => 'Er du sikker?',
'Move up' => 'Flyt op', 'Move up' => 'Flyt op',
@@ -294,7 +292,6 @@ $translations = array(
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Default value' => null, 'Default value' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
'There is a space in the input password which might be the cause.' => null, 'There is a space in the input password which might be the cause.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => 'Nej', 'No' => 'Nej',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -1,9 +1,8 @@
<?php <?php
$translations = array( $translations = array(
'Home' => null, 'Home' => 'Startseite',
'Login' => 'Login', 'Login' => 'Login',
'Logout successful.' => 'Abmeldung erfolgreich.', 'Logout successful.' => 'Abmeldung erfolgreich.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Danke, dass Sie Adminer genutzt haben. <a href="https://www.adminer.org/de/donation/">Spenden willkommen!</a>',
'Invalid server or credentials.' => 'Ungültige Server oder Anmelde-Informationen.', 'Invalid server or credentials.' => 'Ungültige Server oder Anmelde-Informationen.',
'Server' => 'Server', 'Server' => 'Server',
'Username' => 'Benutzer', 'Username' => 'Benutzer',
@@ -33,8 +32,7 @@ $translations = array(
'Create database' => 'Datenbank erstellen', 'Create database' => 'Datenbank erstellen',
'SQL command' => 'SQL-Kommando', 'SQL command' => 'SQL-Kommando',
'Logout' => 'Abmelden', 'Logout' => 'Abmelden',
'database' => 'Datenbank', 'Use' => 'Auswählen',
'Use' => 'Benutzung',
'No tables.' => 'Keine Tabellen.', 'No tables.' => 'Keine Tabellen.',
'select' => 'zeigen', 'select' => 'zeigen',
'Item has been deleted.' => 'Datensatz wurde gelöscht.', 'Item has been deleted.' => 'Datensatz wurde gelöscht.',
@@ -71,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Auswahl der Tabelle fehlgeschlagen', 'Unable to select the table' => 'Auswahl der Tabelle fehlgeschlagen',
'Invalid CSRF token. Send the form again.' => 'CSRF Token ungültig. Bitte die Formulardaten erneut abschicken.', 'Invalid CSRF token. Send the form again.' => 'CSRF Token ungültig. Bitte die Formulardaten erneut abschicken.',
'Comment' => 'Kommentar', 'Comment' => 'Kommentar',
'Default values' => 'Vorgabewerte festlegen',
'%d byte(s)' => array('%d Byte', '%d Bytes'), '%d byte(s)' => array('%d Byte', '%d Bytes'),
'No commands to execute.' => 'Kein Kommando vorhanden.', 'No commands to execute.' => 'Kein Kommando vorhanden.',
'Unable to upload a file.' => 'Hochladen von Datei fehlgeschlagen.', 'Unable to upload a file.' => 'Hochladen von Datei fehlgeschlagen.',
@@ -227,7 +224,7 @@ $translations = array(
'Permanent login' => 'Passwort speichern', 'Permanent login' => 'Passwort speichern',
'Databases have been dropped.' => 'Datenbanken wurden entfernt.', 'Databases have been dropped.' => 'Datenbanken wurden entfernt.',
'Search data in tables' => 'Suche in Tabellen', 'Search data in tables' => 'Suche in Tabellen',
'as a regular expression' => null, 'as a regular expression' => 'als regulärer Ausdruck',
'Schema' => 'Schema', 'Schema' => 'Schema',
'Alter schema' => 'Schema ändern', 'Alter schema' => 'Schema ändern',
'Create schema' => 'Schema erstellen', 'Create schema' => 'Schema erstellen',
@@ -290,27 +287,33 @@ $translations = array(
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Das Master-Passwort ist abgelaufen. <a href="https://www.adminer.org/de/extension/"%s>Implementieren</a> Sie die %s Methode, um es permanent zu machen.', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Das Master-Passwort ist abgelaufen. <a href="https://www.adminer.org/de/extension/"%s>Implementieren</a> Sie die %s Methode, um es permanent zu machen.',
'%d / ' => '%d / ', '%d / ' => '%d / ',
'Drop %s?' => null, 'Drop %s?' => '%s entfernen?',
'Materialized view' => null, 'Materialized view' => 'Strukturierte Ansicht',
'Vacuum' => null, 'Vacuum' => 'Vacuum',
'overwrite' => null, 'overwrite' => 'überschreiben',
'DB' => null, 'DB' => 'DB',
'ATTACH queries are not supported.' => null, 'ATTACH queries are not supported.' => 'ATTACH Abfragen werden nicht unterstützt.',
'Warnings' => null, 'Warnings' => 'Warnungen',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer unterstützt den Zugriff auf eine Datenbank ohne Passwort nicht, <a href="https://www.adminer.org/en/password/"%s>mehr Informationen</a>.',
'Full table scan' => null, 'Full table scan' => 'Vollständige Überprüfung der Tabelle',
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => 'Die Aktion wird nach erfolgreicher Anmeldung mit denselben Anmeldedaten ausgeführt.',
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => 'Die Verbindung zu privilegierten Ports ist nicht erlaubt.',
'There is a space in the input password which might be the cause.' => null, 'There is a space in the input password which might be the cause.' => 'Es gibt ein Leerzeichen im Eingabepasswort, das die Ursache sein könnte.',
'Unknown error.' => null, 'Unknown error.' => 'Unbekannter Fehler.',
'Database does not support password.' => null, 'Database does not support password.' => 'Die Datenbank unterstützt kein Passwort.',
'Disable %s or enable %s or %s extensions.' => null, 'Disable %s or enable %s or %s extensions.' => 'Deaktivieren Sie %s oder aktivieren Sie die Erweiterungen %s oder %s.',
'Columns' => null, 'Columns' => 'Spalten',
'Nullable' => null, 'Nullable' => 'Nullbar',
'Default' => null, 'Default' => 'Standard',
'Yes' => 'Ja', 'Yes' => 'Ja',
'No' => 'Nein', 'No' => 'Nein',
'One Time Password' => null, 'One Time Password' => 'Einmal-Passwort',
'Invalid OTP code.' => null, 'Invalid OTP code.' => 'Ungültiger OTP-Code.',
'Schemas' => 'Schemata',
'No schemas.' => 'Keine Schemata.',
'Show schema' => 'Zeige Schemata',
'No driver' => 'Kein Treiber',
'Database driver not found.' => 'Datenbanktreiber nicht gefunden.',
); );

View File

@@ -80,7 +80,6 @@ $translations = array(
'Data' => 'Δεδομένα', 'Data' => 'Δεδομένα',
'Database' => 'Β. Δεδομένων', 'Database' => 'Β. Δεδομένων',
'database' => 'β. δεδομένων',
'Use' => 'χρήση', 'Use' => 'χρήση',
'Select database' => 'Επιλέξτε Β.Δ.', 'Select database' => 'Επιλέξτε Β.Δ.',
'Invalid database.' => 'Λανθασμένη Β.Δ.', 'Invalid database.' => 'Λανθασμένη Β.Δ.',
@@ -167,7 +166,6 @@ $translations = array(
'Options' => 'Επιλογές', 'Options' => 'Επιλογές',
'Comment' => 'Σχόλιο', 'Comment' => 'Σχόλιο',
'Default value' => 'Προεπιλεγμένη τιμή', 'Default value' => 'Προεπιλεγμένη τιμή',
'Default values' => 'Προεπιλεγμένες τιμές',
'Drop' => 'Διαγραφή', 'Drop' => 'Διαγραφή',
'Are you sure?' => 'Είστε σίγουρος;', 'Are you sure?' => 'Είστε σίγουρος;',
'Size' => 'Μέγεθος', 'Size' => 'Μέγεθος',
@@ -343,7 +341,6 @@ $translations = array(
'ATTACH queries are not supported.' => null, 'ATTACH queries are not supported.' => null,
'Warnings' => null, 'Warnings' => null,
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
'There is a space in the input password which might be the cause.' => null, 'There is a space in the input password which might be the cause.' => null,
@@ -358,4 +355,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -3,7 +3,7 @@ $translations = array(
'Home' => null, 'Home' => null,
'Login' => 'Login', 'Login' => 'Login',
'Logout successful.' => 'Sesión finalizada con éxito.', 'Logout successful.' => 'Sesión finalizada con éxito.',
'Invalid server or credentials.' => null, 'Invalid server or credentials.' => 'Servidor o credenciales no válidos.',
'Server' => 'Servidor', 'Server' => 'Servidor',
'Username' => 'Usuario', 'Username' => 'Usuario',
'Password' => 'Contraseña', 'Password' => 'Contraseña',
@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Crear Base de datos', 'Create database' => 'Crear Base de datos',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Logout' => 'Cerrar sesión', 'Logout' => 'Cerrar sesión',
'database' => 'base de datos',
'Use' => 'Usar', 'Use' => 'Usar',
'No tables.' => 'No existen tablas.', 'No tables.' => 'No existen tablas.',
'select' => 'registros', 'select' => 'registros',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'No es posible seleccionar la tabla', 'Unable to select the table' => 'No es posible seleccionar la tabla',
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Vuelva a enviar los datos del formulario.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Vuelva a enviar los datos del formulario.',
'Comment' => 'Comentario', 'Comment' => 'Comentario',
'Default values' => 'Valores predeterminados',
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'No commands to execute.' => 'No es posible ejecutar ningún comando.', 'No commands to execute.' => 'No es posible ejecutar ningún comando.',
'Unable to upload a file.' => 'No es posible importar el archivo.', 'Unable to upload a file.' => 'No es posible importar el archivo.',
@@ -226,7 +224,7 @@ $translations = array(
'Permanent login' => 'Guardar contraseña', 'Permanent login' => 'Guardar contraseña',
'Databases have been dropped.' => 'Bases de datos eliminadas.', 'Databases have been dropped.' => 'Bases de datos eliminadas.',
'Search data in tables' => 'Buscar datos en tablas', 'Search data in tables' => 'Buscar datos en tablas',
'as a regular expression' => null, 'as a regular expression' => 'como una expresión regular',
'Schema' => 'Esquema', 'Schema' => 'Esquema',
'Alter schema' => 'Modificar esquema', 'Alter schema' => 'Modificar esquema',
'Create schema' => 'Crear esquema', 'Create schema' => 'Crear esquema',
@@ -269,42 +267,41 @@ $translations = array(
'Edit all' => 'Editar todos', 'Edit all' => 'Editar todos',
'HH:MM:SS' => 'HH:MM:SS', 'HH:MM:SS' => 'HH:MM:SS',
'Drop %s?' => null, 'Drop %s?' => '¿Eliminar %s?',
'Tables have been optimized.' => null, 'Tables have been optimized.' => 'Tablas optimizadas.',
'Materialized view' => null, 'Materialized view' => 'Vista materializada',
'Vacuum' => null, 'Vacuum' => 'Vacio',
'Selected' => null, 'Selected' => 'Seleccionado',
'overwrite' => null, 'overwrite' => 'sobreescribir',
'DB' => null, 'DB' => 'DB',
'File must be in UTF-8 encoding.' => null, 'File must be in UTF-8 encoding.' => 'El archivo debe estar codificado en UTF-8.',
'Modify' => null, 'Modify' => 'Modificar',
'Load more data' => null, 'Load more data' => 'Cargar mas datos',
'Loading' => null, 'Loading' => 'Cargando',
'ATTACH queries are not supported.' => null, 'ATTACH queries are not supported.' => 'ATTACH consultas no está soportado.',
'Warnings' => null, 'Warnings' => 'Advertencias',
'%d / ' => array(), '%d / ' => '%d / ',
'Limit rows' => null, 'Limit rows' => 'Limitar filas',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer no soporta el acceso a bases de datos sin contraseña, <a href="https://www.adminer.org/en/password/"%s>más informacion</a>.',
'Default value' => null, 'Default value' => 'Valor por defecto',
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array('Demasiados intentos erroneos, pruebe de nuevo en %d minuto.', 'Demasiados intentos erroneos, pruebe de nuevo en %d minutos.'),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'La contraseña Maestra ha expirado. <a href="https://www.adminer.org/en/extension/"%s>Implementar</a> %s un metodo para hacerla permanente.',
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'The action will be performed after successful login with the same credentials.' => 'La acción se realizará tras iniciar sesión de nuevo con las mismas credenciales.',
'The action will be performed after successful login with the same credentials.' => null, 'Connecting to privileged ports is not allowed.' => 'La conexion a puertos especiales no está permitida.',
'Connecting to privileged ports is not allowed.' => null, 'There is a space in the input password which might be the cause.' => 'Hay un espacio en la contraseña introducida, lo que puede ser la causa.',
'There is a space in the input password which might be the cause.' => null, 'If you did not send this request from Adminer then close this page.' => 'Si no mandó ésta solicitud desde Adminer entonces cierre esta página.',
'If you did not send this request from Adminer then close this page.' => null, 'You can upload a big SQL file via FTP and import it from server.' => 'Puede cargar un fichero SQL grande por FTP e importarlo desde el servidor.',
'You can upload a big SQL file via FTP and import it from server.' => null, 'Size' => 'Tamaño',
'Size' => null, 'Compute' => 'Procesar',
'Compute' => null, 'You are offline.' => 'Se encuentra desconectado.',
'You are offline.' => null, 'You have no privileges to update this table.' => 'No tiene privilegios para actualizar esta tabla.',
'You have no privileges to update this table.' => null, 'Saving' => 'Guardando',
'Saving' => null, 'Unknown error.' => 'Error desconocido.',
'Unknown error.' => null, 'Database does not support password.' => 'La Base de Datos no soporta el uso de contraseña.',
'Database does not support password.' => null, 'Disable %s or enable %s or %s extensions.' => 'Deshabilitar %s o habilitar %s o %s extensiones.',
'Disable %s or enable %s or %s extensions.' => null, 'yes' => 'si',
'yes' => null, 'no' => 'no',
'no' => null,
'Columns' => null, 'Columns' => null,
'Nullable' => null, 'Nullable' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Loo uus andmebaas', 'Create database' => 'Loo uus andmebaas',
'SQL command' => 'SQL-Päring', 'SQL command' => 'SQL-Päring',
'Logout' => 'Logi välja', 'Logout' => 'Logi välja',
'database' => 'andmebaas',
'Use' => 'Kasuta', 'Use' => 'Kasuta',
'No tables.' => 'Tabeleid ei leitud.', 'No tables.' => 'Tabeleid ei leitud.',
'select' => 'kuva', 'select' => 'kuva',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Tabeli valimine ebaõnnestus', 'Unable to select the table' => 'Tabeli valimine ebaõnnestus',
'Invalid CSRF token. Send the form again.' => 'Sobimatu CSRF, palun postitage vorm uuesti.', 'Invalid CSRF token. Send the form again.' => 'Sobimatu CSRF, palun postitage vorm uuesti.',
'Comment' => 'Kommentaar', 'Comment' => 'Kommentaar',
'Default values' => 'Vaikimisi väärtused',
'%d byte(s)' => array('%d bait', '%d baiti'), '%d byte(s)' => array('%d bait', '%d baiti'),
'No commands to execute.' => 'Käsk puudub.', 'No commands to execute.' => 'Käsk puudub.',
'Unable to upload a file.' => 'Faili üleslaadimine pole võimalik.', 'Unable to upload a file.' => 'Faili üleslaadimine pole võimalik.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -78,7 +78,6 @@ $translations = array(
'Data' => 'داده', 'Data' => 'داده',
'Database' => 'پایگاه داده', 'Database' => 'پایگاه داده',
'database' => 'پایگاه داده',
'Use' => 'استفاده', 'Use' => 'استفاده',
'Select database' => 'انتخاب پایگاه داده', 'Select database' => 'انتخاب پایگاه داده',
'Invalid database.' => 'پایگاه داده نامعتبر.', 'Invalid database.' => 'پایگاه داده نامعتبر.',
@@ -165,7 +164,6 @@ $translations = array(
'Options' => 'اختیارات', 'Options' => 'اختیارات',
'Comment' => 'توضیح', 'Comment' => 'توضیح',
'Default value' => 'مقدار پیش فرض', 'Default value' => 'مقدار پیش فرض',
'Default values' => 'مقادیر پیش فرض',
'Drop' => 'حذف', 'Drop' => 'حذف',
'Are you sure?' => 'مطمئن هستید؟', 'Are you sure?' => 'مطمئن هستید؟',
'Size' => 'حجم', 'Size' => 'حجم',
@@ -341,7 +339,6 @@ $translations = array(
'ATTACH queries are not supported.' => null, 'ATTACH queries are not supported.' => null,
'Warnings' => null, 'Warnings' => null,
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
'There is a space in the input password which might be the cause.' => null, 'There is a space in the input password which might be the cause.' => null,
@@ -358,4 +355,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -80,7 +80,6 @@ $translations = array(
'Data' => 'Data', 'Data' => 'Data',
'Database' => 'Tietokanta', 'Database' => 'Tietokanta',
'database' => 'tietokanta',
'Use' => 'Käytä', 'Use' => 'Käytä',
'Select database' => 'Valitse tietokanta', 'Select database' => 'Valitse tietokanta',
'Invalid database.' => 'Tietokanta ei kelpaa.', 'Invalid database.' => 'Tietokanta ei kelpaa.',
@@ -167,7 +166,6 @@ $translations = array(
'Options' => 'Asetukset', 'Options' => 'Asetukset',
'Comment' => 'Kommentit', 'Comment' => 'Kommentit',
'Default value' => 'Oletusarvo', 'Default value' => 'Oletusarvo',
'Default values' => 'Oletusarvot',
'Drop' => 'Poista', 'Drop' => 'Poista',
'Are you sure?' => 'Oletko varma?', 'Are you sure?' => 'Oletko varma?',
'Size' => 'Koko', 'Size' => 'Koko',
@@ -337,7 +335,6 @@ $translations = array(
'Type has been created.' => 'Tyyppi luotiin.', 'Type has been created.' => 'Tyyppi luotiin.',
'Alter type' => 'Muuta tyyppiä', 'Alter type' => 'Muuta tyyppiä',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Kiitos, kun käytät Admineriä, voit <a href="https://www.adminer.org/en/donation/">tehdä lahjoituksen tästä</a>.',
'Drop %s?' => 'Poistetaanko %s?', 'Drop %s?' => 'Poistetaanko %s?',
'overwrite' => 'kirjoittaen päälle', 'overwrite' => 'kirjoittaen päälle',
'DB' => 'TK', 'DB' => 'TK',
@@ -358,4 +355,10 @@ $translations = array(
'No' => 'Ei', 'No' => 'Ei',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -31,7 +31,6 @@ $translations = array(
'Create database' => 'Créer une base de données', 'Create database' => 'Créer une base de données',
'SQL command' => 'Requête SQL', 'SQL command' => 'Requête SQL',
'Logout' => 'Déconnexion', 'Logout' => 'Déconnexion',
'database' => 'base de données',
'Use' => 'Utiliser', 'Use' => 'Utiliser',
'No tables.' => 'Aucune table.', 'No tables.' => 'Aucune table.',
'select' => 'select', 'select' => 'select',
@@ -68,7 +67,6 @@ $translations = array(
'Unable to select the table' => 'Impossible de sélectionner la table', 'Unable to select the table' => 'Impossible de sélectionner la table',
'Invalid CSRF token. Send the form again.' => 'Token CSRF invalide. Veuillez renvoyer le formulaire.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF invalide. Veuillez renvoyer le formulaire.',
'Comment' => 'Commentaire', 'Comment' => 'Commentaire',
'Default values' => 'Valeurs par défaut',
'%d byte(s)' => array('%d octet', '%d octets'), '%d byte(s)' => array('%d octet', '%d octets'),
'No commands to execute.' => 'Aucune commande à exécuter.', 'No commands to execute.' => 'Aucune commande à exécuter.',
'Unable to upload a file.' => 'Impossible d\'importer le fichier.', 'Unable to upload a file.' => 'Impossible d\'importer le fichier.',
@@ -298,7 +296,6 @@ $translations = array(
'ATTACH queries are not supported.' => 'Requêtes ATTACH ne sont pas supportées.', 'ATTACH queries are not supported.' => 'Requêtes ATTACH ne sont pas supportées.',
'Warnings' => 'Avertissements', 'Warnings' => 'Avertissements',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ne supporte pas l\'accès aux bases de données sans mot de passe, <a href="https://www.adminer.org/en/password/"%s>plus d\'information</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ne supporte pas l\'accès aux bases de données sans mot de passe, <a href="https://www.adminer.org/en/password/"%s>plus d\'information</a>.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'The action will be performed after successful login with the same credentials.' => 'Cette action sera exécutée après s\'être connecté avec les mêmes données de connexion.', 'The action will be performed after successful login with the same credentials.' => 'Cette action sera exécutée après s\'être connecté avec les mêmes données de connexion.',
'Connecting to privileged ports is not allowed.' => 'La connexion aux ports privilégiés n\'est pas autorisée.', 'Connecting to privileged ports is not allowed.' => 'La connexion aux ports privilégiés n\'est pas autorisée.',
'There is a space in the input password which might be the cause.' => 'Il y a un espace dans le mot de passe entré qui pourrait en être la cause.', 'There is a space in the input password which might be the cause.' => 'Il y a un espace dans le mot de passe entré qui pourrait en être la cause.',
@@ -313,4 +310,10 @@ $translations = array(
'No' => 'Non', 'No' => 'Non',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Crear Base de datos', 'Create database' => 'Crear Base de datos',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Logout' => 'Pechar sesión', 'Logout' => 'Pechar sesión',
'database' => 'base de datos',
'Use' => 'Usar', 'Use' => 'Usar',
'No tables.' => 'Nengunha táboa.', 'No tables.' => 'Nengunha táboa.',
'select' => 'selecciona', 'select' => 'selecciona',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'No é posible seleccionar a táboa', 'Unable to select the table' => 'No é posible seleccionar a táboa',
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Envíe de novo os datos do formulario.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Envíe de novo os datos do formulario.',
'Comment' => 'Comentario', 'Comment' => 'Comentario',
'Default values' => 'Valores predeterminados',
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'No commands to execute.' => 'Non hai comandos para executar.', 'No commands to execute.' => 'Non hai comandos para executar.',
'Unable to upload a file.' => 'Non é posible importar o ficheiro.', 'Unable to upload a file.' => 'Non é posible importar o ficheiro.',
@@ -298,7 +296,6 @@ $translations = array(
'ATTACH queries are not supported.' => null, 'ATTACH queries are not supported.' => null,
'Warnings' => null, 'Warnings' => null,
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
'There is a space in the input password which might be the cause.' => null, 'There is a space in the input password which might be the cause.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => 'Non', 'No' => 'Non',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -31,7 +31,6 @@ $translations = array(
'Create database' => 'צור מסד נתונים', 'Create database' => 'צור מסד נתונים',
'SQL command' => 'שאילתת SQL', 'SQL command' => 'שאילתת SQL',
'Logout' => 'התנתק', 'Logout' => 'התנתק',
'database' => 'מסד נתונים',
'Use' => 'השתמש', 'Use' => 'השתמש',
'No tables.' => 'אין טבלאות', 'No tables.' => 'אין טבלאות',
'select' => 'בחר', 'select' => 'בחר',
@@ -68,7 +67,6 @@ $translations = array(
'Unable to select the table' => 'בחירת הטבלה נכשלה', 'Unable to select the table' => 'בחירת הטבלה נכשלה',
'Invalid CSRF token. Send the form again.' => 'כשל באבטחת נתונים, שלח טופס שוב', 'Invalid CSRF token. Send the form again.' => 'כשל באבטחת נתונים, שלח טופס שוב',
'Comment' => 'הערה', 'Comment' => 'הערה',
'Default values' => 'ערכי ברירת מחדל',
'%d byte(s)' => '%d בתים', '%d byte(s)' => '%d בתים',
'No commands to execute.' => 'לא נמצאו פקודות להרצה', 'No commands to execute.' => 'לא נמצאו פקודות להרצה',
'Unable to upload a file.' => 'העלאת הקובץ נכשלה', 'Unable to upload a file.' => 'העלאת הקובץ נכשלה',
@@ -282,7 +280,6 @@ $translations = array(
'Default value' => 'ערך ברירת מחדל', 'Default value' => 'ערך ברירת מחדל',
'Full table scan' => 'סריקה טבלה מלאה', 'Full table scan' => 'סריקה טבלה מלאה',
'Too many unsuccessful logins, try again in %d minute(s).' => 'יותר מידי נסיונות כניסה נכשלו, אנא נסה עוד %d דקות', 'Too many unsuccessful logins, try again in %d minute(s).' => 'יותר מידי נסיונות כניסה נכשלו, אנא נסה עוד %d דקות',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'תודה שהשתמש ב-adminer אנא שקול <a href="https://www.adminer.org/en/donation/">לתרום</a>.',
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'סיסמת המאסטר פגה <a href="https://www.adminer.org/en/extension/"%s>התקן תוסף</a> על מנת להפוך את זה לתמידי', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'סיסמת המאסטר פגה <a href="https://www.adminer.org/en/extension/"%s>התקן תוסף</a> על מנת להפוך את זה לתמידי',
'If you did not send this request from Adminer then close this page.' => 'אם לא אתה שלחת בקשה ל-Adminer הינך יכול לסגור חלון זה', 'If you did not send this request from Adminer then close this page.' => 'אם לא אתה שלחת בקשה ל-Adminer הינך יכול לסגור חלון זה',
'You can upload a big SQL file via FTP and import it from server.' => 'ניתן לעלות קבצים ב-FTP ואז למשוך אותם מהשרת', 'You can upload a big SQL file via FTP and import it from server.' => 'ניתן לעלות קבצים ב-FTP ואז למשוך אותם מהשרת',
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Adatbázis létrehozása', 'Create database' => 'Adatbázis létrehozása',
'SQL command' => 'SQL parancs', 'SQL command' => 'SQL parancs',
'Logout' => 'Kilépés', 'Logout' => 'Kilépés',
'database' => 'adatbázis',
'Use' => 'Használ', 'Use' => 'Használ',
'No tables.' => 'Nincs tábla.', 'No tables.' => 'Nincs tábla.',
'select' => 'kiválasztás', 'select' => 'kiválasztás',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Nem tudom kiválasztani a táblát', 'Unable to select the table' => 'Nem tudom kiválasztani a táblát',
'Invalid CSRF token. Send the form again.' => 'Érvénytelen CSRF azonosító. Küldd újra az űrlapot.', 'Invalid CSRF token. Send the form again.' => 'Érvénytelen CSRF azonosító. Küldd újra az űrlapot.',
'Comment' => 'Megjegyzés', 'Comment' => 'Megjegyzés',
'Default values' => 'Alapértelmezett értékek',
'%d byte(s)' => array('%d bájt', '%d bájt', '%d bájt'), '%d byte(s)' => array('%d bájt', '%d bájt', '%d bájt'),
'No commands to execute.' => 'Nincs végrehajtható parancs.', 'No commands to execute.' => 'Nincs végrehajtható parancs.',
'Unable to upload a file.' => 'Nem tudom feltölteni a fájlt.', 'Unable to upload a file.' => 'Nem tudom feltölteni a fájlt.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -74,7 +74,6 @@ $translations = array(
'Data' => 'Data', 'Data' => 'Data',
'Database' => 'Basis data', 'Database' => 'Basis data',
'database' => 'basis data',
'Use' => 'Gunakan', 'Use' => 'Gunakan',
'Select database' => 'Pilih basis data', 'Select database' => 'Pilih basis data',
'Invalid database.' => 'Basis data tidak sah.', 'Invalid database.' => 'Basis data tidak sah.',
@@ -159,7 +158,6 @@ $translations = array(
'Auto Increment' => 'Inkrementasi Otomatis', 'Auto Increment' => 'Inkrementasi Otomatis',
'Options' => 'Opsi', 'Options' => 'Opsi',
'Comment' => 'Komentar', 'Comment' => 'Komentar',
'Default values' => 'Nilai bawaan',
'Drop' => 'Hapus', 'Drop' => 'Hapus',
'Are you sure?' => 'Anda yakin?', 'Are you sure?' => 'Anda yakin?',
'Move up' => 'Naik', 'Move up' => 'Naik',
@@ -335,7 +333,6 @@ $translations = array(
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Default value' => null, 'Default value' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -358,4 +355,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Crea database', 'Create database' => 'Crea database',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Logout' => 'Esci', 'Logout' => 'Esci',
'database' => 'database',
'Use' => 'Usa', 'Use' => 'Usa',
'No tables.' => 'No tabelle.', 'No tables.' => 'No tabelle.',
'select' => 'seleziona', 'select' => 'seleziona',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Selezione della tabella non riuscita', 'Unable to select the table' => 'Selezione della tabella non riuscita',
'Invalid CSRF token. Send the form again.' => 'Token CSRF non valido. Reinvia la richiesta.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF non valido. Reinvia la richiesta.',
'Comment' => 'Commento', 'Comment' => 'Commento',
'Default values' => 'Valori predefiniti',
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'No commands to execute.' => 'Nessun commando da eseguire.', 'No commands to execute.' => 'Nessun commando da eseguire.',
'Unable to upload a file.' => 'Caricamento del file non riuscito.', 'Unable to upload a file.' => 'Caricamento del file non riuscito.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => 'Valore predefinito', 'Default value' => 'Valore predefinito',
'Full table scan' => 'Analizza intera tabella', 'Full table scan' => 'Analizza intera tabella',
'Too many unsuccessful logins, try again in %d minute(s).' => array('Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuto.', 'Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuti.'), 'Too many unsuccessful logins, try again in %d minute(s).' => array('Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuto.', 'Troppi tentativi infruttuosi di login, si prega di riprovare in %d minuti.'),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'La password principale é scaduta. <a href="https://www.adminer.org/it/extension/"%s>Implementare</a> %s come metodo per renderla permanente.', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'La password principale é scaduta. <a href="https://www.adminer.org/it/extension/"%s>Implementare</a> %s come metodo per renderla permanente.',
'The action will be performed after successful login with the same credentials.' => 'La azione verrá eseguita dopo un login valido con le stesse credenziali.', 'The action will be performed after successful login with the same credentials.' => 'La azione verrá eseguita dopo un login valido con le stesse credenziali.',
'Connecting to privileged ports is not allowed.' => 'LA connessione a porte privilegiate non é permessa.', 'Connecting to privileged ports is not allowed.' => 'LA connessione a porte privilegiate non é permessa.',
@@ -313,4 +310,10 @@ $translations = array(
'No' => 'No', 'No' => 'No',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'データベースを作成', 'Create database' => 'データベースを作成',
'SQL command' => 'SQLコマンド', 'SQL command' => 'SQLコマンド',
'Logout' => 'ログアウト', 'Logout' => 'ログアウト',
'database' => 'データベース',
'Use' => '使用', 'Use' => '使用',
'No tables.' => 'テーブルがありません。', 'No tables.' => 'テーブルがありません。',
'select' => '選択', 'select' => '選択',
@@ -69,7 +68,6 @@ $translations = array(
'Unable to select the table' => 'テーブルを選択できません', 'Unable to select the table' => 'テーブルを選択できません',
'Invalid CSRF token. Send the form again.' => '不正なCSRFトークン。再送信してください', 'Invalid CSRF token. Send the form again.' => '不正なCSRFトークン。再送信してください',
'Comment' => 'コメント', 'Comment' => 'コメント',
'Default values' => '規定値',
'%d byte(s)' => '%d バイト', '%d byte(s)' => '%d バイト',
'No commands to execute.' => '実行するコマンドがありません', 'No commands to execute.' => '実行するコマンドがありません',
'Unable to upload a file.' => 'ファイルをアップロードできません', 'Unable to upload a file.' => 'ファイルをアップロードできません',
@@ -293,7 +291,6 @@ $translations = array(
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'ბაზის შექმნა', 'Create database' => 'ბაზის შექმნა',
'SQL command' => 'SQL-ბრძანება', 'SQL command' => 'SQL-ბრძანება',
'Logout' => 'გასვლა', 'Logout' => 'გასვლა',
'database' => 'ბაზა',
'Use' => 'არჩევა', 'Use' => 'არჩევა',
'No tables.' => 'ბაზაში ცხრილი არაა.', 'No tables.' => 'ბაზაში ცხრილი არაა.',
'select' => 'არჩევა', 'select' => 'არჩევა',
@@ -69,7 +68,6 @@ $translations = array(
'Unable to select the table' => 'ცხრილიდან ინფორმაცია ვერ მოვიპოვე', 'Unable to select the table' => 'ცხრილიდან ინფორმაცია ვერ მოვიპოვე',
'Invalid CSRF token. Send the form again.' => 'უმოქმედო CSRF-ტოკენი. ფორმის კიდევ ერთხელ გაგზავნა.', 'Invalid CSRF token. Send the form again.' => 'უმოქმედო CSRF-ტოკენი. ფორმის კიდევ ერთხელ გაგზავნა.',
'Comment' => 'კომენტარები', 'Comment' => 'კომენტარები',
'Default values' => 'სტანდარტული მნიშვნელობა',
'%d byte(s)' => '%d ბაიტი', '%d byte(s)' => '%d ბაიტი',
'No commands to execute.' => 'შესასრულებელი ბრძანება არაა.', 'No commands to execute.' => 'შესასრულებელი ბრძანება არაა.',
'Unable to upload a file.' => 'ფაილი არ აიტვირთა სერვერზე.', 'Unable to upload a file.' => 'ფაილი არ აიტვირთა სერვერზე.',
@@ -296,7 +294,6 @@ $translations = array(
'Warnings' => 'გაფრთხილება', 'Warnings' => 'გაფრთხილება',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'უპაროლო წვდომა ბაზასთან არაა დაშვებული Adminer-ში, მეტი ინფორმაციისთვის ეწვიეთ <a href="https://www.adminer.org/en/password/"%s>ბმულს</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'უპაროლო წვდომა ბაზასთან არაა დაშვებული Adminer-ში, მეტი ინფორმაციისთვის ეწვიეთ <a href="https://www.adminer.org/en/password/"%s>ბმულს</a>.',
'DB' => 'ბაზა', 'DB' => 'ბაზა',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'მადლობას გიხდით Adminer-ით სარგებლობისთვის, გადახედეთ ბმულს <a href="https://www.adminer.org/en/donation/">შემოწირულობა</a>.',
'The action will be performed after successful login with the same credentials.' => 'მოქმედება შესრულდება იგივე მომხმარებლით წარმატებული ავტორიზაციის შემდეგ.', 'The action will be performed after successful login with the same credentials.' => 'მოქმედება შესრულდება იგივე მომხმარებლით წარმატებული ავტორიზაციის შემდეგ.',
'Connecting to privileged ports is not allowed.' => 'პრივილეგირებულ პორტთან წვდომა დაუშვებელია.', 'Connecting to privileged ports is not allowed.' => 'პრივილეგირებულ პორტთან წვდომა დაუშვებელია.',
'There is a space in the input password which might be the cause.' => 'პაროლში არის გამოტოვება, შეიძლება ეს ქმნის პრობლემას.', 'There is a space in the input password which might be the cause.' => 'პაროლში არის გამოტოვება, შეიძლება ეს ქმნის პრობლემას.',
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -72,11 +72,9 @@ $translations = array(
'Database has been dropped.' => '데이터베이스를 삭제했습니다.', 'Database has been dropped.' => '데이터베이스를 삭제했습니다.',
'Database has been renamed.' => '데이터베이스의 이름을 바꾸었습니다.', 'Database has been renamed.' => '데이터베이스의 이름을 바꾸었습니다.',
'Database schema' => '데이터베이스 구조', 'Database schema' => '데이터베이스 구조',
'database' => '데이터베이스',
'Database' => '데이터베이스', 'Database' => '데이터베이스',
'Databases have been dropped.' => '데이터베이스를 삭제했습니다.', 'Databases have been dropped.' => '데이터베이스를 삭제했습니다.',
'Date and time' => '시간', 'Date and time' => '시간',
'Default values' => '기본값',
'Delete' => '삭제', 'Delete' => '삭제',
'descending' => '역순', 'descending' => '역순',
'Drop' => '삭제', 'Drop' => '삭제',
@@ -294,7 +292,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -74,7 +74,6 @@ $translations = array(
'Data' => 'Duomenys', 'Data' => 'Duomenys',
'Database' => 'Duomenų bazė', 'Database' => 'Duomenų bazė',
'database' => 'duomenų bazė',
'Use' => 'Naudoti', 'Use' => 'Naudoti',
'Select database' => 'Pasirinkti duomenų bazę', 'Select database' => 'Pasirinkti duomenų bazę',
'Invalid database.' => 'Neteisinga duomenų bazė.', 'Invalid database.' => 'Neteisinga duomenų bazė.',
@@ -158,7 +157,6 @@ $translations = array(
'Auto Increment' => 'Auto Increment', 'Auto Increment' => 'Auto Increment',
'Options' => 'Nustatymai', 'Options' => 'Nustatymai',
'Comment' => 'Komentaras', 'Comment' => 'Komentaras',
'Default values' => 'Reikšmės pagal nutylėjimą',
'Drop' => 'Pašalinti', 'Drop' => 'Pašalinti',
'Are you sure?' => 'Tikrai?', 'Are you sure?' => 'Tikrai?',
'Move up' => 'Perkelti į viršų', 'Move up' => 'Perkelti į viršų',
@@ -333,7 +331,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -358,4 +355,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Izveidot datubāzi', 'Create database' => 'Izveidot datubāzi',
'SQL command' => 'SQL pieprasījums', 'SQL command' => 'SQL pieprasījums',
'Logout' => 'Iziet', 'Logout' => 'Iziet',
'database' => 'datubāze',
'Use' => 'Lietot', 'Use' => 'Lietot',
'No tables.' => 'Datubāzē nav tabulu.', 'No tables.' => 'Datubāzē nav tabulu.',
'select' => 'izvēlēties', 'select' => 'izvēlēties',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Tabula nav pieejama', 'Unable to select the table' => 'Tabula nav pieejama',
'Invalid CSRF token. Send the form again.' => 'Nederīgs CSRF žetons. Nosūtiet formu vēl vienu reizi.', 'Invalid CSRF token. Send the form again.' => 'Nederīgs CSRF žetons. Nosūtiet formu vēl vienu reizi.',
'Comment' => 'Komentārs', 'Comment' => 'Komentārs',
'Default values' => 'Noklusētā vērtība',
'%d byte(s)' => array('%d baits', '%d baiti', '%d baiti'), '%d byte(s)' => array('%d baits', '%d baiti', '%d baiti'),
'No commands to execute.' => 'Nav izpildāmu komandu.', 'No commands to execute.' => 'Nav izpildāmu komandu.',
'Unable to upload a file.' => 'Neizdevās ielādēt failu uz servera.', 'Unable to upload a file.' => 'Neizdevās ielādēt failu uz servera.',
@@ -297,7 +295,6 @@ $translations = array(
'DB' => 'DB', 'DB' => 'DB',
'Warnings' => 'Brīdinājumi', 'Warnings' => 'Brīdinājumi',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer neatbalsta pieeju bez paroles, <a href="https://www.adminer.org/en/password/"%s>vairāk informācijas šeit</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer neatbalsta pieeju bez paroles, <a href="https://www.adminer.org/en/password/"%s>vairāk informācijas šeit</a>.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Paldies, ka izmantoji Adminer, vai vēlies veikt <a href="https://www.adminer.org/en/donation/">ziedojumu</a>.',
'The action will be performed after successful login with the same credentials.' => 'Darbība tiks pabeigta pēc derīgas pieteikšanās sistēmā.', 'The action will be performed after successful login with the same credentials.' => 'Darbība tiks pabeigta pēc derīgas pieteikšanās sistēmā.',
'Connecting to privileged ports is not allowed.' => 'Pieeja priviliģētiem portiem nav atļauta.', 'Connecting to privileged ports is not allowed.' => 'Pieeja priviliģētiem portiem nav atļauta.',
'There is a space in the input password which might be the cause.' => 'Parole satur atstarpi, kas varētu būt lieka.', 'There is a space in the input password which might be the cause.' => 'Parole satur atstarpi, kas varētu būt lieka.',
@@ -313,4 +310,10 @@ $translations = array(
'No' => 'Nē', 'No' => 'Nē',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -11,7 +11,6 @@ $translations = array(
'Logout' => 'Log keluar', 'Logout' => 'Log keluar',
'Logged as: %s' => 'Log masuk sebagai: %s', 'Logged as: %s' => 'Log masuk sebagai: %s',
'Logout successful.' => 'Log keluar berjaya.', 'Logout successful.' => 'Log keluar berjaya.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href="https://www.adminer.org/en/donation/">menderma</a>.',
'Invalid server or credentials.' => null, 'Invalid server or credentials.' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.', 'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.',
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Kata laluan utama telah luput. <a href="https://www.adminer.org/en/extension/"%s>Gunakan</a> cara %s untuk mengekalkannya.', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Kata laluan utama telah luput. <a href="https://www.adminer.org/en/extension/"%s>Gunakan</a> cara %s untuk mengekalkannya.',
@@ -83,7 +82,6 @@ $translations = array(
'Data' => 'Data', 'Data' => 'Data',
'Database' => 'Pangkalan data', 'Database' => 'Pangkalan data',
'database' => 'pangkalan data',
'Use' => 'Guna', 'Use' => 'Guna',
'Select database' => 'Pilih pangkalan data', 'Select database' => 'Pilih pangkalan data',
'Invalid database.' => 'Pangkalan data tidak sah.', 'Invalid database.' => 'Pangkalan data tidak sah.',
@@ -170,7 +168,6 @@ $translations = array(
'Options' => 'Pilihan', 'Options' => 'Pilihan',
'Comment' => 'Komen', 'Comment' => 'Komen',
'Default value' => 'Nilai lalai', 'Default value' => 'Nilai lalai',
'Default values' => 'Nilai lalai',
'Drop' => 'Jatuh', 'Drop' => 'Jatuh',
'Drop %s?' => 'Jatuhkan %s?', 'Drop %s?' => 'Jatuhkan %s?',
'Are you sure?' => 'Anda pasti?', 'Are you sure?' => 'Anda pasti?',
@@ -358,4 +355,10 @@ $translations = array(
'No' => 'Tidak', 'No' => 'Tidak',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -33,7 +33,6 @@ $translations = array(
'Create database' => 'Database aanmaken', 'Create database' => 'Database aanmaken',
'SQL command' => 'SQL opdracht', 'SQL command' => 'SQL opdracht',
'Logout' => 'Afmelden', 'Logout' => 'Afmelden',
'database' => 'database',
'Use' => 'Gebruik', 'Use' => 'Gebruik',
'No tables.' => 'Geen tabellen.', 'No tables.' => 'Geen tabellen.',
'select' => 'kies', 'select' => 'kies',
@@ -71,7 +70,6 @@ $translations = array(
'Unable to select the table' => 'Onmogelijk tabel te selecteren', 'Unable to select the table' => 'Onmogelijk tabel te selecteren',
'Invalid CSRF token. Send the form again.' => 'Ongeldig CSRF token. Verstuur het formulier opnieuw.', 'Invalid CSRF token. Send the form again.' => 'Ongeldig CSRF token. Verstuur het formulier opnieuw.',
'Comment' => 'Commentaar', 'Comment' => 'Commentaar',
'Default values' => 'Standaard waarden',
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'No commands to execute.' => 'Geen opdrachten uit te voeren.', 'No commands to execute.' => 'Geen opdrachten uit te voeren.',
'Unable to upload a file.' => 'Onmogelijk bestand te uploaden.', 'Unable to upload a file.' => 'Onmogelijk bestand te uploaden.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => 'Standaardwaarde', 'Default value' => 'Standaardwaarde',
'Full table scan' => 'Full table scan', 'Full table scan' => 'Full table scan',
'Too many unsuccessful logins, try again in %d minute(s).' => array('Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuut.', 'Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuten.'), 'Too many unsuccessful logins, try again in %d minute(s).' => array('Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuut.', 'Teveel foutieve aanmeldpogingen, probeer opnieuw binnen %d minuten.'),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master wachtwoord verlopen. <a href="https://www.adminer.org/en/extension/"%s>Implementeer</a> de %s methode om het permanent te maken.', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master wachtwoord verlopen. <a href="https://www.adminer.org/en/extension/"%s>Implementeer</a> de %s methode om het permanent te maken.',
'The action will be performed after successful login with the same credentials.' => 'Deze actie zal uitgevoerd worden na het succesvol aanmelden met dezelfde gebruikersgegevens', 'The action will be performed after successful login with the same credentials.' => 'Deze actie zal uitgevoerd worden na het succesvol aanmelden met dezelfde gebruikersgegevens',
'Connecting to privileged ports is not allowed.' => 'Verbindingen naar geprivilegieerde poorten is niet toegestaan.', 'Connecting to privileged ports is not allowed.' => 'Verbindingen naar geprivilegieerde poorten is niet toegestaan.',
@@ -313,4 +310,10 @@ $translations = array(
'No' => 'Neen', 'No' => 'Neen',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -65,7 +65,6 @@ $translations = array(
'Format' => 'Format', 'Format' => 'Format',
'Data' => 'Data', 'Data' => 'Data',
'Database' => 'Database', 'Database' => 'Database',
'database' => 'database',
'Use' => 'Bruk', 'Use' => 'Bruk',
'Select database' => 'Velg database', 'Select database' => 'Velg database',
'Invalid database.' => 'Ugyldig database.', 'Invalid database.' => 'Ugyldig database.',
@@ -144,7 +143,6 @@ $translations = array(
'Auto Increment' => 'Autoinkrement', 'Auto Increment' => 'Autoinkrement',
'Options' => 'Valg', 'Options' => 'Valg',
'Comment' => 'Kommentarer', 'Comment' => 'Kommentarer',
'Default values' => 'Standardverdier',
'Drop' => 'Dropp', 'Drop' => 'Dropp',
'Are you sure?' => 'Er du sikker?', 'Are you sure?' => 'Er du sikker?',
'Move up' => 'Flytt opp', 'Move up' => 'Flytt opp',
@@ -294,7 +292,6 @@ $translations = array(
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Default value' => null, 'Default value' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
'There is a space in the input password which might be the cause.' => null, 'There is a space in the input password which might be the cause.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => 'Nei', 'No' => 'Nei',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -11,7 +11,6 @@ $translations = array(
'Logout' => 'Wyloguj', 'Logout' => 'Wyloguj',
'Logged as: %s' => 'Zalogowany jako: %s', 'Logged as: %s' => 'Zalogowany jako: %s',
'Logout successful.' => 'Wylogowano pomyślnie.', 'Logout successful.' => 'Wylogowano pomyślnie.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ proszę <a href="https://www.adminer.org/pl/donation/">dotację</a>.',
'Invalid server or credentials.' => 'Nieprawidłowy serwer lub dane logowania.', 'Invalid server or credentials.' => 'Nieprawidłowy serwer lub dane logowania.',
'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'), 'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="https://www.adminer.org/pl/extension/"%s>Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="https://www.adminer.org/pl/extension/"%s>Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
@@ -82,7 +81,6 @@ $translations = array(
'Data' => 'Dane', 'Data' => 'Dane',
'Database' => 'Baza danych', 'Database' => 'Baza danych',
'database' => 'baza danych',
'Use' => 'Wybierz', 'Use' => 'Wybierz',
'Select database' => 'Wybierz bazę danych', 'Select database' => 'Wybierz bazę danych',
'Invalid database.' => 'Nie znaleziono bazy danych.', 'Invalid database.' => 'Nie znaleziono bazy danych.',
@@ -169,7 +167,6 @@ $translations = array(
'Options' => 'Opcje', 'Options' => 'Opcje',
'Comment' => 'Komentarz', 'Comment' => 'Komentarz',
'Default value' => 'Wartość domyślna', 'Default value' => 'Wartość domyślna',
'Default values' => 'Wartości domyślne',
'Drop' => 'Usuń', 'Drop' => 'Usuń',
'Drop %s?' => 'Usunąć %s?', 'Drop %s?' => 'Usunąć %s?',
'Are you sure?' => 'Czy jesteś pewien?', 'Are you sure?' => 'Czy jesteś pewien?',
@@ -358,4 +355,10 @@ $translations = array(
'No' => 'Nie', 'No' => 'Nie',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Criar Base de dados', 'Create database' => 'Criar Base de dados',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Logout' => 'Sair', 'Logout' => 'Sair',
'database' => 'base de dados',
'Use' => 'Usar', 'Use' => 'Usar',
'No tables.' => 'Não existem tabelas.', 'No tables.' => 'Não existem tabelas.',
'select' => 'selecionar', 'select' => 'selecionar',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Não é possível selecionar a Tabela', 'Unable to select the table' => 'Não é possível selecionar a Tabela',
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulário novamente.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulário novamente.',
'Comment' => 'Comentário', 'Comment' => 'Comentário',
'Default values' => 'Valores padrões',
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'No commands to execute.' => 'Nenhum comando para executar.', 'No commands to execute.' => 'Nenhum comando para executar.',
'Unable to upload a file.' => 'Não é possível enviar o arquivo.', 'Unable to upload a file.' => 'Não é possível enviar o arquivo.',
@@ -287,7 +285,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Criar Base de dados', 'Create database' => 'Criar Base de dados',
'SQL command' => 'Comando SQL', 'SQL command' => 'Comando SQL',
'Logout' => 'Terminar sessão', 'Logout' => 'Terminar sessão',
'database' => 'base de dados',
'Use' => 'Usar', 'Use' => 'Usar',
'No tables.' => 'Não existem tabelas.', 'No tables.' => 'Não existem tabelas.',
'select' => 'registos', 'select' => 'registos',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Não é possivel selecionar a Tabela', 'Unable to select the table' => 'Não é possivel selecionar a Tabela',
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulario novamente.', 'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulario novamente.',
'Comment' => 'Comentário', 'Comment' => 'Comentário',
'Default values' => 'Valores predeterminados',
'%d byte(s)' => array('%d byte', '%d bytes'), '%d byte(s)' => array('%d byte', '%d bytes'),
'No commands to execute.' => 'Nenhum comando para executar.', 'No commands to execute.' => 'Nenhum comando para executar.',
'Unable to upload a file.' => 'Não é possível enviar o ficheiro.', 'Unable to upload a file.' => 'Não é possível enviar o ficheiro.',
@@ -287,7 +285,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Crează baza de date', 'Create database' => 'Crează baza de date',
'SQL command' => 'SQL query', 'SQL command' => 'SQL query',
'Logout' => 'Ieșire', 'Logout' => 'Ieșire',
'database' => 'baza de date',
'Use' => 'Alege', 'Use' => 'Alege',
'No tables.' => 'În baza de date nu sunt tabele.', 'No tables.' => 'În baza de date nu sunt tabele.',
'select' => 'selectează', 'select' => 'selectează',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Nu am putut selecta date din tabel', 'Unable to select the table' => 'Nu am putut selecta date din tabel',
'Invalid CSRF token. Send the form again.' => 'CSRF token imposibil. Retrimite forma.', 'Invalid CSRF token. Send the form again.' => 'CSRF token imposibil. Retrimite forma.',
'Comment' => 'Comentariu', 'Comment' => 'Comentariu',
'Default values' => 'Valoarea inițială',
'%d byte(s)' => array('%d octet', '%d octeți'), '%d byte(s)' => array('%d octet', '%d octeți'),
'No commands to execute.' => 'Nu sunt comenzi de executat.', 'No commands to execute.' => 'Nu sunt comenzi de executat.',
'Unable to upload a file.' => 'Nu am putut încărca fișierul pe server.', 'Unable to upload a file.' => 'Nu am putut încărca fișierul pe server.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'Создать базу данных', 'Create database' => 'Создать базу данных',
'SQL command' => 'SQL-запрос', 'SQL command' => 'SQL-запрос',
'Logout' => 'Выйти', 'Logout' => 'Выйти',
'database' => 'база данных',
'Use' => 'Выбрать', 'Use' => 'Выбрать',
'No tables.' => 'В базе данных нет таблиц.', 'No tables.' => 'В базе данных нет таблиц.',
'select' => 'выбрать', 'select' => 'выбрать',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'Не удалось получить данные из таблицы', 'Unable to select the table' => 'Не удалось получить данные из таблицы',
'Invalid CSRF token. Send the form again.' => 'Недействительный CSRF-токен. Отправите форму ещё раз.', 'Invalid CSRF token. Send the form again.' => 'Недействительный CSRF-токен. Отправите форму ещё раз.',
'Comment' => 'Комментарий', 'Comment' => 'Комментарий',
'Default values' => 'Значения по умолчанию',
'%d byte(s)' => array('%d байт', '%d байта', '%d байтов'), '%d byte(s)' => array('%d байт', '%d байта', '%d байтов'),
'No commands to execute.' => 'Нет команд для выполнения.', 'No commands to execute.' => 'Нет команд для выполнения.',
'Unable to upload a file.' => 'Не удалось загрузить файл на сервер.', 'Unable to upload a file.' => 'Не удалось загрузить файл на сервер.',
@@ -297,7 +295,6 @@ $translations = array(
'DB' => 'DB', 'DB' => 'DB',
'Warnings' => 'Предупреждения', 'Warnings' => 'Предупреждения',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer не поддерживает доступ к базе данных без пароля, <a href="https://www.adminer.org/en/password/"%s>больше информации</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer не поддерживает доступ к базе данных без пароля, <a href="https://www.adminer.org/en/password/"%s>больше информации</a>.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Спасибо за использование Adminer, рассмотрите возможность <a href="https://www.adminer.org/en/donation/">пожертвования</a>.',
'The action will be performed after successful login with the same credentials.' => 'Действие будет выполнено после успешного входа в систему с теми же учетными данными.', 'The action will be performed after successful login with the same credentials.' => 'Действие будет выполнено после успешного входа в систему с теми же учетными данными.',
'Connecting to privileged ports is not allowed.' => 'Подключение к привилегированным портам не допускается.', 'Connecting to privileged ports is not allowed.' => 'Подключение к привилегированным портам не допускается.',
'There is a space in the input password which might be the cause.' => 'В введеном пароле есть пробел, это может быть причиною.', 'There is a space in the input password which might be the cause.' => 'В введеном пароле есть пробел, это может быть причиною.',
@@ -313,4 +310,10 @@ $translations = array(
'No' => 'Нет', 'No' => 'Нет',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -33,7 +33,6 @@ $translations = array(
'Create database' => 'Vytvoriť databázu', 'Create database' => 'Vytvoriť databázu',
'SQL command' => 'SQL príkaz', 'SQL command' => 'SQL príkaz',
'Logout' => 'Odhlásiť', 'Logout' => 'Odhlásiť',
'database' => 'databáza',
'Use' => 'Vybrať', 'Use' => 'Vybrať',
'No tables.' => 'Žiadne tabuľky.', 'No tables.' => 'Žiadne tabuľky.',
'select' => 'vypísať', 'select' => 'vypísať',
@@ -71,7 +70,6 @@ $translations = array(
'Unable to select the table' => 'Tabuľku sa nepodarilo vypísať', 'Unable to select the table' => 'Tabuľku sa nepodarilo vypísať',
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odošlite formulár znova.', 'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odošlite formulár znova.',
'Comment' => 'Komentár', 'Comment' => 'Komentár',
'Default values' => 'Predvolené hodnoty',
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtov'), '%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtov'),
'No commands to execute.' => 'Žiadne príkazy na vykonanie.', 'No commands to execute.' => 'Žiadne príkazy na vykonanie.',
'Unable to upload a file.' => 'Súbor sa nepodarilo nahrať.', 'Unable to upload a file.' => 'Súbor sa nepodarilo nahrať.',
@@ -79,6 +77,8 @@ $translations = array(
'File uploads are disabled.' => 'Nahrávánie súborov nie je povolené.', 'File uploads are disabled.' => 'Nahrávánie súborov nie je povolené.',
'Routine has been called, %d row(s) affected.' => array('Procedúra bola zavolaná, bol zmenený %d záznam.', 'Procedúra bola zavolaná, boli zmenené %d záznamy.', 'Procedúra bola zavolaná, bolo zmenených %d záznamov.'), 'Routine has been called, %d row(s) affected.' => array('Procedúra bola zavolaná, bol zmenený %d záznam.', 'Procedúra bola zavolaná, boli zmenené %d záznamy.', 'Procedúra bola zavolaná, bolo zmenených %d záznamov.'),
'Call' => 'Zavolať', 'Call' => 'Zavolať',
'No driver' => 'Žiadny ovládač',
'Database driver not found.' => 'Databázový ovládač sa nenašiel.',
'No extension' => 'Žiadne rozšírenie', 'No extension' => 'Žiadne rozšírenie',
'None of the supported PHP extensions (%s) are available.' => 'Nie je dostupné žiadne z podporovaných rozšírení (%s).', 'None of the supported PHP extensions (%s) are available.' => 'Nie je dostupné žiadne z podporovaných rozšírení (%s).',
'Session support must be enabled.' => 'Session premenné musia byť povolené.', 'Session support must be enabled.' => 'Session premenné musia byť povolené.',
@@ -259,7 +259,7 @@ $translations = array(
'%d query(s) executed OK.' => array('Bol vykonaný %d dotaz.', 'Boli vykonané %d dotazy.', 'Bolo vykonaných %d dotazov.'), '%d query(s) executed OK.' => array('Bol vykonaný %d dotaz.', 'Boli vykonané %d dotazy.', 'Bolo vykonaných %d dotazov.'),
'Show only errors' => 'Zobraziť iba chyby', 'Show only errors' => 'Zobraziť iba chyby',
'Refresh' => 'Obnoviť', 'Refresh' => 'Obnoviť',
'Invalid schema.' => 'Neplatné schéma.', 'Invalid schema.' => 'Neplatná schéma.',
'Please use one of the extensions %s.' => 'Prosím vyberte jednu z koncoviek %s.', 'Please use one of the extensions %s.' => 'Prosím vyberte jednu z koncoviek %s.',
'now' => 'teraz', 'now' => 'teraz',
'ltr' => 'ltr', 'ltr' => 'ltr',
@@ -287,7 +287,6 @@ $translations = array(
'Default value' => 'Predvolená hodnota', 'Default value' => 'Predvolená hodnota',
'Full table scan' => 'Prechod celej tabuľky', 'Full table scan' => 'Prechod celej tabuľky',
'Too many unsuccessful logins, try again in %d minute(s).' => array('Príliš veľa pokusov o prihlásenie, skúste to znova za %d minutu.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minuty.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minút.'), 'Too many unsuccessful logins, try again in %d minute(s).' => array('Príliš veľa pokusov o prihlásenie, skúste to znova za %d minutu.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minuty.', 'Príliš veľa pokusov o prihlásenie, skúste to znova za %d minút.'),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Vďaka za používanie Admineru, <a href="https://www.adminer.org/cs/donation/">prispejte</a> na vývoj.',
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Platnosť hlavného hesla vypršala. <a href="https://www.adminer.org/cs/extension/"%s>Implementujte</a> metodu %s, aby platilo natrvalo.', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Platnosť hlavného hesla vypršala. <a href="https://www.adminer.org/cs/extension/"%s>Implementujte</a> metodu %s, aby platilo natrvalo.',
'The action will be performed after successful login with the same credentials.' => 'Akcia sa vykoná po úspešnom prihlásení s rovnakými prihlasovacími údajmi.', 'The action will be performed after successful login with the same credentials.' => 'Akcia sa vykoná po úspešnom prihlásení s rovnakými prihlasovacími údajmi.',
'Connecting to privileged ports is not allowed.' => 'Pripojenie k privilegovaným portom nie je povolené.', 'Connecting to privileged ports is not allowed.' => 'Pripojenie k privilegovaným portom nie je povolené.',
@@ -311,4 +310,7 @@ $translations = array(
'Default' => 'Predvolené', 'Default' => 'Predvolené',
'One Time Password' => 'Jednorázové heslo', 'One Time Password' => 'Jednorázové heslo',
'Invalid OTP code.' => 'Neplatný kód OTP.', 'Invalid OTP code.' => 'Neplatný kód OTP.',
'Schemas' => 'Schémy',
'No schemas.' => 'Žiadne schémy.',
'Show schema' => 'Zobraziť schému',
); );

View File

@@ -73,7 +73,6 @@ $translations = array(
'Data' => 'Podatki', 'Data' => 'Podatki',
'Database' => 'Baza', 'Database' => 'Baza',
'database' => 'baza',
'Use' => 'Uporabi', 'Use' => 'Uporabi',
'Select database' => 'Izberi bazo', 'Select database' => 'Izberi bazo',
'Invalid database.' => 'Neveljavna baza.', 'Invalid database.' => 'Neveljavna baza.',
@@ -154,7 +153,6 @@ $translations = array(
'Auto Increment' => 'Samodejno povečevanje', 'Auto Increment' => 'Samodejno povečevanje',
'Options' => 'Možnosti', 'Options' => 'Možnosti',
'Comment' => 'Komentar', 'Comment' => 'Komentar',
'Default values' => 'Privzete vrednosti',
'Drop' => 'Zavrzi', 'Drop' => 'Zavrzi',
'Are you sure?' => 'Ste prepričani?', 'Are you sure?' => 'Ste prepričani?',
'Move up' => 'Premakni gor', 'Move up' => 'Premakni gor',
@@ -329,7 +327,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -355,4 +352,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -74,7 +74,6 @@ $translations = array(
'Data' => 'Податци', 'Data' => 'Податци',
'Database' => 'База података', 'Database' => 'База података',
'database' => 'база података',
'Use' => 'Користи', 'Use' => 'Користи',
'Select database' => 'Изаберите базу', 'Select database' => 'Изаберите базу',
'Invalid database.' => 'Неисправна база података.', 'Invalid database.' => 'Неисправна база података.',
@@ -159,7 +158,6 @@ $translations = array(
'Auto Increment' => 'Ауто-прираштај', 'Auto Increment' => 'Ауто-прираштај',
'Options' => 'Опције', 'Options' => 'Опције',
'Comment' => 'Коментар', 'Comment' => 'Коментар',
'Default values' => 'Подразумеване вредности',
'Drop' => 'Избриши', 'Drop' => 'Избриши',
'Are you sure?' => 'Да ли сте сигурни?', 'Are you sure?' => 'Да ли сте сигурни?',
'Move up' => 'Помери на горе', 'Move up' => 'Помери на горе',
@@ -335,7 +333,6 @@ $translations = array(
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Default value' => null, 'Default value' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -358,4 +355,10 @@ $translations = array(
'No' => 'Не', 'No' => 'Не',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -11,7 +11,6 @@ $translations = array(
'Logout' => 'Logga ut', 'Logout' => 'Logga ut',
'Logged as: %s' => 'Inloggad som: %s', 'Logged as: %s' => 'Inloggad som: %s',
'Logout successful.' => 'Du är nu utloggad.', 'Logout successful.' => 'Du är nu utloggad.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Tack för att du använder Adminer, vänligen fundera över att <a href="https://www.adminer.org/en/donation/">donera</a>.',
'Invalid server or credentials.' => null, 'Invalid server or credentials.' => null,
'There is a space in the input password which might be the cause.' => 'Det finns ett mellanslag i lösenordet, vilket kan vara anledningen.', 'There is a space in the input password which might be the cause.' => 'Det finns ett mellanslag i lösenordet, vilket kan vara anledningen.',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer tillåter inte att ansluta till en databas utan lösenord. <a href="https://www.adminer.org/en/password/"%s>Mer information</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer tillåter inte att ansluta till en databas utan lösenord. <a href="https://www.adminer.org/en/password/"%s>Mer information</a>.',
@@ -90,7 +89,6 @@ $translations = array(
'Data' => 'Data', 'Data' => 'Data',
'Database' => 'Databas', 'Database' => 'Databas',
'database' => 'databas',
'DB' => 'DB', 'DB' => 'DB',
'Use' => 'Använd', 'Use' => 'Använd',
'Select database' => 'Välj databas', 'Select database' => 'Välj databas',
@@ -179,7 +177,6 @@ $translations = array(
'Options' => 'Inställningar', 'Options' => 'Inställningar',
'Comment' => 'Kommentar', 'Comment' => 'Kommentar',
'Default value' => 'Standardvärde', 'Default value' => 'Standardvärde',
'Default values' => 'Standardvärden',
'Drop' => 'Ta bort', 'Drop' => 'Ta bort',
'Drop %s?' => 'Ta bort %s?', 'Drop %s?' => 'Ta bort %s?',
'Are you sure?' => 'Är du säker?', 'Are you sure?' => 'Är du säker?',
@@ -357,4 +354,10 @@ $translations = array(
'No' => 'Nej', 'No' => 'Nej',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'த‌க‌வ‌ல்த‌ள‌த்தை உருவாக்கு', 'Create database' => 'த‌க‌வ‌ல்த‌ள‌த்தை உருவாக்கு',
'SQL command' => 'SQL க‌ட்ட‌ளை', 'SQL command' => 'SQL க‌ட்ட‌ளை',
'Logout' => 'வெளியேறு', 'Logout' => 'வெளியேறு',
'database' => 'த‌க‌வ‌ல்த‌ள‌ம்',
'Use' => 'உப‌யோகி', 'Use' => 'உப‌யோகி',
'No tables.' => 'அட்ட‌வ‌ணை இல்லை.', 'No tables.' => 'அட்ட‌வ‌ணை இல்லை.',
'select' => 'தேர்வு செய்', 'select' => 'தேர்வு செய்',
@@ -69,7 +68,6 @@ $translations = array(
'Unable to select the table' => 'அட்ட‌வ‌ணையை தேர்வு செய்ய‌ முடிய‌வில்லை', 'Unable to select the table' => 'அட்ட‌வ‌ணையை தேர்வு செய்ய‌ முடிய‌வில்லை',
'Invalid CSRF token. Send the form again.' => 'CSRF டோக்க‌ன் செல்லாது. ப‌டிவ‌த்தை மீண்டும் அனுப்ப‌வும்.', 'Invalid CSRF token. Send the form again.' => 'CSRF டோக்க‌ன் செல்லாது. ப‌டிவ‌த்தை மீண்டும் அனுப்ப‌வும்.',
'Comment' => 'குறிப்பு', 'Comment' => 'குறிப்பு',
'Default values' => 'உள்ளிருக்கும் (Default) ம‌திப்புக‌ள் ',
'%d byte(s)' => array('%d பைட்', '%d பைட்டுக‌ள்'), '%d byte(s)' => array('%d பைட்', '%d பைட்டுக‌ள்'),
'No commands to execute.' => 'செய‌ல் ப‌டுத்த‌ எந்த‌ க‌ட்ட‌ளைக‌ளும் இல்லை.', 'No commands to execute.' => 'செய‌ல் ப‌டுத்த‌ எந்த‌ க‌ட்ட‌ளைக‌ளும் இல்லை.',
'Unable to upload a file.' => 'கோப்பை மேலேற்ற‌ம் (upload) செய்ய‌ இயல‌வில்லை.', 'Unable to upload a file.' => 'கோப்பை மேலேற்ற‌ம் (upload) செய்ய‌ இயல‌வில்லை.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -32,7 +32,6 @@ $translations = array(
'Create database' => 'สร้างฐานข้อมูล', 'Create database' => 'สร้างฐานข้อมูล',
'SQL command' => 'คำสั่ง SQL', 'SQL command' => 'คำสั่ง SQL',
'Logout' => 'ออกจากระบบ', 'Logout' => 'ออกจากระบบ',
'database' => 'ฐานข้อมูล',
'Use' => 'ใช้งาน', 'Use' => 'ใช้งาน',
'No tables.' => 'ไม่พบตาราง.', 'No tables.' => 'ไม่พบตาราง.',
'select' => 'เลือก', 'select' => 'เลือก',
@@ -70,7 +69,6 @@ $translations = array(
'Unable to select the table' => 'ไม่สามารถเลือกตารางได้', 'Unable to select the table' => 'ไม่สามารถเลือกตารางได้',
'Invalid CSRF token. Send the form again.' => 'เครื่องหมาย CSRF ไม่ถูกต้อง ส่งข้อมูลใหม่อีกครั้ง.', 'Invalid CSRF token. Send the form again.' => 'เครื่องหมาย CSRF ไม่ถูกต้อง ส่งข้อมูลใหม่อีกครั้ง.',
'Comment' => 'หมายเหตุ', 'Comment' => 'หมายเหตุ',
'Default values' => 'ค่าเริ่มต้น',
'%d byte(s)' => '%d ไบท์', '%d byte(s)' => '%d ไบท์',
'No commands to execute.' => 'ไม่มีคำสั่งที่จะประมวลผล.', 'No commands to execute.' => 'ไม่มีคำสั่งที่จะประมวลผล.',
'Unable to upload a file.' => 'ไม่สามารถอัปโหลดไฟล์ได้.', 'Unable to upload a file.' => 'ไม่สามารถอัปโหลดไฟล์ได้.',
@@ -288,7 +286,6 @@ $translations = array(
'Default value' => null, 'Default value' => null,
'Full table scan' => null, 'Full table scan' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array(), 'Too many unsuccessful logins, try again in %d minute(s).' => array(),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null, 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
@@ -313,4 +310,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -11,7 +11,6 @@ $translations = array(
'Logout' => ıkış', 'Logout' => ıkış',
'Logged as: %s' => '%s olarak giriş yapıldı.', 'Logged as: %s' => '%s olarak giriş yapıldı.',
'Logout successful.' => 'Oturum başarıyla sonlandı.', 'Logout successful.' => 'Oturum başarıyla sonlandı.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href="https://www.adminer.org/en/donation/">bağış yapmayı düşünün</a>.',
'Invalid server or credentials.' => null, 'Invalid server or credentials.' => null,
'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'), 'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'),
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ana şifrenin süresi doldu. Kalıcı olması için <a href="https://www.adminer.org/en/extension/"%s>%s medodunu</a> kullanın.', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ana şifrenin süresi doldu. Kalıcı olması için <a href="https://www.adminer.org/en/extension/"%s>%s medodunu</a> kullanın.',
@@ -85,7 +84,6 @@ $translations = array(
'Data' => 'Veri', 'Data' => 'Veri',
'Database' => 'Veri Tabanı', 'Database' => 'Veri Tabanı',
'database' => 'veri tabanı',
'DB' => 'DB', 'DB' => 'DB',
'Use' => 'Kullan', 'Use' => 'Kullan',
'Select database' => 'Veri tabanı seç', 'Select database' => 'Veri tabanı seç',
@@ -173,7 +171,6 @@ $translations = array(
'Options' => 'Seçenekler', 'Options' => 'Seçenekler',
'Comment' => 'Yorum', 'Comment' => 'Yorum',
'Default value' => 'Varsayılan değer', 'Default value' => 'Varsayılan değer',
'Default values' => 'Varsayılan değerler',
'Drop' => 'Sil', 'Drop' => 'Sil',
'Drop %s?' => 'Sil %s?', 'Drop %s?' => 'Sil %s?',
'Are you sure?' => 'Emin misiniz?', 'Are you sure?' => 'Emin misiniz?',
@@ -358,4 +355,10 @@ $translations = array(
'No' => 'Hayır', 'No' => 'Hayır',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -74,7 +74,6 @@ $translations = array(
'Data' => 'Дані', 'Data' => 'Дані',
'Database' => 'База даних', 'Database' => 'База даних',
'database' => 'база даних',
'Use' => 'Обрати', 'Use' => 'Обрати',
'Select database' => 'Обрати базу даних', 'Select database' => 'Обрати базу даних',
'Invalid database.' => 'Погана база даних.', 'Invalid database.' => 'Погана база даних.',
@@ -159,7 +158,6 @@ $translations = array(
'Auto Increment' => 'Автоматичне збільшення', 'Auto Increment' => 'Автоматичне збільшення',
'Options' => 'Опції', 'Options' => 'Опції',
'Comment' => 'Коментарі', 'Comment' => 'Коментарі',
'Default values' => 'Значення за замовчуванням',
'Drop' => 'Видалити', 'Drop' => 'Видалити',
'Are you sure?' => 'Ви впевнені?', 'Are you sure?' => 'Ви впевнені?',
'Move up' => 'Пересунути вгору', 'Move up' => 'Пересунути вгору',
@@ -332,7 +330,6 @@ $translations = array(
'Default value' => 'Значення за замовчуванням', 'Default value' => 'Значення за замовчуванням',
'Full table scan' => 'Повне сканування таблиці', 'Full table scan' => 'Повне сканування таблиці',
'Too many unsuccessful logins, try again in %d minute(s).' => array('Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилину.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилини.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилин.'), 'Too many unsuccessful logins, try again in %d minute(s).' => array('Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилину.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилини.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилин.'),
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Дякуємо, що користуєтесь Adminer, подумайте про <a href="https://www.adminer.org/en/donation/">внесок</a>.',
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Термін дії майстер пароля минув. <a href="https://www.adminer.org/en/extension/"%s>Реалізуйте</a> метод %s, щоб зробити його постійним.', 'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Термін дії майстер пароля минув. <a href="https://www.adminer.org/en/extension/"%s>Реалізуйте</a> метод %s, щоб зробити його постійним.',
'The action will be performed after successful login with the same credentials.' => 'Дія буде виконуватися після успішного входу в систему з тими ж обліковими даними.', 'The action will be performed after successful login with the same credentials.' => 'Дія буде виконуватися після успішного входу в систему з тими ж обліковими даними.',
'Connecting to privileged ports is not allowed.' => 'Підключення до привілейованих портів заборонено.', 'Connecting to privileged ports is not allowed.' => 'Підключення до привілейованих портів заборонено.',
@@ -358,4 +355,10 @@ $translations = array(
'No' => 'Ні', 'No' => 'Ні',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -77,7 +77,6 @@ $translations = array(
'Data' => 'Dữ liệu', 'Data' => 'Dữ liệu',
'Database' => 'Cơ sở dữ liệu', 'Database' => 'Cơ sở dữ liệu',
'database' => 'cơ sở dữ liệu',
'Use' => 'Sử dụng', 'Use' => 'Sử dụng',
'Select database' => 'Chọn CSDL', 'Select database' => 'Chọn CSDL',
'Invalid database.' => 'CSDL sai.', 'Invalid database.' => 'CSDL sai.',
@@ -162,7 +161,6 @@ $translations = array(
'Auto Increment' => 'Tăng tự động', 'Auto Increment' => 'Tăng tự động',
'Options' => 'Tuỳ chọn', 'Options' => 'Tuỳ chọn',
'Comment' => 'Chú thích', 'Comment' => 'Chú thích',
'Default values' => 'Giá trị mặc định',
'Drop' => 'Xoá', 'Drop' => 'Xoá',
'Are you sure?' => 'Bạn có chắc', 'Are you sure?' => 'Bạn có chắc',
'Size' => 'Kích thước', 'Size' => 'Kích thước',
@@ -339,7 +337,6 @@ $translations = array(
'Limit rows' => null, 'Limit rows' => null,
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null, 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => null,
'Default value' => null, 'Default value' => null,
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => null,
'The action will be performed after successful login with the same credentials.' => null, 'The action will be performed after successful login with the same credentials.' => null,
'Connecting to privileged ports is not allowed.' => null, 'Connecting to privileged ports is not allowed.' => null,
'There is a space in the input password which might be the cause.' => null, 'There is a space in the input password which might be the cause.' => null,
@@ -357,4 +354,10 @@ $translations = array(
'No' => 'Không', 'No' => 'Không',
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -11,7 +11,6 @@ $translations = array(
'Logout' => 'Xx', 'Logout' => 'Xx',
'Logged as: %s' => 'Xx: %s', 'Logged as: %s' => 'Xx: %s',
'Logout successful.' => 'Xx.', 'Logout successful.' => 'Xx.',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Xx <a href="https://www.adminer.org/en/donation/">xx</a>.',
'Invalid server or credentials.' => 'Xx.', 'Invalid server or credentials.' => 'Xx.',
'There is a space in the input password which might be the cause.' => 'Xx.', 'There is a space in the input password which might be the cause.' => 'Xx.',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Xx, <a href="https://www.adminer.org/en/password/"%s>xx</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Xx, <a href="https://www.adminer.org/en/password/"%s>xx</a>.',
@@ -21,6 +20,8 @@ $translations = array(
'Language' => 'Xx', 'Language' => 'Xx',
'Invalid CSRF token. Send the form again.' => 'Xx.', 'Invalid CSRF token. Send the form again.' => 'Xx.',
'If you did not send this request from Adminer then close this page.' => 'Xx.', 'If you did not send this request from Adminer then close this page.' => 'Xx.',
'No driver' => 'Xx',
'Database driver not found.' => 'Xx.',
'No extension' => 'Xx', 'No extension' => 'Xx',
'None of the supported PHP extensions (%s) are available.' => 'Xx (%s).', 'None of the supported PHP extensions (%s) are available.' => 'Xx (%s).',
'Connecting to privileged ports is not allowed.' => 'Xx.', 'Connecting to privileged ports is not allowed.' => 'Xx.',
@@ -90,7 +91,6 @@ $translations = array(
'Data' => 'Xx', 'Data' => 'Xx',
'Database' => 'Xx', 'Database' => 'Xx',
'database' => 'xx',
'DB' => 'XX', 'DB' => 'XX',
'Use' => 'Xx', 'Use' => 'Xx',
'Select database' => 'Xx', 'Select database' => 'Xx',
@@ -179,7 +179,6 @@ $translations = array(
'Options' => 'Xx', 'Options' => 'Xx',
'Comment' => 'Xx', 'Comment' => 'Xx',
'Default value' => 'Xx', 'Default value' => 'Xx',
'Default values' => 'Xx',
'Drop' => 'Xx', 'Drop' => 'Xx',
'Drop %s?' => 'Xx %s?', 'Drop %s?' => 'Xx %s?',
'Are you sure?' => 'Xx?', 'Are you sure?' => 'Xx?',
@@ -327,12 +326,15 @@ $translations = array(
'Please use one of the extensions %s.' => 'Xx %s.', 'Please use one of the extensions %s.' => 'Xx %s.',
// PostgreSQL and MS SQL schema support // PostgreSQL and MS SQL schema support
'Schema' => 'Xx',
'Schemas' => 'Xx',
'No schemas.' => 'Xx.',
'Show schema' => 'Xx',
'Alter schema' => 'Xx', 'Alter schema' => 'Xx',
'Create schema' => 'Xx', 'Create schema' => 'Xx',
'Schema has been dropped.' => 'Xx.', 'Schema has been dropped.' => 'Xx.',
'Schema has been created.' => 'Xx.', 'Schema has been created.' => 'Xx.',
'Schema has been altered.' => 'Xx.', 'Schema has been altered.' => 'Xx.',
'Schema' => 'Xx',
'Invalid schema.' => 'Xx.', 'Invalid schema.' => 'Xx.',
// PostgreSQL sequences support // PostgreSQL sequences support

View File

@@ -11,7 +11,6 @@ $translations = array(
'Logout' => '登出', 'Logout' => '登出',
'Logged as: %s' => '登錄為: %s', 'Logged as: %s' => '登錄為: %s',
'Logout successful.' => '成功登出。', 'Logout successful.' => '成功登出。',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感謝使用Adminer請考慮為我們<a href="https://www.adminer.org/en/donation/">捐款(英文網頁)</a>.',
'Invalid server or credentials.' => null, 'Invalid server or credentials.' => null,
'There is a space in the input password which might be the cause.' => '您輸入的密碼中有一個空格,這可能是導致問題的原因。', 'There is a space in the input password which might be the cause.' => '您輸入的密碼中有一個空格,這可能是導致問題的原因。',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer預設不支援訪問沒有密碼的資料庫<a href="https://www.adminer.org/en/password/"%s>詳情見這裡</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer預設不支援訪問沒有密碼的資料庫<a href="https://www.adminer.org/en/password/"%s>詳情見這裡</a>.',
@@ -90,7 +89,6 @@ $translations = array(
'Data' => '資料', 'Data' => '資料',
'Database' => '資料庫', 'Database' => '資料庫',
'database' => '資料庫',
'DB' => '資料庫', 'DB' => '資料庫',
'Use' => '使用', 'Use' => '使用',
'Select database' => '選擇資料庫', 'Select database' => '選擇資料庫',
@@ -179,7 +177,6 @@ $translations = array(
'Options' => '選項', 'Options' => '選項',
'Comment' => '註解', 'Comment' => '註解',
'Default value' => '預設值', 'Default value' => '預設值',
'Default values' => '預設值',
'Drop' => '刪除', 'Drop' => '刪除',
'Drop %s?' => '刪除 %s?', 'Drop %s?' => '刪除 %s?',
'Are you sure?' => '你確定嗎?', 'Are you sure?' => '你確定嗎?',
@@ -358,4 +355,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -11,7 +11,6 @@ $translations = array(
'Logout' => '登出', 'Logout' => '登出',
'Logged as: %s' => '登录用户:%s', 'Logged as: %s' => '登录用户:%s',
'Logout successful.' => '成功登出。', 'Logout successful.' => '成功登出。',
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感谢使用Adminer请考虑为我们<a href="https://www.adminer.org/en/donation/">捐款(英文页面)</a>.',
'Invalid server or credentials.' => null, 'Invalid server or credentials.' => null,
'There is a space in the input password which might be the cause.' => '您输入的密码中有一个空格,这可能是导致问题的原因。', 'There is a space in the input password which might be the cause.' => '您输入的密码中有一个空格,这可能是导致问题的原因。',
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer默认不支持访问没有密码的数据库<a href="https://www.adminer.org/en/password/"%s>详情见这里</a>.', 'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer默认不支持访问没有密码的数据库<a href="https://www.adminer.org/en/password/"%s>详情见这里</a>.',
@@ -90,7 +89,6 @@ $translations = array(
'Data' => '数据', 'Data' => '数据',
'Database' => '数据库', 'Database' => '数据库',
'database' => '数据库',
'DB' => '数据库', 'DB' => '数据库',
'Use' => '使用', 'Use' => '使用',
'Select database' => '选择数据库', 'Select database' => '选择数据库',
@@ -179,7 +177,6 @@ $translations = array(
'Options' => '选项', 'Options' => '选项',
'Comment' => '注释', 'Comment' => '注释',
'Default value' => '默认值', 'Default value' => '默认值',
'Default values' => '默认值',
'Drop' => '删除', 'Drop' => '删除',
'Drop %s?' => '删除 %s?', 'Drop %s?' => '删除 %s?',
'Are you sure?' => '您确定吗?', 'Are you sure?' => '您确定吗?',
@@ -357,4 +354,10 @@ $translations = array(
'No' => null, 'No' => null,
'One Time Password' => null, 'One Time Password' => null,
'Invalid OTP code.' => null, 'Invalid OTP code.' => null,
'Schemas' => null,
'No schemas.' => null,
'Show schema' => null,
'No driver' => null,
'Database driver not found.' => null,
); );

View File

@@ -2,15 +2,15 @@
function adminer_object() { function adminer_object() {
// required to run any plugin // required to run any plugin
include_once "../plugins/plugin.php"; include_once "../plugins/plugin.php";
// autoloader // autoloader
foreach (glob("../plugins/*.php") as $filename) { foreach (glob("../plugins/*.php") as $filename) {
include_once $filename; include_once $filename;
} }
// enable extra drivers just by including them // enable extra drivers just by including them
//~ include "../plugins/drivers/simpledb.php"; //~ include "../plugins/drivers/simpledb.php";
$plugins = array( $plugins = array(
// specify enabled plugins here // specify enabled plugins here
new AdminerDatabaseHide(array('information_schema')), new AdminerDatabaseHide(array('information_schema')),
@@ -29,16 +29,16 @@ function adminer_object() {
new AdminerTranslation, new AdminerTranslation,
new AdminerForeignSystem, new AdminerForeignSystem,
new AdminerEnumOption, new AdminerEnumOption,
new AdminerTablesFilter,
new AdminerEditForeign, new AdminerEditForeign,
new AdminerLoginSsl(["TrustServerCertificate" => true]),
); );
/* It is possible to combine customization and plugins: /* It is possible to combine customization and plugins:
class AdminerCustomization extends AdminerPlugin { class AdminerCustomization extends AdminerPlugin {
} }
return new AdminerCustomization($plugins); return new AdminerCustomization($plugins);
*/ */
return new AdminerPlugin($plugins); return new AdminerPlugin($plugins);
} }

View File

@@ -43,7 +43,8 @@ $routine_languages = routine_languages();
<?php <?php
edit_fields($row["fields"], $collations, $routine); edit_fields($row["fields"], $collations, $routine);
if (isset($_GET["function"])) { if (isset($_GET["function"])) {
echo "<tbody><tr><th></th>", echo "<tbody><tr>",
(support("move_col") ? "<th></th>" : ""),
"<th>", lang('Return type'), "</th>"; "<th>", lang('Return type'), "</th>";
edit_type("returns", $row["returns"], $collations, array(), ($jush == "pgsql" ? array("void", "trigger") : array())); edit_type("returns", $row["returns"], $collations, array(), ($jush == "pgsql" ? array("void", "trigger") : array()));

View File

@@ -153,7 +153,7 @@ if (!$error && $_POST) {
$time = " <span class='time'>(" . format_time($start) . ")</span>" $time = " <span class='time'>(" . format_time($start) . ")</span>"
. (strlen($q) < 1000 ? " <a href='" . h(ME) . "sql=" . urlencode(trim($q)) . "'>" . lang('Edit') . "</a>" : "") // 1000 - maximum length of encoded URL in IE is 2083 characters . (strlen($q) < 1000 ? " <a href='" . h(ME) . "sql=" . urlencode(trim($q)) . "'>" . lang('Edit') . "</a>" : "") // 1000 - maximum length of encoded URL in IE is 2083 characters
; ;
$affected = $connection->affected_rows; // getting warnigns overwrites this $affected = $connection->affected_rows; // getting warnings overwrites this
$warnings = ($_POST["only_errors"] ? "" : $driver->warnings()); $warnings = ($_POST["only_errors"] ? "" : $driver->warnings());
$warnings_id = "warnings-$commands"; $warnings_id = "warnings-$commands";
if ($warnings) { if ($warnings) {

View File

@@ -24,6 +24,8 @@ pre { margin: 1em 0 0; }
pre code { display: block; font-size: 100%; } pre code { display: block; font-size: 100%; }
pre, textarea { font: 110%/1.25 monospace; } pre, textarea { font: 110%/1.25 monospace; }
pre.jush { background: #fff; } pre.jush { background: #fff; }
pre.comment { white-space: pre-wrap; }
form + pre.comment { margin-top: 2em; }
input, textarea, select { box-sizing: border-box; } input, textarea, select { box-sizing: border-box; }
input[type="image"] { vertical-align: middle; margin-top: -3px; } input[type="image"] { vertical-align: middle; margin-top: -3px; }
input[type="number"] { -moz-appearance: textfield; } input[type="number"] { -moz-appearance: textfield; }
@@ -109,6 +111,7 @@ table.dragging { background: #eee; }
.rtl .pages { left: auto; right: 21em; } .rtl .pages { left: auto; right: 21em; }
.rtl input.wayoff { left: auto; right: -1000px; } .rtl input.wayoff { left: auto; right: -1000px; }
.rtl #lang, .rtl #menu { left: auto; right: 0; } .rtl #lang, .rtl #menu { left: auto; right: 0; }
.rtl pre, .rtl code { direction: ltr; }
@media all and (max-width: 880px) { @media all and (max-width: 880px) {
.pages { left: auto; } .pages { left: auto; }

View File

@@ -548,7 +548,7 @@ function foreignAddRow() {
this.onchange = function () { }; this.onchange = function () { };
var selects = qsa('select', row); var selects = qsa('select', row);
for (var i=0; i < selects.length; i++) { for (var i=0; i < selects.length; i++) {
selects[i].name = selects[i].name.replace(']', '1]'); selects[i].name = selects[i].name.replace(/\d+]/, '1$&');
selects[i].selectedIndex = 0; selects[i].selectedIndex = 0;
} }
parentTag(this, 'table').appendChild(row); parentTag(this, 'table').appendChild(row);

View File

@@ -99,14 +99,14 @@ function cookie(assign, days) {
/** /**
* Verifies current Adminer version. * Verifies current Adminer version.
* *
* @param currentVersion string
* @param baseUrl string * @param baseUrl string
* @param token string * @param token string
*/ */
function verifyVersion(currentVersion, baseUrl, token) { function verifyVersion(baseUrl, token) {
// Dummy value to prevent repeated verifications after AJAX failure.
cookie('adminer_version=0', 1); cookie('adminer_version=0', 1);
ajax('https://api.github.com/repos/pematon/adminer/releases/latest', function (request) { ajax('https://api.github.com/repos/adminerneo/adminerneo/releases/latest', (request) => {
const response = JSON.parse(request.responseText); const response = JSON.parse(request.responseText);
const version = response.tag_name.replace(/^\D*/, ''); const version = response.tag_name.replace(/^\D*/, '');
@@ -115,12 +115,8 @@ function verifyVersion(currentVersion, baseUrl, token) {
cookie('adminer_version=' + version, 1); cookie('adminer_version=' + version, 1);
const data = 'version=' + version + '&token=' + token; const data = 'version=' + version + '&token=' + token;
ajax(baseUrl + 'script=version', function () {}, data); ajax(baseUrl + 'script=version', null, data);
}, null, null, true);
if (currentVersion !== version) {
gid('version').innerText = version;
}
});
} }
/** Get value of select /** Get value of select
@@ -484,10 +480,8 @@ function selectAddRow(event) {
} }
} }
const buttons = qsa('.icon', row); const button = qs('.remove', row);
for (const button of buttons) { button.onclick = selectRemoveRow;
button.onclick = selectRemoveRow;
}
const parent = field.parentNode.parentNode; const parent = field.parentNode.parentNode;
if (parent.classList.contains("sortable")) { if (parent.classList.contains("sortable")) {
@@ -534,7 +528,7 @@ function selectSearchSearch() {
// Sorting. // Sorting.
(function() { (function() {
let placeholderRow = null, nextRow = null, dragHelper = null; let placeholderRow = null, nextRow = null, dragHelper = null;
let startY, minY, maxY; let startScrollY, startY, minY, maxY, lastPointerY;
/** /**
* Initializes sortable list of DIV elements. * Initializes sortable list of DIV elements.
@@ -575,6 +569,7 @@ function selectSearchSearch() {
const pointerY = getPointerY(event); const pointerY = getPointerY(event);
const parent = row.parentNode; const parent = row.parentNode;
startScrollY = window.scrollY;
startY = pointerY - getOffsetTop(row); startY = pointerY - getOffsetTop(row);
minY = getOffsetTop(parent); minY = getOffsetTop(parent);
maxY = minY + parent.offsetHeight - row.offsetHeight; maxY = minY + parent.offsetHeight - row.offsetHeight;
@@ -618,6 +613,7 @@ function selectSearchSearch() {
window.addEventListener("mousemove", updateSorting); window.addEventListener("mousemove", updateSorting);
window.addEventListener("touchmove", updateSorting); window.addEventListener("touchmove", updateSorting);
window.addEventListener("scroll", updateSorting);
window.addEventListener("mouseup", finishSorting); window.addEventListener("mouseup", finishSorting);
window.addEventListener("touchend", finishSorting); window.addEventListener("touchend", finishSorting);
@@ -626,27 +622,51 @@ function selectSearchSearch() {
function updateSorting(event) { function updateSorting(event) {
const pointerY = getPointerY(event); const pointerY = getPointerY(event);
const scrollingBoundary = 30;
const speedCoefficient = 8;
let top = Math.min(Math.max(pointerY - startY, minY), maxY); // If mouse pointer is over the top boundary, scroll page down.
dragHelper.style.top = `${top}px`; let distance = pointerY - scrollingBoundary;
if (distance < 0 && window.scrollY > 0) {
const parent = placeholderRow.parentNode; window.scrollBy(0, distance / speedCoefficient);
top = top - minY + parent.offsetTop; return;
let sibling;
if (top > placeholderRow.offsetTop + placeholderRow.offsetHeight / 2) {
sibling = !nextRow.classList.contains("no-sort") ? nextRow.nextElementSibling : nextRow;
} else if (top + placeholderRow.offsetHeight < placeholderRow.offsetTop + placeholderRow.offsetHeight / 2) {
sibling = placeholderRow.previousElementSibling;
} else {
sibling = nextRow;
} }
if (sibling !== nextRow) { // If mouse pointer is under the bottom boundary, scroll page up.
const parent = placeholderRow.parentNode; distance = pointerY - window.innerHeight + scrollingBoundary;
if (distance > 0 && window.scrollY + window.innerHeight < document.documentElement.scrollHeight) {
window.scrollBy(0, distance / speedCoefficient);
return;
}
nextRow = sibling; // Move helper row to the pointer position.
if (sibling) { let top = Math.min(Math.max(pointerY - startY + window.scrollY - startScrollY, minY), maxY);
dragHelper.style.top = `${top}px`;
// Find a new position for the placeholder.
const parent = placeholderRow.parentNode;
let oldNextRow = nextRow;
top = top - minY + parent.offsetTop;
let testingRow = placeholderRow;
do {
if (top > testingRow.offsetTop + testingRow.offsetHeight / 2 + 1) {
if (!nextRow.classList.contains("no-sort")) {
testingRow = nextRow;
nextRow = nextRow.nextElementSibling;
} else {
break;
}
} else if (top + testingRow.offsetHeight < testingRow.offsetTop + testingRow.offsetHeight / 2 - 1) {
nextRow = testingRow = testingRow.previousElementSibling;
} else {
break;
}
} while (nextRow);
// Move the placeholder to a new position.
if (nextRow !== oldNextRow) {
if (nextRow) {
parent.insertBefore(placeholderRow, nextRow); parent.insertBefore(placeholderRow, nextRow);
} else { } else {
parent.appendChild(placeholderRow); parent.appendChild(placeholderRow);
@@ -667,6 +687,7 @@ function selectSearchSearch() {
window.removeEventListener("mousemove", updateSorting); window.removeEventListener("mousemove", updateSorting);
window.removeEventListener("touchmove", updateSorting); window.removeEventListener("touchmove", updateSorting);
window.removeEventListener("scroll", updateSorting);
window.removeEventListener("mouseup", finishSorting); window.removeEventListener("mouseup", finishSorting);
window.removeEventListener("touchend", finishSorting); window.removeEventListener("touchend", finishSorting);
@@ -676,10 +697,12 @@ function selectSearchSearch() {
function getPointerY(event) { function getPointerY(event) {
if (event.type.includes("touch")) { if (event.type.includes("touch")) {
const touch = event.touches[0] || event.changedTouches[0]; const touch = event.touches[0] || event.changedTouches[0];
return touch.clientY; lastPointerY = touch.clientY;
} else { } else if (event.clientY !== undefined) {
return event.clientY; lastPointerY = event.clientY;
} }
return lastPointerY;
} }
})(); })();
@@ -869,41 +892,51 @@ function fieldChange() {
/** Create AJAX request /**
* @param string * Sends AJAX request.
* @param function (XMLHttpRequest) *
* @param [string] * @param {string} url
* @param [string] * @param {function|null} onSuccess (XMLHttpRequest)
* @return XMLHttpRequest or false in case of an error * @param {string|null} data POST data.
* @uses offlineMessage * @param {string|null} progressMessage
*/ * @param {boolean} failSilently
function ajax(url, callback, data, message) { * @return XMLHttpRequest or false in case of an error
var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false)); * @uses offlineMessage
if (request) { */
var ajaxStatus = gid('ajaxstatus'); function ajax(url, onSuccess = null, data = null, progressMessage = null, failSilently = false) {
if (message) { const ajaxStatus = gid('ajaxstatus');
ajaxStatus.innerHTML = '<div class="message">' + message + '</div>';
ajaxStatus.className = ajaxStatus.className.replace(/ hidden/g, ''); if (progressMessage) {
} else { ajaxStatus.innerHTML = '<div class="message">' + progressMessage + '</div>';
ajaxStatus.className += ' hidden'; ajaxStatus.classList.remove("hidden");
} } else {
request.open((data ? 'POST' : 'GET'), url); ajaxStatus.classList.add("hidden");
if (data) {
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
request.onreadystatechange = function () {
if (request.readyState === 4) {
if (/^2/.test(request.status)) {
callback(request);
} else {
ajaxStatus.innerHTML = (request.status ? request.responseText : '<div class="error">' + offlineMessage + '</div>');
ajaxStatus.className = ajaxStatus.className.replace(/ hidden/g, '');
}
}
};
request.send(data);
} }
const request = new XMLHttpRequest();
request.open((data ? 'POST' : 'GET'), url);
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
if (data) {
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
}
request.onreadystatechange = () => {
if (request.readyState === 4) {
if (request.status >= 200 && request.status < 300) {
if (onSuccess) {
onSuccess(request);
}
} else if (failSilently) {
console.error(request.status ? request.responseText : "No internet connection");
} else {
ajaxStatus.innerHTML = (request.status ? request.responseText : '<div class="error">' + offlineMessage + '</div>');
ajaxStatus.classList.remove("hidden");
}
}
};
request.send(data);
return request; return request;
} }
@@ -1124,10 +1157,12 @@ function inputBlur() {
} }
} }
/** Find submit button used by Enter /**
* @param HTMLElement * Finds submit button used by Enter.
* @return HTMLInputElement *
*/ * @param {HTMLElement} el
* @return {HTMLInputElement}
*/
function findDefaultSubmit(el) { function findDefaultSubmit(el) {
if (el.jushTextarea) { if (el.jushTextarea) {
el = el.jushTextarea; el = el.jushTextarea;
@@ -1135,10 +1170,10 @@ function findDefaultSubmit(el) {
if (!el.form) { if (!el.form) {
return null; return null;
} }
var inputs = qsa('input', el.form);
for (var i = 0; i < inputs.length; i++) { const inputs = qsa('input', el.form);
var input = inputs[i]; for (const input of inputs) {
if (input.type === 'submit' && !input.style.zIndex) { if (input.type === 'submit' && !input.classList.contains("wayoff") && !input.style.zIndex) {
return input; return input;
} }
} }

View File

@@ -6,9 +6,18 @@ function adminer_errors($errno, $errstr) {
error_reporting(6135); // errors and warnings error_reporting(6135); // errors and warnings
set_error_handler('adminer_errors', E_WARNING); set_error_handler('adminer_errors', E_WARNING);
include dirname(__FILE__) . "/adminer/include/debug.inc.php";
include dirname(__FILE__) . "/adminer/include/version.inc.php"; include dirname(__FILE__) . "/adminer/include/version.inc.php";
include dirname(__FILE__) . "/vendor/vrana/jsshrink/jsShrink.php"; include dirname(__FILE__) . "/vendor/vrana/jsshrink/jsShrink.php";
function is_dev_version()
{
global $VERSION;
return (bool)preg_match('~-dev$~', $VERSION);
}
function add_apo_slashes($s) { function add_apo_slashes($s) {
return addcslashes($s, "\\'"); return addcslashes($s, "\\'");
} }
@@ -21,85 +30,85 @@ function add_quo_slashes($s) {
return $return; return $return;
} }
function remove_lang($match) { function replace_lang($match) {
global $translations;
$idf = strtr($match[2], array("\\'" => "'", "\\\\" => "\\"));
$s = ($translations[$idf] ? $translations[$idf] : $idf);
if ($match[3] == ",") { // lang() has parameters
return $match[1] . (is_array($s) ? "lang(array('" . implode("', '", array_map('add_apo_slashes', $s)) . "')," : "sprintf('" . add_apo_slashes($s) . "',");
}
return ($match[1] && $match[4] ? $s : "$match[1]'" . add_apo_slashes($s) . "'$match[4]");
}
function lang_ids($match) {
global $lang_ids; global $lang_ids;
$lang_id = &$lang_ids[stripslashes($match[1])];
if ($lang_id === null) { $text = stripslashes($match[1]);
$lang_id = count($lang_ids) - 1; if (!isset($lang_ids[$text])) {
$lang_ids[$text] = count($lang_ids);
} }
return ($_SESSION["lang"] ? $match[0] : "lang($lang_id$match[2]");
return "lang($lang_ids[$text]$match[2]";
} }
function put_file($match) { function put_file($match) {
global $project, $VERSION, $driver; global $project, $selected_languages, $single_driver;
if (basename($match[2]) == '$LANG.inc.php') {
return $match[0]; // processed later
}
$return = file_get_contents(dirname(__FILE__) . "/$project/$match[2]");
if (basename($match[2]) == "file.inc.php") {
$return = str_replace("\n// caching headers added in compile.php", (preg_match('~-dev$~', $VERSION) ? '' : '
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
header("HTTP/1.1 304 Not Modified");
exit;
}
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 365*24*60*60) . " GMT"); $filename = basename($match[2]);
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: immutable"); // Language is processed later.
'), $return, $count); if ($filename == '$LANG.inc.php') {
return $match[0];
}
$content = file_get_contents(dirname(__FILE__) . "/$project/$match[2]");
if ($filename == "file.inc.php") {
$content = str_replace("\n// caching headers added in compile.php", (is_dev_version() ? '' : '
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
header("HTTP/1.1 304 Not Modified");
exit;
}
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 365*24*60*60) . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: immutable");
'), $content, $count);
if (!$count) { if (!$count) {
echo "adminer/file.inc.php: Caching headers placeholder not found\n"; echo "adminer/file.inc.php: Caching headers placeholder not found\n";
} }
} }
if ($driver && dirname($match[2]) == "../adminer/drivers") {
$return = preg_replace('~^if \(isset\(\$_GET\["' . $driver . '"]\)\) \{(.*)^}~ms', '\1', $return);
}
if (basename($match[2]) != "lang.inc.php" || !$_SESSION["lang"]) {
if (basename($match[2]) == "lang.inc.php") {
$return = str_replace('function lang($idf, $number = null) {', 'function lang($idf, $number = null) {
if (is_string($idf)) { // compiled version uses numbers, string comes from a plugin
// English translation is closest to the original identifiers //! pluralized translations are not found
$pos = array_search($idf, get_translations("en")); //! this should be cached
if ($pos !== false) {
$idf = $pos;
}
}', $return, $count);
if (!$count) {
echo "lang() not found\n";
}
}
$tokens = token_get_all($return); // to find out the last token
return "?>\n$return" . (in_array($tokens[count($tokens) - 1][0], array(T_CLOSE_TAG, T_INLINE_HTML), true) ? "<?php" : "");
} elseif (preg_match('~\s*(\$pos = (.+\n).+;)~sU', $return, $match2)) {
// single language lang() is used for plural
return "function get_lang() {
return '$_SESSION[lang]';
}
function lang(\$translation, \$number = null) { if ($filename == "lang.inc.php") {
if (is_array(\$translation)) { $content = str_replace(
\$pos = $match2[2]\t\t\t: " . (preg_match("~\\\$LANG == '$_SESSION[lang]'.* \\? (.+)\n~U", $match2[1], $match3) ? $match3[1] : "1") . ' 'return $key; // compile: convert translation key',
'static $en_translations = null;
// Convert string key used in plugins to compiled numeric key.
if (is_string($key)) {
if (!$en_translations) {
$en_translations = get_translations("en");
}
// Find text in English translations or plurals map.
if (($index = array_search($key, $en_translations)) !== false) {
$key = $index;
} elseif (($index = get_plural_translation_id($key)) !== null) {
$key = $index;
}
}
return $key;',
$content, $count
); );
$translation = $translation[$pos];
} if (!$count) {
$translation = str_replace("%d", "%s", $translation); echo "function lang() not found\n";
$number = format_number($number); }
return sprintf($translation, $number);
} if ($selected_languages) {
'; $available_languages = array_fill_keys($selected_languages, true);
} else { $content = str_replace(
echo "lang() \$pos not found\n"; 'return $languages; // compile: available languages',
'return ' . var_export($available_languages, true) . ';',
$content
);
}
} }
$tokens = token_get_all($content); // to find out the last token
return "?>\n$content" . (in_array($tokens[count($tokens) - 1][0], array(T_CLOSE_TAG, T_INLINE_HTML), true) ? "<?php" : "");
} }
function lzw_compress($string) { function lzw_compress($string) {
@@ -139,45 +148,73 @@ function lzw_compress($string) {
return $return . ($rest_length ? chr($rest << (8 - $rest_length)) : ""); return $return . ($rest_length ? chr($rest << (8 - $rest_length)) : "");
} }
function put_file_lang($match) { function put_file_lang() {
global $lang_ids, $project, $langs; global $lang_ids, $selected_languages;
if ($_SESSION["lang"]) {
return ""; $languages = array_map(function ($filename) {
} preg_match('~/([^/.]+)\.inc\.php$~', $filename, $matches);
$return = ""; return $matches[1];
foreach ($langs as $lang => $val) { }, glob(dirname(__FILE__) . "/adminer/lang/*.inc.php"));
include dirname(__FILE__) . "/adminer/lang/$lang.inc.php"; // assign $translations
$cases = "";
$plurals_map = [];
foreach ($languages as $language) {
// Include only selected language and "en" into single language compilation.
// "en" is used for translations in plugins.
if ($selected_languages && !in_array($language, $selected_languages) && $language != "en") {
continue;
}
// Assign $translations
$translations = [];
include dirname(__FILE__) . "/adminer/lang/$language.inc.php";
$translation_ids = array_flip($lang_ids); // default translation $translation_ids = array_flip($lang_ids); // default translation
foreach ($translations as $key => $val) { foreach ($translations as $key => $val) {
if ($val !== null) { if ($val !== null) {
$translation_ids[$lang_ids[$key]] = implode("\t", (array) $val); $translation_ids[$lang_ids[$key]] = $val;
if ($language == "en" && is_array($val)) {
$plurals_map[$key] = $lang_ids[$key];
}
} }
} }
$return .= '
case "' . $lang . '": $compressed = "' . add_quo_slashes(lzw_compress(implode("\n", $translation_ids))) . '"; break;';
}
$translations_version = crc32($return);
return '$translations = $_SESSION["translations"];
if ($_SESSION["translations_version"] != ' . $translations_version . ') {
$translations = array();
$_SESSION["translations_version"] = ' . $translations_version . ';
}
function get_translations($lang) { $cases .= 'case "' . $language . '": $compressed = "' . add_quo_slashes(lzw_compress(json_encode($translation_ids, JSON_UNESCAPED_UNICODE))) . '"; break;';
switch ($lang) {' . $return . '
} }
$translations = array();
foreach (explode("\n", lzw_decompress($compressed)) as $val) {
$translations[] = (strpos($val, "\t") ? explode("\t", $val) : $val);
}
return $translations;
}
if (!$translations) { $translations_version = crc32($cases);
$translations = get_translations($LANG);
$_SESSION["translations"] = $translations; return '
} function get_translations($lang) {
'; switch ($lang) {' . $cases . '}
return json_decode(lzw_decompress($compressed), true);
}
function get_plural_translation_id($key) {
$plurals_map = ' . var_export($plurals_map, true) . ';
return isset($plurals_map[$key]) ? $plurals_map[$key] : null;
}
$translations = $_SESSION["translations"];
if ($_SESSION["translations_version"] != ' . $translations_version . ') {
$translations = [];
$_SESSION["translations_version"] = ' . $translations_version . ';
}
if ($_SESSION["translations_language"] != $LANG) {
$translations = [];
$_SESSION["translations_language"] = $LANG;
}
if (!$translations) {
$translations = get_translations($LANG);
$_SESSION["translations"] = $translations;
}
';
} }
function short_identifier($number, $chars) { function short_identifier($number, $chars) {
@@ -224,7 +261,7 @@ function php_shrink($input) {
} }
$tokens = array_values($tokens); $tokens = array_values($tokens);
foreach ($tokens as $i => $token) { foreach ($tokens as $token) {
if ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) { if ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) {
$short_variables[$token[1]]++; $short_variables[$token[1]]++;
} }
@@ -258,7 +295,7 @@ function php_shrink($input) {
$tokens[$i+4] = array(0, ';'); $tokens[$i+4] = array(0, ';');
} }
if ($token[0] == T_COMMENT || $token[0] == T_WHITESPACE || ($token[0] == T_DOC_COMMENT && $doc_comment)) { if ($token[0] == T_COMMENT || $token[0] == T_WHITESPACE || ($token[0] == T_DOC_COMMENT && $doc_comment)) {
$space = "\n"; $space = " ";
} else { } else {
if ($token[0] == T_DOC_COMMENT) { if ($token[0] == T_DOC_COMMENT) {
$doc_comment = true; $doc_comment = true;
@@ -287,9 +324,13 @@ function php_shrink($input) {
} elseif ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) { } elseif ($token[0] === T_VARIABLE && !isset($special_variables[$token[1]])) {
$token[1] = '$' . $short_variables[$token[1]]; $token[1] = '$' . $short_variables[$token[1]];
} }
if (isset($set[substr($output, -1)]) || isset($set[$token[1][0]])) {
if ($token[0] == T_FUNCTION || $token[0] == T_CLASS || $token[0] == T_INTERFACE || $token[0] == T_TRAIT) {
$space = "\n";
} elseif (isset($set[substr($output, -1)]) || isset($set[$token[1][0]])) {
$space = ''; $space = '';
} }
$output .= $space . $token[1]; $output .= $space . $token[1];
$space = ''; $space = '';
} }
@@ -340,60 +381,78 @@ function number_type() {
} }
$project = "adminer"; $project = "adminer";
if ($_SERVER["argv"][1] == "editor") { array_shift($argv);
if ($argv[0] == "editor") {
$project = "editor"; $project = "editor";
array_shift($_SERVER["argv"]); array_shift($argv);
} }
$driver = ""; $selected_drivers = [];
if (file_exists(dirname(__FILE__) . "/adminer/drivers/" . $_SERVER["argv"][1] . ".inc.php")) { if ($argv) {
$driver = $_SERVER["argv"][1]; $params = explode(",", $argv[0]);
array_shift($_SERVER["argv"]); if (file_exists(dirname(__FILE__) . "/adminer/drivers/" . $params[0] . ".inc.php")) {
$selected_drivers = $params;
array_shift($argv);
}
} }
$single_driver = count($selected_drivers) == 1 ? $selected_drivers[0] : null;
unset($_COOKIE["adminer_lang"]); $selected_languages = [];
$_SESSION["lang"] = $_SERVER["argv"][1]; // Adminer functions read language from session if ($argv) {
include dirname(__FILE__) . "/adminer/include/lang.inc.php"; $params = explode(",", $argv[0]);
if (isset($langs[$_SESSION["lang"]])) { if (file_exists(dirname(__FILE__) . "/adminer/lang/" . $params[0] . ".inc.php")) {
include dirname(__FILE__) . "/adminer/lang/$_SESSION[lang].inc.php"; $selected_languages = $params;
array_shift($_SERVER["argv"]); array_shift($argv);
}
} }
$single_language = count($selected_languages) == 1 ? $selected_languages[0] : null;
if ($_SERVER["argv"][1]) { if ($argv) {
echo "Usage: php compile.php [editor] [driver] [lang]\n"; echo "Usage: php compile.php [editor] [driver] [language]\n";
echo "Purpose: Compile adminer[-driver][-lang].php or editor[-driver][-lang].php.\n"; echo "Purpose: Compile adminer[-driver][-lang].php or editor[-driver][-lang].php.\n";
exit(1); exit(1);
} }
// check function definition in drivers // Check function definition in drivers.
$file = file_get_contents(dirname(__FILE__) . "/adminer/drivers/mysql.inc.php"); $file = file_get_contents(dirname(__FILE__) . "/adminer/drivers/mysql.inc.php");
$file = preg_replace('~class Min_Driver.*\n\t}~sU', '', $file); $file = preg_replace('~class Min_Driver.*\n\t}~sU', '', $file);
preg_match_all('~\bfunction ([^(]+)~', $file, $matches); //! respect context (extension, class) preg_match_all('~\bfunction ([^(]+)~', $file, $matches); //! respect context (extension, class)
$functions = array_combine($matches[1], $matches[0]); $functions = array_combine($matches[1], $matches[0]);
//! do not warn about functions without declared support() //! do not warn about functions without declared support()
unset($functions["__construct"], $functions["__destruct"], $functions["set_charset"]); unset($functions["__construct"], $functions["__destruct"], $functions["set_charset"]);
foreach (glob(dirname(__FILE__) . "/adminer/drivers/" . ($driver ? $driver : "*") . ".inc.php") as $filename) {
if ($filename != "mysql.inc.php") { foreach (glob(dirname(__FILE__) . "/adminer/drivers/*.inc.php") as $filename) {
$file = file_get_contents($filename); preg_match('~/([^/.]+)\.inc\.php$~', $filename, $matches);
foreach ($functions as $val) { if ($matches[1] == "mysql" || ($selected_drivers && !in_array($matches[1], $selected_drivers))) {
if (!strpos($file, "$val(")) { continue;
fprintf(STDERR, "Missing $val in $filename\n"); }
}
$file = file_get_contents($filename);
foreach ($functions as $function) {
if (!strpos($file, "$function(")) {
fprintf(STDERR, "Missing $function in $filename\n");
} }
} }
} }
include dirname(__FILE__) . "/adminer/include/pdo.inc.php"; include dirname(__FILE__) . "/adminer/include/pdo.inc.php";
include dirname(__FILE__) . "/adminer/include/driver.inc.php"; include dirname(__FILE__) . "/adminer/include/driver.inc.php";
$features = array("call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view");
$lang_ids = array(); // global variable simplifies usage in a callback function $features = ["call" => "routine", "dump", "event", "privileges", "procedure" => "routine", "processlist", "routine", "scheme", "sequence", "status", "trigger", "type", "user" => "privileges", "variables", "view"];
$lang_ids = []; // global variable simplifies usage in a callback functions
// Start with index.php.
$file = file_get_contents(dirname(__FILE__) . "/$project/index.php"); $file = file_get_contents(dirname(__FILE__) . "/$project/index.php");
if ($driver) {
$_GET[$driver] = true; // to load the driver // Remove including source code for unsupported features in single-driver file.
include_once dirname(__FILE__) . "/adminer/drivers/$driver.inc.php"; if ($single_driver) {
$_GET[$single_driver] = true; // to load the driver
include_once dirname(__FILE__) . "/adminer/drivers/$single_driver.inc.php";
foreach ($features as $key => $feature) { foreach ($features as $key => $feature) {
if (!support($feature)) { if (!support($feature)) {
if (!is_int($key)) { if (is_string($key)) {
$feature = $key; $feature = $key;
} }
$file = str_replace("} elseif (isset(\$_GET[\"$feature\"])) {\n\tinclude \"./$feature.inc.php\";\n", "", $file); $file = str_replace("} elseif (isset(\$_GET[\"$feature\"])) {\n\tinclude \"./$feature.inc.php\";\n", "", $file);
@@ -403,42 +462,51 @@ if ($driver) {
$file = str_replace("if (isset(\$_GET[\"callf\"])) {\n\t\$_GET[\"call\"] = \$_GET[\"callf\"];\n}\nif (isset(\$_GET[\"function\"])) {\n\t\$_GET[\"procedure\"] = \$_GET[\"function\"];\n}\n", "", $file); $file = str_replace("if (isset(\$_GET[\"callf\"])) {\n\t\$_GET[\"call\"] = \$_GET[\"callf\"];\n}\nif (isset(\$_GET[\"function\"])) {\n\t\$_GET[\"procedure\"] = \$_GET[\"function\"];\n}\n", "", $file);
} }
} }
// Compile files included into the index.php.
$file = preg_replace_callback('~\b(include|require) "([^"]*)";~', 'put_file', $file); $file = preg_replace_callback('~\b(include|require) "([^"]*)";~', 'put_file', $file);
// Remove including debug files.
$file = str_replace('include "../adminer/include/debug.inc.php";', '', $file);
$file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file); $file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file);
if ($driver) {
$file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($driver) . '\.).*\s*)', '', $file); // Remove including unwanted drivers.
if ($selected_drivers) {
$file = preg_replace_callback('~include "../adminer/drivers/([^.]+).*\n~', function ($match) use ($selected_drivers) {
return in_array($match[1], $selected_drivers) ? $match[0] : "";
}, $file);
} }
$file = preg_replace_callback('~\b(include|require) "([^"]*)";~', 'put_file', $file); // bootstrap.inc.php
if ($driver) { // Compile files included into the bootstrap.inc.php.
$file = preg_replace_callback('~\b(include|require) "([^"]*)";~', 'put_file', $file);
if ($single_driver) {
// Remove source code for unsupported features.
foreach ($features as $feature) { foreach ($features as $feature) {
if (!support($feature)) { if (!support($feature)) {
$file = preg_replace("((\t*)" . preg_quote('if (support("' . $feature . '")') . ".*\n\\1\\})sU", '', $file); $file = preg_replace("((\t*)" . preg_quote('if (support("' . $feature . '")') . ".*\n\\1\\})sU", '', $file);
} }
} }
if (count($drivers) == 1) {
$file = str_replace('<?php echo html_select("auth[driver]", $drivers, DRIVER) . "\n"; ?>', "<input type='hidden' name='auth[driver]' value='" . ($driver == "mysql" ? "server" : $driver) . "'>" . reset($drivers), $file); $file = preg_replace('(;\.\./vendor/vrana/jush/modules/jush-(?!textarea\.|txt\.|js\.|' . preg_quote($single_driver == "mysql" ? "sql" : $single_driver) . '\.)[^.]+.js)', '', $file);
} $file = preg_replace_callback('~doc_link\(array\((.*)\)\)~sU', function ($match) use ($single_driver) {
$file = preg_replace('(;\.\./vendor/vrana/jush/modules/jush-(?!textarea\.|txt\.|js\.|' . preg_quote($driver == "mysql" ? "sql" : $driver) . '\.)[^.]+.js)', '', $file);
$file = preg_replace_callback('~doc_link\(array\((.*)\)\)~sU', function ($match) use ($driver) {
list(, $links) = $match; list(, $links) = $match;
$links = preg_replace("~'(?!(" . ($driver == "mysql" ? "sql|mariadb" : $driver) . ")')[^']*' => [^,]*,?~", '', $links); $links = preg_replace("~'(?!(" . ($single_driver == "mysql" ? "sql|mariadb" : $single_driver) . ")')[^']*' => [^,]*,?~", '', $links);
return (trim($links) ? "doc_link(array($links))" : "''"); return (trim($links) ? "doc_link(array($links))" : "''");
}, $file); }, $file);
//! strip doc_link() definition //! strip doc_link() definition
} }
if ($project == "editor") { if ($project == "editor") {
$file = preg_replace('~;\.\./vendor/vrana/jush/jush\.css~', '', $file); $file = preg_replace('~;\.\./vendor/vrana/jush/jush\.css~', '', $file);
$file = preg_replace('~compile_file\(\'\.\./(vendor/vrana/jush/modules/jush\.js|adminer/static/[^.]+\.gif)[^)]+\)~', "''", $file); $file = preg_replace('~compile_file\(\'\.\./(vendor/vrana/jush/modules/jush\.js|adminer/static/[^.]+\.gif)[^)]+\)~', "''", $file);
} }
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'replace_lang', $file);
$file = preg_replace_callback('~\b(include|require) "([^"]*\$LANG.inc.php)";~', 'put_file_lang', $file); $file = preg_replace_callback('~\b(include|require) "([^"]*\$LANG.inc.php)";~', 'put_file_lang', $file);
$file = str_replace("\r", "", $file); $file = str_replace("\r", "", $file);
if ($_SESSION["lang"]) {
// single language version
$file = preg_replace_callback("~(<\\?php\\s*echo )?lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])(;\\s*\\?>)?~s", 'remove_lang', $file);
$file = str_replace("<?php switch_lang(); ?>\n", "", $file);
$file = str_replace('<?php echo $LANG; ?>', $_SESSION["lang"], $file);
}
$file = str_replace('<?php echo script_src("static/editing.js?" . filemtime("../adminer/static/editing.js")); ?>' . "\n", "", $file); $file = str_replace('<?php echo script_src("static/editing.js?" . filemtime("../adminer/static/editing.js")); ?>' . "\n", "", $file);
$file = preg_replace('~\s+echo script_src\("\.\./vendor/vrana/jush/modules/jush-(textarea|txt|js|\$jush)\.js"\);~', '', $file); $file = preg_replace('~\s+echo script_src\("\.\./vendor/vrana/jush/modules/jush-(textarea|txt|js|\$jush)\.js"\);~', '', $file);
$file = str_replace('<link rel="stylesheet" type="text/css" href="../vendor/vrana/jush/jush.css">' . "\n", "", $file); $file = str_replace('<link rel="stylesheet" type="text/css" href="../vendor/vrana/jush/jush.css">' . "\n", "", $file);
@@ -452,7 +520,12 @@ $file = preg_replace('~"\.\./vendor/vrana/jush/modules/(jush\.js)"~', $replace,
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file); $file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
$file = php_shrink($file); $file = php_shrink($file);
@mkdir("temp/export", 0777, true); @mkdir("export", 0777, true);
$filename = "temp/export/$project" . (preg_match('~-dev$~', $VERSION) ? "" : "-$VERSION") . ($driver ? "-$driver" : "") . ($_SESSION["lang"] ? "-$_SESSION[lang]" : "") . ".php"; $filename = "export/$project"
. (is_dev_version() ? "" : "-$VERSION")
. ($single_driver ? "-$single_driver" : "")
. ($single_language ? "-$single_language" : "")
. ".php";
file_put_contents($filename, $file); file_put_contents($filename, $file);
echo "$filename created (" . strlen($file) . " B).\n"; echo "$filename created (" . strlen($file) . " B).\n";

View File

@@ -1,16 +1,19 @@
{ {
"name": "vrana/adminer", "name": "adminerneo/adminerneo",
"description": "Database management in a single PHP file.", "description": "Database management in a single PHP file.",
"homepage": "https://www.adminer.org/", "homepage": "https://github.com/adminerneo/adminerneo",
"keywords": [ "keywords": [
"database" "database"
], ],
"support": { "support": {
"issues": "https://sourceforge.net/p/adminer/bugs-and-features/", "issues": "https://github.com/adminerneo/adminerneo/issues",
"forum": "https://sourceforge.net/p/adminer/discussion/", "forum": "https://github.com/adminerneo/adminerneo/discussions",
"source": "https://github.com/vrana/adminer/" "source": "https://github.com/adminerneo/adminerneo"
}, },
"authors": [ "authors": [
{
"name": "Peter Knut"
},
{ {
"name": "Jakub Vrána", "name": "Jakub Vrána",
"homepage": "https://www.vrana.cz/" "homepage": "https://www.vrana.cz/"
@@ -26,7 +29,7 @@
"GPL-2.0-only" "GPL-2.0-only"
], ],
"require": { "require": {
"php": "5.6 - 8.3", "php": "5.6 - 8.4",
"ext-pdo": "*", "ext-pdo": "*",
"ext-json": "*", "ext-json": "*",
"vrana/jush": "2.0.*", "vrana/jush": "2.0.*",
@@ -39,6 +42,7 @@
"ext-mysql": "*", "ext-mysql": "*",
"ext-pgsql": "*", "ext-pgsql": "*",
"ext-mongo": "*", "ext-mongo": "*",
"ext-mongodb": "*",
"ext-sqlsrv": "*", "ext-sqlsrv": "*",
"ext-mssql": "*", "ext-mssql": "*",
"ext-oci8": "*", "ext-oci8": "*",
@@ -57,11 +61,11 @@
"repositories": [ "repositories": [
{ {
"type": "vcs", "type": "vcs",
"url": "https://github.com/pematon/jush.git" "url": "https://github.com/peterpp/jush.git"
}, },
{ {
"type": "vcs", "type": "vcs",
"url": "https://github.com/vrana/jsshrink.git" "url": "https://github.com/peterpp/js-shrink.git"
} }
] ]
} }

View File

@@ -2,8 +2,8 @@
*{margin:0;padding:0} *{margin:0;padding:0}
body{font:13px/18px Helvetica,Arial,sans-serif;background:#fff;color:#333} body{font:13px/18px Helvetica,Arial,sans-serif;background:#fff;color:#333}
/* generic */ /* generic */
a,a:visited{color:#06c;text-decoration:none;border-bottom:1px dotted} a{color:#06c;text-decoration:none;border-bottom:1px dotted}
a:hover{border-bottom:1px solid #06c;background:#06c;color:#fff} a:hover,a:link:hover{border-bottom:1px solid #06c;background:#06c;color:#fff}
p{padding-bottom:4px;margin-bottom:4px} p{padding-bottom:4px;margin-bottom:4px}
h1{font-size:18px;font-weight:bold;padding-bottom:0px;height:40px;padding:0 0 8px 0;color:#666;border:0} h1{font-size:18px;font-weight:bold;padding-bottom:0px;height:40px;padding:0 0 8px 0;color:#666;border:0}
h2{font:32px Georgia,serif;padding:10px 0 8px;margin:0;background:transparent;border:0;color:#333} h2{font:32px Georgia,serif;padding:10px 0 8px;margin:0;background:transparent;border:0;color:#333}
@@ -31,6 +31,7 @@ thead th,thead td{white-space:nowrap;font-weight:bold;background:#ddd;border-col
th:first-child,td:first-child{border-color:transparent;white-space:nowrap} th:first-child,td:first-child{border-color:transparent;white-space:nowrap}
td[align=right]{text-align:right} td[align=right]{text-align:right}
table code{font-size:13px;line-height:18px} table code{font-size:13px;line-height:18px}
.footer fieldset{float:none;}
.hidden{display:none} .hidden{display:none}
.error,.message{padding:0;background:transparent;font-weight:bold} .error,.message{padding:0;background:transparent;font-weight:bold}
.error{color:#c00} .error{color:#c00}
@@ -46,11 +47,12 @@ border:5px solid #ccc;margin:0}
#menu a:hover{background:#333;color:#fff;border-color:#333} #menu a:hover{background:#333;color:#fff;border-color:#333}
#menu a.h1,#menu a.h1:hover{display:block;height:0;width:175px;padding:40px 0 0 0;overflow:hidden;float:left;border:0;margin:0; #menu a.h1,#menu a.h1:hover{display:block;height:0;width:175px;padding:40px 0 0 0;overflow:hidden;float:left;border:0;margin:0;
outline:0;background:url(//www.bradezone.com/random/adminer_logo.gif) no-repeat;line-height:32px} outline:0;background:url(//www.bradezone.com/random/adminer_logo.gif) no-repeat;line-height:32px}
#menu p,#logins,#tables{white-space:nowrap;border:0;padding:0 0 4px 0;margin:0 0 4px 0} #menu p,#logins,#tables{border:0;padding:0 0 4px 0;margin:0 0 4px 0}
#breadcrumb{background:#333;color:#fff;position:fixed;top:0;left:320px;line-height:40px;padding:0;z-index:1;margin:0} #breadcrumb{background:#333;color:#fff;position:fixed;top:0;left:320px;line-height:40px;padding:0;z-index:1;margin:0}
#breadcrumb a{color:#ff9} #breadcrumb a{color:#ff9}
#breadcrumb a:hover{background:transparent;color:#ff9;border-color:#ff9} #breadcrumb a:hover{background:transparent;color:#ff9;border-color:#ff9}
#schema .table{padding:4px 8px;background:#f3f3f3} #schema .table{padding:4px 8px;background:#f3f3f3}
.tables-filter{padding:0;margin:10px 0;}
/* IE hacks */ /* IE hacks */
*+html th:first-child,*+html td:first-child{border-color:inherit;white-space:inherit} *+html th:first-child,*+html td:first-child{border-color:inherit;white-space:inherit}
* html #lang,* html #menu,* html #breadcrumb{position:absolute} * html #lang,* html #menu,* html #breadcrumb{position:absolute}

View File

@@ -1,6 +1,6 @@
/** /**
* Alternative style for Adminer by Frank Bültge * Alternative style for Adminer by Frank Bültge
* *
* @link http://bueltge.de/ * @link http://bueltge.de/
* @version 02/18/2014 * @version 02/18/2014
*/ */
@@ -31,14 +31,14 @@ p {
margin: 0.8em 20px 0 5px margin: 0.8em 20px 0 5px
} }
a { a {
color: #21759B; color: #21759B;
background: none !important; background: none !important;
} }
a:visited { a:visited {
color: #21759B; color: #21759B;
} }
a:hover, a:hover { a:hover, a:hover {
text-decoration: none; text-decoration: none;
color: #d54e21; color: #d54e21;
} }
@@ -55,7 +55,9 @@ a.active, a.active + a {
text-decoration: none; text-decoration: none;
font-weight: 700; font-weight: 700;
} }
.icon {
background-color: #21759B;
}
form { form {
margin: 0; margin: 0;
padding: 0 0 0 5px; padding: 0 0 0 5px;
@@ -102,7 +104,7 @@ display: table-header-group;
vertical-align: middle; vertical-align: middle;
border-color: inherit; border-color: inherit;
} }
thead td, thead th { thead td, thead th {
background-color: #DFDFDF; background-color: #DFDFDF;
border: none; border: none;
border-bottom: 1px #BBB solid; border-bottom: 1px #BBB solid;
@@ -117,12 +119,18 @@ tr:hover td, tr:hover th {
background-color: #BCD; background-color: #BCD;
} }
.footer {
border-image:linear-gradient(rgba(249, 249, 249, .2), #F9F9F9) 100% 0;
}
.footer > div {
background-color: #F9F9F9;
}
fieldset { fieldset {
display: inline; display: inline;
vertical-align: top; vertical-align: top;
padding: 2px 12px; padding: 2px 12px;
margin: 25px 12px 12px 0; margin: 25px 12px 12px 0;
border: none; border: none;
background-color: #F1F1F1; background-color: #F1F1F1;
border: 1px solid #E3E3E3; border: 1px solid #E3E3E3;
@@ -136,7 +144,7 @@ fieldset {
padding-top: 14px; padding-top: 14px;
} }
legend { legend {
font-weight: 900; font-weight: 900;
color: #000; color: #000;
top: -1.666em; top: -1.666em;
left: -1em; left: -1em;
@@ -146,7 +154,7 @@ input {
padding: 2px 5px 1px 5px; padding: 2px 5px 1px 5px;
} }
input[name='limit'], input[name='length'] { input[name='limit'], input[name='length'] {
width: 3em; width: 3em;
text-align: right; text-align: right;
} }
input[name='text_length'] { input[name='text_length'] {
@@ -203,7 +211,7 @@ input[type=button], input[type=submit] {
background-image: -o-linear-gradient(top, #fff, #eee); background-image: -o-linear-gradient(top, #fff, #eee);
background-image: linear-gradient(to bottom, #fff, #eee); background-image: linear-gradient(to bottom, #fff, #eee);
border-color: #ccc; border-color: #ccc;
-webkit-box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9); -webkit-box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);
box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9); box-shadow: inset 0 0 1px 1px rgba(255,255,255, 0.9);
color: #464646; color: #464646;
text-shadow: 1px 1px 0 #fff; text-shadow: 1px 1px 0 #fff;
@@ -217,7 +225,7 @@ input[type=button]:focus, input[type=submit]:focus {
background-image: -o-linear-gradient(top, #fff, #eee); background-image: -o-linear-gradient(top, #fff, #eee);
background-image: linear-gradient(to bottom, #fff, #eee); background-image: linear-gradient(to bottom, #fff, #eee);
border-color: #bbb; border-color: #bbb;
-webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1); -webkit-box-shadow: 0px 1px 1px rgba(0,0,0,.1);
box-shadow: 0px 1px 1px rgba(0,0,0,.1); box-shadow: 0px 1px 1px rgba(0,0,0,.1);
color: #000; color: #000;
} }
@@ -230,7 +238,7 @@ input[type=button]:active, input[type=submit]:active {
background-image: linear-gradient(to bottom, #eee, #f9f9f9); background-image: linear-gradient(to bottom, #eee, #f9f9f9);
border-color: #999 #ddd #ddd #999; border-color: #999 #ddd #ddd #999;
color: #555; color: #555;
-webkit-box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1); -webkit-box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1);
box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1); box-shadow: inset 1px 1px 0 rgba(50,50,50,0.1);
} }
input[type=button]:focus, input[type=submit]:focus { input[type=button]:focus, input[type=submit]:focus {
@@ -255,9 +263,9 @@ input[name='Auto_increment'] { /* !!! */
width: 6em; width: 6em;
} }
img { img {
vertical-align: middle; vertical-align: middle;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.js .column { .js .column {
@@ -265,25 +273,25 @@ position: relative;
background: none; background: none;
padding: 0; padding: 0;
} }
.error { .error {
padding: 8px; padding: 8px;
color: red; color: red;
background-color: #FEE; background-color: #FEE;
} }
.message { .message {
padding: 8px; padding: 8px;
background-color: #DDD; background-color: #DDD;
} }
.char { .char {
color: #070; color: #070;
} }
.date { .date {
color: #707; color: #707;
} }
.enum { .enum {
color: #077; color: #077;
} }
.binary { .binary {
color: red; color: red;
} }
.jush-sql { .jush-sql {
@@ -295,20 +303,20 @@ font-size: 11px;
color: #333; color: #333;
} }
#content { #content {
margin: 2px 0 0 270px; margin: 2px 0 0 270px;
padding: 10px 20px 20px 0; padding: 10px 20px 20px 0;
} }
#lang { #lang {
font-size:10px; font-size:10px;
height: 23px; height: 23px;
width: 255px; width: 255px;
display: block; display: block;
padding: 1px 0; padding: 1px 0;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
text-align: center; text-align: center;
background-color: #f1f1f1; background-color: #f1f1f1;
border: 1px solid #E3E3E3; border: 1px solid #E3E3E3;
line-height: 1.25em; line-height: 1.25em;
@@ -316,43 +324,43 @@ line-height: 1.25em;
#lang select { #lang select {
font-size: 10px; font-size: 10px;
} }
#breadcrumb { #breadcrumb {
margin: 0; margin: 0;
height: 21px; height: 21px;
display: block; display: block;
position: absolute; position: absolute;
top: 0; top: 0;
left: 270px; left: 270px;
background-color: #f1f1f1; background-color: #f1f1f1;
border: 1px solid #E3E3E3; border: 1px solid #E3E3E3;
padding: 2px 12px; padding: 2px 12px;
line-height: 1.25em } line-height: 1.25em }
#menu { #menu {
position: absolute; position: absolute;
margin: 0; margin: 0;
top: 28px; top: 28px;
left: 0; left: 0;
width: 255px; width: 255px;
background-color: #f1f1f1; background-color: #f1f1f1;
border: 1px solid #E3E3E3; border: 1px solid #E3E3E3;
} }
#menu form { #menu form {
margin: 0; margin: 0;
} }
#menu p, #logins, #tables { #menu p, #logins, #tables, .tables-filter {
padding-left: 8px; padding-left: 8px;
border-bottom: none;
}
#dbs {
padding: 0 !important;
} }
#menu form p { #menu form p {
padding-left: 0; padding-left: 0;
text-align: left; text-align: left;
} }
#dbs {
border-bottom: none !important;
padding-left: 3px !important;
}
h1 .h1:hover { h1 .h1:hover {
text-decoration: underline; text-decoration: underline;
} }
h1, h2 { h1, h2 {
font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
margin: 0; margin: 0;
@@ -371,18 +379,18 @@ h3 {
font: normal normal normal 18px/22px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; font: normal normal normal 18px/22px Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
margin: 20px 0 0 5px; margin: 20px 0 0 5px;
} }
#schema { #schema {
margin: 1.5em 0 0 220px; margin: 1.5em 0 0 220px;
position: relative; position: relative;
} }
#schema .table { #schema .table {
border: 1px solid #E3E3E3; border: 1px solid #E3E3E3;
background-color: #F1F1F1; background-color: #F1F1F1;
padding: 0 2px; padding: 0 2px;
cursor: move; cursor: move;
position: absolute; position: absolute;
} }
#schema .references { #schema .references {
position: absolute; position: absolute;
} }
.js .hidden { .js .hidden {
@@ -425,4 +433,4 @@ border-bottom-left-radius: 3px;
-khtml-border-top-right-radius: 3px; -khtml-border-top-right-radius: 3px;
-webkit-border-top-right-radius: 3px; -webkit-border-top-right-radius: 3px;
border-top-right-radius: 3px; border-top-right-radius: 3px;
} }

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
/* /*
* Theme by Douglas Damasio [http://github.com/douglasdamasio] * Theme by Douglas Damasio [http://github.com/douglasdamasio]
* Based on Pepa Linha * Based on Pepa Linha
* Color syntax inspired by Dracula Theme [https://draculatheme.com/] * Color syntax inspired by Dracula Theme [https://draculatheme.com/]
@@ -28,7 +28,7 @@
height: 100%; height: 100%;
background: var(--color-darkBackground); background: var(--color-darkBackground);
} }
body { body {
font-family: 'Source Sans Pro', sans-serif; font-family: 'Source Sans Pro', sans-serif;
} }
@@ -36,14 +36,14 @@
div { div {
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
h1 { h1 {
margin: 0; margin: 0;
padding: 0; padding: 0;
background: none; background: none;
border: 0; border: 0;
} }
h2 { h2 {
margin: 0; margin: 0;
padding: 0; padding: 0;
@@ -57,12 +57,12 @@
padding-bottom: 6px; padding-bottom: 6px;
margin-bottom: 40px; margin-bottom: 40px;
} }
.rtl h2 { .rtl h2 {
margin: 0; margin: 0;
margin-bottom: 40px; margin-bottom: 40px;
} }
h3 { h3 {
font-size: 22px; font-size: 22px;
margin: 0 0 10px; margin: 0 0 10px;
@@ -72,66 +72,70 @@
color: var(--color-darkGreen); color: var(--color-darkGreen);
} }
p { p {
margin: 0; margin: 0;
margin-bottom: 15px; margin-bottom: 15px;
align-items: center; align-items: center;
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
a { a {
color:var(--color-darkPink); color:var(--color-darkPink);
text-decoration:none; text-decoration:none;
} }
a:visited { a:visited {
color: var(--color-darkPurple); color: var(--color-darkPurple);
} }
a:link:hover, a:link:hover,
a:visited:hover { a:visited:hover {
color: var(--color-darkPink); color: var(--color-darkPink);
text-decoration:underline; text-decoration:underline;
} }
a[href*=charsets] { a[href*=charsets] {
display: none; display: none;
} }
table { table {
border: 0; border: 0;
margin: 0; margin: 0;
margin-top: 15px; margin-top: 15px;
} }
th, td { th, td {
border: 0; border: 0;
padding: 6px; padding: 6px;
color: var(--color-darkOrange); color: var(--color-darkOrange);
} }
th { th {
background: none; background: none;
color: var(--color-darkCyan); color: var(--color-darkCyan);
font-weight: normal; font-weight: normal;
} }
tbody tr:hover td, tbody tr:hover td,
tbody tr:hover th { tbody tr:hover th {
background: var(--color-darkCurrentLine); background: var(--color-darkCurrentLine);
} }
table:not(.checkable) th { table:not(.checkable) th {
min-width: 120px; min-width: 120px;
} }
#edit-fields th {
min-width: 0;
}
thead td, thead td,
thead th { thead th {
background: var(--color-darkComment); background: var(--color-darkComment);
} }
thead td, thead td,
thead td a, thead td a,
thead td a:link:hover, thead td a:link:hover,
@@ -144,37 +148,38 @@
thead th a:visited:hover { thead th a:visited:hover {
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
table.checkable, table.checkable,
p.links + table, p.links + table,
pre + table, pre + table,
#edit-fields, #edit-fields,
p + table, p + table,
h3 + table { h3 + table,
.scrollable table{
border: 1px solid var(--color-darkCurrentLine); border: 1px solid var(--color-darkCurrentLine);
margin-bottom: 15px; margin-bottom: 15px;
} }
table.checkable tbody tr:hover td, table.checkable tbody tr:hover td,
table.checkable tbody tr:hover th { table.checkable tbody tr:hover th {
background: var(--color-darkCurrentLine); background: var(--color-darkCurrentLine);
} }
.js .checkable .checked td, .js .checkable .checked td,
.js .checkable .checked th { .js .checkable .checked th {
background: var(--color-darkDraculaSite); background: var(--color-darkDraculaSite);
} }
.js .checkable thead .checked td, .js .checkable thead .checked td,
.js .checkable thead .checked th { .js .checkable thead .checked th {
background: var(--color-darkPurple); background: var(--color-darkPurple);
} }
.odd th, .odd th,
.odd td { .odd td {
background: var(--color-darkDraculaVSCode); background: var(--color-darkDraculaVSCode);
} }
fieldset { fieldset {
display: inline-block; display: inline-block;
padding: 15px; padding: 15px;
@@ -183,21 +188,21 @@
border: 0; border: 0;
background: var(--color-darkBackground); background: var(--color-darkBackground);
} }
fieldset select { fieldset select {
margin-right: 5px; margin-right: 5px;
} }
fieldset input[type=button], fieldset input[type=button],
fieldset input[type=submit], fieldset input[type=submit],
fieldset p { fieldset p {
margin-bottom: 0; margin-bottom: 0;
} }
fieldset div p { fieldset div p {
margin-top: 10px; margin-top: 10px;
} }
legend { legend {
display: inline-block; display: inline-block;
padding: 6px 15px; padding: 6px 15px;
@@ -206,17 +211,17 @@
font-family: 'Source Sans Pro', sans-serif; font-family: 'Source Sans Pro', sans-serif;
color: var(--color-darkOrange); color: var(--color-darkOrange);
} }
legend a, legend a,
legend a:link:hover { legend a:link:hover {
color: var(--color-darkOrange); color: var(--color-darkOrange);
text-decoration: underline; text-decoration: underline;
} }
code { code {
background: none; background: none;
} }
p code, p code,
pre code, pre code,
pre[contenteditable=true] { pre[contenteditable=true] {
@@ -225,7 +230,7 @@
font-size: 17px; font-size: 17px;
margin-bottom: 15px; margin-bottom: 15px;
} }
p code + a, p code + a,
p code + a:link:hover, p code + a:link:hover,
p code + a:visited:hover { p code + a:visited:hover {
@@ -237,7 +242,7 @@
text-decoration: underline; text-decoration: underline;
text-transform: lowercase; text-transform: lowercase;
} }
#content { #content {
margin: 0; margin: 0;
margin-left: 400px; margin-left: 400px;
@@ -245,12 +250,12 @@
padding: 0; padding: 0;
padding-top: 50px; padding-top: 50px;
} }
#content > p { #content > p {
margin-bottom: 15px; margin-bottom: 15px;
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
.rtl #content { .rtl #content {
margin: 0; margin: 0;
margin-left: 54px; margin-left: 54px;
@@ -258,7 +263,7 @@
padding: 0; padding: 0;
padding-top: 50px; padding-top: 50px;
} }
#menu { #menu {
width: 347px; width: 347px;
border-right: 1px solid var(--color-darkBackground); border-right: 1px solid var(--color-darkBackground);
@@ -272,51 +277,44 @@
padding: 0 15px; padding: 0 15px;
box-sizing: border-box; box-sizing: border-box;
} }
#menu h1 { #menu h1 {
background: none left top no-repeat;
/* background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAAAyCAIAAABgVkRrAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NTA0RDI5NkM5QkRGMTFFMzg4ODNEQjEzNjY5NzJEMEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NTA0RDI5NkQ5QkRGMTFFMzg4ODNEQjEzNjY5NzJEMEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1MDREMjk2QTlCREYxMUUzODg4M0RCMTM2Njk3MkQwQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1MDREMjk2QjlCREYxMUUzODg4M0RCMTM2Njk3MkQwQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PnG4emkAAASXSURBVHja7Fk9aNtAFL6EDKKUoqGDySRKB1FC8dDBdCgeOmQoIUMG0yGE0EFT8dDBUwidPJQQQgcNpYROGjKI0sFDB9GhaMhgSgcPpWgqHjqYYsINJfQ7PfV0tmX9JI4Sgx+HI8f26bt3733fe6elIf/LbqwdHbJWS1wYBrMstrXJVg36ZJnNhQWBWMB9k+215gq3tDeHBH3pRseJtC8ee2ezEzd62+ncDH/DhS+ttC88qbMPDntaj952uyvXD3q7ETvyyE77pq5HFz9614r7V8C2GnBezBgp9tGNl3ffzIjvwZ9B//dA7Mz3YPLTyl29UhE+MI0KW9YKh2yjwQZichEAjsNu6WlUqNqkvwHUO+0BJeD2gn4hJFXTwAIw6jUzYxlwHkCTvWqy1+0Ct7FtsPh/3Ofc9brOJ5+8ezHr9gKMcGpWf2SK8bhKk48sA1kIOiODmzc2c8U0DLrzwhI5ypjA3fsZtNrOgPP4y5pmGJXamqHd1kQMTIkENYpwEfQHEW7GsGkYZse393ewb+Y9IwE0PJcOejQ2pFgK3Li3BI14hZM269XKaiXPVPodHUOs6l48o/+t5wO038OcQGztHzd31uPfUEgQdCQi3JkfumLLHa9LoK2tunPQtJ6v5wQ9zWoPzebupms34QKxmZNJAugIDzJE+V4rbTrDSMYtr3AD+H5WFIfZ0lIFPu50otiF7zfW2dlgquKccTFWRxYQ8wlFJOVTdc2gAChq/V99vxdgD7O5CIBO/Yi/P3vsUY2dOOxBdSrzIBm2dxJwq+hlaiId9dua5OlEv/IhH0vKvAYXfvUjvUTFB2STeinJu91Oxo3Eh58onwRXcB7zWkGj/Maa9203+9soPIyWEKBEkQdc8veo+sS4wQkYzV1Bi+A1Ee5DnhO33BxsSw1/wszGPHkXmqI7yIQzPvnvhPqEFjAWtSq7j7n2YplwSctVV8F/FXazbN76nQXu68btfe3Odmqwahl5Ca6tel0UVdnVc6pRBX/JkrgYn0RCY0cdAMhYvGYxHbEklbJ++FoqD8LTUiwTlZLEha55WKOmSybWTCXD1eJG8dnc4XAYqmdgmoRFyp/ZqqHbgMiD8qGXZeAOs1RD9YyhBgBVTgL3cMTHwKd2xyUL50qmTI5p/oK/F7jnEjeycLZTFz02SrKlaSPGbe0fOx+9mbTGcMHhe/fwuFMGn4Dy7BMPA3oBGkZrbIDgcp9JgK37YYtZjmSuqApH9yPRcTp+TM939THOpkaYroMguRuSE14tbuegif11vS58poYm7i1vn6fdxF6hMoNk4leIvTJ0B1FhPQ/PxM45eZ2HGjkY8jHXqptghGJJqqmKVHn1oCr4k93xgr8XuOcZ9zmf7dQym68Et6QFcFaBk7EsQ5fdfuteHW7xPM3asyVh05EkxFJITMHuGDUCukxwvOz3YI31mtWoX7TRXkrDjQhBLeFOHBtQQ6n/f8TDlAd/6mNBP7xO7Ecbz2qNjfrl6qoU3Mr5Qa4j9yyLHqZd7jwjL241QQFdPiJTdT7RsBuapslzi5mqVSHcKXYetcZlSelU3P8EGADW25uhkIE0mQAAAABJRU5ErkJggg==); */
background-image: url();
line-height: 50px; line-height: 50px;
padding-left: 50px; margin: 10px 0;
padding-top: 9px;
/* text-transform: lowercase; */
margin: 25px 0 10px 16px;
} }
#menu h1 a { #menu h1 a {
font-style: normal; font-style: normal;
} }
#menu h1 .version { #menu h1 .version {
color: var(--color-darkPurple); color: var(--color-darkPurple);
} }
#menu a { #menu a {
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
#menu p, #tables { #menu p, #tables {
border: 0; border: 0;
padding: 0; padding: 0;
} }
#menu #dbs { #menu #dbs {
background: var(--color-darkDraculaVSCode); background: var(--color-darkDraculaVSCode);
padding: 0 15px 15px; padding: 10px 15px 15px;
border: 1px solid var(--color-darkForeground); border: 1px solid var(--color-darkForeground);
border-bottom: 0; border-bottom: 0;
box-sizing: border-box; box-sizing: border-box;
color: var(--color-darkCyan); color: var(--color-darkCyan);
} }
#menu #dbs select { #menu #dbs select {
outline: 0; outline: 0;
border-color: var(--color-darkComment); border-color: var(--color-darkComment);
width: 100%; width: 100%;
} }
#menu p.links { #menu p.links {
margin: 0 0 15px; margin: 0 0 15px;
border: 1px solid var(--color-darkForeground); border: 1px solid var(--color-darkForeground);
@@ -326,50 +324,55 @@
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
} }
#menu p.links a { #menu p.links a {
padding: 8px; padding: 8px;
margin: 0; margin: 0;
display: table-cell; display: table-cell;
font-size: 12px; font-size: 12px;
} }
#menu p.links a:hover { #menu p.links a:hover {
color: var(--color-darkPink); color: var(--color-darkPink);
} }
#menu p.links a.active { #menu p.links a.active {
font-weight: normal; font-weight: normal;
background: var(--color-darkCurrentLine); background: var(--color-darkCurrentLine);
color: var(--color-darkYellow); color: var(--color-darkYellow);
} }
.tables-filter {
margin-top: 32px;
padding: 0;
}
#content p.links { #content p.links {
margin: -10px 0 15px; margin: -10px 0 15px;
} }
#content p.links a { #content p.links a {
padding: 8px; padding: 8px;
margin: 0; margin: 0;
display: table-cell; display: table-cell;
border: 1px solid var(--color-darkBackground); border: 1px solid var(--color-darkBackground);
} }
#content p.links a, #content p.links a,
#content p.links a:visited, #content p.links a:visited,
#content p.links a:hover { #content p.links a:hover {
color: var(--color-darkCyan); color: var(--color-darkCyan);
} }
#content p.links a.active { #content p.links a.active {
font-weight: normal; font-weight: normal;
border: 1px solid var(--color-darkTitleSite); border: 1px solid var(--color-darkTitleSite);
background: var(--color-darkCurrentLine); background: var(--color-darkCurrentLine);
} }
#tables { #tables {
max-height: 100%; max-height: 100%;
margin: 32px -15px !important; margin: 15px -15px 32px !important;
position: absolute; position: absolute;
left: 15px; left: 15px;
right: 15px; right: 15px;
@@ -378,33 +381,33 @@
overflow: hidden !important; overflow: hidden !important;
overflow-y: auto !important; overflow-y: auto !important;
} }
.rtl #tables { .rtl #tables {
overflow: hidden !important; overflow: hidden !important;
overflow-y: auto !important; overflow-y: auto !important;
} }
#tables a { #tables a {
float: right; float: right;
padding: 6px 15px; padding: 6px 15px;
} }
.rtl #tables a { .rtl #tables a {
float: none; float: none;
} }
#tables .structure, #tables .view { #tables .structure, #tables .view {
float: none; float: none;
display: block; display: block;
} }
.rtl #tables a:first-child, .rtl #tables a:first-child,
.rtl #tables br + a { .rtl #tables br + a {
float: left; float: left;
display: block; display: block;
margin-left: 15px; margin-left: 15px;
} }
#tables a:hover, #tables a:hover,
#tables a:hover + a, #tables a:hover + a,
#tables a.active, #tables a.active,
@@ -416,15 +419,15 @@
#tables br { #tables br {
display: none; display: none;
} }
.js .column { .js .column {
background: var(--color-darkDraculaVSCode); background: var(--color-darkDraculaVSCode);
} }
.js .checked .column { .js .checked .column {
background: var(--color-darkDraculaVSCode); background: var(--color-darkDraculaVSCode);
} }
.pages { .pages {
left: 400px; left: 400px;
background: var(--color-darkCyan); background: var(--color-darkCyan);
@@ -434,7 +437,7 @@
display: inline-block; display: inline-block;
position: static; position: static;
} }
.pages a, .pages a,
.pages a:link, .pages a:link,
.pages a:link:hover, .pages a:link:hover,
@@ -443,7 +446,7 @@
color: var(--color-darkBackground); color: var(--color-darkBackground);
font-weight: normal; font-weight: normal;
} }
#breadcrumb { #breadcrumb {
margin: 0; margin: 0;
left: 400px; left: 400px;
@@ -452,36 +455,40 @@
padding-top: 25px; padding-top: 25px;
font-size: 12px; font-size: 12px;
} }
#breadcrumb a { #breadcrumb a {
color: var(--color-darkForeground); color: var(--color-darkForeground);
text-decoration: underline; text-decoration: underline;
} }
#breadcrumb, #breadcrumb,
#breadcrumb a:hover { #breadcrumb a:hover {
color: var(--color-darkTitleSite); color: var(--color-darkTitleSite);
} }
.rtl #breadcrumb { .rtl #breadcrumb {
margin: 0; margin: 0;
padding: 0; padding: 0;
padding-top: 25px; padding-top: 25px;
right: 400px; right: 400px;
} }
.logout, .logout,
.rtl .logout { .rtl .logout {
top: 30px; top: 20px;
right: 54px; right: 54px;
margin: 0; margin: 0;
} }
.rtl .logout { .rtl .logout {
right: auto; right: auto;
left: 54px; left: 54px;
} }
#logout {
margin-top: 0;
}
input:not([type]), input:not([type]),
input[type="color"], input[type="color"],
input[type="email"], input[type="email"],
@@ -498,7 +505,11 @@
box-sizing: border-box; box-sizing: border-box;
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
input::placeholder {
color: var(--color-darkForeground);
}
table:not(#table) input:not([type]), table:not(#table) input:not([type]),
table:not(#table) input[type="color"], table:not(#table) input[type="color"],
table:not(#table) input[type="email"], table:not(#table) input[type="email"],
@@ -510,7 +521,7 @@
table:not(#table) input[type="search"] { table:not(#table) input[type="search"] {
min-width: 280px; min-width: 280px;
} }
input[type=submit], input[type=submit],
input[type=button] { input[type=button] {
border: 0; border: 0;
@@ -526,14 +537,14 @@
border-radius: 5px; border-radius: 5px;
margin-top: 20px; margin-top: 20px;
} }
input[type=submit][disabled], input[type=submit][disabled],
input[type=button][disabled] { input[type=button][disabled] {
background: var(--color-darkTitleSite) !important; background: var(--color-darkTitleSite) !important;
color: var(--color-darkBackground); color: var(--color-darkBackground);
cursor: not-allowed; cursor: not-allowed;
} }
input[type=submit]:hover, input[type=submit]:hover,
input[type=button]:hover, input[type=button]:hover,
input[type=submit]:focus, input[type=submit]:focus,
@@ -541,17 +552,17 @@
background: var(--color-darkGreen); background: var(--color-darkGreen);
opacity: 0.8; opacity: 0.8;
} }
.logout input[type=submit] { .logout input[type=submit] {
background: var(--color-darkRed); background: var(--color-darkRed);
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
.logout input[type=submit]:hover { .logout input[type=submit]:hover {
background: var(--color-darkRed); background: var(--color-darkRed);
opacity: 0.8; opacity: 0.8;
} }
input.default, input.default,
input.default { input.default {
box-shadow: none; box-shadow: none;
@@ -559,22 +570,22 @@
color: var(--color-darkDraculaVSCode); color: var(--color-darkDraculaVSCode);
font-weight: bold; font-weight: bold;
} }
select { select {
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
padding: 6px 0; padding: 6px;
border: 1px solid var(--color-darkCurrentLine); border: 1px solid var(--color-darkCurrentLine);
background-color: var(--color-darkBackground); background-color: var(--color-darkBackground);
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
label { label {
cursor: pointer; cursor: pointer;
margin: 18px; margin: 18px;
color: var(--color-darkOrange); color: var(--color-darkOrange);
} }
.error, .error,
.message { .message {
margin: 0; margin: 0;
@@ -582,23 +593,23 @@
background: var(--color-darkCurrentLine); background: var(--color-darkCurrentLine);
color: var(--color-darkRed); color: var(--color-darkRed);
} }
#logins a, #logins a,
#tables a, #tables a,
#tables span { #tables span {
background: none; background: none;
} }
#form > p { #form > p {
margin-bottom: 15px; margin-bottom: 15px;
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
#schema .table { #schema .table {
padding: 6px; padding: 6px;
} }
#schema .table a { #schema .table a {
display: block; display: block;
margin: -6px; margin: -6px;
@@ -607,20 +618,20 @@
color: var(--color-darkBackground); color: var(--color-darkBackground);
background: var(--color-darkPurple); background: var(--color-darkPurple);
} }
#schema .table br { #schema .table br {
display: none; display: none;
} }
#schema .table span { #schema .table span {
display: block; display: block;
margin-bottom: 1px solid var(--color-darkDraculaVSCode); margin-bottom: 1px solid var(--color-darkDraculaVSCode);
} }
#lang { #lang {
position: fixed; position: fixed;
top: 55px; top: 30px;
right: 100%; right: calc(100% + 8px);
z-index: 10; z-index: 10;
margin-right: -340px; margin-right: -340px;
line-height: normal; line-height: normal;
@@ -628,7 +639,7 @@
left: auto; left: auto;
font-size: 0; font-size: 0;
} }
#lang select { #lang select {
font-size: 12px; font-size: 12px;
padding: 0; padding: 0;
@@ -641,26 +652,26 @@
cursor: pointer; cursor: pointer;
outline: 0; outline: 0;
} }
#lang select option { #lang select option {
text-align: right; text-align: right;
} }
.rtl #lang { .rtl #lang {
margin-right: 0; margin-right: 0;
left: 100%; left: 100%;
margin-left: -261px; margin-left: -261px;
right: auto; right: auto;
} }
.jush { .jush {
color: var(--color-darkForeground); color: var(--color-darkForeground);
} }
.jush a { .jush a {
color: var(--color-darkPurple); color: var(--color-darkPurple);
} }
.jush-sql a, .jush-sql a,
.jush-sql_code a, .jush-sql_code a,
.jush-sqlite a, .jush-sqlite a,
@@ -670,7 +681,7 @@
.jush-simpledb a { .jush-simpledb a {
font-weight: normal; font-weight: normal;
} }
.jush-bac, .jush-bac,
.jush-php_bac, .jush-php_bac,
.jush-bra, .jush-bra,
@@ -678,7 +689,7 @@
.jush-sqlite_quo { .jush-sqlite_quo {
color: var(--color-darkYellow); color: var(--color-darkYellow);
} }
.jush-php_quo, .jush-php_quo,
.jush-quo, .jush-quo,
.jush-quo_one, .jush-quo_one,
@@ -690,21 +701,21 @@
.jush-sql_eot { .jush-sql_eot {
color: var(--color-darkOrange); color: var(--color-darkOrange);
} }
.jush-num, .jush-num,
.jush-clr { .jush-clr {
color: var(--color-darkPurple); color: var(--color-darkPurple);
} }
@media print { @media print {
.logout { .logout {
display: none; display: none;
} }
#breadcrumb { #breadcrumb {
position: static; position: static;
} }
#content { #content {
margin: 0; margin: 0;
} }

View File

@@ -225,8 +225,8 @@ h1{
} }
h2{ h2{
font-size: 24px; font-size: 24px;
margin: 0; margin: 0;
padding: 0; padding: 0;
padding-left: 50px; padding-left: 50px;
border-bottom: 1px solid #333; border-bottom: 1px solid #333;
@@ -442,6 +442,13 @@ td textarea
border-radius: 0; border-radius: 0;
} }
th input::placeholder,
td input::placeholder
{
color: #fff;
}
th input:hover, th input:hover,
th select:hover, th select:hover,
td input:hover, td input:hover,
@@ -502,7 +509,7 @@ input[type='radio']{
height: 18px; height: 18px;
vertical-align: middle; vertical-align: middle;
margin-left: 8px; margin-left: 8px;
margin-right: 0; margin-right: 0;
} }
/* checkbox */ /* checkbox */
@@ -657,6 +664,14 @@ legend{
color: #999; color: #999;
} }
.footer {
border-image: linear-gradient(rgba(0, 0, 0, .2), #000) 100% 0;
}
.footer > div{
background: #000;
}
/* menu /* menu
----------------------------------------------------------------------- */ ----------------------------------------------------------------------- */
@@ -692,12 +707,6 @@ legend{
font-size: inherit; font-size: inherit;
} }
/* db select */
#dbs select{
width: 228px;
margin-left: 8px;
}
/* links */ /* links */
#menu .links{ #menu .links{
padding-top: 0; padding-top: 0;
@@ -985,6 +994,11 @@ code.jush-sql ~ a:first-of-type::before{
/* logout form /* logout form
----------------------------------------------------------------------- */ ----------------------------------------------------------------------- */
body > form{ .logout {
position: absolute; z-index: 10;
}
#logout {
margin-right: 0;
margin-left: 10px;
} }

View File

@@ -196,7 +196,7 @@ html>/**/body #content table a[id|="Rows"] { /* Select data (Rows) */
margin-right: 5px; margin-right: 5px;
} }
/* Edit,modify row (pen icon) */ /* Edit,modify row (pen icon) */
html>/**/body #content form table thead>tr>td a[href$="&modify=1"], html>/**/body #content form table thead>tr>td a[href$="&modify=1"],
html>/**/body #content form table a[href*="&edit="][href*="&where"] { html>/**/body #content form table a[href*="&edit="][href*="&where"] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=") no-repeat 3px 3px; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2lpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wUmlnaHRzPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvcmlnaHRzLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcFJpZ2h0czpNYXJrZWQ9IkZhbHNlIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcwNEVCNDY0MDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcwNEVCNDYzMDM4NzExRTFBREUyQ0JDMzAwQUI1NjI2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzMgV2luZG93cyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOkFDMUYyRTgzMzI0QURGMTFBQUI4QzUzOTBEODVCNUIzIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOkM5RDM0OTY2NEEzQ0REMTFCMDhBQkJCQ0ZGMTcyMTU2Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+MT7FiQAAAiZJREFUeNqMk1FIU1EYx/9nO3e+NranKIw2ErM9SQQXxCKMRdFDCWEaNIuIetseQiIKG/jQQ4H0kkQxdLRaYiijtdWwljjKjQlNRQPHEhWUjca9eb3bPd2tFTdrrgMf53x8/98533e+cwhqDFsDQccpILHYXvbv+f1NBcD5DfB8BcZpLfDAvp9+YrE81c+azc6jLlf3RE/PLgWgtBaoGVZZltv4dLpbcjph6+w8Fhgc3CD/AQIMhzOr5osOV7orlUrBaDTC29gY2L25eZPurwfOtAIHW6rUosKyjOtXr7ns4bEW7G1+Bp7n3Tv1eq+V42bojfMAIdvDpzv67MWiDIvFguFHTS8FgfrnCJmZ4zhUvUQtLEkiVlYWEJ98MW7dg35F0SV/yWgtWBByyGaXEH379L16oFtPyRutlG4H53KrEIQsXo0ORQ0c7qg9C2+V02rw2loakvQdwz7PhMGAXkYR0krVlpaN/gteXp6HohQw9MQzqcK3GSO/Yd8YgyiKf2bAGBrEPC6fdfTZM5nPqq/g8YA3pqZ9S42V4ZEww0iI/VUxFSUYCkW0nbsSOT415YbJZMbDB76PtARTvA5GgWBUqdosmhdJs413tBOdbofR1CXev+uI19Ux94ckCb77xGr9NdD1PE4eOnKhdfR5/3Qk5I99WUIgkkBcLcykxhWNFbf4pd2V0htkl06QgdkMYskFTOdFtlERF0qXXZm1a7kSL9sPAQYA2Q4Ie25SbgYAAAAASUVORK5CYII=") no-repeat 3px 3px;
} }
@@ -485,9 +485,10 @@ fieldset {
/*** Others ***/ /*** Others ***/
#lang { #lang {
background: transparent; background: transparent;
font-size: .9em; font-size: .9em;
left: auto; left: auto;
right: 120px; right: 120px;
top: 3px;
position:fixed; position:fixed;
z-index: 10; z-index: 10;
padding-top: 2px; padding-top: 2px;

Submodule designs/hydra deleted from f8aa49777e

View File

@@ -1,29 +0,0 @@
/* Redesigned by Janamou - September 2008 */
body { color: #000; background-color: #fff; line-height: 1.25em; font-family: Verdana, Arial, Helvetica, sans-serif; margin: 0; font-size: 90%; }
a { color: black; }
a:visited { color: black; }
a:hover { color: #626262; text-decoration: none; }
h1 { margin: 0; padding: 5px; }
h2 { margin: 0; padding: 7px 0px 7px 10px; border: 1px solid #a3a3a3; font-weight: normal; background: #FCE28E url('data:image/gif;base64,R0lGODlhEAAiAIMAAP/nnf/nn//nof/kk//llP/ab//Zav/aa/7aagAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAEAAiAAMERBDISSsIOOvNu/9gKI5k6VnoJKxs6wpmmsayZQ54jhN8zxfAoHBYMBiPyKTyeGg6m4iodEpFLK/YrHbL7Xq/4LB4LI4AADs=') top left repeat-x; margin-bottom: 20px; }
h3 { font-weight: normal; font-size: 130%; margin: .8em 0; }
table { margin: 0 20px .8em 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; }
td, th { margin-bottom: 1em; border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; }
th { background: black; color: white; }
th a, th a:visited { color: white; text-decoration: none; }
th a:hover { color: #626262; }
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: 0 .5em .5em 0; border: 1px solid #999; }
img { vertical-align: middle; margin: 0; padding: 0; }
.error { color: red; background: #fee; padding: .5em .8em; border: 1px solid red; }
.message { color: black; background: #dedede; padding: .5em .8em; border: 1px solid black; }
#menu { overflow: scroll; position: absolute; top: 0; left: 0; width: 270px; white-space: nowrap; background: #FFE594 url('data:image/gif;base64,R0lGODlhXgEBAIIAAPzabPzijvzihPzefvzmnPzedPzmlPzadCwAAAAAXgEBAAIDYEi63P5wGTXJvNZew7sJBNiBwWeWaPoFbNq+cCzPs8DaeJDvuGAPOh9wIBgWAwMjMblsOpnQqHRKrRaY1+sguz1sB4esN0wulM+HtNqMZqsBafgBTp/PAfQ8fs/v+/8ACQA7') top left repeat-y; height: 100%; _height: 650px; border: 1px solid #a3a3a3; }
#menu form { margin: 0; }
#menu p, #logins li, #tables li { text-align: center; font-size: 11px; }
#menu p a, #logins li a, #tables li a { color: black; }
#menu p a:hover, #logins li a:hover, #tables li a:hover { color: #626262; text-decoration: none; }
#logins a, #tables a, #tables span { background: #FFE594; }
#content { margin: 1.5em 0 0 293px; padding: 10px 20px 20px 0; }
#lang { margin: 0; padding: 0; text-align: center; font-size: 10px; width: 270px; background-color: #d9dadb; border-bottom: 1px solid black; }
#lang a { color: black; font-weight: bold; }
#breadcrumb { position: absolute; top: 0; left: 293px; background: #d9dadb; font-size: 10px; margin: 0; padding: 2px 5px 2px 5px; }
#breadcrumb a { color: black; }

View File

@@ -1,290 +0,0 @@
/*
Ok, it's a mess. You don't have to read it!
*/
body {
font-family: "Segoe UI", Tahoma, sans-serif;
}
body a[href^="#"] {
color:#000; text-decoration: none; border-bottom: 1px dotted #999;
}
h3 {
margin-top: 2em;
}
.jush-bac {
color:#22c !important;
}
a:hover {
color:#000; text-decoration: none;
}
/*
@group Headers (visually)
*/
#menu .logout {
border-bottom:0; height:auto; padding: 0;
}
/*
@end
*/
/*
@group Sidebar (visually)
*/
#menu {
margin:0; padding:0;
position:static; float:left; margin-left:-100%;
width:25%; padding-top:80px;
line-height:1.4;
}
/* header "adminer 2.3.2" */
h1 {
margin:0; padding:0;
position: fixed; left:0; top:0;
width:25%; height:60px;
border-bottom: 1px solid #bbb;
background-color:#efefef; background-color:rgba(240,240,240,0.9);
line-height:60px; text-indent:20px;
}
#h1 {
font-weight:bold; color:#666; font-style:normal;
}
#menu a {
padding:1px; margin-right:4px;
color:#000; font-size:small; text-decoration: none;
}
#menu a:hover {
font-weight:bold;
}
#menu #tables + p a {
color:green;
}
/*
#menu form+form, #menu #tables {
position: fixed; left:0; top:100px; width:25%;
}
#menu #tables {
max-height:100%; padding-top:130px; overflow-y:auto;
}
*/
/* @todo ev. position fixed for whole sidebar (not simple) */
/*
@end
*/
/*
@group Sidebar (based on HTML position, not visual)
*/
/* languages */
#lang {
position: absolute; left:auto; left:120px; top:0px; z-index:3;
font-size:11px; line-height:60px; text-decoration: underline; text-transform:lowercase;
opacity:0.5;
}
#lang:hover {
opacity:1;
}
#lang select {
display:none;
}
#lang:hover select {
display: inline-block;
}
/* logout */
input[name="logout"] {
position:fixed; right:15px; top:22px;
}
/*
@end
*/
/*
@group Content: main
*/
#content {
margin:0; padding:155px 0 50px 0;
position: static; float:left; margin-left:25%;
width:75%;
}
#content > * {
margin-left:20px; margin-right:20px;
}
#content h2 {
margin:0; padding:0;
position:fixed; left:25%; top:0; margin-left:-1px;
width:75%;
border-bottom: 1px solid #bbb;
background-color:#efefef; background-color:rgba(240,240,240,0.9);
font-weight:bold; line-height:60px; text-indent:20px;
}
/* breadcrumbs */
#breadcrumb {
margin:0; padding:0;
position:absolute; top:75px; left:25%;
background:url() no-repeat;
text-indent: 20px;
}
/* Dump link */
#menu .logout a {
margin:0; padding:2px 4px;
position:absolute; left:25%; top:110px;
border-radius:3px;
background-color:#053AC0; color:#fff; margin-left:120px; text-transform: uppercase; font-size:11px; text-decoration: none;
}
/* SQL command link */
body #menu .logout a[href$="sql="] {
margin-left: 20px;
background-color:green;
}
/*
@end
*/
/*
@group Content: details
*/
#content p > a {
margin-right:1ex;
color: #333;
}
#content p > a[href$="&database="],
#content p > a[href*="&edit="] {
color:green !important;
}
/*
@group Messages
*/
.message {
background-color:#D0EE76;
color:#000;
}
.error {
background-color:#fbb;
color: #000;
}
.message a,
.error a {
margin-left:1em;
color:#000; opacity:0.5; font-size:smaller;
}
/*
@end
*/
#menu p {
padding:20px; /* wtf? */
}
#menu form + form p:before {
content:'DB:'; font-size:11px;
}
/*
@group Tables
*/
table {
border:1px solid #ccc;
}
table thead tr > * {
padding:5px;
border-color:#ccc;
border-bottom:2px solid #ccc;
background-color:#f2f2f2;
text-align: left; font-weight:bold;
}
thead a {
color:#333; text-decoration: none;
}
body thead tr:hover > * {
background-color:#f2f2f2;
}
body tbody tr:hover > * {
background-color:#f2f7ff;
}
/*
@end
*/
/*
@group Pagination
*/
#content .pages {
margin:1em 0 2em;
}
#content .pages a {
padding:3px 5px; margin:0 1px;
border:1px solid #eee;
text-decoration:none; color: #000;
}
#content .pages a:hover {
background-color:#eee;
border-color: #fff;
}
/*
@end
*/
/*
@end
*/

View File

@@ -2,11 +2,11 @@
/* So I merged them into one file, fixed a couple of problems, added some paddings here and there, voila! /* So I merged them into one file, fixed a couple of problems, added some paddings here and there, voila!
/* Redesigned (iconized) by Hever [hev.cz] - June 2009, ver 0.1.3 */ /* Redesigned (iconized) by Hever [hev.cz] - June 2009, ver 0.1.3 */
/** /**
* Alternative style for Adminer by Frank Bueltge * Alternative style for Adminer by Frank Bueltge
* @link http://bueltge.de/ * @link http://bueltge.de/
*/ */
/* Added icons */ /* Added icons */
/* IE doesn't support inline images - using some hack that eliminate IE*/ /* IE doesn't support inline images - using some hack that eliminate IE*/
html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;} html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;}
@@ -74,10 +74,9 @@ thead td, thead th {background-color: #DFDFDF; border: none; border-bottom: 1px
thead tr:hover td, thead tr:hover th {background-color: #DDD !important;} thead tr:hover td, thead tr:hover th {background-color: #DDD !important;}
tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #F1F1F1;} tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #F1F1F1;}
tr:hover td, tr:hover th {background-color: #BCD;} tr:hover td, tr:hover th {background-color: #BCD;}
fieldset {display: inline; vertical-align: top; padding: 2px 12px; margin: 25px 12px 12px 0; border: none; background-color: #F1F1F1; border: 1px solid #E3E3E3; position: relative; padding-top: 14px;} fieldset {display: inline; vertical-align: top; padding: 2px 12px; margin: 25px 12px 12px 0; border: none; background-color: #F1F1F1; border: 1px solid #E3E3E3; position: relative;}
fieldset, x:-moz-any-link {padding-top: 4px;} fieldset, x:-moz-any-link {padding-top: 4px;}
fieldset {%padding-top: 14px;} legend {font-weight: 900; color: #000; position: relative; top: -0.8em; left: -1em; padding: 0 4px;}
legend {font-weight: 900; color: #000; position: absolute; top: -1.666em; left: -1em; padding: 0 4px;}
input[name='limit'], input[name*='length'] {width: 3em; xtext-align: right;} input[name='limit'], input[name*='length'] {width: 3em; xtext-align: right;}
input[name='text_length'] {width: 5em;} input[name='text_length'] {width: 5em;}
select + input, select + select {margin-left: 2px;} select + input, select + select {margin-left: 2px;}
@@ -93,6 +92,8 @@ fieldset div {margin-bottom: 2px;}
input[name='Comment'] { /* !!! */ width: 24em;} input[name='Comment'] { /* !!! */ width: 24em;}
input[name='Auto_increment'] { /* !!! */width: 6em;} input[name='Auto_increment'] { /* !!! */width: 6em;}
img {vertical-align: middle; margin: 0; padding: 0;} img {vertical-align: middle; margin: 0; padding: 0;}
.footer{border-image: linear-gradient(rgba(249, 249, 249, .2), #F9F9F9) 100% 0}
.footer > div {background-color: #F9F9F9;}
.error {padding: 8px; color: red; background-color: #FEE;} .error {padding: 8px; color: red; background-color: #FEE;}
.message {padding: 8px; background-color: #DDD;} .message {padding: 8px; background-color: #DDD;}
.char {color: #070;} .char {color: #070;}
@@ -108,7 +109,8 @@ img {vertical-align: middle; margin: 0; padding: 0;}
#menu form {margin: 0;} #menu form {margin: 0;}
#menu p, #logins, #tables {padding-left: 8px; font-size: 10pt; border-bottom: none;} #menu p, #logins, #tables {padding-left: 8px; font-size: 10pt; border-bottom: none;}
#menu form p {padding-left: 0; text-align: left;} #menu form p {padding-left: 0; text-align: left;}
h1 .h1:hover {text-decoration: underline;} #dbs, .tables-filter {padding-left:8px !important;}
h1 .h1:hover {text-decoration: underline;}
h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 14px 15px 3px 10px; line-height: 35px; text-shadow: rgba(255,255,255,1) 0 1px 0px; background: none;} h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 14px 15px 3px 10px; line-height: 35px; text-shadow: rgba(255,255,255,1) 0 1px 0px; background: none;}
h1 {font-size: 12px;} h1 {font-size: 12px;}
h1 .h1 {font-size: 12px;} h1 .h1 {font-size: 12px;}
@@ -117,8 +119,6 @@ h3 {margin: 40px 0 0; font-weight: 400; font-size: 130%;}
#schema {margin: 1.5em 0 0 220px; position: relative;} #schema {margin: 1.5em 0 0 220px; position: relative;}
#schema .table {border: 1px solid #E3E3E3; background-color: #F1F1F1; padding: 0 2px; cursor: move; position: absolute;} #schema .table {border: 1px solid #E3E3E3; background-color: #F1F1F1; padding: 0 2px; cursor: move; position: absolute;}
#schema .references {position: absolute;} #schema .references {position: absolute;}
.js .hidden {display: inline;}
.js td.hidden, .js input.hidden {display: none;}
legend a {color: #333; text-decoration: none; cursor: default;} legend a {color: #333; text-decoration: none; cursor: default;}
legend a:hover {color: #333;} legend a:hover {color: #333;}
code {background: transparent;} code {background: transparent;}
@@ -126,4 +126,4 @@ fieldset, legend, h2, table, .error, .message {-moz-border-radius: 5px; -khtml-b
#breadcrumb, #lang, #menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;} #breadcrumb, #lang, #menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;}
#breadcrumb {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;} #breadcrumb {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;}
#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;} #menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}
#loader {margin-left: 35px;} #loader {margin-left: 35px;}

View File

@@ -473,26 +473,6 @@ h1 {
#h1 { #h1 {
font-style: normal; font-style: normal;
} }
#dbs {
color: transparent;
}
#dbs:before {
content: " ";
display: inline-block;
vertical-align: middle;
height: 1em;
width: 1em;
margin-right: -0.5em;
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' viewBox='0 0 58.201 58.201' enable-background='new 0 0 58.201 58.201' xml:space='preserve' width='512px' height='512px'%3E%3Cg%3E%3Cpath d='M31.707,33.07c-0.87,0.027-1.74,0.042-2.606,0.042c-0.869,0-1.742-0.014-2.614-0.042 c-7.341-0.201-13.191-1.238-17.403-2.717C7.104,29.685,5.409,28.899,4.1,28v7.111v0.5v0.5V37.4c2.846,2.971,12.394,5.711,25,5.711 s22.154-2.74,25-5.711v-1.289v-0.5v-0.5V28c-1.318,0.905-3.028,1.697-5.025,2.367C44.865,31.839,39.027,32.87,31.707,33.07z' fill='%23FFFFFF'/%3E%3Cpath d='M4.1,14.889V22v0.5V23v1.289c2.638,2.754,11.033,5.31,22.286,5.668c0.115,0.004,0.233,0.005,0.349,0.008 c0.326,0.009,0.651,0.018,0.982,0.023C28.174,29.996,28.635,30,29.1,30s0.926-0.004,1.383-0.011 c0.33-0.005,0.656-0.014,0.982-0.023c0.116-0.003,0.234-0.005,0.349-0.008c11.253-0.359,19.648-2.915,22.286-5.668V23v-0.5V22 v-7.111C49.233,18.232,38.944,20,29.1,20S8.968,18.232,4.1,14.889z' fill='%23FFFFFF'/%3E%3Cpath d='M53.965,8.542C52.843,4.241,44.215,0,29.1,0C14.023,0,5.404,4.22,4.247,8.51C4.162,8.657,4.1,8.818,4.1,9v0.5v1.806 C6.937,14.267,16.417,17,29.1,17s22.164-2.733,25-5.694V9.5V9C54.1,8.832,54.044,8.681,53.965,8.542z' fill='%23FFFFFF'/%3E%3Cpath d='M4.1,41v8.201c0,0.162,0.043,0.315,0.117,0.451c1.181,4.895,11.747,8.549,24.883,8.549c13.106,0,23.655-3.639,24.875-8.516 c0.08-0.144,0.125-0.309,0.125-0.484v-8.199c-4.135,2.911-12.655,5.199-25,5.199C16.754,46.201,8.234,43.911,4.1,41z' fill='%23FFFFFF'/%3E%3C/g%3E%3C/svg%3E") center no-repeat;
background-size: auto 100%;
}
.rtl #dbs:before {
margin-right: 0;
margin-left: -0.5em;
}
#dbs span {
display: none;
}
#menu p { #menu p {
margin: 1.5em 0 0; margin: 1.5em 0 0;
} }
@@ -506,6 +486,10 @@ h1 {
#menu .error { #menu .error {
padding: 0.2em 0.4em; padding: 0.2em 0.4em;
} }
.tables-filter {
padding: 0;
margin-top: 1.2em;
}
input[type="submit"], input[type="submit"],
input[type="reset"], input[type="reset"],
input[type="button"], input[type="button"],
@@ -551,7 +535,7 @@ input[type="file"]::-ms-browse {
background: #4c3957; background: #4c3957;
color: #fff; color: #fff;
padding: 0.5em 0.8em 0.6em; padding: 0.5em 0.8em 0.6em;
margin: 0; margin: 0 0.5em;
border-style: none; border-style: none;
cursor: pointer; cursor: pointer;
} }
@@ -573,7 +557,7 @@ input[type="file"]::-webkit-file-upload-button {
background: #4c3957; background: #4c3957;
color: #fff; color: #fff;
padding: 0.5em 0.8em 0.6em; padding: 0.5em 0.8em 0.6em;
margin: 0; margin: 0 0.5em;
border-style: none; border-style: none;
cursor: pointer; cursor: pointer;
} }
@@ -587,24 +571,24 @@ input[type="file"]:disabled::-webkit-file-upload-button {
background-color: rgba(76, 57, 87, 0.35); background-color: rgba(76, 57, 87, 0.35);
cursor: not-allowed; cursor: not-allowed;
} }
input[type="file"]::-moz-file-upload-button { input[type="file"]::file-selector-button {
display: inline-block; display: inline-block;
font-size: 85%; font-size: 85%;
text-align: center; text-align: center;
background: #4c3957; background: #4c3957;
color: #fff; color: #fff;
padding: 0.5em 0.8em 0.6em; padding: 0.5em 0.8em 0.6em;
margin: 0; margin: 0 0.5em;
border-style: none; border-style: none;
cursor: pointer; cursor: pointer;
} }
input[type="file"]:hover::-moz-file-upload-button, input[type="file"]:hover::file-selector-button,
input[type="file"]:focus::-moz-file-upload-button { input[type="file"]:focus::file-selector-button {
color: #fff; color: #fff;
background: #ec5f12; background: #ec5f12;
text-decoration: none; text-decoration: none;
} }
input[type="file"]:disabled::-moz-file-upload-button { input[type="file"]:disabled::file-selector-button {
background-color: rgba(76, 57, 87, 0.35); background-color: rgba(76, 57, 87, 0.35);
cursor: not-allowed; cursor: not-allowed;
} }

View File

@@ -1,202 +0,0 @@
/*
VERSION: mancave-hever1-27.1.alpha
*/
/* Merged and fixed version of Hever's and Frank Bueltge's skins by Oguz KONYA. I liked Bueltge's skin but I wanted the icons, too.
So I merged them into one file, fixed a couple of problems, added some paddings here and there, voila! */
/* Redesigned (iconized) by Hever [hev.cz] - June 2009, ver 0.1.3 */
/**
* * Alternative style for Adminer by Frank Bueltge
* * @link http://bueltge.de/
* */
/* Added icons */
/* IE doesn't support inline images - using some hack that eliminate IE*/
html/*\*/>/*/*/body .error {background:#FFEEEE url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIsSURBVDjLpVNLSJQBEP7+h6uu62vLVAJDW1KQTMrINQ1vPQzq1GOpa9EppGOHLh0kCEKL7JBEhVCHihAsESyJiE4FWShGRmauu7KYiv6Pma+DGoFrBQ7MzGFmPr5vmDFIYj1mr1WYfrHPovA9VVOqbC7e/1rS9ZlrAVDYHig5WB0oPtBI0TNrUiC5yhP9jeF4X8NPcWfopoY48XT39PjjXeF0vWkZqOjd7LJYrmGasHPCCJbHwhS9/F8M4s8baid764Xi0Ilfp5voorpJfn2wwx/r3l77TwZUvR+qajXVn8PnvocYfXYH6k2ioOaCpaIdf11ivDcayyiMVudsOYqFb60gARJYHG9DbqQFmSVNjaO3K2NpAeK90ZCqtgcrjkP9aUCXp0moetDFEeRXnYCKXhm+uTW0CkBFu4JlxzZkFlbASz4CQGQVBFeEwZm8geyiMuRVntzsL3oXV+YMkvjRsydC1U+lhwZsWXgHb+oWVAEzIwvzyVlk5igsi7DymmHlHsFQR50rjl+981Jy1Fw6Gu0ObTtnU+cgs28AKgDiy+Awpj5OACBAhZ/qh2HOo6i+NeA73jUAML4/qWux8mt6NjW1w599CS9xb0mSEqQBEDAtwqALUmBaG5FV3oYPnTHMjAwetlWksyByaukxQg2wQ9FlccaK/OXA3/uAEUDp3rNIDQ1ctSk6kHh1/jRFoaL4M4snEMeD73gQx4M4PsT1IZ5AfYH68tZY7zv/ApRMY9mnuVMvAAAAAElFTkSuQmCC") no-repeat scroll 0.8em center; padding-left:38px;}
html/*\*/>/*/*/body .message, #menu p.message {background:#49526D url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKfSURBVDjLpZPrS1NhHMf9O3bOdmwDCWREIYKEUHsVJBI7mg3FvCxL09290jZj2EyLMnJexkgpLbPUanNOberU5taUMnHZUULMvelCtWF0sW/n7MVMEiN64AsPD8/n83uucQDi/id/DBT4Dolypw/qsz0pTMbj/WHpiDgsdSUyUmeiPt2+V7SrIM+bSss8ySGdR4abQQv6lrui6VxsRonrGCS9VEjSQ9E7CtiqdOZ4UuTqnBHO1X7YXl6Daa4yGq7vWO1D40wVDtj4kWQbn94myPGkCDPdSesczE2sCZShwl8CzcwZ6NiUs6n2nYX99T1cnKqA2EKui6+TwphA5k4yqMayopU5mANV3lNQTBdCMVUA9VQh3GuDMHiVcLCS3J4jSLhCGmKCjBEx0xlshjXYhApfMZRP5CyYD+UkG08+xt+4wLVQZA1tzxthm2tEfD3JxARH7QkbD1ZuozaggdZbxK5kAIsf5qGaKMTY2lAU/rH5HW3PLsEwUYy+YCcERmIjJpDcpzb6l7th9KtQ69fi09ePUej9l7cx2DJbD7UrG3r3afQHOyCo+V3QQzE35pvQvnAZukk5zL5qRL59jsKbPzdheXoBZc4saFhBS6AO7V4zqCpiawuptwQG+UAa7Ct3UT0hh9p9EnXT5Vh6t4C22QaUDh6HwnECOmcO7K+6kW49DKqS2DrEZCtfuI+9GrNHg4fMHVSO5kE7nAPVkAxKBxcOzsajpS4Yh4ohUPPWKTUh3PaQEptIOr6BiJjcZXCwktaAGfrRIpwblqOV3YKdhfXOIvBLeREWpnd8ynsaSJoyESFphwTtfjN6X1jRO2+FxWtCWksqBApeiFIR9K6fiTpPiigDoadqCEag5YUFKl6Yrciw0VOlhOivv/Ff8wtn0KzlebrUYwAAAABJRU5ErkJggg==") no-repeat scroll 0.8em center; padding-left:38px;}
html/*\*/>/*/*/body a[href$="sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHGSURBVHjaxFPNLkNREP5aB6WhaKLSVtKFiIUqK1sLT2DhTXgDL2FlxSOw8FOLRiyQWhDRiKSEhKQJou49P9fMnFsLsevCJCcz594z3/m+mTmJKIrQjSXRpXUNoGqbm39qcMbAkbyIvbVwYQhD3tIeWsOQ1+QVH86Xyz+JXJPIOb9iAI4ZpOMd/yN/vb/vAdiC93cP0El2dNA6z4RjYyW2MaPU0BB0u+0BOGGsVML49LSA3J+cYDCblb0l6jeHBwg/26isrOB0a8uzYBlBgKShgD8M53J4aTTQqFaRSCYl+WxnG83zcxTmKpKg+vtFu9W8NDQDMCXW+VivYyAzjKmlJahUSpiYUKPVbCKTz0sCGzOyOpBLzdcXlCMdDDIxO4vboyoyhQIKlYocLi0uIjczIyBcA98dYqx9NywxUEyDi/P29IyF1VU5dFeroS+dRnF+Xvajk5N0ayjx8tq6+FuSyiwUF4LRHi/reLg4o9ijs6xG9RjWGowUi/h4fcXexoa0L4oc0mNZuVgFzID09VKBnFXoUb7Pnb5zQrvVovpkZC4QzwfiN6QM1eBqdxcmnq6IAA395Mlz8eTxTZwg/pcl/v01fgswAESqYZbsIsnLAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
html/*\*/>/*/*/body a[href*="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJrSURBVHjajFPPaxNREP72V8ymTbGQbRB/IT0otdV6CcWTgqCoUFQQEXoSEQ/+AypK755E1KsULIpGgw1F9KC22lgstFgQLdoWhSab2PRHTNrs7nvObGhSsRa/ZXjv7c6b+eabWUVKiX9AJQuRRci2k+260N91VwgJIQSEV1mVnjf5axTjvCfFFn7hCcBlBzJNVRA0gAZTQ1ODgXC4gDtjV9AW2QNFUTA0/Q66kPLSqVg4shYF8vEdKQ7mln+i+/VVRM0oFpbmETLq/SS6J4R/OfHtHmV24XouHFo94REDAyE9hMZgBMkvT2GZFqxQE6by0/g4P74SoKLB2ZZzWA8ffqRQLBcxNTuFjRTwxpmbfad7Oo/rHhdN6B20/6JvaKyBCnODhqNbL+PRxHXUGXWINV5kl9TDrkQct/pnZKHkyPsDGcl4MJiWq5Ecsf84LxTL8nbyK2+Pke3XHWJAQkLXgMdDNjRNRTxlQ6UmakRD0vN8NEd7EBsFO6Impu1fzGCCrOSXwCro5HEiZiExnEVnrKlaypNhG4fba02aTC8ik1/ibZrM9RlIkkGnjH0jWWJQWRn8TpLI8fcZ6MSA1WrZFERx2eHPTEPqjksBqASDLh7ZZ+HlWA6H9tYyvhjNomNnI8Km7p8/f5+HGdB46/lJeOoYPHV8mbGy8gA59HngU74asNkKYKVzlQCuW9GA6B5si+DVeA4HWmsM4qksTnZY1TMz0NRauysaUAmt2+oxM1tCM6k8mS74WXjIdm8O+JdWg36oKgXqgnzb3TvRXvZEneN6YPNIFw7MY70W5haXnlUHbp3f+b/wW4ABAAtWTLcKdqLcAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body a[href$="dump="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjajJPPS+NQEMcnaaxpdWsp6Q8vtWtdkIo9+B948SjIgruCUg8F/wGP/glePe5JcBehwl4qePGm0J6KQj30UBHEzaFLUromTfPizJMnrxhhB4bJvDfzme97SZQgCOB/be98J2AsAMYYMP81KjKg0WhMYljHtS30RSz4gjkGdot559F7OLt8vvi1bJRBURS4vr8CTTQ3m80SFv1MpVJlwzBA13XuNGUwGKyY1p+Vk9aPzWw8C7ZjQXximu+9ATA5KhQK5Uwmw+nCIpEIJBIJOLjah3Q8w7379x5urFsOUEUhTl/C6R+ef35mARzPhW6vC+q/iHvyvaYwXwIQje6j1+tBv98H13VhNBpxxyPA5tw2TI50MPQsrMbXbOo53fmtaJIC7iSZAMPhkOe+73MA5Ruz3yCfz9NlvykLBUSjUR41TQPP8zhE7JNSyj8E0CbJpkiXKRoIRFABeQcQd0DFwlVV5evUTFBZRSiATEwnp4lCAa0LI2AoQC4WimRl4qgyYOw12rYNyWSSX6L4mKiBnukDK5VKYJrmmBpZwW6r1TotFotTuVyOQwQgnU7zV9npdKDdbj+hgnXRN/Yz1ev1zwg6QP+KU2disRiXblkWOI7zhJOPce+wWq2aoQDZarXaJ2xYQGfod5VKxQ2rexFgAI4OiAKxKkWeAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body select[name="db"] {background:white url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:16px; background: #49526D;}
html/*\*/>/*/*/body select[name="db"] option {padding-left:18px;}
html/*\*/>/*/*/body #menu li a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll left bottom; clear:left; display:block; float:left; height:16px; margin-right:8px; padding-top:1px; overflow:hidden; padding-left:16px; width:0; text-decoration:none;}
html/*\*/>/*/*/body #menu li a[href*="&table="], html/*\*/>/*/*/body #menu li a[href*="&view="] {clear:right; margin-left:24px; display:block; height:17px; padding-bottom:1px; text-decoration:none;}
html/*\*/>/*/*/body #menu p#tables br {display:none;}
html/*\*/>/*/*/body a[href*="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body a[href$="&create="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIpSURBVDjLpZNPSFRRFMZ/749/Kt3IqFTSRoSMmrGIYTTbpEJtjBCCok1Em9JVG1dRC8FFEES5aGFEgRRZWq1iLKKxBiNqLDcltQgmHR9hY6LOu+feFm+YGVsZXbh8nHO53/nud8+xjDH8z3IB7r5avGgMZ8XoBq01okFpjYhGtEGJLtmCKINo/XbgVFPUBdDG9PVEq0P/UvnSvdlwQYFoHQIY/3obpRVKFL5W+OIXUVThrL91AN+XihKCwIeTu85sqPryqsJXUvRARAMwkshsiKB7fw25UgKVJwA40V7H/cl5jh+oL+RGk/P0xIqxl11dr8AXjTYG14HRNxkcx+ZhMoNlg52/ND6VAWMoc6F5+2Zy/l9PMIDrWByL1jI+tcDRaN06BaXxbDqLUnq9AqPBteHpuwUcJ0AIcgBXH93h+/wEyyuLrPk5cmv7gNY8gdIYYyhz4PDeWuIpj85IsS2ujQ2zJAk6DkZpqGnixcwYyU+PifUOX7Eh6DoAx7aIpzwA4imPeMrj+bTH+88PaNkZQWwhsrULsXxie9oAzgcESgUe2NAZCeE6AXZGQhwKh/Cyc5RZVXQ39wFwoeMmjXVhgMqiB8awe0cVP36u0Fi/iW9zvwuzkF3+xUz6Nal0gv6uWww+O02lUwGwmv8FM3l55EtLTvQWXwm+EkRpfNEoUZRXHCE5PUFbuJ0nH4cot1wSH14C3LA2Os6x3m2DwDmgGlgChpLX0/1/AIu8MA7WsWBMAAAAAElFTkSuQmCC") no-repeat scroll left bottom; padding-left:22px;}
html/*\*/>/*/*/body #content p a {padding-left:2px;}
html/*\*/>/*/*/body #content p a[href*="&create="] {padding-left:22px;}
html/*\*/>/*/*/body #content p a[href*="&select="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHISURBVDjLpVPNK0RRFP+9D98syMwUspHkm9I0YkFZWBFKkZ0s7a3Ewh+ilChK7FgoZCJFKYlYKB8zk2+Z5t0P577He29kQU7dd+6575zf+d1zztWklPiPmOozt/U4SThjXIoyIQS4AJjSXO0lGGlvcXAm6Vzsz4xUhm0AIeX4QLig+C+ZpxbOG1wGhGYHr1zMUmZGWRgs0ha3PE1nX/8mWmdgWTzLB+DUYbhm9FfZ35IEyrhXA3VXJfPbsV8B9LQUIeUHYJ8ASobag1jcucNgW8g9W4reYSDi2YnnZDoDiwCokDANct6NwTB0LEdj0HRA/wxa2SN25JNBEdWluUhZ366gqmAaGvrCAXKOozccTGPgt8+vn8GYSGcgyTYp3dpBnBg42nbQPRBTo5bTvqYkmxL6AQhNTWQGBXY3B7BxlEBXozcW64dxRKoKUZBju+P06gl5WaaviMJBM3TNDlbypemIZgHYOnlwASsCmW7nHADGnBoQ3c76YmweJ9BR5zFYjsbRHwm4tmJg6PhWA7pCXXk+bu7fURHKweXtq/sWaksz7SC/CCGFrwtyZ3r+rCnFRZ7qr1qc6mLZj4f9OEyPL8lVpbX/PucPv5QPKHB1TdEAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body #content p a[href*="&page="] {background-image:none; padding-left:0;}
html/*\*/>/*/*/body #content p a[href$="?database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIkSURBVDjLpVNNiFJRFP7eU1E0KSLTMpAwYSxyaidDtChm0WYQ3NSutv2s2kwwm2igNgMtooUQEQhhA9GqhSDTQsZZFDbNDBgVg5bSw9J8rzFF33udc+HGg0ladOHj3nPe+b7zc99VbNvG/yy30yiVSl4SnCNcsixrivYEgY7WJu0faX9EKGUyGVNyFFkBkY/T+WkoFEpFIhEEAgH4/X7w916vB8Mw0Gg00G63y+S7mM1mm4LIAYxisbhSr9c5nT1pjUYju1qt2oVC4YnkqbIUMk6Ew+F/9hyNRkFJLuyaATmFoqZp8Pl88Hq98Hg8wtfv99HpdNBsNhGPx0XsRAG3241ut4vBYCDs8XgMXdcxHA7FN/b9VUD25HK5RAUczKC+hYgcNpNN05xcAQdLkqIoIlj6VFWdXIEUkAQGV8M2k2vaG3z6sYGfVR39XzsHlm/dX3h5d31xlwAHM5goBd5+LuO75z3OnU3jyP4EVrZeKGub2p309cP7VKcAQ2Znoiz3deMVTk1Nw1RNTB+ahamMkD45w7RrfwSYwFdFf6K4Quf6pmvwKHswl7wh7Jvnc4gfTPHR52zhcqVSeZZMJgOxWEyI8BC5CmOnh63WKtZbZczPPsa94hX4XCLJQHG+xnw+f5SEFghZmvhefgvcTqn2HN3gBmZSZ5CInMaHr1Wsvivjy3ZvSZn0nHO5XJDIxwgWDbW2vL10m9xXCUGCQXi49qA1/xvyq6BCh7yZeQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body #content p a[href*="&edit="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg==") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body #content p a[href*="&table="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPtT5JhFMafrW997I9rscA+FFu2QRurtlw5cQ4InLpwBogIPNFSiNJ4C+JVkj0QTBHQKFPQlJfwlanY1tXz3ARkn2jd27Wz++yc33XOvd0UAOp/RNGR/X5zeH9rOlTDVKAK3fsqJrxlqN27GHPuYHh+G4rXRQzZNjEws47Hli/oo/PxNsAU3qvWT3/gX3TPuHrWBhiC30nSktXDtKLB1NI4NKkxqBMqjDByPFkcxNBCPwbCfXgUeEBq705m0AZM+qsk2e3hau88W+4ANOy+XPLFQrkrcbW31KkOYJx9rBaAOzPR0gVHW6x593q9cDgcqB6e4sZoogMYdXzD0ck5ZhfLsHGKVfAqVoadKcMdzcLr82PuwwZCoRACgQCWVzdhoK2gaVpDAMNzWzhkAXamQpze/I4t13w+j2AwiFwuh7W1NXg8HmQyGSgUCshkssuU3F7AQf0c84kK3n68KFc4hXQ6DavVCqlUCqVSSdaIx+NQq9UGMsHg7Ab2jxtwp5rOvqUqia3CUqnEObWn0mp1KBaLcLlckMvloPpfrhOAl230/SGLxQK3241CoQC9Xg9nskKk1emQzWZZkBZCoRBU3/NP2GMBgXTTObjSjI1GA8lkEgzDwO/3E4iObXY6nYhEIhCJRHoWcIW6b1pF7egMlYNT7NROUKzU8XX3GJ+3D2E0GgmAm4Zbh2s0mUyIRqMcAGKx+BIlMeSiYu1K/fbEMm4+TaFnJIHrSgZX5TFIZNPo7e1Fj9QOs9kMlUqFaw9pCASCnzwe7x15xG6/rUQiAZ/Px9/5XyhZOMVGKlOdAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body #content a[href*="&database="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKRSURBVDjLhVNLTBNRFD3TTju1FCcBaxuaQEr94ydiZIHGpcFISBOi0YREZWHCVoyRxKUxxq0LXcACQyLsjO6KjSEiDfHDz0S0CLSxlFKd2g7MTDudGd+bMAQCxJucuXfuu+fcO/PeYwzDALVoNMqRuI3guq7rR4g/SEBC/Svxc8T3EUTD4bCGTcZQAUI+RvxLr9d70u/3o6KiAm63G3Qtn89DFEUkk0lks9lRkrvW3t6e2lCgRZFI5F0ikaDtjN1MVVVjYmLCGBoa6qccC7Z1kQafz4f/WSAQAGlyaXOOpQ+SNNUymQxcLhc4joPD4TBzkiRBEASkUimEQiGzdlcBlmWRy+WgKIr5Xi6XUSgUUCwWzTVN+IAzeOOde71orP0eAaOkbrDWf6Cw2+3mBLSYgny3KULXPOUY2BUB/hMd4IOn8XfhMGYjvU+2TECLLRLDMNA0zYw5JYa6Ghke/hyEn9/gZEqo3OuHp7qW3yJgESjoNPSdlb8gWCOCr29BMT0Ip5tBYnIWqlL6o8irzVsEaHcKSqQCen4cweok+FAblNRz2JxlODx1cEkzGWmVbTl7Z/jHhgCF1Z3GYjIKf+U8+ANhQn4Gm6OMUiGI9MhHg5Gl1sbu8UnKNc8B7Ui3ipxEcwvlpVFw6hz2N1xGabkXdqeBYqEOmfefEZWac4e6xz9Z22hbn+BmLBZbi8fjEBdG4NF/QdUDSM88hQ4FawKJR6cxLDZl86qzZdtdoDYwMBAkQg/2LL/ovNLVh++Dd7G0OAau9hTkrKgnnE39GW3f/Z6enpUdBSx7ePu4eq+zi4VNw+TbV0gsxFd5b9X5i4+mpnY63tsErl6okhvrfWzT0SAMR3FMXsnean08Pb/b/fgHqpjCspi90kkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body #content p a[href*="&schema="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFOSURBVDjLtVK7SgNRED0b9iuM2lr4QK1DQIyk0FZsJAj+gH+ilRZb2NjaRHTLmA9QFKz9huzm7t37Hu+u7IJgQjR6YLjDzOXMmcMERIR5EE5qXA4z4sqACYWEC5wfLQXf/WtMIuDSoL0A7DZDjBj/uYI0l8jzEEJYJMkvCEZM4PqZIxlzpGk+kSCY18TGtGYcx9Tv96dOqBUMBgNyzsFaC621312Ac+59yJFlGRhj5VvVoigKvniglEK32w1mkd3r9ejPPAjOhqdknYX18p1/rzo3pYqTh0OSRkJI5UMgPn4s61sX66SkhtEGcISGsQad5gH2FvehfV5BaIF2cwet5RZyKeu68pe5ubKG7dUNP5AQGltMN57Mosgr5EIiVQmYGvtc1PVicqHY+dXpk8Dg7v22XKFo1ARe9v1bDOlXKKKCs4Sn1xdU1v3vIc2CD3bN4xJjfJWvAAAAAElFTkSuQmCC") no-repeat scroll 2px bottom; padding-left:22px;}
html/*\*/>/*/*/body #content p a[href*="&sql="] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ5SURBVHjapFNLaxNRFP4mnZmQZtKYpJ2I8ZE0NSbSWKpgBYNUhIJQUDddCaILwb34C0RcCi60vpa14sZFoSjxUWxTFEubFkxf9kFS+7Jp0yQmM5mH905SF9pSwQt3vnPnnvPNd86cA13Xsds+23XKsdMdQx//s0z/6hi54he3e8/0d3ZuK0FTFGhUJkVVhSbLUAiq5IxSCQrBEkGWOu8Lh38HGrlpWnlXCKhNSbZQo3cEE9FomYAuKZstE2wFa8RR1cpKqK2o4JhxmLVJVAlh5Df6IFj5MgENcHq9EAMBg2RucBDVLpdxVon0iXdvIf8sQHRIsNReht3XjI3ZI8iuPAOrkDyorBq3G6vT08ikUuAsFiN46HkXXL56eI41QV1/BMF+GulvCfCMDFvNXtSIHrC0KDTPhXgc7lAQdQ2thk2XIpewnkzCJvTA4T8PabEbfDWD+ZFxyEUdX94sw6QVCkZlxWAQU+8/YGZgALV+v0HgbWmBNzQMR0M7it8fg+HWwQk2cLkkcvJh5NNFsCVJMgq1ubiE5o4OI5CS8FYrya8b9saLKC48gIlTIG/6sBaLw3PpHrTEMrSXr4kPIaAKFkbjSA0PEVuFlB+DO8Ah2HoB8tITVPE6iplDWOn7jLn0CSQevoDV6TI+zEpUASkkZzaTYrLIrH3C/qMCFEbE4th9OEQexfQBrPYP44d+DuY91eBp+1dGgFVIDb729kKpdJfQtIy2yFNMdN/E5McYzAebUEhOYjZuQXaj5+9W/nOYbl9vLN26doOFScVI9BXmZ6dy9jpnpO1O5dfsRtBxxlk4Xu9mT4Z80DkpVlhZvdp+d3RmpyH7JcAAnHiAVYWMsdkAAAAASUVORK5CYII=") no-repeat scroll 2px bottom; padding-left:24px;}
html/*\*/>/*/*/body table tbody input[name*="check"] {display:block; float:left;}
html/*\*/>/*/*/body table a[href*="&edit="][href*="&where"] {background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC") no-repeat scroll right bottom; padding-right:18px;}
html/*\*/>/*/*/body table input + a[href*="&edit="][href*="&where"] {width:0; float:left; display:block; height:16px; overflow:hidden; text-decoration:none; padding:0 0 0 18px; background-position:2px bottom; margin-left:5px;}
html/*\*/>/*/*/body table tbody td:first-child {white-space:normal;}
html/*\*/>/*/*/body table thead input {margin-right: 5px;}
html/*\*/>/*/*/body input[name="delete"], html/*\*/>/*/*/body input[name="drop"] {background:transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVHjapFM5bsJQEB2zSIDFJrHYpEtyAyoKJAp6CrqIkBPkNDlBAKXjBEgUpKOBCyQNijFiEZvZl8z7wsjESYpkpNFfPO/Nmz9j6Xg80n/M9fWi3W7fMOnd4XAo8qogAbvO5xKvL6lU6s0aL1kVMDjP5ye/36+Gw2FyOp3EQFqtVtTr9WixWHT5/JhOp6s2ghP4ORaLyaFQiGazGa3Xa0HgdrvJ6/WSpmk0Go0MjnvIZDLVM0Gr1brm/WskEkkA3O/3abvdQjq5XC6xgoiVka7rNB6PNT6ns9nsu+OkpODxeBLBYJAGgwHt9/uzQ8Vms6Hdbie+KYqC+ASTFrARBMx2HwgEaDKZiHqn0yktl0uxtzrMMAyKx+MCc+4Cs13hwQCC1GQy+W3Lms2mUIUygbEqEBLNun8z8zswVgUfLO0WD4Z6kekn8/l8okNM8GFVUMYDoVWQ6HA4bEAzoyzL1O12kbRsJajwhYZhiUajJEnShWSAQaqqKnU6HahEGysXg9RoNPJ8+cwZZLSKp47m8/k5Kxzg4XBocNxDLper2ka5Xq+LUeatilahJLN1mEJ+ZDHKJthGAKvVauJnYi9ysHIqQee1xOsLg3/+mf5inwIMAJMhb74NwG5wAAAAAElFTkSuQmCC") no-repeat scroll left center; padding:1px 5px 1px 18px; border:0; cursor:pointer; font-size:.9em;}
html/*\*/>/*/*/body input[name="delete"]:hover, html/*\*/>/*/*/body input[name="drop"]:hover {color:red; background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg==")}
.logout {font-size: 8pt !important;}
#logout{ height:17px; border: none; background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC") no-repeat center left; overflow: hidden; text-indent: 18px; line-height: 0px; cursor:pointer; margin-left:6px; color: #21759B; text-decoration: underline;}
#logout:hover {text-decoration: none; color: #D54E21;}
#logins a, #tables a {background: none repeat scroll 0 0 transparent;}
/*body {margin: 0; line-height: 1.25em; font-size: 13px; background: #F9F9F9;}*/
body {margin: 0; line-height: 1.25em; font-size: 13px; background: #110236; color: #fff;}
body, select, option, optgroup, button {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;} /* IE6 */
input[type='submit'], input[type='reset'], input[type='button'], input[type='file'] {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif;}
input, textarea, pre, code, samp, kbd, var {font-family: "Lucida Grande",Verdana,Arial,"Bitstream Vera Sans",sans-serif; font-size: 12px;}
/*a {color: #21759B;}
a:visited {color: #21759B;}
a:hover {text-decoration: none; color: #D54E21;}*/
a {color: #F1E5B3;}
a:visited {color: #F1E5B3;}
a:hover {text-decoration: none; color: #D68D20;}
form {margin: 0;}
table {margin: 10px 12px 12px 0; border: 1px #BBB solid; font-size: 90%;}
th {text-align: left;}
/*td, th {background-color: #fff; padding: 4px 6px; border: 1px #DfDfDf solid; border-width: 1px 0 0 1px;}*/
td, th {background-color: #1D294D; padding: 4px 6px; border: 1px #DfDfDf solid; border-width: 1px 0 0 1px;}
tr:first-child td, tr:first-child th {border-top-width: 0;}
tr:first-child th {padding-right: 30px;}
td:first-child, th:first-child {border-left-width: 0;}
/*thead td, thead th {background-color: #DFDFDF; border: none; border-bottom: 1px #BBB solid;}*/
thead td, thead th {background-color: #110236; border: none; border-bottom: 1px #BBB solid;}
thead tr:hover td, thead tr:hover th {background-color: #110236 !important;}
/*tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #F1F1F1;}*/
tr:nth-child(2n) td, tr:nth-child(2n) th, .odd td, .odd th, tr.odd {background-color: #49526D;}
/*tr:hover td, tr:hover th {background-color: #BCD;}*/
tr:hover td, tr:hover th {background-color: red; /* #3D4E80;*/}
/*fieldset {display: inline; vertical-align: top; padding: 2px 12px; margin: 25px 12px 12px 0; border: none; background-color: #F1F1F1; border: 1px solid #E3E3E3; position: relative; padding-top: 14px;}*/
fieldset {display: inline; vertical-align: top; padding: 2px 12px; margin: 25px 12px 12px 0; border: none; background-color: #1D294D; border: 1px solid #E3E3E3; position: relative; padding-top: 14px;}
fieldset, x:-moz-any-link {padding-top: 4px;}
fieldset {%padding-top: 14px;}
legend {font-weight: 900; color: #fff; position: absolute; top: -1.666em; left: -1em; padding: 0 4px;}
input[name='limit'], input[name*='length'] {width: 3em; xtext-align: right;}
input[name='text_length'] {width: 5em;}
select + input, select + select {margin-left: 2px;}
/*textarea, input, select {border-width: 1px; border-style: solid; -moz-border-radius: 4px; -khtml-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; border-color: #DFDFDF;}*/
textarea, input, select {border-width: 1px; border-style: solid; -moz-border-radius: 4px; -khtml-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; border-color: #5C5C5C; background-color: #49526D; color: #ccc}
input[type="checkbox"], input[type="radio"], input[type="image"] {border: 0 none;}
/*input[type=button], input[type=submit] {border-color: #bbb; color: #464646;}*/
input[type=button], input[type=submit] {border-color: #999; color: #fff;}
/*input[type=button]:hover, input[type=submit]:hover {color: #fff; border-color: #666;}*/
input[type=button]:hover, input[type=submit]:hover {color: #fff; border-color: #fff; background-color:#49526D;}
input[type=button], input[type=submit] {text-decoration: none; font-size: 11px !important; line-height: 14px; padding: 2px 8px; cursor: pointer; border-width: 1px; border-style: solid; -moz-border-radius: 11px; -khtml-border-radius: 11px; -webkit-border-radius: 11px; border-radius: 11px; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; -khtml-box-sizing: content-box; box-sizing: content-box;background-color:#49526D;}
input + label input, select + label input {margin-left: 4px;}
td input[type='checkbox']:first-child, td input[type='radio']:first-child {margin-left: 2px;}
label:hover {text-decoration: underline;}
fieldset div {margin-bottom: 2px;}
input[name='Comment'] { /* !!! */ width: 24em;}
input[name='Auto_increment'] { /* !!! */width: 6em;}
img {vertical-align: middle; margin: 0; padding: 0;}
.error {padding: 8px; color: red; background-color: #FEE;}
/*.message {padding: 8px; background-color: #DDD;}*/
.message {padding: 8px; background-color: #49526D;}
.char {color: #070;}
.date {color: #707;}
.enum {color: #077;}
.binary {color: red;}
/*.jush-sql {padding: 2px 4px; margin-right: 4px; outline: 1px #BBB dashed; font-size: 9pt;}*/
.jush-sql {padding: 2px 4px; margin-right: 4px; font-size: 9pt;background-color:#49526D;}
.jush a {
color: #B4D5FF !important;
}
.jush, .jush-bac {
color: #fff;
}
#content {margin: 2px 0 0 300px; padding: 10px 20px 20px 0;}
#lang {height: 23px; width: 250px; display: block; padding: 1px 10px; position: absolute; top: 0; left: 0; text-align: center; background-color: #f1f1f1; border: 1px solid #E3E3E3; line-height: 1.25em;}
#lang select {font-size: 8pt;}
/*#breadcrumb {margin: 0; height: 21px; display: block; position: absolute; top: 0; left: 300px; background-color: #f1f1f1; border: 1px solid #E3E3E3; padding: 2px 12px; line-height: 1.25em }
#menu {position: absolute; padding: 10px; margin: 0; top: 28px; left: 0; width: 250px; background-color: #f1f1f1; border: 1px solid #E3E3E3;}*/
#breadcrumb {margin: 0; height: 21px; display: block; position: absolute; top: 0; left: 300px; background-color: #000; border: 1px solid #E3E3E3; padding: 2px 12px; line-height: 1.25em; color:#ccc; }
#breadcrumb a {
color:red;
}
#menu {position: absolute; padding: 10px; margin: 0; top: 28px; left: 0; width: 250px; background-color: #110236; border: 1px solid #E3E3E3;}
#menu form {margin: 0;}
#menu p {padding-left: 8px; font-size: 10pt; border-bottom: none;}
#menu form p {padding-left: 0; text-align: left;}
h1 .h1:hover {text-decoration: underline;}
/*h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 14px 15px 3px 10px; line-height: 35px; text-shadow: rgba(255,255,255,1) 0 1px 0px; background: none;}*/
h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 14px 15px 3px 10px; line-height: 35px; /*text-shadow: rgba(185,185,185,1) 0 1px 0px;*/ background: none;color:#A3A3A3}
h1 {font-size: 12px;}
h1 .h1 {font-size: 12px;}
h2 {padding: 22px 0 0 10px;}
h3 {margin: 40px 0 0; font-weight: 400; font-size: 130%;}
#schema {margin: 1.5em 0 0 220px; position: relative;}
/*#schema .table {border: 1px solid #E3E3E3; background-color: #F1F1F1; padding: 0 2px; cursor: move; position: absolute;}*/
#schema .table {border: 1px solid #E3E3E3; background-color: #110236; padding: 0 2px; cursor: move; position: absolute;}
#schema .references {position: absolute;}
.js .hidden {display: inline;}
.js td.hidden, .js input.hidden {display: none;}
legend a {color: #F1E5B3; text-decoration: none; cursor: default;}
legend a:hover {color: #333;}
code {background: transparent;}
fieldset, legend, h2, table, .error, .message {-moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px;border-radius: 5px;}
#breadcrumb, #lang, #menu {-moz-border-radius-bottomright: 5px; -khtml-border-bottom-right-radius: 5px; -webkit-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;}
#breadcrumb {-moz-border-radius-bottomleft: 5px; -khtml-border-bottom-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;}
#menu {-moz-border-radius-topright: 5px; -khtml-border-top-right-radius: 5px; -webkit-border-top-right-radius: 5px; border-bottom-top-radius: 5px;}
#loader {margin-left: 35px;}
/*custom*/
.js .checked td,.js .checked th, .js .checkable .checked td, .js .checkable .checked th{
background:#5A3901;
}
tbody tr:hover td,tbody tr:hover th{
background:#333333;
}
.js .column {
background: none repeat scroll 0 0 #110236;
margin-top: -0.3em;
padding: 0.3em 1ex 0.3em 0;
position: absolute;
}
.js:hover .column:hover {
background: none repeat scroll 0 0 #110236;
}
#content pre {background-color:#49526D}
#lang{background:#110236;}
.pages {background:#43486F;}
.pages {background:#999671;}
.pages {background:#817F5A;}
#logins a:hover, #tables a[title]:hover, #tables a.active, #tables a.select:hover + a, #tables a.select.active + a {
color: red;
}
.footer, .footer>div {
background-color: #49526D;
opacity: .9;
}
.footer {
border-image: none;
padding: 30px 12px 0px;
border: 1px #BBB solid;
margin: 12px -20px 12px -1px;
margin-right: none;
}

View File

@@ -1,14 +1,14 @@
/* /*
VERSION: adminer-theme-mancave2-2.1.alpha VERSION: adminer-theme-mancave2-2.1.alpha
AUTHORS: panreach@gmail.com, dev@monolithforge.com //NOTE: CREDITS below that we stole from ;-) AUTHORS: panreach@gmail.com, dev@monolithforge.com //NOTE: CREDITS below that we stole from ;-)
LICENSE: www.adminer.org LICENSE: www.adminer.org
NOTES: NOTES:
This (mancave-2.0-alpha) theme still needs some debugging! ;/ This (mancave-2.0-alpha) theme still needs some debugging! ;/
*/ */
@@ -240,17 +240,13 @@ h1{
padding: 0 18px; padding: 0 18px;
border-bottom: 1px solid #444; border-bottom: 1px solid #444;
font-weight: bold; font-weight: bold;
height: 70px;
line-height: 70px;
color: #555; color: #555;
background: none; background: none;
position: relative;
top: 12px;
} }
h2{ h2{
font-size: 24px; font-size: 24px;
margin: 0; margin: 0;
padding: 0; padding: 0;
padding-left: 50px; padding-left: 50px;
border-bottom: 1px solid #333; border-bottom: 1px solid #333;
@@ -261,7 +257,7 @@ h2{
line-height: 77px; line-height: 77px;
} }
h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 32px 15px 3px 10px; line-height: 35px; /*text-shadow: rgba(185,185,185,1) 0 1px 0px;*/ background: none;color:#A3A3A3} h1, h2 {font: italic normal normal 24px/29px Georgia, "Times New Roman", "Bitstream Charter", Times, serif; margin: 0; padding: 40px 15px 3px 10px; line-height: 35px; /*text-shadow: rgba(185,185,185,1) 0 1px 0px;*/ background: none;color:#A3A3A3}
h3{ h3{
font-weight: bold; font-weight: bold;
@@ -362,7 +358,6 @@ th{
position: relative; position: relative;
background: #110236; background: #110236;
font-weight: normal; font-weight: normal;
width: 17%;
border-left: 5px solid #777; border-left: 5px solid #777;
border-bottom: 1px solid #777; border-bottom: 1px solid #777;
color: #eee; color: #eee;
@@ -456,13 +451,13 @@ textarea
} }
textarea, input, select { textarea, input, select {
border-width: 1px; border-width: 1px;
-moz-border-radius: 4px; -moz-border-radius: 4px;
-khtml-border-radius: 4px; -khtml-border-radius: 4px;
-webkit-border-radius: 4px; -webkit-border-radius: 4px;
border-radius: 4px; border-radius: 4px;
border-color: #5C5C5C; border-color: #5C5C5C;
background-color: #49526D; background-color: #49526D;
color: #ccc; color: #ccc;
} }
@@ -547,7 +542,7 @@ input[type='radio']{
height: 18px; height: 18px;
vertical-align: middle; vertical-align: middle;
margin-left: 8px; margin-left: 8px;
margin-right: 0; margin-right: 0;
} }
/* checkbox */ /* checkbox */
@@ -634,7 +629,7 @@ label input {
/* submit */ /* submit */
input[type='submit']{ input[type='submit']{
color: #999; color: #999;
background-color: #110236; background-color: #110236;
padding: 0 25px; padding: 0 25px;
margin-right: 20px; margin-right: 20px;
@@ -761,9 +756,8 @@ legend{
} }
/* db select */ /* db select */
#dbs select{ #dbs {
width: 228px; padding-left: 18px !important;
margin-left: 8px;
} }
/* links */ /* links */
@@ -869,17 +863,17 @@ legend{
} }
#breadcrumb { #breadcrumb {
margin: 0; margin: 0;
height: 21px; height: 21px;
display: block; display: block;
position: absolute; position: absolute;
top: 0; top: 0;
left: 300px; left: 300px;
background-color: #000; background-color: #000;
border: 1px dashed #ccc; border: 1px dashed #ccc;
border-top:0; border-top:0;
padding: 2px 12px 24px 12px; padding: 2px 12px 24px 12px;
line-height: 1.5em; line-height: 1.5em;
color:#800000; color:#800000;
z-index:5000; z-index:5000;
} }
@@ -1079,14 +1073,14 @@ body > form{
top: 0; top: 0;
left: 0; left: 0;
margin: 0; margin: 0;
height: 21px; height: 21px;
display: block; display: block;
background-color: #110236; background-color: #110236;
border: 1px dashed #ccc; border: 1px dashed #ccc;
border-top:0; border-top:0;
padding: 2px 12px 36px 12px; padding: 2px 12px 36px 12px;
line-height: 1.5em; line-height: 1.5em;
color:#ccc; color:#ccc;
z-index:5000; z-index:5000;
} }
@@ -1096,14 +1090,14 @@ body > form{
position: absolute; position: absolute;
top: 0; top: 0;
right: 140px; right: 140px;
margin: 0; margin: 0;
height: 21px; height: 21px;
display: block; display: block;
background-color: #110236; background-color: #110236;
border: 1px dashed #ccc; border: 1px dashed #ccc;
border-top:0; border-top:0;
padding: 2px 12px 36px 12px; padding: 2px 12px 36px 12px;
line-height: 1.5em; line-height: 1.5em;
color:#ccc; color:#ccc;
z-index:5000; z-index:5000;
@@ -1179,7 +1173,7 @@ p#tables a.select::before {
/* edit row */ /* edit row */
html/*\*/>/*/*/body table input + a[href*="&edit="][href*="&where"] { html/*\*/>/*/*/body table input + a[href*="&edit="][href*="&where"] {
content: ''; content: '';
width:18px; width:18px;
vertical-align:middle; vertical-align:middle;
display:inline-block; display:inline-block;
overflow:hidden; overflow:hidden;

View File

@@ -403,14 +403,6 @@ tr.odd td {
color: #090; color: #090;
} }
.js .hidden {
display: initial;
}
.js input.hidden, .js td.hidden {
display: none
}
.logout { .logout {
top: 28px; top: 28px;
} }
@@ -534,13 +526,13 @@ table tbody input ~ a[href*="&edit="][href*="&where"] {
} }
#lang { #lang {
position: absolute; position: fixed;
top: 0;
right: 0;
width: auto;
line-height: 1; line-height: 1;
left: initial; font-size: 11px;
font-size: 11px left: auto;
top: 0;
right: calc(100% - 20rem + 3px);
color: #fff;
} }
#lang select { #lang select {
@@ -597,7 +589,6 @@ table tbody input ~ a[href*="&edit="][href*="&where"] {
background: inherit; background: inherit;
color: #fff; color: #fff;
padding: 3px; padding: 3px;
width: 15rem;
} }
#menu select option { #menu select option {
@@ -614,10 +605,32 @@ table tbody input ~ a[href*="&edit="][href*="&where"] {
color: #fff; color: #fff;
} }
.tables-filter {
padding: .8em .5em;
}
.tables-filter input {
color: #fff;
background: transparent;
}
.tables-filter input::placeholder {
color: #fff;
}
#logins a, #tables a { #logins a, #tables a {
background: 0 0 background: 0 0
} }
.logout {
position: fixed;
top: 0;
right: 0;
z-index: 5;
color: #fff;
margin: 2px 8px;
}
#logout { #logout {
color: #fff; color: #fff;
text-decoration: none text-decoration: none

View File

@@ -22,7 +22,7 @@ a, a:visited {
text-decoration: none; text-decoration: none;
} }
a:hover { a:hover, a:link:hover {
background-color: #006AEB !important; background-color: #006AEB !important;
border-bottom: 1px solid #006AEB; border-bottom: 1px solid #006AEB;
color: #FFF; color: #FFF;
@@ -294,7 +294,6 @@ table code {
border: none; border: none;
margin: 0 0 4px; margin: 0 0 4px;
padding: 0 0 4px; padding: 0 0 4px;
white-space: nowrap;
} }
#breadcrumb { #breadcrumb {
@@ -383,7 +382,7 @@ a[href$="dump="] {
} }
select[name="db"] { select[name="db"] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll 90% center white; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC") no-repeat scroll left center white;
padding-left: 16px; padding-left: 16px;
} }
@@ -413,6 +412,11 @@ select[name="db"] option {
text-decoration: none; text-decoration: none;
} }
.tables-filter {
padding: 0;
margin: 8px 0;
}
a[href*="&create="] { a[href*="&create="] {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC") no-repeat scroll 2px center; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLpZNZSNRRGMV//2XGsjFrMg2z0so2K21xIFpepYUiAsGIICLffI8eWiBBeg3qQV+KwBYKLB8qpHUmrahcKLc0QsxldNSxdPz/79LD1ChBUXTh8sG93POdc75zDa01/7NsgGvPR09rzQmpVZZSCqlAKIWUCqk0QqoZWyKFRir1uvxIbsAGUFqXHQqkpP1L57M3Pm5MMJBKpQHUdF9BKIGQAlcJXOlOVykSdye3leO6MmkGQNyHw+uO/1X3bzGBK+S0B1IqAKqDg3986HeCZPffwvJtoNT7lOZLvUdtAPEDAKBkRzo3QwMUb89InN1uGGD3spdE214xe8MRUnM2MfppNW0Pqy7YAK5UKK2xLbhdP4hlmdxpGMQwwQT8ziNiI534c7cT6WrFazikzF2Eb8HS1IQEDdiWwcHAQmpehTkQSAcgNvSMiYFW5uUUMdV3HW+ywefGNqITJsbUUL75k4FWYJtQ+yaMZcXrk1ANk/33mbdiD7EvlRieETy+FJLkMFcjRRSW3emIAwiF1hqPBfu2LGSWbbA1uZ41SfWkrtxPrPcypsfFiWYzFGzGKTjFV28WEJeIUHETLdOgrmkI1VdHpCdEet5enP4qLK9mKrqMgedv6cyrAP+qxOTiUxAi7oEJi8frELoFoTLpa7nI/HQvscgSRt+0kV1SSW7qYtp7xrBMphm4Mi5h/VIfTcEq1u0oJaknSEdNiMYHET7UvcMpPEN31Ed7zxgASmk1I0g6dK66s8CRak5mVxjnfS05+TsZCw/T9baTx1nnGb47DrQksjE6HrsHYPz6nYt3+Sc3L8+wA2tz0J6pF5OD4WP7Kpq7f5fO79DfSxjdtCtDAAAAAElFTkSuQmCC") no-repeat scroll 2px center;
padding-left: 22px; padding-left: 22px;
@@ -545,6 +549,11 @@ input[name="delete"]:hover, input[name="drop"]:hover {
color: red; color: red;
} }
.logout {
color: #fff;
margin-top: 0.7em;
}
#logout { #logout {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC") no-repeat scroll left center; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJHSURBVDjLlZPNi81hFMc/z7137p1mTCFvNZfGSzLIWNjZKRvFRoqNhRCSYm8xS3+AxRRZ2JAFJWJHSQqTQkbEzYwIM+6Yid/znJfH4prLXShOnb6r8/nWOd8Tcs78bz0/f+KMu50y05nK/wy+uHDylbutqS5extvGcxaWqtoGDA8PZ3dnrs2srQc2Zko41UXLmLdyDW5OfvsUkUgbYGbU63UAQggdmvMzFmzZCgTi7CQmkZwdEaX0JwDgTnGbTCaE0G4zw80omhPI92lcEtkNkdgJCCHwJX7mZvNaB0A14SaYJlwTrpHsTkoFlV1nt2c3x5YYo1/vM9A/gKpxdfwyu/v3teCayKq4JEwT5EB2R6WgYmrs2bYbcUNNUVfEhIfFYy69uci+1fuRX84mkawFSxd/4nVWUopUVIykwlQxRTJBTIDA4Pp1jBZPuNW4wUAPmCqWIn29X1k4f5Ku8g9mpKCkakRLVEs1auVuauVuyqHMo8ejNCe+sWPVTkQKXCMmkeZUmUZjETF1tc6ooly+fgUVw9So1/tRN6YnZji46QghBFKKuAouERNhMlbAHZFE6e7pB+He8MMw+GGI4xtOMf1+lsl3TQ4NHf19BSlaO1DB9BfMHdX0O0iqSgiBbJkjm491hClJbA1LxCURgpPzXwAHhg63necAIi3XngXLcRU0fof8ETMljIyM5LGxMcbHxzvy/6fuXdWgt6+PWncv1e4euqo1ZmabvHs5+jn8yzufO7hiiZmuNpNBM13rbvVSpbrXJE7/BMkHtU9jFIC/AAAAAElFTkSuQmCC") no-repeat scroll left center;
border: none; border: none;

View File

@@ -22,7 +22,7 @@ a,a:visited {
color:black; color:black;
} }
a:hover { a:hover, a:link:hover {
color:white; color:white;
background:#006aeb; background:#006aeb;
} }
@@ -224,14 +224,18 @@ input[name=logout]:hover {
background:#ea0202; background:#ea0202;
} }
#logins a, #tables a { #logins a, #tables a {
background:none; background:none;
} }
#logins a:hover, #tables a:hover { #logins a:hover, #tables a:hover {
background:#006aeb; background:#006aeb;
} }
.logout {
z-index: 5;
}
#logout { #logout {
color:#006aeb; color:#006aeb;
text-decoration:none; text-decoration:none;

View File

@@ -160,6 +160,14 @@ tr.odd td {
background:#fcfaf5; background:#fcfaf5;
} }
.footer {
border-image: linear-gradient(rgba(242, 242, 242, 0), #f2f2f2) 100% 0;
}
.footer div {
background: #f2f2f2;
}
#content tbody tr.checked td, tr.checked.odd td { #content tbody tr.checked td, tr.checked.odd td {
background:#fbe2e2; background:#fbe2e2;
color:red; color:red;
@@ -221,7 +229,7 @@ tr.odd td {
#menu { #menu {
background:#34495e; background:#34495e;
position:fixed; position:fixed;
top:-10px; top:5px;
color:#FFF; color:#FFF;
padding:20px; padding:20px;
padding-top:40px; padding-top:40px;
@@ -287,9 +295,14 @@ input[name=logout]:hover {
} }
.logout { .logout {
position: fixed;
z-index:3; z-index:3;
} }
.logout form {
color: #fff;
}
.js .column { .js .column {
background:#ecf0f1; background:#ecf0f1;
} }

View File

@@ -8,7 +8,7 @@ body {
font-size: 11pt; } font-size: 11pt; }
body, select, option, optgroup, button { body, select, option, optgroup, button {
font-family: Calibri, Arial, Helvetica, sans-serif; } /* IE6 */ font-family: Calibri, Arial, Helvetica, sans-serif; } /* IE6 */
input[type='submit'], input[type='reset'], input[type='button'], input[type='file'], input[type='submit'], input[type='reset'], input[type='button'], input[type='file'],
input[name$='[comment]'], input[name='Comment'] { input[name$='[comment]'], input[name='Comment'] {
font-family: Calibri, Arial, Helvetica, sans-serif; } font-family: Calibri, Arial, Helvetica, sans-serif; }
input, textarea, pre, code, samp, kbd, var { input, textarea, pre, code, samp, kbd, var {
@@ -185,6 +185,10 @@ h3 {
background: #DEF; background: #DEF;
} }
.tables-filter {
padding-left: 8px;
}
h1 { h1 {
margin-top: 8px; margin-top: 8px;
color: #000; color: #000;
@@ -221,10 +225,6 @@ h2 {
/* -- GUI adjustments ------------------------------------------------------- */ /* -- GUI adjustments ------------------------------------------------------- */
.js .hidden {
display: inline; }
.js td.hidden, .js input.hidden {
display: none; }
legend a { legend a {
color: #000; color: #000;
text-decoration: none; text-decoration: none;
@@ -287,4 +287,3 @@ fieldset table {
p.tabs { p.tabs {
display: none; } display: none; }
} }

View File

@@ -93,10 +93,6 @@ tbody tr:hover th {
background: none; background: none;
} }
table:not(.checkable) th {
min-width: 120px;
}
thead td, thead td,
thead th { thead th {
background: #34567c; background: #34567c;
@@ -270,7 +266,7 @@ p code + a:visited:hover {
#menu #dbs { #menu #dbs {
background: #fff; background: #fff;
padding: 0 15px 15px; padding: 0;
border: 1px solid #dae8fa; border: 1px solid #dae8fa;
border-bottom: 0; border-bottom: 0;
box-sizing: border-box; box-sizing: border-box;
@@ -280,7 +276,6 @@ p code + a:visited:hover {
#menu #dbs select { #menu #dbs select {
outline: 0; outline: 0;
border-color: rgba(0, 0, 0, 0.1); border-color: rgba(0, 0, 0, 0.1);
width: 100%;
} }
#menu p.links { #menu p.links {
@@ -310,6 +305,11 @@ p code + a:visited:hover {
color: #000; color: #000;
} }
.tables-filter {
padding: 0;
margin-top: 32px;
}
#content p.links { #content p.links {
margin: -10px 0 15px; margin: -10px 0 15px;
} }
@@ -522,7 +522,7 @@ input.default {
select { select {
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
padding: 6px 0; padding: 6px;
border: 1px solid #bbbbbb; border: 1px solid #bbbbbb;
} }
@@ -652,11 +652,11 @@ label {
.logout { .logout {
display: none; display: none;
} }
#breadcrumb { #breadcrumb {
position: static; position: static;
} }
#content { #content {
margin: 0; margin: 0;
} }

View File

@@ -1,127 +0,0 @@
#menu {
margin: 0;
position: absolute;
top: 0;
bottom: 0;
left: 0;
width: 270px;
padding: 0;
border-right: 1px #ccc solid;
}
#menu p {
margin: 0;
padding: 4px 10px;
}
#menu p select {
width: 100%;
}
#menu h1 {
height: 25px;
padding: 0 10px;
margin: 0;
line-height: 20px;
display: block;
}
#menu h1 a {
font-size: 13px;
}
#menu h1 .version {
font-size: 9px;
}
#menu * {
margin: 0;
padding: 0;
}
#tables {
margin: 0;
position: absolute;
top: 118px;
bottom: 0;
left: 0;
padding: 0;
overflow-x: hidden;
overflow-y: auto;
width: 270px;
}
#logins li, #tables li {
position: relative;
height: 23px;
}
#logins a {
display: block;
margin-top: 5px;
padding: 0 10px;
}
#tables a {
display: block;
margin: 0;
padding: 0;
text-decoration: none;
margin-top: 5px;
}
#tables a[href*="select"] {
position: absolute;
left: 10px;
width: 50px;
}
#tables a[href*="table"] {
position: absolute;
left: 65px;
width: 200px;
}
#lang {
top: -1px;
right: 2px;
left: auto;
margin: 0;
padding: 0;
z-index: 10;
}
#content {
margin: 0;
padding: 0 10px 10px 10px;
position: absolute;
left: 270px;
right: 0;
top: 82px;
bottom: 0;
overflow: auto;
}
#content h2 {
display: block;
margin: 0;
padding: 0;
height: 55px;
position: fixed;
left: 270px;
right: 0;
top: 26px;
line-height: 55px;
padding-left: 10px;
border-bottom: 1px solid #ccc;
}
#breadcrumb {
position: fixed;
left: 270px;
right: 0;
top: 0;
height: 25px;
margin: 0;
border-bottom: 1px solid #999;
}

Some files were not shown because too many files have changed in this diff Show More