Merge branch 'master' into master-security

This commit is contained in:
Michal Čihař 2017-01-21 16:46:12 +01:00
commit be4eaf5243
56 changed files with 353 additions and 913 deletions

View File

@ -5,6 +5,9 @@
language: php
services:
- mysql
php:
- "7.1"
- "7.0"
@ -29,7 +32,7 @@ install:
before_script:
- export PATH=~/.composer/vendor/bin/:$PATH
- mysql -uroot -e "CREATE DATABASE test"
- mysql -uroot -e "CREATE DATABASE IF NOT EXISTS test"
- mysql -uroot < sql/create_tables.sql
- mysql -uroot -e "SET PASSWORD = PASSWORD('$TESTSUITE_PASSWORD')"
- ./test/start-local-server
@ -58,6 +61,18 @@ matrix:
env: CI_MODE=release
- php: "7.0"
env: CI_MODE=docs
- os: osx
language: generic
env: CI_MODE=test
before_install:
- brew tap homebrew/php
- brew update
- brew install ant gettext php70 mariadb
- brew link --force gettext
- curl https://getcomposer.org/installer | php
- ln -s "`pwd`/composer.phar" /usr/local/bin/composer
- mysql.server start
cache:
directories:
- $HOME/.composer/cache/

420
ChangeLog
View File

@ -41,6 +41,12 @@ phpMyAdmin - ChangeLog
- issue #12799 Allow to configure signon session parameters
- issue #12854 Drop database is broken
- issue #12863 Can't toggle Event Scheduler on
- issue #12742 Finish removing dead code references to xls/xlsx import and export, which was removed some time ago.
- issue #12536 Rename "Relations" to "Relationships" in many places as it's the more proper term
- issue #12834 Fixed margins in central columns feature
- issue #12903 Document more export configuration options
- issue #12897 Use consistent numeric format for table overhead
- issue #12901 Use server returned table name on renaming table
4.6.6 (not yet released)
- issue #12759 Fix Notice regarding 'Undefined index: old_usergroup'
@ -66,417 +72,21 @@ phpMyAdmin - ChangeLog
- issue #12826 Honor user configured connection collation
- issue #12293 Correctly report OpenSSL errors from cookie encryption
- issue #12814 DateTime won't allow to input length in Routine editor
- issue #12840 Fix Notice regarding 'Undefined index: row_format' when altering table options
- issue #12841 Fixed moving of columns with whitespace in name
- issue #12847 Fixed editing of virtual columns
- issue #12859 Changed WHERE condition to 0 instead of 1 for SQL query window to avoid accidents
- issue #12872 Use same query for display and execution when dropping index
- issue #12868 Fix check for user groups freatures being enabled
- issue #12876 Fix notices and warning related to dbs_to_test global
- issue #12831 Fix table formatting on Insert tab, which mostly affected row highlighting
- issue #12495 Reintroduced phpinfo page with limited capabilities
- issue #12861 Fix renaming tables with lower_case_table_names=2
- issue #12876 Fix possible PHP error in navigation
- issue #12881 Fix database search with newer php-gettext
- issue #12894 Fix linter error on unterminated variable name
- issue #12732 Fixed filtering for active processes
4.6.5.2 (2016-12-05)
- issue #12765 Fixed SQL export with newlines
4.6.5.1 (2016-11-25)
- issue #12735 Incorrect parameters to escapeString in Node.php
- issue #12734 Fix PHP error when mbstring is not installed
- issue #12736 Don't force partition count to be specified when creating a new table
4.6.5 (2016-11-24)
- issue Remove potentionally license problematic sRGB profile
- issue #12459 Display read only fields as read only when editing
- issue #12384 Fix expanding of navigation pane when clicking on database
- issue #12430 Impove partitioning support
- issue #12374 Reintroduced simplified PmaAbsoluteUri configuration directive
- issue Always use UTC time in HTTP headers
- issue #12479 Simplified validation of external links
- issue #12483 Fix browsing tables with built in transformations
- issue #12485 Do not show warning about short blowfish_secret if none is set
- issue #12251 Fixed random logouts due to wrong cookie path
- issue #12480 Fixed editing of ENUM/SET/DECIMAL fields structure
- issue #12497 Missing escaping of configuration used in SQL (hide_db and only_db)
- issue #12476 Add error checking in reading advisory rules file
- issue #12477 Add checking missing elements and confirming element types from json_decode
- issue #12251 Automatically save SQL query in browser local storage rather than in cookie
- issue #12292 Unable to edit transformations
- issue #12502 Remove unused paramenter when connecting to MySQLi
- issue #12303 Fix number formatting with different settings of precision in PHP
- issue #12405 Use single quotes in PHP code
- issue #12534 Option for the dropped column is not removed from 'after_field' select, after the column is dropped
- issue #12531 Properly detect DROP DATABASE queries
- issue #12470 Fix possible race condition in setting URL hash
- issue #11924 Remove caching of server information
- issue #11628 Proper parsing of INSERT ... ON DUPLICATE KEY queries
- issue #12545 Proper parsing of CREATE TABLE ... PARTITION queries
- issue #12473 Code can throw unhandled exception
- issue #12550 Do not try to keep alive session even after expiry
- issue #12512 Fixed rendering BBCode links in setup
- issue #12518 Fixed copy of table with generated columns
- issue #12221 Fixed export of table with generated columns
- issue #12320 Copying a user does not copy usergroup
- issue #12272 Adding a new row with default enum goes to no selection when you want to add more then 2 rows
- issue #12487 Drag and drop import prevents file dropping to blob column file selector on the insert tab
- issue #12554 Absence of scrolling makes it impossible to read longer text values in grid editing
- issue #12530 "Edit routine" crashes when the current user is not the definer, even if privileges are adequate
- issue #12300 Export selective tables by-default dumps Events also
- issue #12298 Fixed export of view definitions
- issue #12242 Edit routine detail dialog does not fill "Return length" field in mysql functions
- issue #12575 New index Confirm adds whitespace around the field name
- issue #12382 Bug in zoom search
- issue #12321 Assign LIMIT clause only to syntactically correct queries
- issue #12461 Can't Execute SQL With Sub-Query Due To "LIMIT 0,25" Inserted At Wrong Place
- issue #12511 Clarify documentation on ArbitraryServerRegexp
- issue #12508 Remove duplicate code in SQL escaping
- issue #12475 Cleanup code for getting table information
- issue #12579 phpMyAdmin's export of a Select statment without a FROM clause generates Wrong SQL
- issue #12316 Correct export of complex SELECT statements
- issue #12080 Fixed parsing of subselect queries
- issue #11740 Fixed handling DELETE ... USING queries
- issue #12100 Fixed handling of CASE operator
- issue #12455 Query history stores separate entry for every letter typed
- issue #12327 Create PHP code no longer works
- issue #12179 Fixed bookmarking of query with multiple statements
- issue #12419 Wrong description on GRANT OPTION
- issue #12615 Fixed regexp for matching browser versions
- issue #12569 Avoid showing import errors twice
- issue #12362 prefs_manage.php can leave an orphaned temporary file
- issue #12619 Unable to export csv when using union select
- issue #12625 Broken Edit links in query results of JOIN query
- issue #12634 Drop DB error in import if DB doesn't exist
- issue #12338 Designer reverts to first saved ER after EACH relation create or delete
- issue #12639 'Show trace' in Console generates JS error for functions in query's trace called without any arguments
- issue #12366 Fix user creation with certain MariaDB setups
- issue #12616 Refuse to work with mbstring.func_overload enabled
- issue #12472 Properly report connection without password in setup
- issue #12365 Fix records count for large tables
- issue #12533 Fix records count for complex queries
- issue #12454 Query history not updated in console until page refresh
- issue #12344 Fixed parsing of labels in loop
- issue #12228 Fixed parsing of BEGIN labels
- issue #12637 Fixed editing some timestamp values
- issue #12622 Fixed javascript error in designer
- issue #12334 Missing page indicator or VIEWs
- issue #12610 Export of tables with Timestamp/Datetime/Time columns defined with ON UPDATE clause with precision fails
- issue #12661 Error inserting into pma__history after timeout
- issue #12195 Row_format = fixed not visible
- issue #12665 Cannot add a foreign key - non-indexed fields not listed in InnoDB tables
- issue #12674 Allow for proper MySQL-allowed strings as identifiers
- issue #12651 Allow for partial dates on table insert page
- issue #12681 Fixed designer with tables using special chars
- issue #12652 Fixed visual query builder for foreign keys with more fields
- issue #12257 Improved search page performance
- issue #12322 Avoid selecting default function for foreign keys
- issue #12453 Fixed escaping of SQL parts in some corner cases
- issue #12542 Missing table name in account privileges editor
- issue #12691 Remove ksort call on empty array in PMA_getPlugins function
- issue #12443 Check parameter type before processing
- issue #12299 Avoid generating too long URLs in search
- issue #12361 Fix self SQL injection in table-specific privileges
- issue #12698 Add link to release notes and download on new version notification
- issue #12712 Error when trying to setup replication (fatal error in call to an old PMA_DBI_connect function)
- issue [security] Unsafe generation of $cfg['blowfish_secret'], see PMASA-2016-58
- issue [security] phpMyAdmin's phpinfo functionality is removed, see PMASA-2016-59
- issue [security] AllowRoot and allow/deny rule bypass with specially-crafted username, see PMASA-2016-60
- issue [security] Username matching weaknesses with allow/deny rules, see PMASA-2016-61
- issue [security] Possible to bypass logout timeout, see PMASA-2016-62
- issue [security] Full path disclosure (FPD) weaknesses, see PMASA-2016-63
- issue [security] Multiple XSS weaknesses, see PMASA-2016-64
- issue [security] Multiple denial-of-service (DOS) vulnerabilities, see PMASA-2016-65
- issue [security] Possible to bypass white-list protection for URL redirection, see PMASA-2016-66
- issue [security] BBCode injection to login page, see PMASA-2016-67
- issue [security] Denial-of-service (DOS) vulnerability in table partitioning, see PMASA-2016-68
- issue [security] Multiple SQL injection vulnerabilities, see PMASA-2016-69
- issue [security] Incorrect serialized string parsing, see PMASA-2016-70
- issue [security] CSRF token not stripped from the URL, see PMASA-2016-71
4.6.4 (2016-08-16)
- issue [security] Weaknesses with cookie encryption, see PMASA-2016-29
- issue [security] Improve session cookie code for openid.php and signon.php example files
- issue [security] Full path disclosure in openid.php and signon.php example files
- issue [security] Multiple XSS vulnerabilities, see PMASA-2016-30
- issue [security] Multiple XSS vulnerabilities, see PMASA-2016-31
- issue [security] Unsafe generation of BlowfishSecret (when not supplied by the user)
- issue [security] Referrer leak when phpinfo is enabled
- issue [security] PHP code injection, see PMASA-2016-32
- issue [security] Full path disclosure, see PMASA-2016-33
- issue [security] SQL injection attack, see PMASA-2016-34
- issue [security] Local file exposure through LOAD DATA LOCAL INFILE, see PMASA-2016-35
- issue [security] Local file exposure through symlinks with UploadDir, see PMASA-2016-36
- issue [security] Path traversal with SaveDir and UploadDir, see PMASA-2016-37
- issue [security] Multiple XSS vulnerabilities, see PMASA-2016-38
- issue [security] SQL injection vulnerability as control user, see PMASA-2016-39
- issue [security] SQL injection vulnerability, see PMASA-2016-40
- issue [security] Denial-of-service attack through transformation feature, see PMASA-2016-41
- issue [security] SQL injection vulnerability as control user, see PMASA-2016-42
- issue [security] Verify data before unserializing, see PMASA-2016-43
- issue [security] Use HTTPS for wiki links
- issue Remove Swekey support
- issue [security] Denial-of-service attack with $cfg['AllowArbitraryServer'] = true and persistent connections, see PMASA-2016-45
- issue [security] Improve SSL certificate handling
- issue [security] Fix full path disclosure in debugging code
- issue [security] Possible circumvention of IP-based allow/deny rules with IPv6 and proxy server, see PMASA-2016-47
- issue [security] Detect if user is logged in, see PMASA-2016-48
- issue [security] Bypass URL redirection protection, see PMASA-2016-49
- issue [security] Referrer leak, see PMASA-2016-50
- issue [security] Reflected File Download, see PMASA-2016-51
- issue [security] ArbitraryServerRegexp bypass, see PMASA-2016-52
- issue [security] Denial-of-service attack by entering long password, see PMASA-2016-53
- issue [security] Remote code execution vulnerability when running as CGI, see PMASA-2016-054
- issue [security] Administrators could trigger SQL injection attack against users
- issue [security] Denial-of-service attack when PHP uses dbase extension, see PMASA-2016-55
- issue [security] Remove tode execution vulnerability when PHP uses dbase extension, see PMASA-2016-56
- issue [security] Denial-of-service attack by using for loops, see PMASA-2016-46
- issue Include X-Robots-Tag header in responses
- issue Enforce numeric field length when creating table
- issue Fixed invalid Content-Length in some HTTP responses
- issue #12394 Create view should require a view name
- issue #12391 Message with 'Change password successfully' displayed, but does not take effect
- issue Tighten control on PHP sessions and session cookies
- issue #12409 Re-enable overhead on server databases view
- issue #12414 Fixed rendering of Original theme
- issue #12413 Fixed deleting users in non English locales
- issue #12416 Fixed replication status output in Databases listing
- issue #12303 Avoid typecasting to float when not needed
- issue #12425 Duplicate message variable names in messages.inc.php
- issue #12399 Adding index to table shows wrong top navigation
- issue #12424 Fixed password change on MariaDB without auth plugin
- issue #12339 Do not error on unset server port
- issue #12422 Improvements to the original theme
- issue #12395 Do not try to load old transformation plugins
- issue #12423 Fixed replication status in database listing
- issue #12433 Copy table with prefix does not copy the indexes
- issue #12375 Search in database: Window content is not scrolling down when clicking first time on Browse link
- issue #12346 SQL Editor textareas can have their size increased from the top, distorting the page view
4.6.3 (2016-06-23)
- issue #12249 Fixed cookie path on Windows
- issue #12279 Fixed error reporting on connect problems
- issue #12290 Fixed export of tables without explicitly set engine
- issue #12285 Designer JavaScript error: Show/Hide tables list
- issue #12293 Fix MySQL SSL connection with some PHP versions
- issue #12279 Fix MySQL connection error on version mismatch
- issue #12281 Keep user attributes (privileges, authentication mode, etc) when copying a user
- issue #12308 Fix division by zero in case of misconfigured MySQL server
- issue #12317 Fix editing server variables
- issue #12303 Fix table size calculation in some circumstances
- issue #12310 Fix listing routines for non privileged user
- issue Escape generated query in exporting a database
- issue Setup script doesn't use input type 'password' in all relevant locations
- issue [security] BBCode injection in setup script, see PMASA-2016-17
- issue [security] Cookie attribute injection attack, see PMASA-2016-18
- issue Redirect loop when directly calling url.php
- issue [security] SQL injection attack, see PMASA-2016-19
- issue [security] XSS attack in Table Structure page, see PMASA-2016-20
- issue [security] XSS attack in Server Privileges page, see PMASA-2016-21
- issue [security] DOS attack vulnerability, see PMASA-2016-22
- issue [security] Multiple full path disclosure vulnerabilities, see PMASA-2016-23
- issue [security] Full path disclosure when running in debug mode
- issue [security] XSS attack with partition range and table structure, see PMASA-2016-25
- issue [security] XSS attack when checking database privileges, see PMASA-2016-26
- issue [security] XSS attack when MySQL server is using a specific payload log_bin directive, see PMASA-2016-26
- issue [security] XSS vulnerabilities in Transformation feature, see PMASA-2016-26
4.6.2 (2016-05-25)
- issue [security] User SQL queries can be revealed through URL GET parameters, see PMASA-2016-14
- issue [security] Self XSS vulneratbility, see PMASA-2016-16
- issue #12225 Use https for documentation links
- issue #12234 Fix schema export with too many tables
- issue #12240 Avoid parsing non JSON responses as JSON
- issue #12244 Avoid using too log URLs when getting javascripts
- issue #12118 Fixed setting mixed case languages
- issue #12229 Avoid storing objects in session when debugging SQL
- issue #12249 Fix cookie path on IIS
- issue #11705 Fix occassional 200 errors on Windows
- issue #12219 Fix locking issues when importing SQL
- issue #12231 Avoid confusing warning when mysql extension is missing
- issue Improve handling of logout
- issue Safer handling of sessions during authentication
- issue #12209 Fix server selection on main page
- issue #12192 Avoid storing full error data in session
- issue #12082 Fixed export of ARCHIVE tables with keys
- issue #11565 Add session reload for config authentication
- issue #12229 Do not fail on errors stored in session
- issue #12248 Fix loading of APC based upload progress bar
4.6.1 (2016-05-02)
- issue #12120 PMA_Util not found in insert_edit.lib.php
- issue #12118 Fixed activation of some languages
- issue #12121 Fixed error in 3NF step of normalization
- issue #12135 Fix offering JSON datatype in incompatible MySQL versions
- issue #12132 Can not open table with JSON field
- issue #12125 Cannot highlight a column if I scroll down from the top of the table
- issue #12154 Fixed possible PHP error in SQL parser
- issue #12029 Fixed SQL quoting in SQL export
- issue #12129 Improve performance of database structure page
- issue #12159 Fix PHP error if user did unpack new version over old one
- issue #12165 Fix parsing of expression 0
- issue #12146 Document setup with Google Cloud SQL
- issue #12197 Fix parsing of queries with double \
- issue #12202 Fixed setting of language from user configuration
- issue #12200 Fixed check for ndb version
- issue #12206 Fixed loading of configuration file
- issue #12204 Check if sessions are working and report failures
- issue #12211 non-clickable initial letter for users / and can't modify users with MySQL 5.7.12
- issue #12215 Fixed config tab persistence errors
- issue #12217 Fixed javascript erros on user creation
- issue #12144 Fixed parsing of some AS clauses
- issue #12205 Fixed parsing of FULL OUTER JOIN queries
- issue #12171 Fixed editing of VIEW structure
- issue #12208 Avoid printing executed queries on import
4.6.0.0 (2016-03-22)
+ issue #11456 Disabled storage engines
+ issue #11479 Allow setting routine wise privileges
- issue Hide Insert tab for non-updatable views
+ issue #11490 UI for defining partitioning in create table window
+ issue #11438 Support JSON data type
+ issue Editing partitions in table Structure
- issue Tracking does not make sense for information_schema
- issue #11550 Regression in Find and replace
+ issue #11619 TokuDB Tables Show Size as "unknown"
+ issue #11654 Use a slider for Internal relations
+ issue #11641 Ability to disable the navigationhiding Feature
- issue #11647 Restrict configuration NavigationTreeDbSeparator to strings
- issue #11667 Disable the tooltip in the navigation panel's filter box
+ issue Copy results to clipboard
+ issue #11504 Reactivate cut&paste possibility in print view
- issue #11702 Extraneous message after edit + grid-edit
- issue #11668 Table header is empty with browsing an empty table
+ issue #11701 Allow changing parameter order of routines
- issue #11708 Remove no password warning
+ issue #11711 Clarify the meaning of "Stand-in structure for view" in SQL export
- issue HTML line break shown after a MySQL connection error message
- issue #11728 CSV import skip row count after
- issue Fixed displaying of SQL query on table operations
- issue #6321 Display binary strings as text if they are valid UTF-8
+ issue #11743 Display routine specific privileges
+ issue #11538 Copy multiple tables to database
+ issue Support Cloudflare Flexible SSL
- issue Handle empty TABLE_COMMENT
+ issue #11833 Drop support for old Internet Explorer versions
+ issue #11796 Use modals for displaying forms in db structure page
+ issue #11789 Show MySQL error messages in user language
+ issue Add 'ssl_verify' configuration directive for self-signed certificates with mysqlnd and PHP >= 5.6
+ issue #11874 Show more used PHP extensions
- issue #11874 Report when version check and error reporting are disabled
- issue #11849 Fix PDF schema export
- issue #11412 Remove ForceSSL configuration directive
- issue Remove support for Mozilla Prism
- issue #11412 Remove PmaAbsoluteUri configuration directive
- issue #11914 Fix autoloading of phpseclib
- issue #11880 Fixed rendering of missing extension error
- issue #11923 Errors on Structure tab when user only has select access on certain columns
- issue #11972 Missing documentation for $cfg['Servers'][$i]['favorite'] and $cfg['NumFavoriteTables']
- issue #11907 Avoid displaying UPDATE query twice
- issue #11850 Fixed CSV import
- issue Fix SQL syntax highlighting in database search page
- issue #12056 Fix error when we can not generate random string
- issue #12055 Fixed PHP syntax error in templates
- issue #12054 Fixed processing of queries with escaped quotes
- issue #12041 Fixed exporting tables with fields DEFAULT and COMMENT
- issue #12073 Hide edit and delete buttons when the results are not related to a table
- issue #12083 Fixed parsing of field definition
- issue #12081 Fixed rendering of table stats
- issue #11705 Fixed problems with PHP on Windows on table structure
- issue #12085 Like search strings being escaped incorrectly
- issue #12092 Rename exported databases/tables doesn't seem to work
- issue #12099 Undefined index: controllink
- issue #12094 PHP Fatal error: Call to undefined function __()
- issue #12098 Fix login after logout with http authentication
- issue #12074 Fixed possible invalid SQL export
- issue #12026 Fixed parsing of UNION SELECT with brackets
- issue #12109 Fixed parsing of CREATE TABLE [AS] SELECT
- issue #12105 Multi-server drap-and-drop import always fails
- issue #12116 Fulltext indexes are not copied when using copy database function
4.5.5.1 (2016-02-29)
- issue #11971 CREATE UNIQUE INDEX index type is not recognized by parser.
- issue #11982 Row count wrong when grouping joined tables.
- issue #12012 Column definition with default value and comment in CREATE TABLE expoerted faulty.
- issue #12020 New statement but no delimiter and unexpected token with REPLACE.
- issue #12029 Fixed incorrect usage of SQL parser context in SQL export
- issue [security] XSS vulnerability in SQL parser, see PMASA-2016-10.
- issue [security] Multiple XSS vulnerabilities, see PMASA-2016-11.
- issue [security] Multiple XSS vulnerabilities, see PMASA-2016-12.
- issue [security] Vulnerability allowing man-in-the-middle attack on API call to GitHub, see PMASA-2016-13.
- issue #12048 Fixed inclusion of gettext library from SQL parser
4.5.5.0 (2016-02-22)
- issue Undefined index: is_ajax_request
- issue #11855 Fix password change on MariaDB 10.1 and newer
- issue #11874 Validate version information before further processing it
- issue #11881 Full processlist lost on refresh
- issue #11834 Adjust privileges fails if database name contains underscores
- issue #11906 'Loading...' banner shows on login screen
- issue #11930 Fixed changing of table parameters, eg. AUTO_INCREMENT
- issue #11885 Call to undefined function SqlParser\ctype_alnum()
- issue #11879 4.5.3.1 - NOW() function not recognized by parser
- issue #11867 Gracefully handle the DESC statement
- issue #11843 Fractional timestamp causes corrupted SQL export
- issue #11836 Static analysis error for valid WHERE condition with IF keyword
- issue #11800 Syntax Verifier error using REGEXP in SQL statement
- issue #11799 Backslashes in comments are being interpreted as escape characters
- issue #11909 Can't insert row into table that contains generated column
- issue #11677 sql-parser and php-gettext collide.
- issue #11920 Can't disable backquotes in export
- issue #11911 Inserts via tbl_change.php in VARBINARY columns does not allow using HEX() and MD5()
- issue #11939 Correct content type for uploaded error reports
- issue #11940 Silent errors from checking local documentation
- issue #11944 Fixed error on servers with disabled php_uname
- issue #11946 Correctly store and report file upload errors
- issue #11948 Avoid javascript errors on invalid location hash
- issue #11950 Fix PHP warning on configuration errors
- issue #11951 Silent errors on checking for writable folders
- issue #11952 Silent warning on invalid file upload
- issue #11953 Do not fail getting filename with open_basedir limitations
- issue #11956 unrecognized keyword interval
- issue Field names and aliases are being correctly parsed now.
- issue #11959 Fix javascript error in setup
- issue #11964 Undefined index: TABLE_COMMENT in database structure page
- issue #11967 Fix PHP error on loading invalid XML or ODS file
- issue #11969 Missing confirmation while dropping a view in view_operations.php
- issue #11968 Fix export of index comments in SQL
- issue #11979 DECLARE not accepted as valid SQL
4.5.4.1 (2016-01-29)
- issue #11892 Error with PMA 4.4.15.3
- issue #11896 Remove hard dependency on phpseclib
4.5.4.0 (2016-01-28)
- issue #11724 live data edit of big sets is not working
- issue Table list not saved in db QBE bookmarked search
- issue #11777 While 'changing a column', query fails with a syntax error after the 'CHARSET=' keyword
- issue #11783 Avoid syntax error in javascript messages on invalid PHP setting for max_input_vars
- issue #11784 Properly handle errors in upacking zip archive
- issue #11785 Set PHP's internal encoding to UTF-8
- issue #11786 Fixed Kanji encoding in some specific cases
- issue #11787 Check whether iconv works before using it
- issue #11788 Avoid conversion of MySQL error messages
- issue #11792 Undefined index: parameters
- issue #11802 Undefined index: field_name_orig
- issue Undefined index: host
- issue #11810 'Add to central columns' (per column button) does nothing
- issue #11727 SQL duplicate entry error trying to INSERT in designer_settings table
- issue #11798 Fix handling of databases with dot in a name
- issue #11820 Fix hiding of page content behind menu
- issue #11780 FROM clause not generated after loading search bookmark
- issue #11826 Fix creating/editing VIEW with DEFINER containing special chars
- issue #11828 Do not invoke FLUSH PRIVILEGES when server in --skip-grant-tables
- issue #11804 Misleading message for configuration storage
- issue #11772 Table pagination does nothing when session expired
- issue #11840 Index comments not working properly
- issue #11791 Better handle local storage errors
- issue #11752 Improve detection of privileges for privilege adjusting
- issue #11854 Undefined property: stdClass::$releases at version check when disabled in config
- issue #11814 SQL comment and variable stripped from bookmark on save
- issue Gracefully handle errors in regex based javascript search
- issue [security] Multiple full path disclosure vulnerabilities, see PMASA-2016-1
- issue [security] Unsafe generation of CSRF token, see PMASA-2016-2
- issue [security] Multiple XSS vulnerabilities, see PMASA-2016-3
- issue [security] Insecure password generation in JavaScript, see PMASA-2016-4
- issue [security] Unsafe comparison of CSRF token, see PMASA-2016-5
- issue [security] Multiple full path disclosure vulnerabilities, see PMASA-2016-6
- issue [security] XSS vulnerability in normalization page, see PMASA-2016-7
- issue [security] Full path disclosure vulnerability in SQL parser, see PMASA-2016-8
- issue [security] XSS vulnerability in SQL editor, see PMASA-2016-9
--- Older ChangeLogs can be found on our project website ---
https://www.phpmyadmin.net/old-stuff/ChangeLogs/

View File

@ -2038,6 +2038,11 @@ Main panel
You can additionally hide more information by using
:config:option:`$cfg['Servers'][$i]['verbose']`.
.. config:option:: $cfg['ShowPhpInfo']
:type: boolean
:default: false
.. config:option:: $cfg['ShowChgPassword']
:type: boolean
@ -2048,11 +2053,26 @@ Main panel
:type: boolean
:default: true
Defines whether to display the
Defines whether to display the :guilabel:`PHP information` and
:guilabel:`Change password` links and form for creating database or not at
the starting main (right) frame. This setting does not check MySQL commands
entered directly.
Please note that to block the usage of ``phpinfo()`` in scripts, you have to
put this in your :file:`php.ini`:
.. code-block:: ini
disable_functions = phpinfo()
.. warning::
Enabling phpinfo page will leak quite a lot of information about server
setup. Is it not recommended to enable this on shared installations.
This might also make easier some remote attacks on your installations,
so enable this only when needed.
Also note that enabling the :guilabel:`Change password` link has no effect
with config authentication mode: because of the hard coded password value
in the configuration file, end users can't be allowed to change their
@ -2295,6 +2315,13 @@ Export and import settings
items are similar to texts seen on export page, so you can easily
identify what they mean.
.. config:option:: $cfg['Export']['format']
:type: string
:default: ``'sql'``
Default export format.
.. config:option:: $cfg['Export']['method']
:type: string
@ -2316,6 +2343,33 @@ Export and import settings
Defines charset for generated export. By default no charset conversion is
done assuming UTF-8.
.. config:option:: $cfg['Export']['file_template_table']
:type: string
:default: ``'@TABLE@'``
Default filename template for table exports.
.. seealso:: :ref:`faq6_27`
.. config:option:: $cfg['Export']['file_template_database']
:type: string
:default: ``'@DATABASE@'``
Default filename template for database exports.
.. seealso:: :ref:`faq6_27`
.. config:option:: $cfg['Export']['file_template_server']
:type: string
:default: ``'@SERVER@'``
Default filename template for server exports.
.. seealso:: :ref:`faq6_27`
.. config:option:: $cfg['Import']
:type: array

View File

@ -892,8 +892,9 @@ are always ways to make your installation more secure:
* If you are afraid of automated attacks, enabling Captcha by
:config:option:`$cfg['CaptchaLoginPublicKey']` and
:config:option:`$cfg['CaptchaLoginPrivateKey']` might be an option.
* Alternative approach might be using fail2ban as phpMyAdmin logs failed
authentication attempts to syslog (if available)
* Failed login attemps are logged to syslog (if available). This can allow using a tool such as
fail2ban to block brute-force attempts. Note that the log file used by syslog is not the same
as the Apache error or access log files.
Known issues
++++++++++++

View File

@ -186,9 +186,6 @@ $export_plugin = PMA_getPlugin(
)
);
// Backward compatibility
$type = $what;
// Check export type
if (empty($export_plugin)) {
PMA_fatalError(__('Bad type!'));
@ -318,13 +315,12 @@ if ($what == 'sql') {
$crlf = PMA\libraries\Util::whichCrlf();
}
$output_kanji_conversion = Encoding::canConvertKanji() && $type != 'xls';
$output_kanji_conversion = Encoding::canConvertKanji();
// Do we need to convert charset?
$output_charset_conversion = $asfile
&& Encoding::isSupported()
&& isset($charset) && $charset != 'utf-8'
&& $type != 'xls';
&& isset($charset) && $charset != 'utf-8';
// Use on the fly compression?
$GLOBALS['onfly_compression'] = $GLOBALS['cfg']['CompressOnFly']

View File

@ -323,7 +323,7 @@ if ($server > 0 && $GLOBALS['cfg']['ShowServerInfo']) {
. ' </div>';
}
if ($GLOBALS['cfg']['ShowServerInfo']) {
if ($GLOBALS['cfg']['ShowServerInfo'] || $GLOBALS['cfg']['ShowPhpInfo']) {
echo '<div class="group">';
echo '<h2>' , __('Web server') , '</h2>';
echo '<ul>';
@ -363,6 +363,15 @@ if ($GLOBALS['cfg']['ShowServerInfo']) {
}
}
if ($cfg['ShowPhpInfo']) {
PMA_printListItem(
__('Show PHP information'),
'li_phpinfo',
'phpinfo.php' . $common_url_query,
null,
'_blank'
);
}
echo ' </ul>';
echo ' </div>';
}

View File

@ -521,10 +521,16 @@ function PMA_current_version(data)
var current = parseVersionString($('span.version').text());
var latest = parseVersionString(data.version);
var url = 'https://web.phpmyadmin.net/files/' + escapeHtml(encodeURIComponent(data.version)) + '/';
var version_information_message = '<span class="latest">' +
PMA_messages.strLatestAvailable +
' <a href="' + url + '" class="disableAjax">' + escapeHtml(data.version) + '</a>' +
'</span>';
var version_information_message = document.createElement('span');
version_information_message.className = 'latest';
var version_information_message_link = document.createElement('a');
version_information_message_link.href = url;
version_information_message_link.className = 'disableAjax';
version_information_message_link_text = document.createTextNode(data.version);
version_information_message_link.appendChild(version_information_message_link_text);
var prefix_message = document.createTextNode(PMA_messages.strLatestAvailable);
version_information_message.appendChild(prefix_message);
version_information_message.appendChild(version_information_message_link);
if (latest > current) {
var message = PMA_sprintf(
PMA_messages.strNewerVersion,
@ -537,14 +543,23 @@ function PMA_current_version(data)
htmlClass = 'error';
}
$('#newer_version_notice').remove();
$('#maincontainer').after('<div id="newer_version_notice" class="' + htmlClass + '"><a href="' + url + '" class="disableAjax">' + message + '</a></div>');
var maincontainer_div = document.createElement('div');
maincontainer_div.id = 'newer_version_notice';
maincontainer_div.className = htmlClass;
var maincontainer_div_link = document.createElement('a');
maincontainer_div_link.href = url;
maincontainer_div_link.className = 'disableAjax';
maincontainer_div_link_text = document.createTextNode(message);
maincontainer_div_link.appendChild(maincontainer_div_link_text);
maincontainer_div.appendChild(maincontainer_div_link);
$('#maincontainer').append($(maincontainer_div));
}
if (latest === current) {
version_information_message = ' (' + PMA_messages.strUpToDate + ')';
version_information_message = document.createTextNode(' (' + PMA_messages.strUpToDate + ')');
}
var $liPmaVersion = $('#li_pma_version');
$liPmaVersion.find('span.latest').remove();
$liPmaVersion.append(version_information_message);
$liPmaVersion.append($(version_information_message));
}
}

View File

@ -16,7 +16,7 @@ AJAX.registerOnload('server_status_queries.js', function () {
// Build query statistics chart
var cdata = [];
try {
$.each(JSON.parse($('#serverstatusquerieschart_data').text()), function (key, value) {
$.each($('#serverstatusquerieschart').data('chart'), function (key, value) {
cdata.push([key, parseInt(value, 10)]);
});
$('#serverstatusquerieschart').data(

View File

@ -55,13 +55,11 @@ AJAX.registerOnload('tbl_operations.js', function () {
$(document).on('submit', "#moveTableForm", function (event) {
event.preventDefault();
var $form = $(this);
var db = $form.find('select[name=target_db]').val();
var tbl = $form.find('input[name=new_name]').val();
PMA_prepareForAjaxRequest($form);
$.post($form.attr('action'), $form.serialize() + "&submit_move=1", function (data) {
if (typeof data !== 'undefined' && data.success === true) {
PMA_commonParams.set('db', db);
PMA_commonParams.set('table', tbl);
PMA_commonParams.set('db', data._params.db);
PMA_commonParams.set('table', data._params.tbl);
PMA_commonActions.refreshMain(false, function () {
PMA_ajaxShowMessage(data.message);
});

View File

@ -96,19 +96,6 @@ function getType(field) {
return 'text';
}
}
/**
** Converts a categorical array into numeric array
** @param array categorical values array
**/
function getCord(arr) {
var newCord = [];
var original = $.extend(true, [], arr);
arr = jQuery.unique(arr).sort();
$.each(original, function (index, value) {
newCord.push(jQuery.inArray(value, arr));
});
return [newCord, arr, original];
}
/**
** Scrolls the view to the display section

View File

@ -277,7 +277,7 @@ class DbSearch
// Gets the SQL statements
$newsearchsqls = $this->_getSearchSqls($each_table);
// Executes the "COUNT" statement
$res_cnt = $GLOBALS['dbi']->fetchValue($newsearchsqls['select_count']);
$res_cnt = intval($GLOBALS['dbi']->fetchValue($newsearchsqls['select_count']));
$num_search_result_total += $res_cnt;
// Gets the result row's HTML for a table
$html_output .= $this->_getResultsRow(

View File

@ -1742,7 +1742,7 @@ class DisplayResults
$options_html .= '<div class="formelement">';
$choices = array(
'K' => __('Relational key'),
'D' => __('Display column for relations')
'D' => __('Display column for relationships')
);
$options_html .= Util::getRadioFields(

View File

@ -423,6 +423,18 @@ class Sanitize
// do not check only $_REQUEST because it could have been overwritten
// and use type casting because the variables could have become
// strings
if (! isset($_REQUEST)) {
$_REQUEST = array();
}
if (! isset($_GET)) {
$_GET = array();
}
if (! isset($_POST)) {
$_POST = array();
}
if (! isset($_COOKIE)) {
$_COOKIE = array();
}
$keys = array_keys(
array_merge((array)$_REQUEST, (array)$_GET, (array)$_POST, (array)$_COOKIE)
);

View File

@ -1308,15 +1308,7 @@ class Table
*/
public function rename($new_name, $new_db = null)
{
$lowerCaseTableNames = Util::cacheGet(
'lower_case_table_names',
function () {
return $GLOBALS['dbi']->fetchValue(
"SELECT @@lower_case_table_names"
);
}
);
if ($lowerCaseTableNames) {
if ($GLOBALS['dbi']->getLowerCaseNames() === '1') {
$new_name = strtolower($new_name);
}

View File

@ -1603,6 +1603,15 @@ class Util
$date
);
/* Fill in AM/PM */
$hours = (int)date('H', $timestamp);
if ($hours >= 12) {
$am_pm = _pgettext('AM/PM indication in time', 'PM');
} else {
$am_pm = _pgettext('AM/PM indication in time', 'AM');
}
$date = preg_replace('@%[pP]@', $am_pm, $date);
$ret = strftime($date, $timestamp);
// Some OSes such as Win8.1 Traditional Chinese version did not produce UTF-8
// output here. See https://sourceforge.net/p/phpmyadmin/bugs/4207/

View File

@ -1259,7 +1259,7 @@ function PMA_handleColumnExtra(&$columns_list)
*/
function PMA_getHTMLforAddNewColumn($db)
{
$addNewColumn = '<div id="add_col_div"><a href="#">'
$addNewColumn = '<div id="add_col_div" class="topmargin"><a href="#">'
. '<span>+</span> ' . __('Add new column') . '</a>'
. '<form id="add_new" style="min-width:100%;display:none" '
. 'method="post" action="db_central_columns.php">'

View File

@ -262,9 +262,6 @@ $GLOBALS['url_params'] = array();
* @global array $goto_whitelist
*/
$goto_whitelist = array(
//'browse_foreigners.php',
//'changelog.php',
//'chk_rel.php',
'db_datadict.php',
'db_sql.php',
'db_events.php',
@ -278,9 +275,6 @@ $goto_whitelist = array(
'db_routines.php',
'export.php',
'import.php',
//'index.php',
//'navigation.php',
//'license.php',
'index.php',
'pdf_pages.php',
'pdf_schema.php',
@ -313,7 +307,6 @@ $goto_whitelist = array(
'tbl_row_action.php',
'tbl_select.php',
'tbl_zoom_select.php',
//'themes.php',
'transformation_overview.php',
'transformation_wrapper.php',
'user_password.php',

View File

@ -1058,6 +1058,13 @@ $cfg['NavigationTreeShowEvents'] = true;
*/
$cfg['ShowStats'] = true;
/**
* show PHP info link
*
* @global boolean $cfg['ShowPhpInfo']
*/
$cfg['ShowPhpInfo'] = false;
/**
* show MySQL server and web server information
*
@ -1393,7 +1400,7 @@ $cfg['RowActionType'] = 'both';
$cfg['Export'] = array();
/**
* codegen/csv/excel/htmlexcel/htmlword/latex/ods/odt/pdf/sql/texytext/xls/xml/yaml
* codegen/csv/excel/htmlexcel/htmlword/latex/ods/odt/pdf/sql/texytext/xml/yaml
*
* @global string $cfg['Export']['format']
*/
@ -1609,48 +1616,6 @@ $cfg['Export']['texytext_columns'] = false;
*/
$cfg['Export']['texytext_null'] = 'NULL';
/**
*
*
* @global boolean $cfg['Export']['xls_columns']
*/
$cfg['Export']['xls_columns'] = false;
/**
*
*
* @global string $cfg['Export']['xls_structure_or_data']
*/
$cfg['Export']['xls_structure_or_data'] = 'data';
/**
*
*
* @global string $cfg['Export']['xls_null']
*/
$cfg['Export']['xls_null'] = 'NULL';
/**
*
*
* @global boolean $cfg['Export']['xlsx_columns']
*/
$cfg['Export']['xlsx_columns'] = false;
/**
*
*
* @global string $cfg['Export']['xlsx_structure_or_data']
*/
$cfg['Export']['xlsx_structure_or_data'] = 'data';
/**
*
*
* @global string $cfg['Export']['xlsx_null']
*/
$cfg['Export']['xlsx_null'] = 'NULL';
/**
*
*
@ -2366,27 +2331,6 @@ $cfg['Import']['ods_recognize_percentages'] = true;
*/
$cfg['Import']['ods_recognize_currency'] = true;
/**
*
*
* @global string $cfg['Import']['xml_col_names']
*/
$cfg['Import']['xls_col_names'] = false;
/**
*
*
* @global string $cfg['Import']['xml_empty_rows']
*/
$cfg['Import']['xls_empty_rows'] = true;
/**
*
*
* @global string $cfg['Import']['xlsx_col_names']
*/
$cfg['Import']['xlsx_col_names'] = false;
/*******************************************************************************
* Schema export defaults
*/

View File

@ -174,7 +174,7 @@ $cfg_db['Export']['method'] = array(
);
$cfg_db['Export']['format'] = array(
'codegen', 'csv', 'excel', 'htmlexcel','htmlword', 'latex', 'ods',
'odt', 'pdf', 'sql', 'texytext', 'xls', 'xml', 'yaml'
'odt', 'pdf', 'sql', 'texytext', 'xml', 'yaml'
);
$cfg_db['Export']['compression'] = array('none', 'zip', 'gzip');
$cfg_db['Export']['charset'] = array_merge(
@ -203,8 +203,6 @@ $cfg_db['Export']['sql_insert_syntax'] = array(
'both' => __('both of the above'),
'none' => __('neither of the above')
);
$cfg_db['Export']['xls_null'] = 'short_string';
$cfg_db['Export']['xlsx_null'] = 'short_string';
$cfg_db['Export']['htmlword_structure_or_data'] = $cfg_db['Export']['_sod_select'];
$cfg_db['Export']['htmlword_null'] = 'short_string';
$cfg_db['Export']['ods_null'] = 'short_string';

View File

@ -164,7 +164,7 @@ $strConfigExport_latex_data_continued_caption_name = __('Continued table caption
$strConfigExport_latex_data_label_name = __('Label key');
$strConfigExport_latex_mime_name = __('MIME type');
$strConfigExport_latex_null_name = __('Replace NULL with');
$strConfigExport_latex_relation_name = __('Relations');
$strConfigExport_latex_relation_name = __('Relationships');
$strConfigExport_latex_structure_caption_name = __('Table caption');
$strConfigExport_latex_structure_continued_caption_name
= __('Continued table caption');
@ -177,7 +177,7 @@ $strConfigExport_odt_columns_name = __('Put columns names in the first row');
$strConfigExport_odt_comments_name = __('Comments');
$strConfigExport_odt_mime_name = __('MIME type');
$strConfigExport_odt_null_name = __('Replace NULL with');
$strConfigExport_odt_relation_name = __('Relations');
$strConfigExport_odt_relation_name = __('Relationships');
$strConfigExport_odt_structure_or_data_name = __('Dump table');
$strConfigExport_onserver_name = __('Save on server');
$strConfigExport_onserver_overwrite_name = __('Overwrite existing file(s)');
@ -218,7 +218,7 @@ $strConfigExport_sql_max_query_size_name = __('Maximal length of created query')
$strConfigExport_sql_mime_name = __('MIME type');
$strConfigExport_sql_procedure_function_name
= sprintf(__('Add %s'), 'CREATE PROCEDURE / FUNCTION / EVENT');
$strConfigExport_sql_relation_name = __('Relations');
$strConfigExport_sql_relation_name = __('Relationships');
$strConfigExport_sql_structure_or_data_name = __('Dump table');
$strConfigExport_sql_type_name = __('Export type');
$strConfigExport_sql_use_transaction_name = __('Enclose export in a transaction');
@ -226,10 +226,6 @@ $strConfigExport_sql_utc_time_name = __('Export time in UTC');
$strConfigExport_texytext_columns_name = __('Put columns names in the first row');
$strConfigExport_texytext_null_name = __('Replace NULL with');
$strConfigExport_texytext_structure_or_data_name = __('Dump table');
$strConfigExport_xls_columns_name = __('Put columns names in the first row');
$strConfigExport_xls_null_name = __('Replace NULL with');
$strConfigExport_xlsx_columns_name = __('Put columns names in the first row');
$strConfigExport_xlsx_null_name = __('Replace NULL with');
$strConfigForeignKeyDropdownOrder_desc = __(
'Sort order for items in a foreign-key dropdown box; [kbd]content[/kbd] is '
. 'the referenced data, [kbd]id[/kbd] is the key value.'
@ -402,8 +398,6 @@ $strConfigImport_sql_compatibility_name = __('SQL compatibility mode');
$strConfigImport_sql_no_auto_value_on_zero_name
= __('Do not use AUTO_INCREMENT for zero values');
$strConfigImport_sql_read_as_multibytes_name = __('Read as multibytes');
$strConfigImport_xls_col_names_name = __('Column names in first row');
$strConfigImport_xlsx_col_names_name = __('Column names in first row');
$strConfigInitialSlidersState_name = __('Initial state for sliders');
$strConfigInsertRows_desc = __('How many rows can be inserted at one time.');
$strConfigInsertRows_name = __('Number of inserted rows');
@ -869,6 +863,11 @@ $strConfigShowFunctionFields_desc = __(
$strConfigShowFunctionFields_name = __('Show function fields');
$strConfigShowHint_desc = __('Whether to show hint or not.');
$strConfigShowHint_name = __('Show hint');
$strConfigShowPhpInfo_desc = __(
'Shows link to [a@https://php.net/manual/function.phpinfo.php]phpinfo()[/a] ' .
'output.'
);
$strConfigShowPhpInfo_name = __('Show phpinfo() link');
$strConfigShowServerInfo_name = __('Show detailed MySQL server information');
$strConfigShowSQL_desc = __(
'Defines whether SQL queries generated by phpMyAdmin should be displayed.'

View File

@ -203,6 +203,7 @@ $forms['Main_panel']['Startup'] = array(
'ShowCreateDb',
'ShowStats',
'ShowServerInfo',
'ShowPhpInfo',
'ShowChgPassword');
$forms['Main_panel']['DbStructure'] = array(
'ShowDbStructureCharset',

View File

@ -1036,11 +1036,9 @@ class DatabaseStructureController extends DatabaseController
if (isset($current_table['Data_free'])
&& $current_table['Data_free'] > 0
) {
// here, the value 4 as the second parameter
// would transform 6.1MiB into 6,224.6KiB
list($formatted_overhead, $overhead_unit)
= Util::formatByteDown(
$current_table['Data_free'], 4,
$current_table['Data_free'], 3,
(($current_table['Data_free'] > 0) ? 1 : 0)
);
$overhead_size += $current_table['Data_free'];

View File

@ -279,7 +279,7 @@ class TableRelationController extends TableController
) {
$this->response->addHTML(
Util::getMessage(
__('Internal relations were successfully updated.'),
__('Internal relationships were successfully updated.'),
'', 'success'
)
);

View File

@ -57,55 +57,6 @@ if (! defined('MYSQLI_TYPE_JSON')) {
*/
class DBIMysqli implements DBIExtension
{
/**
* Helper function for connecting to the database server
*
* @param mysqli $link connection link
* @param string $host mysql hostname
* @param string $user mysql user name
* @param string $password mysql user password
* @param int $server_port server port
* @param string $server_socket server socket
* @param int $client_flags client flags of connection
* @param bool $persistent whether to use persistent connection
*
* @return bool
*/
private function _realConnect(
$link, $host, $user, $password, $server_port,
$server_socket, $client_flags = null, $persistent = false
) {
global $cfg;
// mysqli persistent connections
if ($cfg['PersistentConnections'] || $persistent) {
$host = 'p:' . $host;
}
if ($client_flags === null) {
return mysqli_real_connect(
$link,
$host,
$user,
$password,
'',
$server_port,
$server_socket
);
} else {
return mysqli_real_connect(
$link,
$host,
$user,
$password,
'',
$server_port,
$server_socket,
$client_flags
);
}
}
/**
* connects to the database server
*
@ -174,13 +125,21 @@ class DBIMysqli implements DBIExtension
}
}
$return_value = $this->_realConnect(
if ($GLOBALS['cfg']['PersistentConnections']) {
$host = 'p:' . $server['host'];
} else {
$host = $server['host'];
}
$return_value = mysqli_real_connect(
$link,
$server['host'],
$host,
$user,
$password,
'',
$server['port'],
$server['socket']
$server['socket'],
$client_flags
);
if ($return_value === false || is_null($return_value)) {

View File

@ -585,9 +585,6 @@ function PMA_getValueColumn($column, $backup_field, $column_name_appendix,
} elseif ($GLOBALS['cfg']['LongtextDoubleTextarea']
&& mb_strstr($column['pma_type'], 'longtext')
) {
$html_output = '&nbsp;</td>';
$html_output .= '</tr>';
$html_output .= '<tr>' . '<td colspan="5" class="right">';
$html_output .= PMA_getTextarea(
$column, $backup_field, $column_name_appendix, $onChangeClause,
$tabindex, $tabindex_for_value, $idindex, $text_dir,
@ -2658,14 +2655,8 @@ function PMA_getHtmlForIgnoreOption($row_id, $checked = true)
*/
function PMA_getHtmlForFunctionOption($column, $column_name_appendix)
{
$longDoubleTextArea = $GLOBALS['cfg']['LongtextDoubleTextarea'];
return '<tr class="noclick">'
. '<td '
. ($longDoubleTextArea
&& mb_strstr($column['True_Type'], 'longtext')
? 'rowspan="2"'
: ''
)
. 'class="center">'
. $column['Field_title']
. '<input type="hidden" name="fields_name' . $column_name_appendix
@ -2939,9 +2930,6 @@ function PMA_getHtmlForInsertEditFormColumn($table_columns, $column_number,
$no_support_types, $gis_data_types, $extracted_columnspec, $readOnly
);
}
$html_output .= '</td>'
. '</tr>';
return $html_output;
}

View File

@ -17,6 +17,8 @@ use PMA\libraries\Response;
use PMA\libraries\Util;
use PMA\libraries\URL;
require_once 'libraries/check_user_privileges.lib.php';
/**
* Displays a collapsible of database objects in the navigation frame
*

View File

@ -354,10 +354,7 @@ function PMA_runProcedureAndFunctionDefinitions($db)
function PMA_createDbBeforeCopy()
{
// lower_case_table_names=1 `DB` becomes `db`
$lowerCaseTableNames = $GLOBALS['dbi']->fetchValue(
'SELECT @@lower_case_table_names'
);
if ($lowerCaseTableNames === '1') {
if ($GLOBALS['dbi']->getLowerCaseNames() === '1') {
$_REQUEST['newname'] = mb_strtolower(
$_REQUEST['newname']
);

View File

@ -1875,7 +1875,7 @@ class ExportSql extends ExportPlugin
$schema_create .= $this->_possibleCRLF()
. $this->_exportComment()
. $this->_exportComment(
__('RELATIONS FOR TABLE') . ' '
__('RELATIONSHIPS FOR TABLE') . ' '
. Util::backquote($table_alias, $sql_backquotes)
. ':'
);

View File

@ -548,7 +548,7 @@ function PMA_addNewRelation($db, $T1, $F1, $T2, $F2, $on_delete, $on_update)
if ($foreigner
&& isset($foreigner['constraint'])
) {
return array(false, __('Error: relation already exists.'));
return array(false, __('Error: relationship already exists.'));
}
// note: in InnoDB, the index does not requires to be on a PRIMARY
// or UNIQUE key
@ -594,13 +594,13 @@ function PMA_addNewRelation($db, $T1, $F1, $T2, $F2, $on_delete, $on_update)
}
$upd_query .= ';';
if ($GLOBALS['dbi']->tryQuery($upd_query)) {
return array(true, __('FOREIGN KEY relation has been added.'));
return array(true, __('FOREIGN KEY relationship has been added.'));
}
$error = $GLOBALS['dbi']->getError();
return array(
false,
__('Error: FOREIGN KEY relation could not be added!')
__('Error: FOREIGN KEY relationship could not be added!')
. "<br/>" . $error
);
}
@ -632,13 +632,13 @@ function PMA_addNewRelation($db, $T1, $F1, $T2, $F2, $on_delete, $on_update)
if (PMA_queryAsControlUser($q, false, PMA\libraries\DatabaseInterface::QUERY_STORE)
) {
return array(true, __('Internal relation has been added.'));
return array(true, __('Internal relationship has been added.'));
}
$error = $GLOBALS['dbi']->getError($GLOBALS['controllink']);
return array(
false,
__('Error: Internal relation could not be added!')
__('Error: Internal relationship could not be added!')
. "<br/>" . $error
);
}
@ -676,13 +676,13 @@ function PMA_removeRelation($T1, $F1, $T2, $F2)
. '.' . PMA\libraries\Util::backquote($T2) . ' DROP FOREIGN KEY '
. PMA\libraries\Util::backquote($foreigner['constraint']) . ';';
if ($GLOBALS['dbi']->query($upd_query)) {
return array(true, __('FOREIGN KEY relation has been removed.'));
return array(true, __('FOREIGN KEY relationship has been removed.'));
}
$error = $GLOBALS['dbi']->getError();
return array(
false,
__('Error: FOREIGN KEY relation could not be removed!')
__('Error: FOREIGN KEY relationship could not be removed!')
. "<br/>" . $error
);
}
@ -709,11 +709,11 @@ function PMA_removeRelation($T1, $F1, $T2, $F2)
$error = $GLOBALS['dbi']->getError($GLOBALS['controllink']);
return array(
false,
__('Error: Internal relation could not be removed!') . "<br/>" . $error
__('Error: Internal relationship could not be removed!') . "<br/>" . $error
);
}
return array(true, __('Internal relation has been removed.'));
return array(true, __('Internal relationship has been removed.'));
}
/**

View File

@ -113,7 +113,7 @@ function PMA_getHtmlForServerProcesslist()
$sql_query = 'SELECT * FROM `INFORMATION_SCHEMA`.`PROCESSLIST` ';
}
if (! empty($_REQUEST['showExecuting'])) {
$sql_query .= ' WHERE state = "executing" ';
$sql_query .= ' WHERE state != "" ';
}
if (!empty($_REQUEST['order_by_field']) && !empty($_REQUEST['sort_order'])) {
$sql_query .= ' ORDER BY '

View File

@ -134,14 +134,12 @@ function PMA_getHtmlForServerStatusQueriesDetails($ServerStatusData)
$retval .= '</tbody>';
$retval .= '</table>';
$retval .= '<div id="serverstatusquerieschart"></div>';
$retval .= '<div id="serverstatusquerieschart_data" style="display:none;">';
$retval .= '<div id="serverstatusquerieschart" data-chart="';
if ($other_sum > 0) {
$chart_json[__('Other')] = $other_sum;
}
$retval .= htmlspecialchars(json_encode($chart_json));
$retval .= '</div>';
$retval .= htmlspecialchars(json_encode($chart_json), ENT_QUOTES);
$retval .= '"></div>';
return $retval;
}

22
phpinfo.php Normal file
View File

@ -0,0 +1,22 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* phpinfo() wrapper to allow displaying only when configured to do so.
*
* @package PhpMyAdmin
*/
/**
* Gets core libraries and defines some variables
*/
require_once 'libraries/common.inc.php';
$response = PMA\libraries\Response::getInstance();
$response->disable();
$response->getHeader()->sendHttpHeaders();
/**
* Displays PHP information
*/
if ($GLOBALS['cfg']['ShowPhpInfo']) {
phpinfo(INFO_GENERAL | INFO_CONFIGURATION | INFO_MODULES);
}

View File

@ -4,16 +4,16 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 4.7.0-dev\n"
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
"POT-Creation-Date: 2016-12-13 10:40+0100\n"
"PO-Revision-Date: 2016-11-18 10:30+0000\n"
"Last-Translator: Michal Čihař <michal@cihar.com>\n"
"Language-Team: Azerbaijani <https://hosted.weblate.org/projects/phpmyadmin/"
"master/az/>\n"
"PO-Revision-Date: 2017-01-17 17:34+0000\n"
"Last-Translator: Sevdimali İsa <sevdimaliisayev@mail.ru>\n"
"Language-Team: Azerbaijani "
"<https://hosted.weblate.org/projects/phpmyadmin/master/az/>\n"
"Language: az\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.10-dev\n"
"X-Generator: Weblate 2.11-dev\n"
#: changelog.php:39 license.php:34
#, fuzzy, php-format
@ -5920,7 +5920,7 @@ msgstr "Verilənləri daxil edərkən istifadə olunacaq sintaksis"
#: libraries/config/messages.inc.php:217
#: libraries/plugins/export/ExportSql.php:437
msgid "Maximal length of created query"
msgstr ""
msgstr "Yaradılan sorğunun maksimal uzunluğu"
#: libraries/config/messages.inc.php:223
msgid "Export type"
@ -5929,7 +5929,7 @@ msgstr "Eksport tipi"
#: libraries/config/messages.inc.php:224
#: libraries/plugins/export/ExportSql.php:137
msgid "Enclose export in a transaction"
msgstr ""
msgstr "Tranzaksiya içində eksportu daxil et"
#: libraries/config/messages.inc.php:225
msgid "Export time in UTC"
@ -5947,7 +5947,7 @@ msgstr ""
#: libraries/config/messages.inc.php:239
msgid "A dropdown will be used if fewer items are present."
msgstr ""
msgstr "Az olarsa açılan menu istifadə olunacaq."
#: libraries/config/messages.inc.php:240
msgid "Foreign key limit"
@ -5966,10 +5966,8 @@ msgid "Browse mode"
msgstr ""
#: libraries/config/messages.inc.php:246
#, fuzzy
#| msgid "Automatic recovery mode"
msgid "Customize browse mode."
msgstr "Avtomatik qurtarma rejimi"
msgstr "Browse rejimini özəlləşdir."
#: libraries/config/messages.inc.php:248 libraries/config/messages.inc.php:250
#: libraries/config/messages.inc.php:268 libraries/config/messages.inc.php:281
@ -5986,7 +5984,7 @@ msgstr "CSV verilenleri"
#: libraries/config/messages.inc.php:251
msgid "Developer"
msgstr ""
msgstr "Developer"
#: libraries/config/messages.inc.php:252
msgid "Settings for phpMyAdmin developers."

View File

@ -4,16 +4,16 @@ msgstr ""
"Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n"
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
"POT-Creation-Date: 2016-12-13 10:40+0100\n"
"PO-Revision-Date: 2016-12-21 16:03+0000\n"
"Last-Translator: Michal Čihař <michal@cihar.com>\n"
"Language-Team: German <https://hosted.weblate.org/projects/phpmyadmin/master/"
"de/>\n"
"PO-Revision-Date: 2017-01-20 22:55+0000\n"
"Last-Translator: Daniel Heße <hesse.daniel93@gmail.com>\n"
"Language-Team: German "
"<https://hosted.weblate.org/projects/phpmyadmin/master/de/>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.10\n"
"X-Generator: Weblate 2.11-dev\n"
#: changelog.php:39 license.php:34
#, php-format
@ -11944,6 +11944,9 @@ msgid ""
"No routine with name %1$s found in database %2$s. You might be lacking the "
"necessary privileges to view/export this routine."
msgstr ""
"Keine Routine mit dem Namen %1$s in der Datenbank %2$s gefunden. "
"Möglicherweise fehlen Ihnen die nötigen Rechte un diese Routine anzusehen/zu "
"exportieren."
#: libraries/rte/rte_words.lib.php:42
#, php-format
@ -11968,17 +11971,14 @@ msgid "trigger"
msgstr "Trigger"
#: libraries/rte/rte_words.lib.php:54
#, fuzzy
#| msgid "You do not have the necessary privileges to create a trigger"
msgid "You do not have the necessary privileges to create a trigger."
msgstr ""
"Sie haben nicht die notwendigen Rechte um einen neuen Trigger zu erstellen"
"Sie haben nicht die notwendigen Rechte um einen neuen Trigger zu erstellen."
#: libraries/rte/rte_words.lib.php:56
#, fuzzy, php-format
#| msgid "No trigger with name %1$s found in database %2$s"
#, php-format
msgid "No trigger with name %1$s found in database %2$s."
msgstr "Keine Trigger namens %1$s in der Datenbank %2$s gefunden"
msgstr "Keine Trigger namens %1$s in der Datenbank %2$s gefunden."
#: libraries/rte/rte_words.lib.php:57
msgid "There are no triggers to display."
@ -11998,17 +11998,15 @@ msgid "event"
msgstr "Ereignis"
#: libraries/rte/rte_words.lib.php:68
#, fuzzy
#| msgid "You do not have the necessary privileges to create an event"
msgid "You do not have the necessary privileges to create an event."
msgstr ""
"Sie haben nicht die erforderlichen Rechte, um ein neues Ereignis zu erstellen"
"Sie haben nicht die erforderlichen Rechte, um ein neues Ereignis zu "
"erstellen."
#: libraries/rte/rte_words.lib.php:70
#, fuzzy, php-format
#| msgid "No event with name %1$s found in database %2$s"
#, php-format
msgid "No event with name %1$s found in database %2$s."
msgstr "Es wurde kein Ereignis mit dem Namen %1$s in Datenbank %2$s gefunden"
msgstr "Es wurde kein Ereignis mit dem Namen %1$s in Datenbank %2$s gefunden."
#: libraries/rte/rte_words.lib.php:71
msgid "There are no events to display."
@ -15820,14 +15818,12 @@ msgstr "Eine öffnende Klammer wurde erwartet."
#: vendor/phpmyadmin/sql-parser/src/Statements/InsertStatement.php:227
#: vendor/phpmyadmin/sql-parser/src/Statements/ReplaceStatement.php:165
#: vendor/phpmyadmin/sql-parser/src/Statements/ReplaceStatement.php:193
#, fuzzy
#| msgid "Unexpected token."
msgid "Unexpected keyword."
msgstr "Unerwartetes Zeichen."
msgstr "Unerwartetes Schlüsselwort."
#: vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php:202
msgid "Unexpected end of CASE expression"
msgstr ""
msgstr "Unerwartetes Ende eines CASE Ausdrucks"
#: vendor/phpmyadmin/sql-parser/src/Components/CreateDefinition.php:227
msgid ""
@ -15884,7 +15880,7 @@ msgstr "Diese Option widerspricht „%1$s“."
#, fuzzy, php-format
#| msgid "Ending quote %1$s was expected."
msgid "Value/Expression for the option %1$s was expected"
msgstr "Schließendes Anführungszeichen %1$s wurde erzeugt."
msgstr "Wert/Ausdruck für die Option %1$s erwartet"
#: vendor/phpmyadmin/sql-parser/src/Components/RenameOperation.php:101
msgid "The old name of the table was expected."

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 4.7.0-dev\n"
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
"POT-Creation-Date: 2016-12-13 10:40+0100\n"
"PO-Revision-Date: 2016-12-21 21:16+0000\n"
"PO-Revision-Date: 2017-01-17 21:58+0000\n"
"Last-Translator: Giovanni Sora <g.sora@tiscali.it>\n"
"Language-Team: Interlingua "
"<https://hosted.weblate.org/projects/phpmyadmin/master/ia/>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2.10\n"
"X-Generator: Weblate 2.11-dev\n"
#: changelog.php:39 license.php:34
#, php-format
@ -2191,12 +2191,16 @@ msgid ""
"MySQL accepts additional values not selectable by the slider; key in those "
"values directly if desired"
msgstr ""
"MySQL accepta valores additional non selectionabile per le slider; si tu "
"vole pote insertar directemente celle valores"
#: js/messages.php:534
msgid ""
"MySQL accepts additional values not selectable by the datepicker; key in "
"those values directly if desired"
msgstr ""
"MySQL accepta valores additional non selectionabile per le selector de datas:"
" si tu vole pote insertar celle valores directemente"
#: js/messages.php:540
msgid ""
@ -10329,6 +10333,8 @@ msgid ""
"Include a timestamp of when databases were created, last updated, and last "
"checked"
msgstr ""
"Include un timestamp (marca de tempore) de quando le base de datos esseva "
"create, le ultime actualisation e le ultime controlo"
#: libraries/plugins/export/ExportSql.php:172
msgid "Export metadata"
@ -10887,7 +10893,7 @@ msgstr "Validation falleva per le catena de ingresso %s."
#: libraries/plugins/transformations/abs/SQLTransformationsPlugin.php:29
msgid "Formats text as SQL query with syntax highlighting."
msgstr ""
msgstr "Formata texto como query de SQL con evidentia de syntaxe."
#: libraries/plugins/transformations/abs/SubstringTransformationsPlugin.php:28
msgid ""
@ -10903,6 +10909,8 @@ msgid ""
"File upload functionality for TEXT columns. It does not have a textarea for "
"input."
msgstr ""
"Functionalitate de incargamento de file per columnas de TEXT. Il non ha un "
"textarea per le ingresso."
#: libraries/plugins/transformations/abs/TextImageLinkTransformationsPlugin.php:33
msgid ""
@ -10920,19 +10928,19 @@ msgstr ""
#: libraries/plugins/transformations/input/Text_Plain_Iptobinary.php:29
msgid "Converts an Internet network address in (IPv4/IPv6) format to binary"
msgstr ""
msgstr "Converte un adresse de rete Internet ab formato (IPv4/IPv6) a binari"
#: libraries/plugins/transformations/input/Text_Plain_JsonEditor.php:29
msgid "Syntax highlighted CodeMirror editor for JSON."
msgstr ""
msgstr "Editor CodeMirror per jSON con evidentia de syntaxe."
#: libraries/plugins/transformations/input/Text_Plain_SqlEditor.php:29
msgid "Syntax highlighted CodeMirror editor for SQL."
msgstr ""
msgstr "Editor CodeMirror per SQL con evidentia de syntaxe."
#: libraries/plugins/transformations/input/Text_Plain_XmlEditor.php:29
msgid "Syntax highlighted CodeMirror editor for XML (and HTML)."
msgstr ""
msgstr "Editor CodeMirror per XML (e HTML) con evidentia de syntaxe."
#: libraries/plugins/transformations/output/Text_Plain_Binarytoip.php:29
msgid ""
@ -10942,11 +10950,11 @@ msgstr ""
#: libraries/plugins/transformations/output/Text_Plain_Json.php:47
msgid "Formats text as JSON with syntax highlighting."
msgstr ""
msgstr "Formata texto como JSON con evidentia de syntaxe."
#: libraries/plugins/transformations/output/Text_Plain_Xml.php:47
msgid "Formats text as XML with syntax highlighting."
msgstr ""
msgstr "Formata texto como XML con evidentia de syntaxe."
#: libraries/pmd_common.php:551
msgid "Error: relation already exists."
@ -10963,7 +10971,7 @@ msgstr ""
#: libraries/pmd_common.php:608
msgid "Error: Missing index on column(s)."
msgstr ""
msgstr "Error: Il es mancante le indice sur le campo(s)."
#: libraries/pmd_common.php:613
msgid "Error: Relational features are disabled!"
@ -11013,7 +11021,7 @@ msgstr "Configuration de pmadb…"
#: libraries/relation.lib.php:106 libraries/relation.lib.php:142
msgid "General relation features"
msgstr ""
msgstr "Characteristicas general de relation"
#: libraries/relation.lib.php:153
msgid "Display Features"

View File

@ -4,8 +4,8 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 4.7.0-dev\n"
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
"POT-Creation-Date: 2016-12-13 10:40+0100\n"
"PO-Revision-Date: 2017-01-16 01:58+0000\n"
"Last-Translator: Manuela Silva <manuela.silva@sky.com>\n"
"PO-Revision-Date: 2017-01-19 21:38+0000\n"
"Last-Translator: Flavio Coelho <flavio.coelho.mail@gmail.com>\n"
"Language-Team: Portuguese "
"<https://hosted.weblate.org/projects/phpmyadmin/master/pt/>\n"
"Language: pt\n"
@ -746,24 +746,17 @@ msgstr ""
"verificação de versão estão desativadas."
#: index.php:474
#, fuzzy
#| msgid ""
#| "Your PHP parameter [a@https://secure.php.net/manual/en/session."
#| "configuration.php#ini.session.gc-maxlifetime@_blank]session."
#| "gc_maxlifetime[/a] is lower than cookie validity configured in "
#| "phpMyAdmin, because of this, your login will expire sooner than "
#| "configured in phpMyAdmin."
msgid ""
"Your PHP parameter [a@https://secure.php.net/manual/en/session.configuration."
"php#ini.session.gc-maxlifetime@_blank]session.gc_maxlifetime[/a] is lower "
"than cookie validity configured in phpMyAdmin, because of this, your login "
"might expire sooner than configured in phpMyAdmin."
msgstr ""
"O seu parâmetro PHP [a@https://secure.php.net/manual/en/session."
"configuration.php#ini.session.gc-maxlifetime@_blank]session.gc_maxlifetime[/"
"a] é menor que o valor válido para o cookie configurado no phpMyAdmin, e por "
"isso, a sua autenticação poderá expirar mais cedo que o configurado no "
"phpMyAdmin."
"O seu parâmetro PHP "
"[a@https://secure.php.net/manual/en/session.configuration.php#ini.session.gc-"
"maxlifetime@_blank]session.gc_maxlifetime[/a] é menor que o valor válido "
"para o cookie configurado no phpMyAdmin, e por isso, a sua autenticação "
"poderá expirar mais cedo que o configurado no phpMyAdmin."
#: index.php:493
msgid ""
@ -1204,8 +1197,6 @@ msgid "Used memory"
msgstr "Memória utilizada"
#: js/messages.php:191
#, fuzzy
#| msgid "Total Swap"
msgid "Total swap"
msgstr "Swap total"
@ -1726,8 +1717,6 @@ msgid "Processing request"
msgstr "Processando Pedido"
#: js/messages.php:360
#, fuzzy
#| msgid "Request Aborted!!"
msgid "Request failed!!"
msgstr "Pedido falhou!!"

View File

@ -134,13 +134,17 @@ if (isset($_REQUEST['submitoptions'])) {
$new_tbl_storage_engine = '';
}
$row_format = (isset($create_options['row_format']))
? $create_options['row_format']
: $pma_table->getStatusInfo('ROW_FORMAT');
$table_alters = PMA_getTableAltersArray(
$pma_table,
$create_options['pack_keys'],
(empty($create_options['checksum']) ? '0' : '1'),
((isset($create_options['page_checksum'])) ? $create_options['page_checksum'] : ''),
(empty($create_options['delay_key_write']) ? '0' : '1'),
$create_options['row_format'],
$row_format,
$new_tbl_storage_engine,
((isset($create_options['transactional']) && $create_options['transactional'] == '0') ? '0' : '1'),
$tbl_collation

View File

@ -18,7 +18,7 @@
<tr>
<td colspan="3" class="center nowrap">
<strong>
<?= __('Delete relation'); ?>
<?= __('Delete relationship'); ?>
</strong>
</td>
</tr>

View File

@ -19,7 +19,7 @@
<tr>
<td colspan="2" class="center nowrap">
<strong>
<?= __('Create relation'); ?>
<?= __('Create relationship'); ?>
</strong>
</td>
</tr>

View File

@ -31,7 +31,7 @@
</tr>
<tr>
<td width="58" class="nowrap">
<?= __('Relation operator'); ?>
<?= __('Relationship operator'); ?>
</td>
<td width="102">
<select name="rel_opt" id="rel_opt">
@ -197,7 +197,7 @@
</tr>
<tr>
<td width="58" class="nowrap">
<?= __('Relation operator'); ?>
<?= __('Relationship operator'); ?>
</td>
<td width="102">
<select name="h_rel_opt" id="h_rel_opt">

View File

@ -81,10 +81,10 @@ function getImg($path)
</span>
</a>
<a href="#" class="M_butt" id="rel_button">
<img title="<?= __('Create relation'); ?>"
<img title="<?= __('Create relationship'); ?>"
src="<?= getImg('pmd/relation.png'); ?>" />
<span class="hide hidable">
<?= __('Create relation'); ?>
<?= __('Create relationship'); ?>
</span>
</a>
<a href="#" class="M_butt" id="display_field_button">
@ -142,10 +142,10 @@ function getImg($path)
</span>
</a>
<a href="#" id="relLineInvert" class="<?= $params_array['relation_lines']; ?>" >
<img title="<?= __('Toggle relation lines'); ?>"
<img title="<?= __('Toggle relationship lines'); ?>"
src="<?= getImg('pmd/toggle_lines.png'); ?>" />
<span class="hide hidable">
<?= __('Toggle relation lines'); ?>
<?= __('Toggle relationship lines'); ?>
</span>
</a>
<?php if (! $visualBuilder) : ?>

View File

@ -11,7 +11,7 @@
<a href="#" class="M_butt" target="_self" >
<img alt="v"
id="key_HS"
title="<?= __('Hide/Show Tables with no relation'); ?>"
title="<?= __('Hide/Show Tables with no relationship'); ?>"
src="<?= $_SESSION['PMA_Theme']->getImgPath('pmd/downarrow2.png'); ?>"
data-down="<?= $_SESSION['PMA_Theme']->getImgPath('pmd/downarrow2.png'); ?>"
data-right="<?= $_SESSION['PMA_Theme']->getImgPath('pmd/rightarrow2.png'); ?>" />

View File

@ -73,13 +73,13 @@
<?php if ($cfgRelation['relwork']): ?>
<?php if (PMA\libraries\Util::isForeignKeySupported($tbl_storage_engine)): ?>
<br/>
<?= PMA\libraries\Util::getDivForSliderEffect('ir_div', __('Internal relations')) ?>
<?= PMA\libraries\Util::getDivForSliderEffect('ir_div', __('Internal relationships')) ?>
<?php endif; ?>
<?php $save_row = array_values($columns);
$saved_row_cnt = count($save_row);?>
<fieldset>
<legend><?= __('Internal relations') , PMA\libraries\Util::showDocu('config', 'cfg_Servers_relation'); ?></legend>
<legend><?= __('Internal relationships') , PMA\libraries\Util::showDocu('config', 'cfg_Servers_relation'); ?></legend>
<table id="internal_relations" class="relationalTable">
<tr>
<th><?= __('Column'); ?></th>

View File

@ -27,13 +27,17 @@ class PMATestCase extends PHPUnit_Framework_TestCase
*
* @return void
*/
public function mockResponse($param)
public function mockResponse()
{
$this->restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('header', 'headersSent', 'disable', 'isAjax'))
->setMethods(array(
'header', 'headersSent', 'disable', 'isAjax',
'setRequestStatus', 'addJSON', 'addHTML',
'getFooter', 'getHeader',
))
->getMock();
$mockResponse->expects($this->any())
@ -43,20 +47,27 @@ class PMATestCase extends PHPUnit_Framework_TestCase
$param = func_get_args();
if (is_array($param[0])) {
$header_method = $mockResponse->expects($this->exactly(count($param)))
->method('header');
if (count($param) > 0) {
if (is_array($param[0])) {
if (is_array($param[0][0]) && count($param) == 1) {
$param = $param[0];
}
$header_method = $mockResponse->expects($this->exactly(count($param)))
->method('header');
call_user_func_array(array($header_method, 'withConsecutive'), $param);
} else {
$mockResponse->expects($this->once())
->method('header')
->with($param[0]);
call_user_func_array(array($header_method, 'withConsecutive'), $param);
} else {
$mockResponse->expects($this->once())
->method('header')
->with($param[0]);
}
}
$this->attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$this->attrInstance->setAccessible(true);
$this->attrInstance->setValue($mockResponse);
return $mockResponse;
}
/**

View File

@ -4,7 +4,7 @@ ant locales
export PHPUNIT_ARGS="--exclude-group selenium"
if [ $TRAVIS_PHP_VERSION = "hhvm" ] ; then
if [ "$TRAVIS_PHP_VERSION" = "hhvm" ] ; then
ant phpunit-hhvm
else
ant phpunit

View File

@ -746,7 +746,6 @@ class TableTest extends PMATestCase
{
$table = 'PMA_BookMark';
$db = 'PMA';
Util::cacheSet('lower_case_table_names', false);
$table = new Table($table, $db);

View File

@ -64,12 +64,7 @@ class AuthenticationCookieTest extends PMATestCase
*/
public function testAuthErrorAJAX()
{
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('isAjax', 'setRequestStatus', 'addJSON'))
->getMock();
$mockResponse = $this->mockResponse();
$mockResponse->expects($this->once())
->method('isAjax')
@ -87,15 +82,10 @@ class AuthenticationCookieTest extends PMATestCase
'1'
);
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$GLOBALS['conn_error'] = true;
$this->assertTrue(
$this->object->auth()
);
$attrInstance->setValue($restoreInstance);
}
/**
@ -106,11 +96,7 @@ class AuthenticationCookieTest extends PMATestCase
*/
public function testAuthError()
{
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('isAjax', 'getFooter', 'getHeader'))
->getMock();
$mockResponse = $this->mockResponse();
$mockResponse->expects($this->once())
->method('isAjax')
@ -175,10 +161,6 @@ class AuthenticationCookieTest extends PMATestCase
->with()
->will($this->returnValue($mockHeader));
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$GLOBALS['pmaThemeImage'] = 'test';
$GLOBALS['conn_error'] = true;
$GLOBALS['cfg']['Lang'] = 'en';
@ -273,7 +255,6 @@ class AuthenticationCookieTest extends PMATestCase
);
@unlink('testlogo_right.png');
$attrInstance->setValue($restoreInstance);
}
/**
@ -284,11 +265,7 @@ class AuthenticationCookieTest extends PMATestCase
*/
public function testAuthCaptcha()
{
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('isAjax', 'getFooter', 'getHeader'))
->getMock();
$mockResponse = $this->mockResponse();
$mockResponse->expects($this->once())
->method('isAjax')
@ -308,10 +285,6 @@ class AuthenticationCookieTest extends PMATestCase
$_REQUEST['old_usr'] = '';
$GLOBALS['cfg']['LoginCookieRecall'] = false;
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$GLOBALS['pmaThemeImage'] = 'test';
$GLOBALS['cfg']['Lang'] = '';
$GLOBALS['cfg']['AllowArbitraryServer'] = false;
@ -333,11 +306,15 @@ class AuthenticationCookieTest extends PMATestCase
$result
);
$this->assertContains(
'<select name="lang" class="autosubmit" lang="en" dir="ltr" ' .
'id="sel-lang">',
$result
);
// Check for language selection if locales are there
$loc = LOCALE_PATH . '/cs/LC_MESSAGES/phpmyadmin.mo';
if (is_readable($loc)) {
$this->assertContains(
'<select name="lang" class="autosubmit" lang="en" dir="ltr" ' .
'id="sel-lang">',
$result
);
}
$this->assertContains(
'<form method="post" action="index.php" name="login_form" ' .
@ -360,8 +337,6 @@ class AuthenticationCookieTest extends PMATestCase
'<div class="g-recaptcha" data-sitekey="testpubkey">',
$result
);
$attrInstance->setValue($restoreInstance);
}
/**

View File

@ -47,13 +47,12 @@ class AuthenticationHttpTest extends PMATestCase
*/
public function tearDown()
{
parent::tearDown();
unset($this->object);
}
public function doMockResponse($set_minimal, $body_id, $set_title)
{
$restoreInstance = PMA\libraries\Response::getInstance();
// mock footer
$mockFooter = $this->getMockBuilder('PMA\libraries\Footer')
->disableOriginalConstructor()
@ -86,10 +85,8 @@ class AuthenticationHttpTest extends PMATestCase
->with();
// set mocked headers and footers
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('getHeader', 'getFooter', 'addHTML', 'header', 'headersSent'))
->getMock();
$headers = array_slice(func_get_args(), 3);
$mockResponse = $this->mockResponse($headers);
$mockResponse->expects($this->exactly($set_title))
->method('getFooter')
@ -101,36 +98,16 @@ class AuthenticationHttpTest extends PMATestCase
->with()
->will($this->returnValue($mockHeader));
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$mockResponse->expects($this->exactly($set_title * 7))
->method('addHTML')
->with();
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$headers = array_slice(func_get_args(), 3);
$header_method = $mockResponse->expects($this->exactly(count($headers)))
->method('header');
call_user_func_array(array($header_method, 'withConsecutive'), $headers);
try {
if (!empty($_REQUEST['old_usr'])) {
$this->object->logOut();
} else {
$this->assertFalse(
$this->object->auth()
);
}
} finally {
$attrInstance->setValue($restoreInstance);
if (!empty($_REQUEST['old_usr'])) {
$this->object->logOut();
} else {
$this->assertFalse(
$this->object->auth()
);
}
}

View File

@ -40,6 +40,7 @@ class AuthenticationSignonTest extends PMATestCase
*/
public function tearDown()
{
parent::tearDown();
unset($this->object);
}
@ -69,31 +70,12 @@ class AuthenticationSignonTest extends PMATestCase
*/
public function testAuthLogoutURL()
{
$restoreInstance = PMA\libraries\Response::getInstance();
$this->mockResponse('Location: https://example.com/logoutURL');
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('isAjax', 'headersSent', 'header'))
->getMock();
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$mockResponse->expects($this->once())
->method('header')
->with('Location: https://example.com/logoutURL');
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL';
$GLOBALS['cfg']['Server']['LogoutURL'] = 'https://example.com/logoutURL';
$this->object->logOut();
$attrInstance->setValue($restoreInstance);
}
/**
@ -103,32 +85,13 @@ class AuthenticationSignonTest extends PMATestCase
*/
public function testAuthLogout()
{
$restoreInstance = PMA\libraries\Response::getInstance();
$this->mockResponse('Location: https://example.com/SignonURL');
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('isAjax', 'headersSent', 'header'))
->getMock();
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$mockResponse->expects($this->once())
->method('header')
->with('Location: https://example.com/SignonURL');
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$GLOBALS['header'] = array();
$GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL';
$GLOBALS['cfg']['Server']['LogoutURL'] = '';
$this->object->logOut();
$attrInstance->setValue($restoreInstance);
}
/**
@ -189,25 +152,7 @@ class AuthenticationSignonTest extends PMATestCase
*/
public function testAuthCheckToken()
{
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('isAjax', 'headersSent', 'header'))
->getMock();
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$mockResponse->expects($this->once())
->method('header')
->with('Location: https://example.com/SignonURL');
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$this->mockResponse('Location: https://example.com/SignonURL');
$GLOBALS['cfg']['Server']['SignonURL'] = 'https://example.com/SignonURL';
$GLOBALS['cfg']['Server']['SignonSession'] = 'session123';
@ -254,7 +199,6 @@ class AuthenticationSignonTest extends PMATestCase
$this->assertFalse(
isset($_SESSION['LAST_SIGNON_URL'])
);
$attrInstance->setValue($restoreInstance);
}
/**

View File

@ -1226,7 +1226,7 @@ class ExportSqlTest extends PMATestCase
);
$this->assertContains(
"-- RELATIONS FOR TABLE :\n" .
"-- RELATIONSHIPS FOR TABLE :\n" .
"-- foo\n" .
"-- ftable -> ffield",
$result

View File

@ -6,7 +6,7 @@ if [ -n "$GATEWAY_INTERFACE" ] ; then
exit 1
fi
if [ "$TRAVIS_PHP_VERSION" = "nightly" -o "$TRAVIS_PHP_VERSION" = "hhvm" -o "$TRAVIS_PHP_VERSION" = "7.0" -o "$TRAVIS_PHP_VERSION" = "7.1" ] ; then
if [ "$TRAVIS_PHP_VERSION" = "nightly" -o "$TRAVIS_PHP_VERSION" = "hhvm" -o "$TRAVIS_PHP_VERSION" = "7.0" -o "$TRAVIS_PHP_VERSION" = "7.1" -o "$TRAVIS_OS_NAME" = "osx" ] ; then
exit 0
fi

View File

@ -17,7 +17,7 @@ require_once 'setup/lib/form_processing.lib.php';
*
* @package PhpMyAdmin-test
*/
class PMA_Form_Processing_Test extends PHPUnit_Framework_TestCase
class PMA_Form_Processing_Test extends PMATestCase
{
/**
* Prepares environment for the test.
@ -37,29 +37,11 @@ class PMA_Form_Processing_Test extends PHPUnit_Framework_TestCase
*/
public function testProcessFormSet()
{
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('header', 'headersSent'))
->getMock();
$mockResponse->expects($this->exactly(2))
->method('header')
->withConsecutive(
['HTTP/1.1 303 See Other'],
['Location: index.php?lang=en']
$this->mockResponse(
array('HTTP/1.1 303 See Other'),
array('Location: index.php?lang=en')
);
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
// case 1
$formDisplay = $this->getMockBuilder('PMA\libraries\config\FormDisplay')
->disableOriginalConstructor()

View File

@ -219,12 +219,9 @@ class PMA_ServerStatusQueries_Test extends PHPUnit_Framework_TestCase
//validate 3:serverstatusquerieschart
$this->assertContains(
'<div id="serverstatusquerieschart"></div>',
$html
);
$this->assertContains(
'<div id="serverstatusquerieschart_data"',
'<div id="serverstatusquerieschart" data-chart="',
$html
);
}
}

View File

@ -20,7 +20,7 @@ require_once 'libraries/relation.lib.php';
*
* @package PhpMyAdmin-test
*/
class PMA_User_Preferences_Test extends PHPUnit_Framework_TestCase
class PMA_User_Preferences_Test extends PMATestCase
{
/**
@ -368,25 +368,7 @@ class PMA_User_Preferences_Test extends PHPUnit_Framework_TestCase
{
$GLOBALS['lang'] = '';
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('header', 'headersSent'))
->getMock();
$mockResponse->expects($this->once())
->method('header')
->with('Location: /phpmyadmin/file.html?a=b&saved=1&server=0#h+ash');
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$this->mockResponse('Location: /phpmyadmin/file.html?a=b&saved=1&server=0#h+ash');
$GLOBALS['PMA_Config']->set('PmaAbsoluteUri', '');
$GLOBALS['PMA_Config']->set('PMA_IS_IIS', false);
@ -396,8 +378,6 @@ class PMA_User_Preferences_Test extends PHPUnit_Framework_TestCase
array('a' => 'b'),
'h ash'
);
$attrInstance->setValue($restoreInstance);
}
/**

View File

@ -126,27 +126,8 @@ class PMA_HeaderLocation_Test extends PMATestCase
$this->expectOutputString($header);
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('disable', 'header', 'headersSent'))
->getMock();
$mockResponse->expects($this->once())
->method('disable');
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
$this->mockResponse();
PMA_sendHeaderLocation($testUri);
$attrInstance->setValue($restoreInstance);
}
}
}

View File

@ -66,7 +66,9 @@ class PMA_SeleniumDbEventsTest extends PMA_SeleniumBase
*/
public function tearDown()
{
$this->dbQuery("SET GLOBAL event_scheduler=\"OFF\"");
if ($this->_mysqli != null) {
$this->dbQuery("SET GLOBAL event_scheduler=\"OFF\"");
}
parent::tearDown();
}