Merge branch 'master' into master-security
This commit is contained in:
commit
be4eaf5243
17
.travis.yml
17
.travis.yml
@ -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
420
ChangeLog
@ -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/
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
++++++++++++
|
||||
|
||||
@ -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']
|
||||
|
||||
11
index.php
11
index.php
@ -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>';
|
||||
}
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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);
|
||||
});
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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)
|
||||
);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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/
|
||||
|
||||
@ -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">'
|
||||
|
||||
@ -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',
|
||||
|
||||
@ -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
|
||||
*/
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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.'
|
||||
|
||||
@ -203,6 +203,7 @@ $forms['Main_panel']['Startup'] = array(
|
||||
'ShowCreateDb',
|
||||
'ShowStats',
|
||||
'ShowServerInfo',
|
||||
'ShowPhpInfo',
|
||||
'ShowChgPassword');
|
||||
$forms['Main_panel']['DbStructure'] = array(
|
||||
'ShowDbStructureCharset',
|
||||
|
||||
@ -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'];
|
||||
|
||||
@ -279,7 +279,7 @@ class TableRelationController extends TableController
|
||||
) {
|
||||
$this->response->addHTML(
|
||||
Util::getMessage(
|
||||
__('Internal relations were successfully updated.'),
|
||||
__('Internal relationships were successfully updated.'),
|
||||
'', 'success'
|
||||
)
|
||||
);
|
||||
|
||||
@ -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)) {
|
||||
|
||||
@ -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 = ' </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;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
*
|
||||
|
||||
@ -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']
|
||||
);
|
||||
|
||||
@ -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)
|
||||
. ':'
|
||||
);
|
||||
|
||||
@ -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.'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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 '
|
||||
|
||||
@ -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
22
phpinfo.php
Normal 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);
|
||||
}
|
||||
22
po/az.po
22
po/az.po
@ -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."
|
||||
|
||||
40
po/de.po
40
po/de.po
@ -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."
|
||||
|
||||
30
po/ia.po
30
po/ia.po
@ -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"
|
||||
|
||||
25
po/pt.po
25
po/pt.po
@ -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!!"
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
<tr>
|
||||
<td colspan="3" class="center nowrap">
|
||||
<strong>
|
||||
<?= __('Delete relation'); ?>
|
||||
<?= __('Delete relationship'); ?>
|
||||
</strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
<tr>
|
||||
<td colspan="2" class="center nowrap">
|
||||
<strong>
|
||||
<?= __('Create relation'); ?>
|
||||
<?= __('Create relationship'); ?>
|
||||
</strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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) : ?>
|
||||
|
||||
@ -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'); ?>" />
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1226,7 +1226,7 @@ class ExportSqlTest extends PMATestCase
|
||||
);
|
||||
|
||||
$this->assertContains(
|
||||
"-- RELATIONS FOR TABLE :\n" .
|
||||
"-- RELATIONSHIPS FOR TABLE :\n" .
|
||||
"-- foo\n" .
|
||||
"-- ftable -> ffield",
|
||||
$result
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user