diff --git a/.travis.yml b/.travis.yml index 3f52732b20..6a5d23fd51 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ php: - "7.0" - "5.6" - "5.5" + - "hhvm" sudo: false diff --git a/ChangeLog b/ChangeLog index 17f3e6ad18..ba203a65c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,43 @@ phpMyAdmin - ChangeLog ====================== +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 @@ -43,595 +80,6 @@ phpMyAdmin - ChangeLog - issue [Security] Full path disclosure vulnerability in SQL parser, see PMASA-2016-8 - issue [Security] XSS vulnerability in SQL editor, see PMASA-2016-9 -4.5.3.1 (2015-12-25) -- issue #11774 Undefined offset 2 -- issue [Security] Path disclosure, see PMASA-2015-6 - -4.5.3.0 (2015-12-23) -- issue #11744 Incomplete results of UNION ALL -- issue #11742 MATCH AGAINST keywords not recognized -- issue #11723 syntax verifier is not knowing "STRAIGHT_JOIN" -- issue #11699 REPLACE() function confused with REPLACE statement -- issue #11690 FLUSH word not recognized by parser -- issue #11664 Online syntax verifier bug - "IF" on SELECT statement -- issue #11665 Format breaks query with COUNT() -- issue Undefinex index: SendErrorReports -- issue Incorrect script name in include -- issue #11685 Warning: Invalid argument supplied for foreach() -- issue #11687 Delimiter missing while exporting multiple db routines -- issue #11684 mysql_native_password with MariaDB bug -- issue #11693 Flush privileges overusage - related to #11597 -- issue #11691 Query was empty on creating User in 4.5.2 -- issue #11695 PMA_getDataForDeleteUsers() warning -- issue #11698 Cannot create user on Percona Server -- issue Properly report error on connecting -- issue #11706 Database export template not saving compression option -- issue #11721 Fix single quote export for servers in ANSI_QUOTES mode -- issue #11714 Avoid duplicite fetching of table information -- issue #11724 Temporary fix for live data edit of big sets is not working -- issue IE 8 compatibility in console -- issue #11732 Exporting feature does not work with union table -- issue #11728 CSV import skip row count after -- issue #11679 Cannot export results of some queries -- issue #11720 Message "An account already exists..." incorrectly displayed -- issue #11758 Missing quoting of table in ALTER CONVERT query -- issue #11752 PMA 4.5.2 breaks MySQL Master-Master Cluster -- issue #11757 Export and preview show different SQL for character set -- issue #11749 Fix possible undefined variables in table operations - -4.5.2.0 (2015-11-23) -- issue #11589 Incorrect parameter in mysqli_fetch_fields() -- issue #11592 Missing headers in zipped export -- issue #11590 Parser: Array to string conversion -- issue #11597 Huge binary log growth on 4.5.x -- issue #11594 'only_db' config option bug when db names contain underscore and are grouped -- issue #11607 Unable to change password from Login information tab -- issue #11610 Undefined variable: res_rel -- issue #11611 Warning while exporting schema to PDF -- issue #11612 Undefined index: new_row_format -- issue #11605 Changing hostname kills password -- issue #11614 Undefined variable: db -- issue #11627 CREATE TABLE/INSERT INTO executed twice (ctrl+enter) -- issue #11630 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given -- issue #11632 Exporting GIS visualization ignores start and row count -- issue #11476 Errors instead of git info when PHP has no gzip support -- issue #11633 CodeMirror tooltip shows below modal window -- issue #11639 Bug with the MainBackground Color -- issue Profiling checkbox is missing -- issue #11642 Properly handle session expiry after POST requests -- issue #11648 Notice in ./export.php#214 Undefined index: quick_or_custom -- issue #11646 Unrecognized keywords -- issue #11635 Sql not executed properly -- issue #11631 Linter warnings when creating new user -- issue #11626 wrong row count for query results -- issue #11608 Analyzer doesn't recognize GRANT statements -- issue #11602 Parser warnings (subqueries) -- issue #11658 Collation column is empty in table Structure -- issue #11661 Error changing table's column encoding - -4.5.1.0 (2015-10-23) -- issue Invalid argument supplied for foreach() -- issue array_key_exists() expects parameter 2 to be array -- issue #11480 Notice Undefined index: drop_database -- issue #11486 Server variable edition in ANSI_QUOTES sql_mode: losing current value -- issue #11491 Propose table structure broken -- issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system -- issue #11495 'PMA_Microhistory' is undefined -- issue #11496 Incorrect definition for getTablesWhenOpen() -- issue #11500 Error when creating new user on MariaDB 10.0.21 -- issue #11505 Notice on htmlspecialchars() -- issue Notice in Structure page of views -- issue #11510 AUTO_INCREMENT always exported when IF NOT EXISTS is on -- issue #11516 Some partitions are missing in copied table -- issue #11521 Notice of undefined variable when performing SHOW CREATE -- issue #11509 Error exporting sql query results with table alias -- issue #11512 SQL editing window does not recognise 'OUTER' keyword in 'LEFT OUTER JOIN' -- issue #11518 "NOT IN" clause not recognized (MySQL 5.6 and 5.7) -- issue #11524 Yellow star does not change in database Structure after add/remove from favorites -- issue #11531 Invalid SQL in table definition when exporting table -- issue #11526 Foreign key to other database's tables fails -- issue #11519 Bug while exporting results when a joined table field name is in SELECT query -- issue #11522 Strange behavior on table rename -- issue #11539 Rename table does not result in refresh in left panel -- issue #11541 Missing arguments for PMA_Table::generateAlter() -- issue #11544 Notices about undefined indexes on structure pages of information_schema tables -- issue Change minimum PHP version for Composer -- issue #11542 Import parser and backslash -- issue #11546 "Visualize GIS data" seems to be broken -- issue #11548 Confirm box on "Reset slave" option -- issue Fix cookies clearing on version change -- issue #11558 Cannot execute SQL with subquery -- issue #11520 Incorrect syntax creating a user using mysql_native_password with MariaDB -- issue #11561 Cannot use third party auth plugins - -4.5.0.2 (2015-09-25) -- issue #11497 Incorrect indexes when exporting - -4.5.0.1 (2015-09-24) -- issue #11492 AUTO_INCREMENT statements are partly missing from exports - -4.5.0.0 (2015-09-23) -+ rfe Pagination for GIS visualization -+ issue #6207 Usability improvements for console -+ issue #6310 Access to Add columns text-box and Go button when creating table -+ issue #6007 Add lock tables, disable keys options -+ issue #6306 Additional page locking -+ issue #6314 Support MySQL 5.7 syntax for password change -+ issue #6319 Display/edit index name -+ issue #6318 Toggle autocomplete of table and column names -+ issue #5633 Manage multiple variable in bookmarked query -+ issue #5642 Show edit/delete also when there is calculated column -+ issue #6313 Show databases as list instead of as dropdown when no database is selected -+ rfe Optional dark theme for the console -+ issue #5053 PDF schema sort options -+ issue #5543 Structure in PDF export -+ issue #6327 Have ZeroConf create phpmyadmin DB if possible -+ issue #5462 Warning before silent data conversion/truncation -+ issue #6338 Support a default page in designer -+ issue #6339 Allow copying mutiple rows -+ issue #6334 No SQL query for loading data -+ issue #6341 New data validation feature and datetime type -+ issue #6324 Importing and exporting pMA meta-data -+ issue #6330 Add grouping to stored procedures in the navigation tree -+ issue #6275 Support IPv6 browser transformation -+ rfe Option groups for 'With selected' dropdown in database structure page -+ issue #6347 Support CHECKSUM TABLE operation -+ issue #6088 Support for Paramaters with raw SQL -+ issue #5844 Show original size of truncated columns -+ issue #6114 Explain analyzer -+ issue #6186 Add "Drop partition" option to partition tools -+ issue #6354 Procedures window shift-click should select multiple rows -+ issue #6355 Designer: "Sticky" menu option -+ issue #6357 Directly show table comments in structure view -+ issue #6259 Page-related settings -+ issue #5356 Alter privileges when renaming or copying a database -- issue #11256 Slowness due to large number of routines -- issue #11258 GROUP_CONCAT shown as GROUPBY_CONCAT in CodeMirror autocomplete -+ issue #5946 Work with --skip-grant-tables -- issue #11266 "Sort by key" drop-down value is lost -+ issue #6287 Browse: improve display of right-aligned data -- issue #11265 Textarea rows settings ignored Features > Text fields -+ issue #6358 MIME types should be lower case -- issue #11226 Drop table doesn't remove the table name from navigation bar -+ issue #6360 MySQL and MariaDB functions INET6_ATON and INET6_NTOA -- bug Link to get real row counts of all the views in a db, at once -- issue #11275 Drizzle version numbers -+ issue #5400 Rewrite print view using CSS; fixes print view failures on multi-query statements -+ issue #6362 Support spatial indexes in table create form -+ issue #6068 Use CTRL or ALT plus arrow keys for navigation in grid editor -+ rfe Remove support for Shift + Click on function name to apply to all rows in insert/edit page -+ issue #6326 Don't group tables in tree if the result has only one group -- issue #11287 When hide table structure actions is false, action should be in a row -+ issue #5425 Batch changing the collation of each column in a table -- issue #10918 QBE generates wrong query -+ issue #6292 Use plain English descriptors instead of script names for icon link destinations -+ issue #6239 Disable foreign key checks for some operations -- issue #11296 "With selected" links doesn't work in table browse -- issue #11166 Query builder: missing joint for the intermediary table -+ issue #6251 Integrate SQL debugging into console -- issue #11061 Improve/restore non-unique index row editing -- issue #11301 MySQL errors are not shown when DebugSQL is enabled -+ issue #5037 One file per table and one file per database export option -+ issue #5759 Designer settings should be part of saved state -+ issue #6257 Option to remove functions, procedures, etc., from navigation tree -+ issue #5388 Column privileges and update -+ issue #6231 Cant use external config file -+ issue #6252 CSV import: Allow "Columns escaped with" to be optional -+ issue #6262 Being able to use multiple servers at the same time when using cookie auth -+ issue #6301 select structure or data for each table when exporting -- issue #11261 Autocomplete completes the original table name when joining multiple aliased tables -+ rfe Remove configuration storage data related to a user upon deleting the user -+ issue #6298 Improved processlist for mariadb -+ issue #6300 Warn about "Any user" potential problem -+ issue #6368 Hide/disable edit links for read-only variables -+ issue #6365 Human readable/writable URLs (html5 api) -+ rfe Support virtual columns in MySQL 5.7.5+ -+ issue #6215 Support for virtual/persistent columns in MariaDB -- issue #11314 Undefined work upon upgrade to new version -- issue #1817 Creating configuration storage tables fail in MySQL 5.7 -- issue #6118 Parser does not handle nested selects -- issue #5437 Support SELECT ... FROM DUAL -- issue #4962 Support UNION -- issue #11322 Missing null checkbox when grid editing a null cell -+ Upgrade TCPDF to version 6.2.9 -+ issue #6102 Add SHA256 security password support -- issue #10250 Displayed git revision info is not set -+ Improved schema SVG export -- issue #10726 Do not try to set port 80 for https requests -+ issue #11394 Export/import Designer view -+ Partition support in table Structure -+ issue #11414 Unclear export options / organization / hierarchy - Set minimum required PHP version to 5.5 (older versions are EOL) -- issue #11407 ALTER TABLE failing on import when table exists -- issue Do not export `sys` database when exporting server -- issue #11436 CREATE DATABASE should be enabled by default on server exports -- issue #11442 MySQL 5.7 and SHOW VARIABLES -- issue #11445 MySQL 5.7 and Status page for an unprivileged user -- issue #11448 Clarify doc about the MemoryLimit directive -- issue #11489 Cannot copy a database under certain conditions - -4.4.15.1 (2015-10-23) -- issue #11464 phpMyAdmin suggests upgrading to newer version not usable on that system -- issue [security] Content spoofing on url.php - -4.4.15.0 (2015-09-20) -- issue #11411 Undefined "replace" function on numeric scalar -- issue #11421 Stored-proc / routine - broken parameter parsing -- issue Missing name for configuration read_as_multibytes -- issue #11431 Incorrect "No row selected" message -- issue #11447 MySQL 5.5 and the language system variable -- issue #11452 Semantics of export and import icons are mixed up -- issue #11451 Designer-Bug in move.js on multiple server configuration -- issue #11458 Invalid UTF-8 sequence in argument -- issue #11457 Request URI too large -- issue Invalid argument supplied for foreach() -- issue #11461 Foreign key constraints for InnoDB tables with upper-case letters disabled -- issue #11487 Warning when entering Query page - -4.4.14.1 (2015-09-08) -- issue [security] reCaptcha bypass - -4.4.14.0 (2015-08-20) -- issue #11367 Export after search, missing WHERE clause -- issue #11380 Incomplete message after import -- issue Incorrect scalar type declaration (reported under PHP 7) -- issue #11389 ReCaptcha produces deprecated messages under PHP 7 -- issue #11387 phpseclib < 2.0 produces deprecated messages on PHP 7 -- issue #11404 "Switch to copied table" doesn't work -- issue #11406 Missing quotes after calling "distinct values" -- issue #11386 Cannot import database with long data in one column -- issue #11410 SPATIAL index option is not clickable - -4.4.13.1 (2015-08-08) -- issue #11368 SQL error when importing phpMyAdmin dump file - -4.4.13.0 (2015-08-07) -- issue #1808 "Improve table structure" generates invalid SQL -- issue Once checked "Show only active" checkbox is always checked -- issue #1813 Delete rows using "Check All" is broken -- issue Fix PHP 7 possible binding ambiguity -- issue #11326 Exported schema includes all the tables of the database -- issue #11339 Results not displayed if query ends in delimiter and comment -- issue #11320 Live edit of data fields is not working always -- issue Table list in navigation collapses when entering into a table in another page -- issue #11364 JS error while trying to auto navigate to db structure page when db creation has failed - -4.4.12.0 (2015-07-20) -- bug Saved chart image does not have a proper name or an extension -- bug #4976 Timepicker CSS issues in Original theme -- bug #4975 Move/Copy/Rename operations on Table/Db fail on Drizzle server -- bug #4826 Two inline edit windows -- bug #4979 Problem when import *.ods file -- bug Add missing head tag -- bug #4985 Column headers move when scrolling - -4.4.11.0 (2015-07-06) -- bug Missing selected/entered values when editing active options in visual query builder -- bug #4969 Autoload from prefs_storage not behaving properly -- bug #4972 Incorrect length computed for binary data -- bug Remove character set from create_tables_drizzle.sql -- bug #4973 Users overview needs clarification -- bug #4974 Creating a database from console doesn't update navigation panel -- bug #4844 FAQ 1.17 needs an update - -4.4.10.0 (2015-06-17) -- bug #4950 Issues in database selection for replication -- bug #4951 Trying to save chart as image crashes the browser -- bug #4953 cant drag sql.gz file onto import input -- bug #4960 Table creation results in GET request with missing server parameter that invalidates the session -- bug #4961 Javascript error when Designer is opened -- bug #4962 Insert by foreign key scrolls page to top -- bug #4955 Clicking on the navi logo does not always work -- bug External URL for $cfg['NavigationLogoLink'] causes JavaScript error when clicked - -4.4.9.0 (2015-06-04) -- bug #4920 relation view doesn't list fields of table in other database -- bug #4905 Sorting by an alias -- bug #4931 False error before entering reCAPTCHA -- bug #4909 central column with multiple server -- bug #4937 Custom export with backquotes off is not working -- bug #4908 Reverse proxy: infinite internal redirect (added warning in doc) -- bug #4942 Export to gzip saves plain text under Chrome - -4.4.8.0 (2015-05-28) -- bug Allow accessing visual query builder when pmadb is not configured -- bug #4893 Nav tree line alignment issue -- bug #4911 Lock page icon is not shown after fresh reload -- bug #4912 "Highlight pointer" and "Row marker" doesn't work properly -- bug Browse foreigners window goes out of the window -- bug #4918 Date field popup dialog position bug -- bug In /setup, PMA_messages is not defined -- bug #4924 Recaptcha failure -- bug #4930 Database copy doesn't work for tables with more than one FULLTEXT index -- bug #4929 Edit view structure doesn't load the algorithm -- bug #4923 Do not limit table comments to 60 characters - -4.4.7.0 (2015-05-16) -- bug #4876 Settings issues (Favorite tables shown twice in Settings) -- bug #4896 Non-styled error page when following results link -- bug #4894 Deleting without confirmation -- bug #4858 Issues with SQL autocomplete -- bug #4897 Column hint in SQL autocomplete is sometimes not shown -- bug #4898 JS error after selecting a field and press Enter -- bug Honor proxy settings when getting Git commit information -- bug Missing title on link -- bug #4512 ForceSSL Redirect Check -- bug Undefined index collation_connection -- bug Error when the reporting server is down -- bug Escape database and table names for partition maintenance -- bug Invalid value for CURLOPT_SSL_VERIFYPEER -- bug #4367 Import status infinite loop -- bug #4902 Designer: Loading does not work -- bug #4904 Setup: Overview > Display does not work -- bug #4906 Designer: pages from all databases - -4.4.6.1 (2015-05-13) -- bug #4899 [security] CSRF vulnerability in setup -- bug #4900 [security] Vulnerability allowing man-in-the-middle attack - -4.4.6.0 (2015-05-07) -- bug #4890 webkitStorageInfo and webkitIndexedDB is deprecated -- bug #4892 Undefined variable: unique_conditions -- bug #4891 CSV Import ignores "Replace table data with file" checkbox - -4.4.5.0 (2015-05-05) -- bug Table overhead stats: missing space before the unit -- bug Fix resize icon in Designer -- bug #4879 Exit fullscreen in Designer does not change the button text -- bug #4880 Designer icons missing when using original theme -- bug #4878 Column list of central columns is not cleared -- bug #4881 jQuery dialogs of the Designer are not displayed in fullscreen -- bug #4883 Search function breaks when searching for certain combinations of backslashes and slashes -- bug #4830 Maximum execution time exceeded in Util.class.php (better fix) -- bug #4885 Some icons are above the overlay of jQuery dialogs -- bug #4886 Clicking on external links in advisor rules give JS error -- bug #4888 Filter in central columns does not work in other languages - -4.4.4.0 (2015-04-26) -- bug #4863 Edit vs Change -- bug #4859 Don't scroll (to bottom) when editing multiple rows -- bug #4862 Misaligned Inline edit field -- bug #4861 Use of undefined constant PMA_DRIZZLE -- bug #4865 sprintf(): Too few arguments -- bug #4866 Limit column ordering in index edit dialog -- bug #4867 Incorrect ALTER TABLE statement generated -- bug #4870 Inconsistency in 'Ignore' checkbox in insert page -- bug #4869 Drop column action not asking to confirm -- bug #4871 Error on creating table -- bug Undefined index: Rows - -4.4.3.0 (2015-04-20) -- bug #4851 PHP errors in login dialogue -- bug #4207 json_encode error due to strftime returning non utf8 chars in Windows 8.1 Chinese version -- bug #4845 White screen (Cloudflare) -- bug #4794 Server error viewing table content -- bug Fix issues related to number of decimal places in time -- bug #4853 Relation view between 1600 and 1780 px -- bug PHP 7 compatibility in php-gettext -- bug PHP 7 compatibility in bfShapeFiles -- bug PHP 7 session_regenerate_id() warning -- bug #4857 Alter table after changing column name error -- bug #4830 Maximum execution time exceeded in Util.class.php - -4.4.2.0 (2015-04-13) -- bug #4835 PMA_hideShowConnection not called after submit_num_fields -- bug #4836 Server warning after moving from console to direct clicks -- bug #4837 Duplicate new version notification when using the "Back" button -- bug #4839 DOC link in setting is broken -- bug #4841 Status page: Mislukte pogingen per uur value is incorrect -- bug MIME Transformation link fixed -- bug #4838 Prevents console window from moving out of the screen height -- bug #4829 Create procedure via SQL Editor not more possible -- bug #4833 CSS and Javascript are not compressed -- bug #4849 Functions accessed from navigation do not load on ajax dialog -- bug #4850 Relation view on 1920 - -4.4.1.1 (2015-04-08) -- bug #4846 Web server's error log is flooded - -4.4.1.0 (2015-04-07) -- bug #4813 MySQL 5.7.6 and the Users menu tab -- bug #4818 MySQL 5.7.6 and changing the password for another user -- bug #4819 Request URI too large -- bug #4814 MySQL 5.7.6 and Databases -- bug Use 'server' parameter in console to work in multi server environments -- bug Missing tooltip in monitor -- bug Missing sort icons in monitor -- bug #4805 Inline edit broken when using functions in query -- bug #4821 Timed-out import fails to restart when file represented -- bug #4754 pMA DB not detected properly -- bug #4825 Datepicker missing when changing number of rows on Insert page -- bug #4824 INNODB STATUS page is empty -- bug #4828 JavaScript is loaded in wrong order -- bug #4827 TEXT formatting doesn't work after inline editing -- bug #4822 Compress when php.ini output_buffering is active -- bug #4832 Sorting distinct values result loses links -- bug #4834 Do not attach token to css requests to improve caching - -4.4.0.0 (2015-04-01) -+ rfe #1553 InnoDB presently supports one FULLTEXT index creation at a time -+ rfe #1562 Allow tracking multiple table at once from database level tracking page -+ rfe #1564 Improve action message on Tracking page -+ rfe #1566 Change value of "Number of rows:" when "Show all" is checked -+ rfe Focus console by clicking on white space -+ rfe #1507 Part 1: Cycle through console history with keyboard up/down arrows -+ rfe #1579 Default to primary key when adding relation -+ rfe #1572 User prefs: Diff-friendly JSON for config -+ rfe #1567 Sever Variables Table UI Improvements -- bug #4675 phpMyAdmin should be able to work without 'examples' DIR - move SQL scripts to sql directory -+ rfe #1578 Warn about reserved word only when a column is created -+ rfe #1590 Recaptcha API v2 -+ rfe #1580 Individual Zeroconf PMA tables support -+ rfe #1525 Generate keys one per line -+ rfe #347 allow table with transformed column anywhere in FROM clause -+ rfe #1591 Shortcut link to search page -+ rfe #1568 Fold Add Column After / Before into dropdown -- bug #4705 Table structure: adding primary key doesn't refresh page -+ rfe #1582 SQL formatter -+ rfe #1597 Fast filter improvement: remove "x other results found" -- bug #4720 No error message on Missing extension mbstring -+ rfe #801 Builtin transformations and relations -+ rfe #767 USING BTREE support for HEAP/MEMORY tables -+ rfe #1596 Make "Options > Relational" configurable -+ rfe #719 More details in PDF relation view -+ rfe #1096 Cannot enter connection for federated engine table -+ rfe #954 Allow SALT in ENCRYPT function -+ rfe #1260 Setting LoginCookieValidity > session.gc_maxlifetime -+ rfe Transformation for JSON -- bug Fix isCanvasSupported for new window -+ rfe #1600 Clarify the "Inline" link -+ rfe #1179 Speed up slow triggers by using EVENT_OBJECT_SCHEMA -+ rfe #1192 ON DUPLICATE KEY UPDATE for loading CSV -- bug Cannot execute command from console (multi-server installation) -+ rfe #1208 linking from information_schema -+ rfe #1235 Relation view: move to main "Structure" page -+ rfe #1558 Designer menu with explicit text -+ rfe #937 Relations with views like with tables -+ rfe #1241 Browse Field -> Search -+ rfe #723 Provide sanity check for table/column names (table names) -+ rfe #1312 SessionTimeZone configuration directive -- bug Add missing confirmation when deleting tracking report entries -+ rfe Ability to disable foreign key check when emptying tables -+ rfe #1549 Reset auto-increment when exporting structure -+ rfe #1602 Recover query in redaction after session end -+ rfe #1605 After database creation, go to database structure page -+ rfe #1604 Show PHP version -- bug #4770 Multiple delete on table browse ignoring foreign key checkbox -+ rfe CodeMirror based SQL editor as an input transformation -+ rfe #1275 CodeMirror based JSON editor as an input transformation -+ rfe #685 Editor for HTML content -+ rfe #1595 make professional code editor suggestion -+ rfe #1606 processlist filter -+ rfe Change tracking activation status from db level tracking page -+ rfe #1207 Export users associated with a specific schema/database -+ rfe #1575 "Disable database expansion" : unclear directive name and -explanation -+ rfe #1607 Tool tip for lock icon when making changes to a page -+ rfe #1327 Hide 'Add user' link if user does not have privileges -+ rfe #501 Support for SSL GRANT option -+ rfe #1608 Central columns allowing setting SIGNED / UNSIGNED attribute for integer -+ rfe #1441 Add regexp match when using AllowArbitraryServer -- bug #4806 Unable to work with two different servers in two tabs - -4.3.14.0 (not yet released) - - -4.3.13.0 (2015-03-29) -- bug #4803 "Show hidden items" is sometimes hidden -- bug #4807 Breaks when sorting by multiple columns while using UNION -- bug #4798 Missing column when exporting in sql -- bug #4810 Broken find and replace -- bug #4804 Undefined Index after export schema -- bug #4802 Changelog page is not working -- bug #4815 Infinite calls to index.php -- bug #4820 Invalid links to dev.mysql.com -- bug #4718 simulate query fails, but actual query does not - -4.3.12.0 (2015-03-14) -- bug #4746 Right-aligned columns have left-aligned header -- bug #4779 PMA_Util::parseEnumSetValues fails on enums with UTF-8 values -- bug Undefined index savedsearcheswork -- bug #4788 Inline edit of DATE fields with NULL, NULL checkbox is under datepicker -- bug #4790 DROP TABLE/VIEW IF EXISTS are not tracked -- bug Compatibility with central columns of version 4.4 -- bug #4758 Firefox with auth_type to http with multiple server doesn't work anymore -- bug #4789 Views aren't dropped when copying a database -- bug #4784 Incomplete bookmark saving -- bug #4786 SELECT width on relations page - -4.3.11.1 (2015-03-04) -- bug [security] Risk of BREACH attack, see PMASA-2015-1 - -4.3.11.0 (2015-03-02) -- bug #4774 SQL links are completely wrong -- bug #4768 MariaDB: version mismatch -- bug #4777 Some images are missing in Designer for original theme -- bug #4767 Drizzle: undefined index in mysql_charsets.inc.php -- bug #4753 Normal field and multi-line field have different margins -- bug #4760 Cannot re-import settings from local storage -- bug #4778 SQL error when database list is sorted by additional columns -- bug #4780 Notice when timestamp column does not have default value - -4.3.10.0 (2015-02-20) -- bug Undefined index navwork -- bug #4744 Opening console scroll down the page -- bug Remove extra column heading in view structure page -- bug Add missing confirmation when deleting central columns -- bug Undefined index DisableIS -- bug #4763 Database export with more than 512 tables fails -- bug #4769 Previously set column aliases are destroyed if returned to the same table -- bug #4752 Incorrect page after creating table -- bug #4771 Central Columns not working, showing error - -4.3.9.0 (2015-02-05) -- bug #4728 Incorrect headings in routine editor -- bug #4730 Notice while browsing tables when phpmyadmin pma database exists, but not all the tables -- bug #4729 Display original field when using "Relational display column" option and display column is empty -- bug #4734 Default values for binary fields do not support binary values -- bug #4736 Changing display options breaks query highlighting -- bug Undefined index submit_type -- bug #4738 Header lose align when scrolling in Firefox -- bug #4741 in ./libraries/Advisor.class.php#184 vsprintf(): Too few arguments -- bug #4743 Unable to move cursor with keyboard in filter rows box -- bug Incorrect link in doc -- bug #4745 Tracking does not handle views properly -- bug #4706 Schema export doesn't handle dots in db/table name -- bug #3935 Table Header not displayed correct (Safari 5.0.5 Mac) -- bug #4750 Disable renaming referenced columns -- bug #4748 Column name center-aligned instead of left-aligned in Relations - -4.3.8.0 (2015-01-24) -- bug Undefined constant PMA_DRIZZLE -- bug #4712 Wrongly positioned date-picker while Grid-Editing -- bug #4714 Forced ORDER BY for own sql statements -- bug #4721 Undefined property: stdClass::$version -- bug #4719 'only_db' not working -- bug #4700 Error text: Internal Server Error -- bug #4722 Incorrect width table summary when favorite tables is disabled -- bug #4716 Collapse all in navigation panel is sometimes broken -- bug #4724 Cannot navigate in filtered table list -- bug #4717 Database navigation menu broken when resolution/screen is changing -- bug #4727 Collation column missing in database list when DisableIS is true -- bug Undefined index central_columnswork -- bug Undefined index favorite_tables - -4.3.7.0 (2015-01-15) -- bug #4694 js error on marking table as favorite in Safari (in private mode) -- bug #4695 Changing $cfg['DefaultTabTable'] doesn't update link and title -- bug Undefined index menuswork -- bug Undefined index navwork -- bug Undefined index central_columnswork -- bug #4697 Server Status refresh not behaving as expected -- bug Null argument in array_multisort() -- bug #4699 Navigation panel should not hide icons based on 'TableNavigationLinksMode' -- bug #4703 Unsaved schema page exported as pdf.pdf -- bug #4707 Call to undefined method PMA_Schema_PDF::dieSchema() -- bug #4702 URL is non RFC-2396 compatible in get_scripts.js.php - -4.3.6.0 (2015-01-07) -- bug Undefined index notices while configuring recent and favorite tables -- bug #4687 Designer breaks without configuration storage -- bug #4686 Select elements flicker and selects something else -- bug #4689 Setup tool creates "pma__favorites" incorrectly -- bug #4685 Call to a member function isUserType() on a non-object -- bug #4691 Do not include console when no server is selected -- bug #4688 File permissions in archive -- bug #4692 Dynamic javascripts gives 500 when db selected - -4.3.5.0 (2015-01-05) -- bug Auto-configuration: tables were not created automatically -- bug #4677 Advanced feature checker does not check for favorite tables feature -- bug #4678 Some of the data stored in configuration storage are not deleted upon db or table delete -- bug #4679 Setup does not allow providing a name for favorites table -- bug #4680 Number of favorite table are not configurable in setup -- bug #4681 'Central columns table' field in setup does not have a description -- bug #4318 Default connection collation and sorting -- bug #4683 Relational data is not properly updated on table rename -- bug #4655 Undefined index: collation_connection (second patch) -- bug #4682 4.3.3 & 4.3.4 Import sql created by mysqldump fails on foreign keys -- bug #4676 Auto-configuration issues -- bug #4416 New lines are removed when grid editing (part two: TEXT) - --- Older ChangeLogs can be found on our project website --- http://www.phpmyadmin.net/old-stuff/ChangeLogs/ diff --git a/README b/README index 1c77549b88..52d35d8a75 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ phpMyAdmin - Readme =================== -Version 4.5.4.1 +Version 4.5.5 A set of PHP-scripts to manage MySQL over the web. diff --git a/changelog.php b/changelog.php index 6dbd495059..2fb7646bc3 100644 --- a/changelog.php +++ b/changelog.php @@ -20,7 +20,7 @@ $filename = CHANGELOG_FILE; * Read changelog. */ // Check if the file is available, some distributions remove these. -if (is_readable($filename)) { +if (@is_readable($filename)) { // Test if the if is in a compressed format if (substr($filename, -3) == '.gz') { diff --git a/doc/conf.py b/doc/conf.py index 6ba577ab12..12ea522e99 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -51,7 +51,7 @@ copyright = u'2012 - 2014, The phpMyAdmin devel team' # built documents. # # The short X.Y version. -version = '4.5.4.1' +version = '4.5.5' # The full version, including alpha/beta/rc tags. release = version diff --git a/doc/setup.rst b/doc/setup.rst index a6912cb618..7440c2a4eb 100644 --- a/doc/setup.rst +++ b/doc/setup.rst @@ -253,14 +253,25 @@ Verifying phpMyAdmin releases +++++++++++++++++++++++++++++ Since July 2015 all phpMyAdmin releases are cryptographically signed by the -releasing developer, who is currently Marc Delisle. His key id is +releasing developer, who through January 2016 was Marc Delisle. His key id is 0x81AF644A, his PGP fingerprint is: .. code-block:: console 436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A -and you can get more identification information from `https://keybase.io/lem9 `_. You should verify that the signature matches +and you can get more identification information from `https://keybase.io/lem9 `_. + +Beginning in January 2016, the release manager is Isaac Bennetch. His key id is +0x8259BD92, and his PGP fingerprint is: + +.. code-block:: console + + 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 + +and you can get more identification information from `https://keybase.io/ibennetch `_. + +You should verify that the signature matches the archive you have downloaded. This way you can be sure that you are using the same code that was released. @@ -269,9 +280,9 @@ for it. Once you have both of them in the same folder, you can verify the signat .. code-block:: console - $ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc - gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A - gpg: Can't check signature: No public key + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Can't check signature: public key not found As you can see gpg complains that it does not know the public key. At this point you should do one of the following steps: @@ -286,9 +297,9 @@ point you should do one of the following steps: .. code-block:: console - $ gpg --keyserver hkp://pgp.mit.edu --recv-keys 81AF644A - gpg: requesting key 81AF644A from hkp server pgp.mit.edu - gpg: key 81AF644A: public key "Marc Delisle " imported + $ gpg --keyserver hkp://pgp.mit.edu --recv-keys 8259BD92 + gpg: requesting key 8259BD92 from hkp server pgp.mit.edu + gpg: key 8259BD92: public key "Isaac Bennetch " imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) @@ -299,12 +310,13 @@ in the key: .. code-block:: console - $ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc - gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A - gpg: Good signature from "Marc Delisle " [unknown] + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Good signature from "Isaac Bennetch " + gpg: aka "Isaac Bennetch " gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. - Primary key fingerprint: 436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A + Primary key fingerprint: 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 The problem here is that anybody could issue the key with this name. You need to ensure that the key is actually owned by the mentioned person. The GNU Privacy @@ -312,29 +324,29 @@ Handbook covers this topic in the chapter `Validating other keys on your public keyring`_. The most reliable method is to meet the developer in person and exchange key fingerprints, however you can also rely on the web of trust. This way you can trust the key transitively though signatures of others, who have met -the developer in person. For example you can see how `Marc's key links to +the developer in person. For example you can see how `Isaac's key links to Linus's key`_. Once the key is trusted, the warning will not occur: .. code-block:: console - $ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc - gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A - gpg: Good signature from "Marc Delisle " [full] + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Good signature from "Isaac Bennetch " [full] Should the signature be invalid (the archive has been changed), you would get a clear error regardless of the fact that the key is trusted or not: .. code-block:: console - $ gpg --verify phpMyAdmin-4.4.9-all-languages.zip.asc - gpg: Signature made Fri Jun 12 13:09:58 2015 CEST using RSA key ID 81AF644A - gpg: BAD signature from "Marc Delisle " [unknown] + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: BAD signature from "Isaac Bennetch " [unknown] .. _Validating other keys on your public keyring: https://www.gnupg.org/gph/en/manual.html#AEN335 -.. _Marc's key links to Linus's key: http://pgp.cs.uu.nl/mk_path.cgi?FROM=00411886&TO=81AF644A +.. _Isaac's key links to Linus's key: http://pgp.cs.uu.nl/mk_path.cgi?FROM=00411886&TO=8259BD92 .. index:: @@ -652,3 +664,21 @@ 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. + +Known issues +++++++++++++ + +Users with column-specific privileges are unable to "Browse" +------------------------------------------------------------ + +If a user has only column-specific privileges on some (but not all) columns in a table, "Browse" +will fail with an error message. + +As a workaround, a bookmarked query with the same name as the table can be created, this will +run when using the "Browse" link instead. `Issue 11922 `_. + +Trouble logging back in after logging out using 'http' authentication +---------------------------------------------------------------------- + +When using the 'http' ``auth_type``, it can be impossible to log back in (when the logout comes +manually or after a period of inactivity). `Issue 11898 `_. diff --git a/import.php b/import.php index aebba6c937..9f2bb68d6f 100644 --- a/import.php +++ b/import.php @@ -64,6 +64,8 @@ if (isset($_REQUEST['console_bookmark_add'])) { } } +$format = ''; + /** * Sets globals from $_POST */ @@ -450,7 +452,7 @@ if ($import_file != 'none' && ! $error) { $tmp_subdir = sys_get_temp_dir(); } $tmp_subdir = rtrim($tmp_subdir, DIRECTORY_SEPARATOR); - if (is_writable($tmp_subdir)) { + if (@is_writable($tmp_subdir)) { $import_file_new = $tmp_subdir . DIRECTORY_SEPARATOR . basename($import_file) . uniqid(); if (move_uploaded_file($import_file, $import_file_new)) { diff --git a/index.php b/index.php index 17b0e7aa21..526fc06e6d 100644 --- a/index.php +++ b/index.php @@ -543,7 +543,7 @@ if (! empty($_SESSION['encryption_key']) * Check for existence of config directory which should not exist in * production environment. */ -if (file_exists('config')) { +if (@file_exists('config')) { trigger_error( __( 'Directory [code]config[/code], which is used by the setup script, ' . @@ -661,7 +661,7 @@ if ($cfg['SuhosinDisableWarning'] == false * * The data file is created while creating release by ./scripts/remove-incomplete-mo */ -if (file_exists('libraries/language_stats.inc.php')) { +if (@file_exists('libraries/language_stats.inc.php')) { include 'libraries/language_stats.inc.php'; /* * This message is intentionally not translated, because we're diff --git a/js/codemirror/addon/lint/sql-lint.js b/js/codemirror/addon/lint/sql-lint.js index 0a1f396f4b..92b30f2702 100644 --- a/js/codemirror/addon/lint/sql-lint.js +++ b/js/codemirror/addon/lint/sql-lint.js @@ -31,7 +31,8 @@ CodeMirror.sqlLint = function(text, updateLinting, options, cm) { data: { sql_query: text, token: PMA_commonParams.get('token'), - server: PMA_commonParams.get('server') + server: PMA_commonParams.get('server'), + options: options.lintOptions, }, success: handleResponse }); diff --git a/js/config.js b/js/config.js index 61e4481296..43309b1b93 100644 --- a/js/config.js +++ b/js/config.js @@ -3,6 +3,30 @@ * Functions used in configuration forms and on user preferences pages */ +/** + * checks whether browser supports web storage + * + * @param type the type of storage i.e. localStorage or sessionStorage + * + * @returns bool + */ +function isStorageSupported(type) +{ + try { + window[type].setItem('PMATest', 'test'); + // Check whether key-value pair was set successfully + if (window[type].getItem('PMATest') === 'test') { + // Supported, remove test variable from storage + window[type].removeItem('PMATest'); + return true; + } + } catch(error) { + // Not supported + PMA_ajaxShowMessage(PMA_messages.strNoLocalStorage, false); + } + return false; +} + /** * Unbind all event handlers before tearing down a page */ @@ -600,7 +624,7 @@ AJAX.registerOnload('config.js', function () { var tab_check_fnc = function () { if (location.hash != prev_hash) { prev_hash = location.hash; - if (location.hash.match(/^#tab_.+/) && $('#' + location.hash.substr(5)).length) { + if (location.hash.match(/^#tab_[a-zA-Z0-9_]+/) && $('#' + location.hash.substr(5)).length) { setTab(location.hash.substr(5)); } } diff --git a/js/functions.js b/js/functions.js index 1cf52831ab..edf8f457eb 100644 --- a/js/functions.js +++ b/js/functions.js @@ -116,11 +116,12 @@ function PMA_handleRedirectAndReload(data) { /** * Creates an SQL editor which supports auto completing etc. * - * @param $textarea jQuery object wrapping the textarea to be made the editor - * @param options optional options for CodeMirror - * @param resize optional resizing ('vertical', 'horizontal', 'both') + * @param $textarea jQuery object wrapping the textarea to be made the editor + * @param options optional options for CodeMirror + * @param resize optional resizing ('vertical', 'horizontal', 'both') + * @param lintOptions additional options for lint */ -function PMA_getSQLEditor($textarea, options, resize) { +function PMA_getSQLEditor($textarea, options, resize, lintOptions) { if ($textarea.length > 0 && typeof CodeMirror !== 'undefined') { // merge options for CodeMirror @@ -140,6 +141,7 @@ function PMA_getSQLEditor($textarea, options, resize) { lint: { "getAnnotations": CodeMirror.sqlLint, "async": true, + "lintOptions": lintOptions } }); } @@ -872,6 +874,9 @@ AJAX.registerOnload('functions.js', function () { updateTimeout = window.setTimeout(UpdateIdleTime, 2000); } } else { //timeout occurred + if(isStorageSupported('sessionStorage')){ + window.sessionStorage.clear(); + } window.location.reload(true); clearInterval(IncInterval); } @@ -4743,30 +4748,6 @@ function PMA_ignorePhpErrors(clearPrevErrors){ $pmaErrors.remove(); } -/** - * checks whether browser supports web storage - * - * @param type the type of storage i.e. localStorage or sessionStorage - * - * @returns bool - */ -function isStorageSupported(type) -{ - try { - window[type].setItem('PMATest', 'test'); - // Check whether key-value pair was set successfully - if (window[type].getItem('PMATest') === 'test') { - // Supported, remove test variable from storage - window[type].removeItem('PMATest'); - return true; - } - } catch(error) { - // Not supported - PMA_ajaxShowMessage(PMA_messages.strNoLocalStorage, false); - } - return false; -} - /** * Unbind all event handlers before tearing down a page */ diff --git a/js/navigation.js b/js/navigation.js index 2851ad48db..222acd1635 100644 --- a/js/navigation.js +++ b/js/navigation.js @@ -515,9 +515,6 @@ $(function () { } }); }); -}); - -AJAX.registerOnload('navigation.js', function () { // Check if session storage is supported if (isStorageSupported('sessionStorage')) { var storage = window.sessionStorage; diff --git a/js/rte.js b/js/rte.js index fcc85d7b3f..05366a83cd 100644 --- a/js/rte.js +++ b/js/rte.js @@ -15,6 +15,8 @@ var RTE = { */ object: function (type) { $.extend(this, RTE.COMMON); + this.editorType = type; + switch (type) { case 'routine': $.extend(this, RTE.ROUTINE); @@ -58,6 +60,10 @@ RTE.COMMON = { * the jQueryUI dialog buttons */ buttonOptions: {}, + /** + * @var editorType Type of the editor + */ + editorType: null, /** * Validate editor form fields. */ @@ -360,7 +366,9 @@ RTE.COMMON = { * the Definition textarea. */ var $elm = $('textarea[name=item_definition]').last(); - that.syntaxHiglighter = PMA_getSQLEditor($elm); + var linterOptions = {}; + linterOptions[that.editorType + '_editor'] = true; + that.syntaxHiglighter = PMA_getSQLEditor($elm, {}, null, linterOptions); // Execute item-specific code that.postDialogShow(data); diff --git a/libraries/Config.class.php b/libraries/Config.class.php index 262791f117..5819673249 100644 --- a/libraries/Config.class.php +++ b/libraries/Config.class.php @@ -114,7 +114,7 @@ class PMA_Config */ public function checkSystem() { - $this->set('PMA_VERSION', '4.5.4.1'); + $this->set('PMA_VERSION', '4.5.5'); /** * @deprecated */ @@ -813,7 +813,7 @@ class PMA_Config public function loadDefaults() { $cfg = array(); - if (! file_exists($this->default_source)) { + if (! @file_exists($this->default_source)) { $this->error_config_default_file = true; return false; } @@ -1166,12 +1166,12 @@ class PMA_Config return false; } - if (! file_exists($this->getSource())) { + if (! @file_exists($this->getSource())) { $this->source_mtime = 0; return false; } - if (! is_readable($this->getSource())) { + if (! @is_readable($this->getSource())) { // manually check if file is readable // might be bug #3059806 Supporting running from CIFS/Samba shares diff --git a/libraries/Error.class.php b/libraries/Error.class.php index fddeceb874..089cdbf667 100644 --- a/libraries/Error.class.php +++ b/libraries/Error.class.php @@ -425,40 +425,39 @@ class PMA_Error extends PMA_Message * prevent path disclosure in error message, * and make users feel safe to submit error reports * - * @param string $dest path to be shorten + * @param string $path path to be shorten * * @return string shortened path */ - public static function relPath($dest) + public static function relPath($path) { - $dest = realpath($dest); + $dest = @realpath($path); - if (substr(PHP_OS, 0, 3) == 'WIN') { - $separator = '\\'; - } else { - $separator = '/'; + /* Probably affected by open_basedir */ + if ($dest === FALSE) { + return $path; } $Ahere = explode( - $separator, - realpath(__DIR__ . $separator . '..') + DIRECTORY_SEPARATOR, + realpath(__DIR__ . DIRECTORY_SEPARATOR . '..') ); - $Adest = explode($separator, $dest); + $Adest = explode(DIRECTORY_SEPARATOR, $dest); $result = '.'; // && count ($Adest)>0 && count($Ahere)>0 ) - while (implode($separator, $Adest) != implode($separator, $Ahere)) { + while (implode(DIRECTORY_SEPARATOR, $Adest) != implode(DIRECTORY_SEPARATOR, $Ahere)) { if (count($Ahere) > count($Adest)) { array_pop($Ahere); - $result .= $separator . '..'; + $result .= DIRECTORY_SEPARATOR . '..'; } else { array_pop($Adest); } } - $path = $result . str_replace(implode($separator, $Adest), '', $dest); + $path = $result . str_replace(implode(DIRECTORY_SEPARATOR, $Adest), '', $dest); return str_replace( - $separator . $separator, - $separator, + DIRECTORY_SEPARATOR . PATH_SEPARATOR, + DIRECTORY_SEPARATOR, $path ); } diff --git a/libraries/File.class.php b/libraries/File.class.php index 1929f9603e..8c790378b3 100644 --- a/libraries/File.class.php +++ b/libraries/File.class.php @@ -441,10 +441,7 @@ class PMA_File { // suppress warnings from being displayed, but not from being logged // any file access outside of open_basedir will issue a warning - ob_start(); - $is_readable = is_readable($this->getName()); - ob_end_clean(); - return $is_readable; + return @is_readable($this->getName()); } /** @@ -463,7 +460,7 @@ class PMA_File } if (empty($GLOBALS['cfg']['TempDir']) - || ! is_writable($GLOBALS['cfg']['TempDir']) + || ! @is_writable($GLOBALS['cfg']['TempDir']) ) { // cannot create directory or access, point user to FAQ 1.11 $this->_error_message = __( diff --git a/libraries/Header.class.php b/libraries/Header.class.php index bc3de55cea..91dd54e012 100644 --- a/libraries/Header.class.php +++ b/libraries/Header.class.php @@ -200,12 +200,12 @@ class PMA_Header $this->_scripts->addFile( 'get_image.js.php?theme=' . $theme_id ); + $this->_scripts->addFile('config.js'); $this->_scripts->addFile('doclinks.js'); $this->_scripts->addFile('functions.js'); $this->_scripts->addFile('navigation.js'); $this->_scripts->addFile('indexes.js'); $this->_scripts->addFile('common.js'); - $this->_scripts->addFile('config.js'); $this->_scripts->addFile('page_settings.js'); $this->_scripts->addCode($this->getJsParamsCode()); } diff --git a/libraries/Util.class.php b/libraries/Util.class.php index f19ec12600..b68aede523 100644 --- a/libraries/Util.class.php +++ b/libraries/Util.class.php @@ -518,7 +518,7 @@ class PMA_Util if (defined('TESTSUITE')) { /* Provide consistent URL for testsuite */ return PMA_linkURL('http://docs.phpmyadmin.net/en/latest/' . $url); - } else if (file_exists('doc/html/index.html')) { + } else if (@file_exists('doc/html/index.html')) { if (defined('PMA_SETUP')) { return '../doc/html/' . $url; } else { @@ -4897,6 +4897,7 @@ class PMA_Util 'ENGINE' => '', 'TABLE_TYPE' => '', 'TABLE_ROWS' => 0, + 'TABLE_COMMENT' => '', ); } } // end while diff --git a/libraries/VersionInformation.php b/libraries/VersionInformation.php index 555ddded89..3821c7c834 100644 --- a/libraries/VersionInformation.php +++ b/libraries/VersionInformation.php @@ -87,12 +87,19 @@ class VersionInformation } } + /* Parse response */ $data = json_decode($response); - if (is_object($data) - && ! empty($data->version) - && ! empty($data->date) - && $save + + /* Basic sanity checking */ + if (! is_object($data) + || empty($data->version) + || empty($data->releases) + || empty($data->date) ) { + return null; + } + + if ($save) { if (! isset($_SESSION) && ! defined('TESTSUITE')) { ini_set('session.use_only_cookies', 'false'); ini_set('session.use_cookies', 'false'); @@ -267,4 +274,4 @@ class VersionInformation return PMA_Util::cacheGet('PMA_MYSQL_STR_VERSION'); } } -?> \ No newline at end of file +?> diff --git a/libraries/common.inc.php b/libraries/common.inc.php index 773e8a3200..c12a04c639 100644 --- a/libraries/common.inc.php +++ b/libraries/common.inc.php @@ -207,6 +207,20 @@ foreach (get_defined_vars() as $key => $value) { } unset($key, $value, $variables_whitelist); +/** + * @global boolean $GLOBALS['is_ajax_request'] + * @todo should this be moved to the variables init section above? + * + * Check if the current request is an AJAX request, and set is_ajax_request + * accordingly. Suppress headers, footers and unnecessary output if set to + * true + */ +if (isset($_REQUEST['ajax_request']) && $_REQUEST['ajax_request'] == true) { + $GLOBALS['is_ajax_request'] = true; +} else { + $GLOBALS['is_ajax_request'] = false; +} + /** * Subforms - some functions need to be called by form, cause of the limited URL @@ -1175,20 +1189,6 @@ $GLOBALS['PMA_Config']->set('default_server', ''); /* Tell tracker that it can actually work */ PMA_Tracker::enable(); -/** - * @global boolean $GLOBALS['is_ajax_request'] - * @todo should this be moved to the variables init section above? - * - * Check if the current request is an AJAX request, and set is_ajax_request - * accordingly. Suppress headers, footers and unnecessary output if set to - * true - */ -if (isset($_REQUEST['ajax_request']) && $_REQUEST['ajax_request'] == true) { - $GLOBALS['is_ajax_request'] = true; -} else { - $GLOBALS['is_ajax_request'] = false; -} - if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) { PMA_fatalError(__("GLOBALS overwrite attempt")); } diff --git a/libraries/core.lib.php b/libraries/core.lib.php index 8065e9d69a..3de51ca611 100644 --- a/libraries/core.lib.php +++ b/libraries/core.lib.php @@ -220,7 +220,7 @@ function PMA_fatalError( $error_message = vsprintf($error_message, $message_args); } - if ($GLOBALS['is_ajax_request']) { + if (! empty($GLOBALS['is_ajax_request']) && $GLOBALS['is_ajax_request']) { $response = PMA_Response::getInstance(); $response->isSuccess(false); $response->addJSON('message', PMA_Message::error($error_message)); diff --git a/libraries/error_report.lib.php b/libraries/error_report.lib.php index 0ac7ce56b8..ad333f4f8a 100644 --- a/libraries/error_report.lib.php +++ b/libraries/error_report.lib.php @@ -194,7 +194,7 @@ function PMA_sendErrorReport($report) array( 'method' => 'POST', 'content' => $data_string, - 'header' => "Content-Type: multipart/form-data\r\n", + 'header' => "Content-Type: application/json\r\n", ) ); $context = PMA_Util::handleContext($context); @@ -216,7 +216,10 @@ function PMA_sendErrorReport($report) } $curl_handle = PMA_Util::configureCurl($curl_handle); curl_setopt($curl_handle, CURLOPT_CUSTOMREQUEST, "POST"); - curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt( + $curl_handle, CURLOPT_HTTPHEADER, + array('Expect:', 'Content-Type: application/json') + ); curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $data_string); curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($curl_handle); diff --git a/libraries/export.lib.php b/libraries/export.lib.php index e7ebb13392..be0b05612e 100644 --- a/libraries/export.lib.php +++ b/libraries/export.lib.php @@ -339,7 +339,7 @@ function PMA_openExportFile($filename, $quick_export) ) ); $message->addParam($save_filename); - } elseif (is_file($save_filename) && ! is_writable($save_filename)) { + } elseif (is_file($save_filename) && ! @is_writable($save_filename)) { $message = PMA_Message::error( __( 'The web server does not have permission ' diff --git a/libraries/file_listing.lib.php b/libraries/file_listing.lib.php index 4e78c4623a..6974bed11d 100644 --- a/libraries/file_listing.lib.php +++ b/libraries/file_listing.lib.php @@ -19,7 +19,7 @@ if (! defined('PHPMYADMIN')) { */ function PMA_getDirContent($dir, $expression = '') { - if (!file_exists($dir) || !($handle = @opendir($dir))) { + if (!@file_exists($dir) || !($handle = @opendir($dir))) { return false; } @@ -28,7 +28,7 @@ function PMA_getDirContent($dir, $expression = '') $dir .= '/'; } while ($file = @readdir($handle)) { - if (is_file($dir . $file) + if (@is_file($dir . $file) && ($expression == '' || preg_match($expression, $file)) ) { $result[] = $file; diff --git a/libraries/insert_edit.lib.php b/libraries/insert_edit.lib.php index c277091156..91bb8bf488 100644 --- a/libraries/insert_edit.lib.php +++ b/libraries/insert_edit.lib.php @@ -1273,6 +1273,13 @@ function PMA_getValueColumnForOtherDatatypes($column, $default_char_editing, $onChangeClause, $tabindex, $tabindex_for_value, $idindex, $data_type ); + $virtual = array( + 'VIRTUAL', 'PERSISTENT', 'VIRTUAL GENERATED', 'STORED GENERATED' + ); + if (in_array($column['Extra'], $virtual)) { + $html_output .= ''; + } if ($column['Extra'] == 'auto_increment') { $html_output .= ''; @@ -2274,13 +2281,15 @@ function PMA_getQueryValuesForInsertAndUpdateInMultipleEdit($multi_edit_columns_ * @param boolean $using_key whether editing or new row * @param string $where_clause where clause * @param string $table table name + * @param array $multi_edit_funcs multiple edit functions array * * @return string $current_value current column value in the form */ function PMA_getCurrentValueForDifferentTypes($possibly_uploaded_val, $key, $multi_edit_columns_type, $current_value, $multi_edit_auto_increment, $rownumber, $multi_edit_columns_name, $multi_edit_columns_null, - $multi_edit_columns_null_prev, $is_insert, $using_key, $where_clause, $table + $multi_edit_columns_null_prev, $is_insert, $using_key, $where_clause, $table, + $multi_edit_funcs ) { // Fetch the current values of a row to use in case we have a protected field if ($is_insert @@ -2295,6 +2304,8 @@ function PMA_getCurrentValueForDifferentTypes($possibly_uploaded_val, $key, if (false !== $possibly_uploaded_val) { $current_value = $possibly_uploaded_val; + } else if (! empty($multi_edit_funcs[$key])) { + $current_value = "'" . PMA_Util::sqlAddSlashes($current_value) . "'"; } else { // c o l u m n v a l u e i n t h e f o r m if (isset($multi_edit_columns_type[$key])) { diff --git a/libraries/operations.lib.php b/libraries/operations.lib.php index 33e476693b..c8d9e9292f 100644 --- a/libraries/operations.lib.php +++ b/libraries/operations.lib.php @@ -588,6 +588,8 @@ function PMA_AdjustPrivileges_moveDB($oldDb, $newname) && $GLOBALS['is_reload_priv'] ) { $GLOBALS['dbi']->selectDb('mysql'); + $newname = str_replace("_", "\_", $newname); + $oldDb = str_replace("_", "\_", $oldDb); // For Db specific privileges $query_db_specific = 'UPDATE ' . PMA_Util::backquote('db') @@ -636,6 +638,8 @@ function PMA_AdjustPrivileges_copyDB($oldDb, $newname) && $GLOBALS['is_reload_priv'] ) { $GLOBALS['dbi']->selectDb('mysql'); + $newname = str_replace("_", "\_", $newname); + $oldDb = str_replace("_", "\_", $oldDb); $query_db_specific_old = 'SELECT * FROM ' . PMA_Util::backquote('db') . ' WHERE ' diff --git a/libraries/php-gettext/gettext.inc b/libraries/php-gettext/gettext.inc index 74e0be9940..908180d239 100644 --- a/libraries/php-gettext/gettext.inc +++ b/libraries/php-gettext/gettext.inc @@ -244,7 +244,7 @@ function _setlocale($category, $locale) { function _bindtextdomain($domain, $path) { global $text_domains; // ensure $path ends with a slash ('/' should work for both, but lets still play nice) - if (substr(php_uname(), 0, 7) == "Windows") { + if (DIRECTORY_SEPARATOR == '\\') { if ($path[strlen($path)-1] != '\\' and $path[strlen($path)-1] != '/') $path .= '\\'; } else { diff --git a/libraries/plugins/auth/AuthenticationCookie.class.php b/libraries/plugins/auth/AuthenticationCookie.class.php index 9033c6b557..68a3e0d106 100644 --- a/libraries/plugins/auth/AuthenticationCookie.class.php +++ b/libraries/plugins/auth/AuthenticationCookie.class.php @@ -115,7 +115,7 @@ class AuthenticationCookie extends AuthenticationPlugin $header->disableMenuAndConsole(); $header->disableWarnings(); - if (file_exists(CUSTOM_HEADER_FILE)) { + if (@file_exists(CUSTOM_HEADER_FILE)) { include CUSTOM_HEADER_FILE; } echo ' @@ -263,7 +263,7 @@ class AuthenticationCookie extends AuthenticationPlugin echo ''; } echo ''; - if (file_exists(CUSTOM_FOOTER_FILE)) { + if (@file_exists(CUSTOM_FOOTER_FILE)) { include CUSTOM_FOOTER_FILE; } if (! defined('TESTSUITE')) { diff --git a/libraries/plugins/auth/AuthenticationHttp.class.php b/libraries/plugins/auth/AuthenticationHttp.class.php index 5a5a2730dc..326078d242 100644 --- a/libraries/plugins/auth/AuthenticationHttp.class.php +++ b/libraries/plugins/auth/AuthenticationHttp.class.php @@ -103,7 +103,7 @@ class AuthenticationHttp extends AuthenticationPlugin ); $response->addHTML(''); - if (file_exists(CUSTOM_FOOTER_FILE)) { + if (@file_exists(CUSTOM_FOOTER_FILE)) { include CUSTOM_FOOTER_FILE; } diff --git a/libraries/plugins/auth/swekey/swekey.auth.lib.php b/libraries/plugins/auth/swekey/swekey.auth.lib.php index 1741ca7764..c296e96173 100644 --- a/libraries/plugins/auth/swekey/swekey.auth.lib.php +++ b/libraries/plugins/auth/swekey/swekey.auth.lib.php @@ -24,7 +24,7 @@ function Swekey_Auth_check() $_SESSION['SWEKEY'] = array(); } - $_SESSION['SWEKEY']['ENABLED'] = (! empty($confFile) && file_exists($confFile)); + $_SESSION['SWEKEY']['ENABLED'] = (! empty($confFile) && @file_exists($confFile)); // Load the swekey.conf file the first time if ($_SESSION['SWEKEY']['ENABLED'] @@ -169,7 +169,7 @@ function Swekey_Auth_error() // echo "\n"; } - if (file_exists($caFile)) { + if (@file_exists($caFile)) { Swekey_SetCAFile($caFile); } elseif (! empty($caFile) && (substr($_SESSION['SWEKEY']['CONF_SERVER_CHECK'], 0, 8) == "https://") diff --git a/libraries/plugins/export/ExportPdf.class.php b/libraries/plugins/export/ExportPdf.class.php index 272004683d..07b425eb03 100644 --- a/libraries/plugins/export/ExportPdf.class.php +++ b/libraries/plugins/export/ExportPdf.class.php @@ -13,7 +13,7 @@ if (! defined('PHPMYADMIN')) { /** * Skip the plugin if TCPDF is not available. */ -if (! file_exists(TCPDF_INC)) { +if (! @file_exists(TCPDF_INC)) { $GLOBALS['skip_import'] = true; return; } diff --git a/libraries/plugins/export/ExportSql.class.php b/libraries/plugins/export/ExportSql.class.php index 9371131d36..715ad48f92 100644 --- a/libraries/plugins/export/ExportSql.class.php +++ b/libraries/plugins/export/ExportSql.class.php @@ -1551,6 +1551,12 @@ class ExportSql extends ExportPlugin // analysis. if (!$view) { + if (empty($sql_backquotes)) { + // Option "Enclose table and column names with backquotes" + // was checked. + Context::$MODE |= Context::NO_ENCLOSING_QUOTES; + } + // Using appropriate quotes. if (($compat === 'MSSQL') || ($sql_backquotes === '"')) { SqlParser\Context::$MODE |= SqlParser\Context::ANSI_QUOTES; @@ -1621,7 +1627,9 @@ class ExportSql extends ExportPlugin $indexes_fulltext[] = $field->build($field); unset($statement->fields[$key]); } else if (empty($GLOBALS['sql_if_not_exists'])) { - $indexes[] = $field->build($field); + $indexes[] = str_replace( + 'COMMENT=\'', 'COMMENT \'', $field::build($field) + ); unset($statement->fields[$key]); } } diff --git a/libraries/plugins/import/ImportOds.class.php b/libraries/plugins/import/ImportOds.class.php index b884c13323..29133b4762 100644 --- a/libraries/plugins/import/ImportOds.class.php +++ b/libraries/plugins/import/ImportOds.class.php @@ -149,7 +149,7 @@ class ImportOds extends ImportPlugin * result in increased performance without the need to * alter the code in any way. It's basically a freebee. */ - $xml = simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); + $xml = @simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); unset($buffer); diff --git a/libraries/plugins/import/ImportShp.class.php b/libraries/plugins/import/ImportShp.class.php index 4149105347..6a0384989c 100644 --- a/libraries/plugins/import/ImportShp.class.php +++ b/libraries/plugins/import/ImportShp.class.php @@ -88,7 +88,7 @@ class ImportShp extends ImportPlugin // and use the files in it for import if ($compression == 'application/zip' && ! empty($GLOBALS['cfg']['TempDir']) - && is_writable($GLOBALS['cfg']['TempDir']) + && @is_writable($GLOBALS['cfg']['TempDir']) ) { $dbf_file_name = PMA_findFileFromZipArchive( '/^.*\.dbf$/i', $import_file diff --git a/libraries/plugins/import/ImportXml.class.php b/libraries/plugins/import/ImportXml.class.php index f6d97170b5..bacd974f41 100644 --- a/libraries/plugins/import/ImportXml.class.php +++ b/libraries/plugins/import/ImportXml.class.php @@ -106,7 +106,7 @@ class ImportXml extends ImportPlugin * result in increased performance without the need to * alter the code in any way. It's basically a freebee. */ - $xml = simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); + $xml = @simplexml_load_string($buffer, "SimpleXMLElement", LIBXML_COMPACT); unset($buffer); diff --git a/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php b/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php index 9f48425a97..ef37c793aa 100644 --- a/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php +++ b/libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php @@ -12,7 +12,7 @@ if (! defined('PHPMYADMIN')) { /** * Skip the plugin if TCPDF is not available. */ -if (! file_exists(TCPDF_INC)) { +if (! @file_exists(TCPDF_INC)) { $GLOBALS['skip_import'] = true; return; } diff --git a/libraries/relation.lib.php b/libraries/relation.lib.php index 6574b77c7b..802571e6de 100644 --- a/libraries/relation.lib.php +++ b/libraries/relation.lib.php @@ -97,7 +97,8 @@ function PMA_getRelationsParamDiagnostic($cfgRelation) $messages['disabled'] = '' . __('Disabled') . ''; if (empty($cfgRelation['db'])) { - $retval .= __('Configuration of pmadb… ') + $retval .= __('Configuration of pmadb…') + . ' ' . $messages['error'] . PMA_Util::showDocu('setup', 'linked-tables') . '
' . "\n" diff --git a/libraries/select_lang.lib.php b/libraries/select_lang.lib.php index da8556c553..cb99ec53d2 100644 --- a/libraries/select_lang.lib.php +++ b/libraries/select_lang.lib.php @@ -454,7 +454,7 @@ function PMA_langList() $path = $GLOBALS['lang_path'] . '/' . $file . '/LC_MESSAGES/phpmyadmin.mo'; if ($file != "." && $file != ".." - && file_exists($path) + && @file_exists($path) ) { $result[$file] = PMA_langDetails($file); } diff --git a/libraries/server_status_processes.lib.php b/libraries/server_status_processes.lib.php index a5cdf73e77..c00c0c2d18 100644 --- a/libraries/server_status_processes.lib.php +++ b/libraries/server_status_processes.lib.php @@ -165,6 +165,9 @@ function PMA_getHtmlForServerProcesslist() if ($is_sorted && $_REQUEST['sort_order'] === 'ASC') { $column['sort_order'] = 'DESC'; } + if (isset($_REQUEST['showExecuting'])) { + $column['showExecuting'] = 'on'; + } $retval .= ''; $columnUrl = PMA_URL_getCommon($column); @@ -244,7 +247,12 @@ function PMA_getHtmlForProcessListFilter() } $url_params = array( - 'ajax_request' => true + 'ajax_request' => true, + 'full' => (isset($_REQUEST['full']) ? $_REQUEST['full'] : ''), + 'column_name' => (isset($_REQUEST['column_name']) ? $_REQUEST['column_name'] : ''), + 'order_by_field' + => (isset($_REQUEST['order_by_field']) ? $_REQUEST['order_by_field'] : ''), + 'sort_order' => (isset($_REQUEST['sort_order']) ? $_REQUEST['sort_order'] : ''), ); $retval = ''; diff --git a/libraries/sql-parser/autoload.php b/libraries/sql-parser/autoload.php index da6bfe0a8c..21298b6ced 100644 --- a/libraries/sql-parser/autoload.php +++ b/libraries/sql-parser/autoload.php @@ -63,6 +63,12 @@ class AutoloaderInit } } +// php-gettext is used to translate error messages. +// This must be included before any class of the parser is loaded because +// if there is no `__` function defined, the library defines a dummy one +// in `common.php`. +require_once './libraries/php-gettext/gettext.inc'; + // Initializing the autoloader. return AutoloaderInit::getLoader( array( diff --git a/libraries/sql-parser/src/Components/AlterOperation.php b/libraries/sql-parser/src/Components/AlterOperation.php index 8dad8e888e..d0b09f18bd 100644 --- a/libraries/sql-parser/src/Components/AlterOperation.php +++ b/libraries/sql-parser/src/Components/AlterOperation.php @@ -172,8 +172,8 @@ class AlterOperation extends Component $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, + 'breakOnAlias' => true, + 'parseField' => 'column', ) ); if ($ret->field === null) { diff --git a/libraries/sql-parser/src/Components/ArrayObj.php b/libraries/sql-parser/src/Components/ArrayObj.php index fb199eacac..56c7247e9b 100644 --- a/libraries/sql-parser/src/Components/ArrayObj.php +++ b/libraries/sql-parser/src/Components/ArrayObj.php @@ -63,20 +63,32 @@ class ArrayObj extends Component $ret = empty($options['type']) ? new ArrayObj() : array(); /** - * The state of the parser. + * The last raw expression. * - * Below are the states of the parser. - * - * 0 -----------------------[ ( ]------------------------> 1 - * - * 1 ------------------[ array element ]-----------------> 2 - * - * 2 ------------------------[ , ]-----------------------> 1 - * 2 ------------------------[ ) ]-----------------------> (END) - * - * @var int $state + * @var string $lastRaw */ - $state = 0; + $lastRaw = ''; + + /** + * The last value. + * + * @var string $lastValue + */ + $lastValue = ''; + + /** + * Counts brackets. + * + * @var int $brackets + */ + $brackets = 0; + + /** + * Last separator (bracket or comma). + * + * @var boolean $isCommaLast + */ + $isCommaLast = false; for (; $list->idx < $list->count; ++$list->idx) { /** @@ -92,49 +104,72 @@ class ArrayObj extends Component } // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { + if (($token->type === Token::TYPE_WHITESPACE) + || ($token->type === Token::TYPE_COMMENT) + ) { + $lastRaw .= $token->token; + $lastValue = trim($lastValue) .' '; continue; } - if ($state === 0) { - if (($token->type !== Token::TYPE_OPERATOR) || ($token->value !== '(')) { - $parser->error( - __('An opening bracket was expected.'), - $token - ); - break; - } - $state = 1; - } elseif ($state === 1) { - if (($token->type === Token::TYPE_OPERATOR) && ($token->value === ')')) { - // Empty array. - break; - } - if (empty($options['type'])) { - $ret->values[] = $token->value; - $ret->raw[] = $token->token; - } else { - $ret[] = $options['type']::parse( - $parser, - $list, - empty($options['typeOptions']) ? array() : $options['typeOptions'] - ); - } - $state = 2; - } elseif ($state === 2) { - if (($token->type !== Token::TYPE_OPERATOR) || (($token->value !== ',') && ($token->value !== ')'))) { - $parser->error( - __('A comma or a closing bracket was expected'), - $token - ); - break; - } - if ($token->value === ',') { - $state = 1; - } else { // ) - break; + if (($brackets === 0) + && (($token->type !== Token::TYPE_OPERATOR) + || ($token->value !== '(')) + ) { + $parser->error(__('An opening bracket was expected.'), $token); + break; + } + + if ($token->type === Token::TYPE_OPERATOR) { + if ($token->value === '(') { + if (++$brackets === 1) { // 1 is the base level. + continue; + } + } elseif ($token->value === ')') { + if (--$brackets === 0) { // Array ended. + break; + } + } elseif ($token->value === ',') { + if ($brackets === 1) { + $isCommaLast = true; + if (empty($options['type'])) { + $ret->raw[] = trim($lastRaw); + $ret->values[] = trim($lastValue); + $lastRaw = $lastValue = ''; + } + } + continue; } } + + if (empty($options['type'])) { + $lastRaw .= $token->token; + $lastValue .= $token->value; + } else { + $ret[] = $options['type']::parse( + $parser, + $list, + empty($options['typeOptions']) ? array() : $options['typeOptions'] + ); + } + } + + // Handling last element. + // + // This is treated differently to treat the following cases: + // + // => array() + // (,) => array('', '') + // () => array() + // (a,) => array('a', '') + // (a) => array('a') + // + $lastRaw = trim($lastRaw); + if ((empty($options['type'])) + && ((strlen($lastRaw) > 0) || ($isCommaLast)) + ) { + $ret->raw[] = $lastRaw; + $ret->values[] = trim($lastValue); } return $ret; diff --git a/libraries/sql-parser/src/Components/Condition.php b/libraries/sql-parser/src/Components/Condition.php index 9d7d586927..f3179ead44 100644 --- a/libraries/sql-parser/src/Components/Condition.php +++ b/libraries/sql-parser/src/Components/Condition.php @@ -30,18 +30,20 @@ class Condition extends Component * * @var array */ - public static $DELIMITERS = array('&&', 'AND', 'OR', 'XOR', '||'); + public static $DELIMITERS = array('&&', '||', 'AND', 'OR', 'XOR'); /** - * Hash map containing reserved keywords that are also operators. + * List of allowed reserved keywords in conditions. * * @var array */ - public static $OPERATORS = array( + public static $ALLOWED_KEYWORDS = array( 'AND' => 1, 'BETWEEN' => 1, 'EXISTS' => 1, + 'IF' => 1, 'IN' => 1, + 'INTERVAL' => 1, 'IS' => 1, 'LIKE' => 1, 'MATCH' => 1, @@ -106,6 +108,7 @@ class Condition extends Component /** * Whether there was a `BETWEEN` keyword before or not. + * * It is required to keep track of them because their structure contains * the keyword `AND`, which is also an operator that delimits * expressions. @@ -115,6 +118,7 @@ class Condition extends Component $betweenBefore = false; for (; $list->idx < $list->count; ++$list->idx) { + /** * Token parsed at this moment. * @@ -142,11 +146,12 @@ class Condition extends Component // Conditions are delimited by logical operators. if (in_array($token->value, static::$DELIMITERS, true)) { if (($betweenBefore) && ($token->value === 'AND')) { + // The syntax of keyword `BETWEEN` is hard-coded. $betweenBefore = false; } else { + // The expression ended. $expr->expr = trim($expr->expr); if (!empty($expr->expr)) { - // Adding the condition that is delimited by this operator. $ret[] = $expr; } @@ -155,11 +160,21 @@ class Condition extends Component $expr->isOperator = true; $ret[] = $expr; + // Preparing to parse another condition. $expr = new Condition(); continue; } } + if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) { + if ($token->value === 'BETWEEN') { + $betweenBefore = true; + } + if (($brackets === 0) && (empty(static::$ALLOWED_KEYWORDS[$token->value]))) { + break; + } + } + if ($token->type === Token::TYPE_OPERATOR) { if ($token->value === '(') { ++$brackets; @@ -168,23 +183,16 @@ class Condition extends Component } } - // No keyword is expected. - if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_RESERVED)) { - if ($token->value === 'BETWEEN') { - $betweenBefore = true; - } - if (($brackets === 0) && (empty(static::$OPERATORS[$token->value]))) { - break; - } - } - $expr->expr .= $token->token; if (($token->type === Token::TYPE_NONE) - || (($token->type === Token::TYPE_KEYWORD) && (!($token->flags & Token::FLAG_KEYWORD_RESERVED))) + || (($token->type === Token::TYPE_KEYWORD) + && (!($token->flags & Token::FLAG_KEYWORD_RESERVED))) || ($token->type === Token::TYPE_STRING) || ($token->type === Token::TYPE_SYMBOL) ) { - $expr->identifiers[] = $token->value; + if (!in_array($token->value, $expr->identifiers)) { + $expr->identifiers[] = $token->value; + } } } diff --git a/libraries/sql-parser/src/Components/CreateDefinition.php b/libraries/sql-parser/src/Components/CreateDefinition.php index 21f44feaed..13e5e83a59 100644 --- a/libraries/sql-parser/src/Components/CreateDefinition.php +++ b/libraries/sql-parser/src/Components/CreateDefinition.php @@ -43,7 +43,7 @@ class CreateDefinition extends Component 'NOT NULL' => 1, 'NULL' => 1, - 'DEFAULT' => array(2, 'var'), + 'DEFAULT' => array(2, 'expr'), 'AUTO_INCREMENT' => 3, 'PRIMARY' => 4, 'PRIMARY KEY' => 4, @@ -55,7 +55,7 @@ class CreateDefinition extends Component // Generated columns options. 'GENERATED ALWAYS' => 8, - 'AS' => array(9, 'expr', array('bracketsDelimited' => true)), + 'AS' => array(9, 'expr', array('parenthesesDelimited' => true)), 'VIRTUAL' => 10, 'PERSISTENT' => 11, 'STORED' => 11, diff --git a/libraries/sql-parser/src/Components/Expression.php b/libraries/sql-parser/src/Components/Expression.php index d91d9020f4..f6d3895479 100644 --- a/libraries/sql-parser/src/Components/Expression.php +++ b/libraries/sql-parser/src/Components/Expression.php @@ -28,6 +28,15 @@ use SqlParser\TokensList; class Expression extends Component { + /** + * List of allowed reserved keywords in expressions. + * + * @var array + */ + private static $ALLOWED_KEYWORDS = array( + 'AS' => 1, 'DUAL' => 1, 'NULL' => 1, 'REGEXP' => 1 + ); + /** * The name of this database. * @@ -110,6 +119,31 @@ class Expression extends Component } /** + * Possible options: + * + * `field` + * + * First field to be filled. + * If this is not specified, it takes the value of `parseField`. + * + * `parseField` + * + * Specifies the type of the field parsed. It may be `database`, + * `table` or `column`. These expressions may not include + * parentheses. + * + * `breakOnAlias` + * + * If not empty, breaks when the alias occurs (it is not included). + * + * `breakOnParentheses` + * + * If not empty, breaks when the first parentheses occurs. + * + * `parenthesesDelimited` + * + * If not empty, breaks after last parentheses occurred. + * * @param Parser $parser The parser that serves as context. * @param TokensList $list The list of tokens that are being parsed. * @param array $options Parameters for parsing. @@ -137,9 +171,9 @@ class Expression extends Component /** * Whether an alias is expected. Is 2 if `AS` keyword was found. * - * @var int $alias + * @var bool $alias */ - $alias = 0; + $alias = false; /** * Counts brackets. @@ -149,17 +183,20 @@ class Expression extends Component $brackets = 0; /** - * Keeps track of the previous token. - * Possible values: - * string, if function was previously found; - * true, if opening bracket was previously found; - * null, in any other case. + * Keeps track of the last two previous tokens. * - * @var string|bool $prev + * @var Token[] $prev */ - $prev = null; + $prev = array(null, null); + + // When a field is parsed, no parentheses are expected. + if (!empty($options['parseField'])) { + $options['breakOnParentheses'] = true; + $options['field'] = $options['parseField']; + } for (; $list->idx < $list->count; ++$list->idx) { + /** * Token parsed at this moment. * @@ -173,59 +210,92 @@ class Expression extends Component } // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { - if (($isExpr) && (!$alias)) { + if (($token->type === Token::TYPE_WHITESPACE) + || ($token->type === Token::TYPE_COMMENT) + ) { + if ($isExpr) { $ret->expr .= $token->token; } - if (($alias === 0) && (empty($options['noAlias'])) && (!$isExpr) && (!$dot) && (!empty($ret->expr))) { - $alias = 1; - } continue; } - if (($token->type === Token::TYPE_KEYWORD) - && ($token->flags & Token::FLAG_KEYWORD_RESERVED) - && ($token->value !== 'DUAL') - && ($token->value !== 'NULL') - ) { - // Keywords may be found only between brackets. - if ($brackets === 0) { - if ((empty($options['noAlias'])) && ($token->value === 'AS')) { - $alias = 2; - continue; - } - if (!($token->flags & Token::FLAG_KEYWORD_FUNCTION)) { + if ($token->type === Token::TYPE_KEYWORD) { + if (($brackets > 0) && (empty($ret->subquery)) + && (!empty(Parser::$STATEMENT_PARSERS[$token->value])) + ) { + // A `(` was previously found and this keyword is the + // beginning of a statement, so this is a subquery. + $ret->subquery = $token->value; + } elseif (($token->flags & Token::FLAG_KEYWORD_FUNCTION) + && (empty($options['parseField'])) + ) { + $isExpr = true; + } elseif (($token->flags & Token::FLAG_KEYWORD_RESERVED) + && ($brackets === 0) + ) { + if (empty(self::$ALLOWED_KEYWORDS[$token->value])) { + // A reserved keyword that is not allowed in the + // expression was found so the expression must have + // ended and a new clause is starting. break; } - } elseif ($prev === true) { - if ((empty($ret->subquery) && (!empty(Parser::$STATEMENT_PARSERS[$token->value])))) { - // A `(` was previously found and this keyword is the - // beginning of a statement, so this is a subquery. - $ret->subquery = $token->value; + if ($token->value === 'AS') { + if (!empty($options['breakOnAlias'])) { + break; + } + if (!empty($ret->alias)) { + $parser->error( + __('An alias was previously found.'), + $token + ); + break; + } + $alias = true; + continue; } + $isExpr = true; } } + if (($token->type === Token::TYPE_NUMBER) + || ($token->type === Token::TYPE_BOOL) + || (($token->type === Token::TYPE_SYMBOL) + && ($token->flags & Token::FLAG_SYMBOL_VARIABLE)) + || (($token->type === Token::TYPE_OPERATOR) + && ($token->value !== '.')) + ) { + if (!empty($options['parseField'])) { + break; + } + + // Numbers, booleans and operators (except dot) are usually part + // of expressions. + $isExpr = true; + } + if ($token->type === Token::TYPE_OPERATOR) { - if ((!empty($options['noBrackets'])) + if ((!empty($options['breakOnParentheses'])) && (($token->value === '(') || ($token->value === ')')) ) { + // No brackets were expected. break; } if ($token->value === '(') { ++$brackets; - if ((empty($ret->function)) && ($prev !== null) && ($prev !== true)) { - // A function name was previously found and now an open - // bracket, so this is a function call. - $ret->function = $prev; + if ((empty($ret->function)) && ($prev[1] !== null) + && (($prev[1]->type === Token::TYPE_NONE) + || ($prev[1]->type === Token::TYPE_SYMBOL) + || (($prev[1]->type === Token::TYPE_KEYWORD) + && ($prev[1]->flags & Token::FLAG_KEYWORD_FUNCTION))) + ) { + $ret->function = $prev[1]->value; } - $isExpr = true; } elseif ($token->value === ')') { --$brackets; if ($brackets === 0) { - if (!empty($options['bracketsDelimited'])) { - // The current token is the last brackets, the next - // one will be outside. + if (!empty($options['parenthesesDelimited'])) { + // The current token is the last bracket, the next + // one will be outside the expression. $ret->expr .= $token->token; ++$list->idx; break; @@ -236,109 +306,88 @@ class Expression extends Component break; } } elseif ($token->value === ',') { + // Expressions are comma-delimited. if ($brackets === 0) { break; } } } - if (($token->type === Token::TYPE_NUMBER) || ($token->type === Token::TYPE_BOOL) - || (($token->type === Token::TYPE_SYMBOL) && ($token->flags & Token::FLAG_SYMBOL_VARIABLE)) - || (($token->type === Token::TYPE_OPERATOR)) && ($token->value !== '.') - ) { - // Numbers, booleans and operators are usually part of expressions. - $isExpr = true; - } + // Saving the previous tokens. + $prev[0] = $prev[1]; + $prev[1] = $token; if ($alias) { // An alias is expected (the keyword `AS` was previously found). if (!empty($ret->alias)) { $parser->error(__('An alias was previously found.'), $token); + break; } $ret->alias = $token->value; - $alias = 0; - } else { - if (!$isExpr) { - if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '.')) { - // Found a `.` which means we expect a column name and - // the column name we parsed is actually the table name - // and the table name is actually a database name. - if ((!empty($ret->database)) || ($dot)) { - $parser->error(__('Unexpected dot.'), $token); - } - $ret->database = $ret->table; - $ret->table = $ret->column; - $ret->column = null; - $dot = true; - } else { - // We found the name of a column (or table if column - // field should be skipped; used to parse table names). - $field = (!empty($options['skipColumn'])) ? 'table' : 'column'; - if (!empty($ret->$field)) { - // No alias is expected. - if (!empty($options['noAlias'])) { - break; - } - - // Parsing aliases without `AS` keyword and any - // whitespace. - // Example: SELECT 1`foo` - if (($token->type === Token::TYPE_STRING) - || (($token->type === Token::TYPE_SYMBOL) - && ($token->flags & Token::FLAG_SYMBOL_BACKTICK)) - ) { - if (!empty($ret->alias)) { - $parser->error( - __('An alias was previously found.'), - $token - ); - } - $ret->alias = $token->value; - } - } else { - $ret->$field = $token->value; - } - $dot = false; + $alias = false; + } elseif ($isExpr) { + // Handling aliases. + if (/* (empty($ret->alias)) && */ ($brackets === 0) + && (($prev[0] === null) + || ((($prev[0]->type !== Token::TYPE_OPERATOR) + || ($prev[0]->token === ')')) + && (($prev[0]->type !== Token::TYPE_KEYWORD) + || (!($prev[0]->flags & Token::FLAG_KEYWORD_RESERVED))))) + && (($prev[1]->type === Token::TYPE_STRING) + || (($prev[1]->type === Token::TYPE_SYMBOL) + && (!($prev[1]->flags & Token::FLAG_SYMBOL_VARIABLE))) + || ($prev[1]->type === Token::TYPE_NONE)) + ) { + if (!empty($ret->alias)) { + $parser->error(__('An alias was previously found.'), $token); + break; } + $ret->alias = $prev[1]->value; } else { - // Parsing aliases without `AS` keyword. - // Example: SELECT 'foo' `bar` - if (($brackets === 0) && (empty($options['noAlias']))) { - if (($token->type === Token::TYPE_NONE) || ($token->type === Token::TYPE_STRING) - || (($token->type === Token::TYPE_SYMBOL) && ($token->flags & Token::FLAG_SYMBOL_BACKTICK)) - ) { - if (!empty($ret->alias)) { - $parser->error( - __('An alias was previously found.'), - $token - ); - } - $ret->alias = $token->value; - continue; + $ret->expr .= $token->token; + } + } elseif (!$isExpr) { + if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '.')) { + // Found a `.` which means we expect a column name and + // the column name we parsed is actually the table name + // and the table name is actually a database name. + if ((!empty($ret->database)) || ($dot)) { + $parser->error(__('Unexpected dot.'), $token); + } + $ret->database = $ret->table; + $ret->table = $ret->column; + $ret->column = null; + $dot = true; + $ret->expr .= $token->token; + } else { + $field = empty($options['field']) ? 'column' : $options['field']; + if (empty($ret->$field)) { + $ret->$field = $token->value; + $ret->expr .= $token->token; + $dot = false; + } else { + // No alias is expected. + if (!empty($options['breakOnAlias'])) { + break; } + if (!empty($ret->alias)) { + $parser->error(__('An alias was previously found.'), $token); + break; + } + $ret->alias = $token->value; } } - - $ret->expr .= $token->token; - } - - if (($token->type === Token::TYPE_KEYWORD) && ($token->flags & Token::FLAG_KEYWORD_FUNCTION)) { - $prev = strtoupper($token->value); - } elseif (($token->type === Token::TYPE_OPERATOR) || ($token->value === '(')) { - $prev = true; - } else { - $prev = null; } } - if ($alias === 2) { + if ($alias) { $parser->error( __('An alias was expected.'), $list->tokens[$list->idx - 1] ); } - // Whitespaces might be added at the end. + // White-spaces might be added at the end. $ret->expr = trim($ret->expr); if (empty($ret->expr)) { diff --git a/libraries/sql-parser/src/Components/IntoKeyword.php b/libraries/sql-parser/src/Components/IntoKeyword.php index 1ac7be82e9..56f349feb6 100644 --- a/libraries/sql-parser/src/Components/IntoKeyword.php +++ b/libraries/sql-parser/src/Components/IntoKeyword.php @@ -107,9 +107,8 @@ class IntoKeyword extends Component $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, - 'skipColumn' => true, + 'parseField' => 'table', + 'breakOnAlias' => true, ) ); $state = 1; diff --git a/libraries/sql-parser/src/Components/JoinKeyword.php b/libraries/sql-parser/src/Components/JoinKeyword.php index 224e802736..d8e6ee916b 100644 --- a/libraries/sql-parser/src/Components/JoinKeyword.php +++ b/libraries/sql-parser/src/Components/JoinKeyword.php @@ -128,7 +128,7 @@ class JoinKeyword extends Component break; } } elseif ($state === 1) { - $expr->expr = Expression::parse($parser, $list, array('skipColumn' => true)); + $expr->expr = Expression::parse($parser, $list, array('field' => 'table')); $state = 2; } elseif ($state === 2) { if (($token->type === Token::TYPE_KEYWORD) && ($token->value === 'ON')) { diff --git a/libraries/sql-parser/src/Components/PartitionDefinition.php b/libraries/sql-parser/src/Components/PartitionDefinition.php index 8c54e22f83..06dc5fc0d8 100644 --- a/libraries/sql-parser/src/Components/PartitionDefinition.php +++ b/libraries/sql-parser/src/Components/PartitionDefinition.php @@ -169,8 +169,8 @@ class PartitionDefinition extends Component $parser, $list, array( - 'bracketsDelimited' => true, - 'noAlias' => true, + 'parenthesesDelimited' => true, + 'breakOnAlias' => true, ) ); } diff --git a/libraries/sql-parser/src/Components/Reference.php b/libraries/sql-parser/src/Components/Reference.php index 7dce16672f..7acd92e042 100644 --- a/libraries/sql-parser/src/Components/Reference.php +++ b/libraries/sql-parser/src/Components/Reference.php @@ -121,9 +121,8 @@ class Reference extends Component $parser, $list, array( - 'noAlias' => true, - 'skipColumn' => true, - 'noBrackets' => true, + 'parseField' => 'table', + 'breakOnAlias' => true, ) ); $state = 1; diff --git a/libraries/sql-parser/src/Components/RenameOperation.php b/libraries/sql-parser/src/Components/RenameOperation.php index 8776963ea5..c0ecf6c01b 100644 --- a/libraries/sql-parser/src/Components/RenameOperation.php +++ b/libraries/sql-parser/src/Components/RenameOperation.php @@ -93,9 +93,8 @@ class RenameOperation extends Component $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, - 'skipColumn' => true, + 'breakOnAlias' => true, + 'parseField' => 'table', ) ); if (empty($expr->old)) { @@ -120,9 +119,8 @@ class RenameOperation extends Component $parser, $list, array( - 'noBrackets' => true, - 'skipColumn' => true, - 'noAlias' => true, + 'breakOnAlias' => true, + 'parseField' => 'table', ) ); if (empty($expr->new)) { diff --git a/libraries/sql-parser/src/Components/SetOperation.php b/libraries/sql-parser/src/Components/SetOperation.php index 427f48d7dd..9306d43995 100644 --- a/libraries/sql-parser/src/Components/SetOperation.php +++ b/libraries/sql-parser/src/Components/SetOperation.php @@ -92,7 +92,7 @@ class SetOperation extends Component if ($state === 0) { if ($token->token === '=') { $state = 1; - } else if ($token->value !== ',') { + } elseif ($token->value !== ',') { $expr->column .= $token->token; } } elseif ($state === 1) { @@ -100,7 +100,7 @@ class SetOperation extends Component $parser, $list, array( - 'noAlias' => true, + 'breakOnAlias' => true, ) ); if ($tmp == null) { diff --git a/libraries/sql-parser/src/Context.php b/libraries/sql-parser/src/Context.php index 40cd93470b..a62fa16b9e 100644 --- a/libraries/sql-parser/src/Context.php +++ b/libraries/sql-parser/src/Context.php @@ -107,7 +107,7 @@ abstract class Context ':=' => 8, // @see Token::FLAG_OPERATOR_SQL - '(' => 16, ')' => 16, '.' => 16, ',' => 16, + '(' => 16, ')' => 16, '.' => 16, ',' => 16, ';' => 16, ); /** @@ -190,6 +190,13 @@ abstract class Context // https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_strict_trans_tables const STRICT_TRANS_TABLES = 1048576; + // Custom modes. + + // The table and column names and any other field that must be escaped will + // not be. + // Reserved keywords are being escaped regardless this mode is used or not. + const NO_ENCLOSING_QUOTES = 1073741824; + /* * Combination SQL Modes * https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sql-mode-combo @@ -397,9 +404,12 @@ abstract class Context */ public static function isSeparator($str) { - // NOTES: Only ASCII characters may be separators. + // NOTES: Only non alphanumeric ASCII characters may be separators. // `~` is the last printable ASCII character. - return ($str <= '~') && (!ctype_alnum($str)) && ($str !== '_'); + return ($str <= '~') && ($str !== '_') + && (($str < '0') || ($str > '9')) + && (($str < 'a') || ($str > 'z')) + && (($str < 'A') || ($str > 'Z')); } /** @@ -517,9 +527,16 @@ abstract class Context return $str; } + if ((static::$MODE & Context::NO_ENCLOSING_QUOTES) + && (!static::isKeyword($str, true)) + ) { + return $str; + } + if (static::$MODE & Context::ANSI_QUOTES) { $quote = '"'; } + return $quote . str_replace($quote, $quote . $quote, $str) . $quote; } } diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50000.php b/libraries/sql-parser/src/Contexts/ContextMySql50000.php index ceedd1704a..91f1179e0d 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50000.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50000.php @@ -37,8 +37,8 @@ class ContextMySql50000 extends Context public static $KEYWORDS = array( 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BDB' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, - 'NDB' => 1, 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'ANY' => 1, 'BDB' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, + 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'LAST' => 1, 'LOGS' => 1, 'MODE' => 1, 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'OPEN' => 1, 'PAGE' => 1, @@ -162,7 +162,7 @@ class ContextMySql50000 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50100.php b/libraries/sql-parser/src/Contexts/ContextMySql50100.php index 07ea04a2b5..a62d2ecaf1 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50100.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50100.php @@ -37,8 +37,8 @@ class ContextMySql50100 extends Context public static $KEYWORDS = array( 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BDB' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, - 'NDB' => 1, 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'ANY' => 1, 'BDB' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, + 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'GOTO' => 1, 'HASH' => 1, 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, @@ -175,7 +175,7 @@ class ContextMySql50100 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50500.php b/libraries/sql-parser/src/Contexts/ContextMySql50500.php index a56ba1bb65..03dd24f033 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50500.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50500.php @@ -37,8 +37,8 @@ class ContextMySql50500 extends Context public static $KEYWORDS = array( 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, - 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, + 'ONE' => 1, 'ROW' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, @@ -180,7 +180,7 @@ class ContextMySql50500 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50600.php b/libraries/sql-parser/src/Contexts/ContextMySql50600.php index 481cff5698..3773d233e2 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50600.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50600.php @@ -37,8 +37,8 @@ class ContextMySql50600 extends Context public static $KEYWORDS = array( 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, - 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, + 'ONE' => 1, 'ROW' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, @@ -186,7 +186,7 @@ class ContextMySql50600 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Contexts/ContextMySql50700.php b/libraries/sql-parser/src/Contexts/ContextMySql50700.php index 14daee2682..c4867c2a7b 100644 --- a/libraries/sql-parser/src/Contexts/ContextMySql50700.php +++ b/libraries/sql-parser/src/Contexts/ContextMySql50700.php @@ -37,8 +37,8 @@ class ContextMySql50700 extends Context public static $KEYWORDS = array( 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BIT' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, - 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, 'XID' => 1, + 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, + 'ONE' => 1, 'ROW' => 1, 'XID' => 1, 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, @@ -193,7 +193,7 @@ class ContextMySql50700 extends Context 'DEFAULT CHARACTER SET' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - 'XML' => 9, + 'BIT' => 9, 'XML' => 9, 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, 'ARRAY' => 9, 'SERIAL' => 9, diff --git a/libraries/sql-parser/src/Parser.php b/libraries/sql-parser/src/Parser.php index c050e42d7e..e878570b19 100644 --- a/libraries/sql-parser/src/Parser.php +++ b/libraries/sql-parser/src/Parser.php @@ -36,6 +36,7 @@ class Parser // MySQL Utility Statements 'DESCRIBE' => 'SqlParser\\Statements\\ExplainStatement', + 'DESC' => 'SqlParser\\Statements\\ExplainStatement', 'EXPLAIN' => 'SqlParser\\Statements\\ExplainStatement', 'FLUSH' => '', 'GRANT' => '', @@ -124,17 +125,17 @@ class Parser 'ALTER' => array( 'class' => 'SqlParser\\Components\\Expression', 'field' => 'table', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'ANALYZE' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'BACKUP' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'CALL' => array( 'class' => 'SqlParser\\Components\\FunctionCall', @@ -143,22 +144,22 @@ class Parser 'CHECK' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'CHECKSUM' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'DROP' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'fields', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'FROM' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'from', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'GROUP BY' => array( 'class' => 'SqlParser\\Components\\OrderKeyword', @@ -211,7 +212,7 @@ class Parser 'OPTIMIZE' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'ORDER BY' => array( 'class' => 'SqlParser\\Components\\OrderKeyword', @@ -232,12 +233,12 @@ class Parser 'REPAIR' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'RESTORE' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'SET' => array( 'class' => 'SqlParser\\Components\\SetOperation', @@ -250,12 +251,12 @@ class Parser 'TRUNCATE' => array( 'class' => 'SqlParser\\Components\\Expression', 'field' => 'table', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'UPDATE' => array( 'class' => 'SqlParser\\Components\\ExpressionArray', 'field' => 'tables', - 'options' => array('skipColumn' => true), + 'options' => array('parseField' => 'table'), ), 'VALUE' => array( 'class' => 'SqlParser\\Components\\Array2d', diff --git a/libraries/sql-parser/src/Statements/AlterStatement.php b/libraries/sql-parser/src/Statements/AlterStatement.php index 4da360aafc..c8786bd603 100644 --- a/libraries/sql-parser/src/Statements/AlterStatement.php +++ b/libraries/sql-parser/src/Statements/AlterStatement.php @@ -76,8 +76,8 @@ class AlterStatement extends Statement $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, + 'parseField' => 'column', + 'breakOnAlias' => true, ) ); ++$list->idx; // Skipping field. diff --git a/libraries/sql-parser/src/Statements/CreateStatement.php b/libraries/sql-parser/src/Statements/CreateStatement.php index fe6693bf9d..d5e23ad421 100644 --- a/libraries/sql-parser/src/Statements/CreateStatement.php +++ b/libraries/sql-parser/src/Statements/CreateStatement.php @@ -342,9 +342,8 @@ class CreateStatement extends Statement $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, - 'skipColumn' => true, + 'parseField' => 'table', + 'breakOnAlias' => true, ) ); @@ -538,9 +537,8 @@ class CreateStatement extends Statement $parser, $list, array( - 'noAlias' => true, - 'noBrackets' => true, - 'skipColumn' => true, + 'parseField' => 'table', + 'breakOnAlias' => true, ) ); ++$list->idx; diff --git a/libraries/sql-parser/src/Utils/BufferedQuery.php b/libraries/sql-parser/src/Utils/BufferedQuery.php index f399220b22..1aaa9d7910 100644 --- a/libraries/sql-parser/src/Utils/BufferedQuery.php +++ b/libraries/sql-parser/src/Utils/BufferedQuery.php @@ -29,12 +29,18 @@ class BufferedQuery { // Constants that describe the current status of the parser. - const STATUS_STRING_SINGLE_QUOTES = 1; - const STATUS_STRING_DOUBLE_QUOTES = 2; - const STATUS_STRING_BACKTICK = 3; - const STATUS_COMMENT_BASH = 4; - const STATUS_COMMENT_C = 5; - const STATUS_COMMENT_SQL = 6; + + // A string is being parsed. + const STATUS_STRING = 16; // 0001 0000 + const STATUS_STRING_SINGLE_QUOTES = 17; // 0001 0001 + const STATUS_STRING_DOUBLE_QUOTES = 18; // 0001 0010 + const STATUS_STRING_BACKTICK = 20; // 0001 0100 + + // A comment is being parsed. + const STATUS_COMMENT = 32; // 0010 0000 + const STATUS_COMMENT_BASH = 33; // 0010 0001 + const STATUS_COMMENT_C = 34; // 0010 0010 + const STATUS_COMMENT_SQL = 36; // 0010 0100 /** * The query that is being processed. @@ -193,7 +199,7 @@ class BufferedQuery * treated differently, because of the preceding backslash, it will * be ignored. */ - if ($this->query[$i] === '\\') { + if (($this->status & static::STATUS_COMMENT == 0) && ($this->query[$i] === '\\')) { $this->current .= $this->query[$i] . $this->query[++$i]; continue; } diff --git a/libraries/sql-parser/src/Utils/Formatter.php b/libraries/sql-parser/src/Utils/Formatter.php index 7ff13463f6..266440bcd6 100644 --- a/libraries/sql-parser/src/Utils/Formatter.php +++ b/libraries/sql-parser/src/Utils/Formatter.php @@ -305,8 +305,8 @@ class Formatter && (!$formattedOptions) && (empty(self::$INLINE_CLAUSES[$lastClause])) && (($curr->type !== Token::TYPE_KEYWORD) - || (($curr->type === Token::TYPE_KEYWORD) - && ($curr->flags & Token::FLAG_KEYWORD_FUNCTION))) + || (($curr->type === Token::TYPE_KEYWORD) + && ($curr->flags & Token::FLAG_KEYWORD_FUNCTION))) ) { $formattedOptions = true; $lineEnded = true; diff --git a/license.php b/license.php index 7348af874f..62f3a15d48 100644 --- a/license.php +++ b/license.php @@ -22,7 +22,7 @@ header('Content-type: text/plain; charset=utf-8'); $filename = LICENSE_FILE; // Check if the file is available, some distributions remove these. -if (is_readable($filename)) { +if (@is_readable($filename)) { readfile($filename); } else { printf( diff --git a/lint.php b/lint.php index 3aee35ba96..0ee1e28e7b 100644 --- a/lint.php +++ b/lint.php @@ -35,4 +35,16 @@ PMA_Response::getInstance()->disable(); PMA_headerJSON(); +if (! empty($_POST['options'])) { + $options = $_POST['options']; + + if (! empty($options['routine_editor'])) { + $sql_query = 'CREATE PROCEDURE `a`() ' . $sql_query; + } elseif (! empty($options['trigger_editor'])) { + $sql_query = 'CREATE TRIGGER `a` AFTER INSERT ON `b` FOR EACH ROW ' . $sql_query; + } elseif (! empty($options['event_editor'])) { + $sql_query = 'CREATE EVENT `a` ON SCHEDULE EVERY MINUTE DO ' . $sql_query; + } +} + echo json_encode(PMA_Linter::lint($sql_query)); diff --git a/po/af.po b/po/af.po index 4490c55b05..b4044a9095 100644 --- a/po/af.po +++ b/po/af.po @@ -11360,7 +11360,7 @@ msgstr "Beskikbaar" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Veranderinge is gestoor" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ar.po b/po/ar.po index ddc4bcb373..ba0f1d7e49 100644 --- a/po/ar.po +++ b/po/ar.po @@ -11605,7 +11605,7 @@ msgstr "مفعل" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "تمت التعديلات" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/az.po b/po/az.po index 2b39ad6af0..af5165a41a 100644 --- a/po/az.po +++ b/po/az.po @@ -10945,7 +10945,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiqurasiya yaddaşa verildi." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/be.po b/po/be.po index 4350e51a05..3eaaaa3ff4 100644 --- a/po/be.po +++ b/po/be.po @@ -11917,7 +11917,7 @@ msgstr "Уключана" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Мадыфікацыі былі захаваныя" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/be@latin.po b/po/be@latin.po index 1cbfbe8f1b..840fb6bb8f 100644 --- a/po/be@latin.po +++ b/po/be@latin.po @@ -11986,7 +11986,7 @@ msgstr "Uklučana" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Madyfikacyi byli zachavanyja" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/bg.po b/po/bg.po index 75fb6acbb8..14dd9e3e44 100644 --- a/po/bg.po +++ b/po/bg.po @@ -11570,7 +11570,7 @@ msgstr "Позволено" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Конфигурацията запазена." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/bn.po b/po/bn.po index 0c379d8ecb..1d236ebb89 100644 --- a/po/bn.po +++ b/po/bn.po @@ -11598,7 +11598,7 @@ msgstr "কার্যকর" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "কনফিগারেশন সংরক্ষন করা হয়েছে।" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/br.po b/po/br.po index 6c2ff6ed16..762dbaf562 100644 --- a/po/br.po +++ b/po/br.po @@ -11574,7 +11574,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration file" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Restr gefluniañ" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/bs.po b/po/bs.po index 4d659c5059..738db9cee4 100644 --- a/po/bs.po +++ b/po/bs.po @@ -11560,7 +11560,7 @@ msgstr "Omogućeno" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Izmjene su sačuvane" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ca.po b/po/ca.po index 63419151eb..ccb1e87073 100644 --- a/po/ca.po +++ b/po/ca.po @@ -11194,7 +11194,7 @@ msgid "Enabled" msgstr "Activat" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuració de pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ckb.po b/po/ckb.po index 77f5226454..3007f49e92 100644 --- a/po/ckb.po +++ b/po/ckb.po @@ -11012,7 +11012,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/cs.po b/po/cs.po index 28a1b3b85a..70389bc9a9 100644 --- a/po/cs.po +++ b/po/cs.po @@ -6,10 +6,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-11-12 10:29+0000\n" +"PO-Revision-Date: 2016-01-31 11:31+0000\n" "Last-Translator: Michal Čihař \n" -"Language-Team: Czech \n" +"Language-Team: Czech " +"\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -4708,9 +4708,9 @@ msgid "Skip Explain SQL" msgstr "Bez vysvětlení SQL" #: libraries/Util.class.php:1189 -#, fuzzy, php-format +#, php-format msgid "Analyze Explain at %s" -msgstr "Analyzovat výstup příkazu Explain na %s" +msgstr "Analyzovat výstup příkazu EXPLAIN na %s" #: libraries/Util.class.php:1220 msgid "Without PHP Code" @@ -7859,10 +7859,11 @@ msgid "Enable Zero Configuration mode" msgstr "Umožnit mód Automatické konfigurace" #: libraries/config/page_settings.class.php:140 -#, fuzzy #| msgid "Cannot save settings, submitted form contains errors!" msgid "Cannot save settings, submitted configuration form contains errors!" -msgstr "Nepodařilo se uložit nastavení, odeslaný formulář obsahuje chyby!" +msgstr "" +"Nepodařilo se uložit nastavení, odeslaný konfigurační formulář obsahuje " +"chyby!" #: libraries/config/setup.forms.php:40 msgid "Config authentication" @@ -8441,14 +8442,11 @@ msgstr "" "ale může to způsobit problémy s transakcemi.)" #: libraries/display_import.lib.php:309 -#, fuzzy #| msgid "" #| "Skip this number of queries (for SQL) or lines (for other formats), " #| "starting from the first one:" msgid "Skip this number of queries (for SQL) starting from the first one:" -msgstr "" -"Přeskočit daný počet dotazů (pro SQL) nebo řádek (pro ostatní formáty), " -"počínaje od:" +msgstr "Přeskočit daný počet dotazů (pro SQL) počínaje od:" #: libraries/display_import.lib.php:339 msgid "Other options:" @@ -11062,8 +11060,8 @@ msgid "Enabled" msgstr "Zapnuto" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " -msgstr "Konfigurace pmadb... " +msgid "Configuration of pmadb…" +msgstr "Konfigurace pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" @@ -16240,7 +16238,7 @@ msgstr "" #: libraries/advisory_rules.txt:267 #, php-format msgid "Current values are tmp_table_size: %s, max_heap_table_size: %s" -msgstr "Současné hodnoty jous tmp_table_size: %s, max_heap_table_size: %s" +msgstr "Současné hodnoty jsou tmp_table_size: %s, max_heap_table_size: %s" #: libraries/advisory_rules.txt:269 msgid "Percentage of temp tables on disk" diff --git a/po/cy.po b/po/cy.po index 9a2255be28..a5e09b0ecb 100644 --- a/po/cy.po +++ b/po/cy.po @@ -11669,7 +11669,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Cafodd yr addasiadau eu cadw" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/da.po b/po/da.po index 374b4bb633..5d3e2df3c1 100644 --- a/po/da.po +++ b/po/da.po @@ -11262,7 +11262,7 @@ msgid "Enabled" msgstr "Slået til" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguration af pmadb … " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/de.po b/po/de.po index 4f47264c0a..26cecbd004 100644 --- a/po/de.po +++ b/po/de.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-12-17 13:57+0000\n" -"Last-Translator: Anna Henningsen \n" -"Language-Team: German \n" +"PO-Revision-Date: 2016-01-18 18:42+0000\n" +"Last-Translator: BlackyPanther \n" +"Language-Team: German " +"\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2629,6 +2629,13 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" +"Es gab ein Problem beim Zugriff auf den lokalen Browserspeicher, weshalb " +"manche Eigenschaften möglicherweise nicht funktionieren. Dies tritt meistens " +"auf, wenn der Browser lokale Datenbanken nicht unterstützt oder das Quota-" +"Limit erreicht wurde. Im Firefox kann auch ein beschädigter Speicher solche " +"Probleme verursachen. Eventuell hilft es die \"Offline Webseiten Daten\" zu " +"löschen. In Safari entstehen solche Probleme meistens, wenn das \"Private " +"Surfen\" aktiviert ist." #: js/messages.php:635 msgctxt "Previous month" @@ -11296,7 +11303,7 @@ msgid "Enabled" msgstr "Aktiviert" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguration des pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/el.po b/po/el.po index 24bc0dfc09..12c6f40839 100644 --- a/po/el.po +++ b/po/el.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-14 16:02+0000\n" +"PO-Revision-Date: 2016-02-02 10:26+0000\n" "Last-Translator: Παναγιώτης Παπάζογλου \n" "Language-Team: Greek " "\n" @@ -11262,8 +11262,8 @@ msgid "Enabled" msgstr "Ενεργοποιημένη" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " -msgstr "Ρύθμιση της pmadb… " +msgid "Configuration of pmadb…" +msgstr "Ρύθμιση της pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" diff --git a/po/en_GB.po b/po/en_GB.po index 05d9abf9c0..7b7018e294 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -11596,7 +11596,7 @@ msgstr "Enabled" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuration saved." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/eo.po b/po/eo.po index a5a11e18d8..be79851aa2 100644 --- a/po/eo.po +++ b/po/eo.po @@ -10383,7 +10383,7 @@ msgid "Enabled" msgstr "Ŝaltita" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/es.po b/po/es.po index 95d72ffb33..ba11cce999 100644 --- a/po/es.po +++ b/po/es.po @@ -11300,7 +11300,7 @@ msgid "Enabled" msgstr "Habilitado" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuración de pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/et.po b/po/et.po index 33899e34a0..18f4ebe467 100644 --- a/po/et.po +++ b/po/et.po @@ -11060,7 +11060,7 @@ msgid "Enabled" msgstr "Lubatud" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "pmadb seadistus... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/eu.po b/po/eu.po index 5bfd76f629..395ac91f29 100644 --- a/po/eu.po +++ b/po/eu.po @@ -11584,7 +11584,7 @@ msgstr "Gaituta" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Aldaketak gorde dira" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/fa.po b/po/fa.po index 403a1b291e..bd2817abe6 100644 --- a/po/fa.po +++ b/po/fa.po @@ -11480,7 +11480,7 @@ msgstr "فعال" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "اصلاحات ذخيره گرديد" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/fi.po b/po/fi.po index beb7686443..58f7edbeea 100644 --- a/po/fi.po +++ b/po/fi.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-11-12 10:40+0000\n" -"Last-Translator: Michal Čihař \n" -"Language-Team: Finnish \n" +"PO-Revision-Date: 2016-01-25 09:44+0000\n" +"Last-Translator: Daniel Iltanen \n" +"Language-Team: Finnish " +"\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -5279,7 +5279,7 @@ msgstr "" "Avaimen pitäisi sisältää kirjaimia, numeroita [em]ja[/em] erikoismerkkejä." #: libraries/config/ServerConfigChecks.class.php:382 -#, fuzzy, php-format +#, php-format #| msgid "" #| "a@?page=form&formset=features#tab_Security]option[/a] should be abled " #| "it allows attackers to bruteforce login to any MySQL server. you feel s " @@ -5296,7 +5296,7 @@ msgstr "" "Tämä %svalinta%s pitäisi poistaa käytöstä, sillä se sallii hyökkääjien " "kirjautua mihin tahansa MySQL-palvelimeen käyttämällä bruteforce-hyökkäystä. " "Jos tätä valintaa on pakko käyttää, käytä %srestrict login to MySQL server%s " -"or %sluotettujen välipalvelimien luetteloa%s. IP-osoitteeseen perustuva " +"tai %sluotettujen välipalvelimien luetteloa%s. IP-osoitteeseen perustuva " "suojaus ei kuitenkaan ole täysin luotettava mikäli IP-osoite kuuluu Internet-" "palveluntarjoajalle, johon sinun lisäksesi tuhannet käyttäjät ovat " "yhteydessä." @@ -7542,7 +7542,7 @@ msgstr "Näytä tietokannanluontilomake" #: libraries/config/messages.inc.php:847 msgid "Show or hide a column displaying the comments for all tables." -msgstr "" +msgstr "Näytä tai piilota kommentti -sarake kaikista tauluista." #: libraries/config/messages.inc.php:849 #, fuzzy @@ -11362,7 +11362,7 @@ msgstr "Päällä" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Asetukset tallennettu." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/fr.po b/po/fr.po index 769eca4d2a..b075b6cbf5 100644 --- a/po/fr.po +++ b/po/fr.po @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: phpMyAdmin-docs 4.0.0-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-14 12:59+0000\n" -"Last-Translator: Marc Delisle \n" +"PO-Revision-Date: 2016-01-22 22:49+0000\n" +"Last-Translator: Adam Magnier \n" "Language-Team: French " "\n" "Language: fr\n" @@ -5587,7 +5587,7 @@ msgstr "Secret Blowfish" #: libraries/config/messages.inc.php:40 msgid "Highlight selected rows." -msgstr "Utilisé quand on clique sur une ligne." +msgstr "Mettre en surbrillance les lignes sélectionnées." #: libraries/config/messages.inc.php:41 msgid "Row marker" @@ -5619,7 +5619,7 @@ msgid "" "columns; [kbd]input[/kbd] - allows limiting of input length, [kbd]textarea[/" "kbd] - allows newlines in columns." msgstr "" -"Déterminer la méthode d'édition pour les colonnes CHAR et VARCHAR; " +"Détermine la méthode d'édition pour les colonnes CHAR et VARCHAR; " "[kbd]input[/kbd] - permet de limiter la taille, [kbd]textarea[/kbd] - permet " "la saisie de sauts de lignes." @@ -11263,8 +11263,8 @@ msgid "Enabled" msgstr "Activé" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " -msgstr "Configuration de pmadb… " +msgid "Configuration of pmadb…" +msgstr "Configuration de pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" @@ -16840,7 +16840,7 @@ msgstr "" msgid "" "Max_used_connections is at %s%% of max_connections, it should be below 80%%" msgstr "" -"Max_used_connections est à %s%% de max_connections, devrait être sous les " +"Max_used_connections est à %s%% de max_connections, il devrait être sous les " "80%%" #: libraries/advisory_rules.txt:399 @@ -16940,8 +16940,8 @@ msgid "" "The InnoDB log file size is not an appropriate size, in relation to the " "InnoDB buffer pool." msgstr "" -"La taille du journal InnoDB n'est pas appropriée, en tenant compte du pool " -"de mémoire tampon InnoDB." +"La taille du journal InnoDB n'est pas appropriée, par rapport au pool de " +"mémoire tampon InnoDB." #: libraries/advisory_rules.txt:440 #, php-format @@ -16956,16 +16956,16 @@ msgid "" "fine. See also this blog entry" msgstr "" -"Surtout si votre système effectue de nombreuses écritures dans des tables " -"InnoDB, vous devriez régler innodb_log_file à 25%% de " +"En particulier si votre système effectue de nombreuses écritures dans des " +"tables InnoDB, vous devriez régler innodb_log_file à 25%% de " "{innodb_buffer_pool_size}. Cependant, plus cette valeur est élevée, plus " "long sera le temps de recouvrement en cas de panne de la base de données, " "alors cette valeur ne devrait pas dépasser 256 Mio. Veuillez noter que vous " "ne pouvez pas simplement changer la valeur de cette variable. Il vous faut " "fermer le serveur, enlever les journaux InnoDB, placer la nouvelle valeur " "dans my.cnf, démarrer le serveur, puis vérifier les journaux d'erreurs. Voir " -"aussi cet article de blogue." +"aussi cet article de blogue." #: libraries/advisory_rules.txt:441 #, php-format @@ -16973,8 +16973,8 @@ msgid "" "Your InnoDB log size is at %s%% in relation to the InnoDB buffer pool size, " "it should not be below 20%%" msgstr "" -"La taille de votre journal InnoDB est de %s%% en comparant au pool de " -"mémoire tampon InnoDB, elle ne devrait pas être sous les 20%%" +"La taille de votre journal InnoDB est de %s%% par rapport au pool de mémoire " +"tampon InnoDB, elle ne devrait pas être sous les 20%%" #: libraries/advisory_rules.txt:443 msgid "Max InnoDB log size" @@ -17018,7 +17018,7 @@ msgstr "Taille de la mémoire-tampon InnoDB" #: libraries/advisory_rules.txt:453 msgid "Your InnoDB buffer pool is fairly small." -msgstr "Votre mémoire-tampon InnoDB est petite." +msgstr "Votre mémoire-tampon InnoDB est trop petite." #: libraries/advisory_rules.txt:454 #, php-format diff --git a/po/fy.po b/po/fy.po index 84f543ef48..8859588e32 100644 --- a/po/fy.po +++ b/po/fy.po @@ -10544,7 +10544,7 @@ msgid "Enabled" msgstr "Ynskeakele" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/gl.po b/po/gl.po index 5e357f12c6..ce5e3cbcce 100644 --- a/po/gl.po +++ b/po/gl.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-11 22:37+0000\n" +"PO-Revision-Date: 2016-01-17 22:02+0000\n" "Last-Translator: Xosé Calvo \n" -"Language-Team: Galician \n" +"Language-Team: Galician " +"\n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2595,6 +2595,12 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" +"Produciuse un problema ao acceder ao almacenamento do seu navegador; " +"algunhas funcionalidades poderían non funcionar axeitadamente. É probábel " +"que o navegador non admita o almacenamento ou que se atinxise o límite de " +"cota. No Firefox o almacenamento estragado pode provocar problemas deste " +"tipo; limpar os «Datos de sitios web sen conexión» podería axudar. No Safari " +"este é un problema que causa frecuentemente a «Navegación en modo privado»." #: js/messages.php:635 msgctxt "Previous month" @@ -6438,7 +6444,7 @@ msgstr "" #: libraries/config/messages.inc.php:375 libraries/config/messages.inc.php:389 msgid "Update data when duplicate keys found on import" -msgstr "" +msgstr "Actualizar os datos ao atopar chaves duplicadas ao importar" #: libraries/config/messages.inc.php:379 msgid "" @@ -6812,7 +6818,7 @@ msgstr "Mostrar os procedementos nunha árbore" #: libraries/config/messages.inc.php:535 msgid "Whether to show procedures under database in the navigation tree" -msgstr "" +msgstr "Mostrar os procedementos baixo a base de datos na árbore de navegación" #: libraries/config/messages.inc.php:536 msgid "Show events in tree" @@ -6850,11 +6856,11 @@ msgstr "Onde mostrar as ligazóns das fileiras das táboas" #: libraries/config/messages.inc.php:548 msgid "Whether to show row links even in the absence of a unique key." -msgstr "" +msgstr "Mostrar as ligazóns das filas mesmo na ausencia de chaves únicas." #: libraries/config/messages.inc.php:550 msgid "Show row links anyway" -msgstr "" +msgstr "Mostrar as ligazóns das filas de calquera maneira" #: libraries/config/messages.inc.php:552 msgid "Use natural order for sorting table and database names." @@ -7002,7 +7008,7 @@ msgstr "Recordar a ordenación da táboa" #: libraries/config/messages.inc.php:607 msgid "Default sort order for tables with a primary key." -msgstr "" +msgstr "Orde predeterminada de ordenación das táboas con chave primaria." #: libraries/config/messages.inc.php:609 #, fuzzy @@ -7472,7 +7478,6 @@ msgid "Display columns table" msgstr "Mostrar a táboa de columnas" #: libraries/config/messages.inc.php:773 -#, fuzzy #| msgid "" #| "Leave blank for no \"persistent\" tables' UI preferences across sessions, " #| "suggested: [kbd]pma__table_uiprefs[/kbd]" @@ -7481,7 +7486,7 @@ msgid "" "suggested: [kbd]pma__table_uiprefs[/kbd]." msgstr "" "Déixeo en branco se non desexa preferencias «persistentes» da interface das " -"táboas entre sesións; suxírese: [kbd]pma__table_uiprefs[/kbd]" +"táboas entre sesións; suxírese: [kbd]pma__table_uiprefs[/kbd]." #: libraries/config/messages.inc.php:776 msgid "UI preferences table" @@ -7601,7 +7606,7 @@ msgstr "" #: libraries/config/messages.inc.php:827 msgid "Hidden navigation items table" -msgstr "" +msgstr "Táboa de elementos de navegación agochados" #: libraries/config/messages.inc.php:829 msgid "User for config auth" @@ -7945,7 +7950,7 @@ msgstr "" #: libraries/config/messages.inc.php:965 msgid "Proxy url" -msgstr "" +msgstr "URL do proxy" #: libraries/config/messages.inc.php:967 msgid "" @@ -8002,7 +8007,7 @@ msgstr "Chave privada do reCaptcha" #: libraries/config/messages.inc.php:991 msgid "Choose the default action when sending error reports." -msgstr "" +msgstr "Escolla a acción predeterminada para enviar informes de fallo." #: libraries/config/messages.inc.php:993 msgid "Send error reports" @@ -8013,12 +8018,13 @@ msgid "" "Queries are executed by pressing Enter (instead of Ctrl+Enter). New lines " "will be inserted with Shift+Enter." msgstr "" +"As consultas execútanse ao premer Intro (no canto de Ctrl+Intro). As liñas " +"novas insírense con Maiús+Intro." #: libraries/config/messages.inc.php:999 -#, fuzzy #| msgid "Executed queries" msgid "Enter executes queries in console" -msgstr "Consultas executadas" +msgstr "Intro executa consultas na consola" #: libraries/config/messages.inc.php:1002 msgid "" @@ -8105,14 +8111,14 @@ msgstr "Deixouse a vista %s" #: libraries/controllers/DatabaseStructureController.class.php:429 #: tbl_operations.php:398 -#, fuzzy, php-format +#, php-format #| msgid "Table %s has been dropped." msgid "Table %s has been dropped." -msgstr "Eliminouse a táboa %s" +msgstr "Eliminouse a táboa %s." #: libraries/controllers/DatabaseStructureController.class.php:738 msgid "Favorite List is full!" -msgstr "" +msgstr "A lista de favoritos está chea!" #: libraries/controllers/DatabaseStructureController.class.php:953 #: libraries/mysql_charsets.lib.php:369 libraries/mysql_charsets.lib.php:376 @@ -8165,18 +8171,17 @@ msgstr "Busca gráfica" #: libraries/controllers/TableSearchController.class.php:850 #: templates/table/search/selection_form.phtml:59 -#, fuzzy #| msgid "Find and Replace" msgid "Find and replace" -msgstr "Buscar e substituír" +msgstr "Atopar e substituír" #: libraries/controllers/TableStructureController.class.php:163 -#, fuzzy, php-format +#, php-format #| msgid "The column name '%s' is a MySQL reserved keyword." msgid "The name '%s' is a MySQL reserved keyword." msgid_plural "The names '%s' are MySQL reserved keywords." -msgstr[0] "O nome de columna «%s» é unha palabra chave reservada do MySQL." -msgstr[1] "O nome de columna «%s» é unha palabra chave reservada do MySQL." +msgstr[0] "O nome «%s» é unha palabra chave reservada do MySQL." +msgstr[1] "Os nomes «%s» son palabras chaves reservadas do MySQL." #: libraries/controllers/TableStructureController.class.php:241 msgid "No column selected." @@ -8187,11 +8192,11 @@ msgid "The columns have been moved successfully." msgstr "Movéronse as columnas satisfactoriamente." #: libraries/controllers/TableStructureController.class.php:741 -#, fuzzy, php-format +#, php-format #| msgid "Table %1$s has been altered successfully." msgid "" "Table %1$s has been altered successfully. Privileges have been adjusted." -msgstr "Alterouse a táboa %1$s sen problemas." +msgstr "Alterouse a táboa %1$s sen problemas. Axustáronse os privilexios." #: libraries/controllers/TableStructureController.class.php:796 #: libraries/tracking.lib.php:1094 @@ -8349,28 +8354,24 @@ msgid "Export templates:" msgstr "Tipo de exportación" #: libraries/display_export.lib.php:205 -#, fuzzy #| msgid "File name template:" msgid "New template:" -msgstr "Modelo do nome de ficheiro:" +msgstr "Modelo novo:" #: libraries/display_export.lib.php:208 -#, fuzzy #| msgid "Table name" msgid "Template name" -msgstr "Nome da táboa" +msgstr "Nome do modelo" #: libraries/display_export.lib.php:217 -#, fuzzy #| msgid "File name template:" msgid "Existing templates:" -msgstr "Modelo do nome de ficheiro:" +msgstr "Modelos existentes:" #: libraries/display_export.lib.php:218 -#, fuzzy #| msgid "Temp disk rate" msgid "Template:" -msgstr "Taxa de temporais no disco" +msgstr "Modelo:" #: libraries/display_export.lib.php:223 #, fuzzy @@ -8379,16 +8380,14 @@ msgid "Update" msgstr "Actualizada" #: libraries/display_export.lib.php:245 -#, fuzzy #| msgid "Select Tables" msgid "Select a template" -msgstr "Escoller táboas" +msgstr "Seleccionar un modelo" #: libraries/display_export.lib.php:291 -#, fuzzy #| msgid "Export method" msgid "Export method:" -msgstr "Método de exportación" +msgstr "Método de exportación:" #: libraries/display_export.lib.php:301 msgid "Quick - display only the minimal options" @@ -8399,17 +8398,15 @@ msgid "Custom - display all possible options" msgstr "Personalizada - mostrar todas as opcións posíbeis" #: libraries/display_export.lib.php:335 -#, fuzzy #| msgid "Databases" msgid "Databases:" -msgstr "Bases de datos" +msgstr "Bases de datos:" #: libraries/display_export.lib.php:337 #: libraries/navigation/Navigation.class.php:196 -#, fuzzy #| msgid "Tables" msgid "Tables:" -msgstr "Táboas" +msgstr "Táboas:" #: libraries/display_export.lib.php:357 libraries/display_import.lib.php:358 #: libraries/plugins/export/ExportCodegen.class.php:107 @@ -8511,20 +8508,18 @@ msgid "View output as text" msgstr "Ver a saída como texto" #: libraries/display_export.lib.php:751 -#, fuzzy #| msgid "Export views" msgid "Export databases as separate files" -msgstr "Exportar as vistas" +msgstr "Exportar as bases de datos como ficheiros separados" #: libraries/display_export.lib.php:753 -#, fuzzy #| msgid "Export table headers" msgid "Export tables as separate files" -msgstr "Exportar os cabezallos das táboas" +msgstr "Exportar as táboas como ficheiros separados" #: libraries/display_export.lib.php:783 libraries/display_export.lib.php:909 msgid "Rename exported databases/tables/columns" -msgstr "" +msgstr "Mudar o nome das bases de datos/táboas/columnas seleccionadas" #: libraries/display_export.lib.php:808 msgid "Save output to a file" @@ -8532,19 +8527,17 @@ msgstr "Gardar a saída nun ficheiro" #: libraries/display_export.lib.php:841 msgid "Skip tables larger than" -msgstr "" +msgstr "Omitir as táboas maiores de" #: libraries/display_export.lib.php:936 -#, fuzzy #| msgid "Select Tables" msgid "Select database" -msgstr "Escoller táboas" +msgstr "Seleccionar base de datos" #: libraries/display_export.lib.php:938 -#, fuzzy #| msgid "Select Tables" msgid "Select table" -msgstr "Escoller táboas" +msgstr "Seleccionar táboa" #: libraries/display_export.lib.php:954 #, fuzzy @@ -8553,16 +8546,14 @@ msgid "New database name" msgstr "nome da base de datos" #: libraries/display_export.lib.php:978 -#, fuzzy #| msgid "New table" msgid "New table name" -msgstr "Sen táboas" +msgstr "Nome novo da táboa" #: libraries/display_export.lib.php:988 -#, fuzzy #| msgid "Copy column name" msgid "Old column name" -msgstr "Copiar nome da columna" +msgstr "Nome anterior da táboa" #: libraries/display_export.lib.php:989 #, fuzzy @@ -8629,21 +8620,19 @@ msgstr "" "b>. Exemplo: .sql.zip" #: libraries/display_import.lib.php:224 -#, fuzzy #| msgid "File to Import:" msgid "File to import:" msgstr "Ficheiro que importar:" #: libraries/display_import.lib.php:234 libraries/display_import.lib.php:251 msgid "You may also drag and drop a file on any page." -msgstr "" +msgstr "Tamén pode arrastrar e soltar un ficheiro sobre calquera páxina." #: libraries/display_import.lib.php:254 msgid "File uploads are not allowed on this server." msgstr "Este servidor non admite a recepción de ficheiros." #: libraries/display_import.lib.php:278 -#, fuzzy #| msgid "Partial Import:" msgid "Partial import:" msgstr "Importación parcial:" @@ -8667,16 +8656,14 @@ msgstr "" "importar ficheiros longos, aínda que pode rachar transaccións.)" #: libraries/display_import.lib.php:309 -#, fuzzy #| msgid "Number of rows to skip, starting from the first row:" msgid "Skip this number of queries (for SQL) starting from the first one:" -msgstr "Número de filas que saltar, comezando na primeira:" +msgstr "Omitir este número de consultas (para SQL), comezando na primeira:" #: libraries/display_import.lib.php:339 -#, fuzzy #| msgid "Options" msgid "Other options:" -msgstr "Opcións" +msgstr "Outras opcións:" #: libraries/display_import.lib.php:477 msgid "" @@ -9113,10 +9100,9 @@ msgid "" msgstr "As estruturas seguintes foron creadas ou alteradas. Aquí pode:" #: libraries/import.lib.php:1258 -#, fuzzy #| msgid "View a structure's contents by clicking on its name" msgid "View a structure's contents by clicking on its name." -msgstr "Ver o contido dunha estrutura premendo o seu nome" +msgstr "Ver o contido dunha estrutura premendo no seu nome." #: libraries/import.lib.php:1261 #, fuzzy @@ -11445,7 +11431,7 @@ msgstr "Activado" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuración gardada." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 @@ -12392,7 +12378,7 @@ msgstr "Non hai acontecementos que mostrar." #: libraries/select_lang.lib.php:614 msgid "Ignoring unsupported language code." -msgstr "" +msgstr "Ignórase o código de idioma descoñecido." #: libraries/select_server.lib.php:43 libraries/select_server.lib.php:48 #, fuzzy @@ -12457,7 +12443,6 @@ msgstr "" #: libraries/server_databases.lib.php:366 #: libraries/server_databases.lib.php:371 -#, fuzzy #| msgid "Enable Statistics" msgid "Enable statistics" msgstr "Activar as estatísticas" diff --git a/po/he.po b/po/he.po index c974c9bfe0..7e94b8fbc9 100644 --- a/po/he.po +++ b/po/he.po @@ -11539,7 +11539,7 @@ msgstr "מופעל" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "שינויים נשמרו" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/hi.po b/po/hi.po index 1a70571b1f..013229d7fe 100644 --- a/po/hi.po +++ b/po/hi.po @@ -11836,7 +11836,7 @@ msgstr "सक्षम" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration storage" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "विन्यास भंडारण" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/hr.po b/po/hr.po index ade645881a..d5e8fc8d17 100644 --- a/po/hr.po +++ b/po/hr.po @@ -11944,7 +11944,7 @@ msgstr "Omogućeno" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Izmjene su spremljene" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/hu.po b/po/hu.po index 06e053f6fc..f5d58b449a 100644 --- a/po/hu.po +++ b/po/hu.po @@ -11294,7 +11294,7 @@ msgid "Enabled" msgstr "Engedélyezett" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "A pmadb beállítása… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/hy.po b/po/hy.po index ba69b7c636..b9d32f927e 100644 --- a/po/hy.po +++ b/po/hy.po @@ -10668,7 +10668,7 @@ msgid "Enabled" msgstr "Առկա" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 @@ -14443,9 +14443,6 @@ msgid "" "as well as information about relevant configuration settings to send to the " "phpMyAdmin team to help us in debugging the problem." msgstr "" -"Ձեր կայանքները պահպանվելու են միայն ընթացիկ ժամանակաշրջանի համար։ Դրանց " -"մշտական պահպանման համար անհրաժեշտ է %sphpMyAdmin-ի կազմաձևի պահպանման " -"ընդլայնումը%s։" #: templates/error/report_form.phtml:15 msgid "You may examine the data in the error report:" diff --git a/po/ia.po b/po/ia.po index 44854ed11a..a30f0deea4 100644 --- a/po/ia.po +++ b/po/ia.po @@ -11178,7 +11178,7 @@ msgid "Enabled" msgstr "Habilitate" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuration de pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/id.po b/po/id.po index 83c8a63eb4..fd0dff5310 100644 --- a/po/id.po +++ b/po/id.po @@ -11845,7 +11845,7 @@ msgid "Enabled" msgstr "Aktif" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurasi pmadb … " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/it.po b/po/it.po index 2c643709bf..d3375676f6 100644 --- a/po/it.po +++ b/po/it.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-14 14:28+0000\n" +"PO-Revision-Date: 2016-02-04 11:09+0000\n" "Last-Translator: Stefano Martinelli \n" "Language-Team: Italian " "\n" @@ -11286,8 +11286,8 @@ msgid "Enabled" msgstr "Abilitata" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " -msgstr "Configurazione di pmadb... " +msgid "Configuration of pmadb…" +msgstr "Configurazione di pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" @@ -12779,7 +12779,7 @@ msgstr "Revoca tutti i privilegi attivi agli utenti e dopo li cancella." #: libraries/server_privileges.lib.php:3679 #: libraries/server_privileges.lib.php:3682 msgid "Drop the databases that have the same names as the users." -msgstr "Elimina i databases gli stessi nomi degli utenti." +msgstr "Elimina i database che hanno gli stessi nomi degli utenti." #: libraries/server_privileges.lib.php:3825 msgid "No users selected for deleting!" diff --git a/po/ja.po b/po/ja.po index 68cde47ecf..6567ea44eb 100644 --- a/po/ja.po +++ b/po/ja.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-07 09:01+0000\n" -"Last-Translator: 初音ミク(Siketyan) \n" -"Language-Team: Japanese \n" +"PO-Revision-Date: 2016-01-22 11:08+0000\n" +"Last-Translator: Masahiro Nishi \n" +"Language-Team: Japanese " +"\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -949,10 +949,9 @@ msgstr "" "のデータも削除されます!" #: js/messages.php:65 -#, fuzzy #| msgid "Do you really want to delete the search \"%s\"?" msgid "Do you really want to TRUNCATE the selected partition(s)?" -msgstr "本当に検索「%s」の削除を実行しますか?" +msgstr "選択したパーティションを本当に削除しますか?" #: js/messages.php:66 #, fuzzy @@ -1071,10 +1070,9 @@ msgid "Preview SQL" msgstr "SQLのプレビュー" #: js/messages.php:113 -#, fuzzy #| msgid "in query" msgid "Simulate query" -msgstr "行/クエリ" +msgstr "クエリを検証" #: js/messages.php:114 #, fuzzy @@ -12150,7 +12148,7 @@ msgstr "有効" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "設定を保存しました。" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ka.po b/po/ka.po index 1fd7788497..c44eff911b 100644 --- a/po/ka.po +++ b/po/ka.po @@ -12019,7 +12019,7 @@ msgstr "ჩართულია" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration file" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "კონფიგურაციის ფაილი" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/kk.po b/po/kk.po index 026d763299..c97d4e5df8 100644 --- a/po/kk.po +++ b/po/kk.po @@ -11006,7 +11006,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/km.po b/po/km.po index a9887f85d5..43603cf72a 100644 --- a/po/km.po +++ b/po/km.po @@ -10632,7 +10632,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/kn.po b/po/kn.po index a4812cbcce..2b81e7aae5 100644 --- a/po/kn.po +++ b/po/kn.po @@ -10395,7 +10395,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ko.po b/po/ko.po index c26b6ab400..c5cc580674 100644 --- a/po/ko.po +++ b/po/ko.po @@ -10965,7 +10965,7 @@ msgstr "사용가능" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "수정된 내용이 저장되었습니다." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ksh.po b/po/ksh.po index 4b78c59a2c..5f54248db8 100644 --- a/po/ksh.po +++ b/po/ksh.po @@ -10461,7 +10461,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ky.po b/po/ky.po index d2baa4895a..921ffaf5c5 100644 --- a/po/ky.po +++ b/po/ky.po @@ -10529,7 +10529,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/li.po b/po/li.po index e4bb262b1f..b62a74801c 100644 --- a/po/li.po +++ b/po/li.po @@ -10382,7 +10382,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/lt.po b/po/lt.po index 0d20040001..85570737d2 100644 --- a/po/lt.po +++ b/po/lt.po @@ -12126,7 +12126,7 @@ msgstr "Įjungta" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigūracija išsaugota." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/lv.po b/po/lv.po index de566c401e..5a78eac64d 100644 --- a/po/lv.po +++ b/po/lv.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-10-15 11:23+0200\n" -"Last-Translator: Michal Čihař \n" -"Language-Team: Latvian \n" +"PO-Revision-Date: 2016-01-23 11:11+0000\n" +"Last-Translator: Arturs Nikolajevs \n" +"Language-Team: Latvian " +"\n" "Language: lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -287,7 +287,6 @@ msgstr "Dati" #: db_export.php:67 libraries/DbSearch.class.php:446 #: libraries/display_export.lib.php:44 libraries/replication_gui.lib.php:379 -#, fuzzy #| msgid "Select All" msgid "Select all" msgstr "Iezīmēt visu" @@ -302,7 +301,7 @@ msgid "Database %1$s has been renamed to %2$s." msgstr "Datubāze %1$s tika pārsaukta par %2$s." #: db_operations.php:153 -#, fuzzy, php-format +#, php-format #| msgid "Database %1$s has been copied to %2$s." msgid "Database %1$s has been copied to %2$s." msgstr "Datubāze %1$s tika pārkopēta uz %2$s" @@ -11572,7 +11571,7 @@ msgstr "Ieslēgts" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Labojumi tika saglabāti" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/mk.po b/po/mk.po index b2ce6facd6..24bccedc49 100644 --- a/po/mk.po +++ b/po/mk.po @@ -11697,7 +11697,7 @@ msgstr "Овозможено" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Измените се сочувани" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ml.po b/po/ml.po index 3c2aefa5e1..fb6dc38ce7 100644 --- a/po/ml.po +++ b/po/ml.po @@ -10675,7 +10675,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/mn.po b/po/mn.po index 886a4f26a6..29906fb364 100644 --- a/po/mn.po +++ b/po/mn.po @@ -11783,7 +11783,7 @@ msgstr "Нээлттэй" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Өөрчлөлт хадгалагдав" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ms.po b/po/ms.po index 6eaa16e16c..6e9b64c303 100644 --- a/po/ms.po +++ b/po/ms.po @@ -11409,7 +11409,7 @@ msgstr "Membenarkan" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Pengubahsuaian telah disimpan" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/nb.po b/po/nb.po index a9acfa1198..97cd520b42 100644 --- a/po/nb.po +++ b/po/nb.po @@ -11933,7 +11933,7 @@ msgstr "Påslått" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration storage" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurasjonslager" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ne.po b/po/ne.po index 5ec1ef5364..5ab69a191b 100644 --- a/po/ne.po +++ b/po/ne.po @@ -10436,7 +10436,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/nl.po b/po/nl.po index 061fbade31..64e9581061 100644 --- a/po/nl.po +++ b/po/nl.po @@ -11244,7 +11244,7 @@ msgid "Enabled" msgstr "Ingeschakeld" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuratie van pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/pa.po b/po/pa.po index 973522d28a..9b425a1a59 100644 --- a/po/pa.po +++ b/po/pa.po @@ -10451,7 +10451,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/pl.po b/po/pl.po index c87fbd5e09..8d8c5f1d0a 100644 --- a/po/pl.po +++ b/po/pl.po @@ -11588,7 +11588,7 @@ msgstr "Włączone" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguracja zapisana." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/pt.po b/po/pt.po index 0d5be2e878..87b5ffc490 100644 --- a/po/pt.po +++ b/po/pt.po @@ -11546,7 +11546,7 @@ msgstr "Activado" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Modificações foram guardadas" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/pt_BR.po b/po/pt_BR.po index f857d579fc..9bba29f016 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-11-24 11:30+0000\n" -"Last-Translator: Jader Teixeira \n" -"Language-Team: Portuguese (Brazil) \n" +"PO-Revision-Date: 2016-02-03 19:50+0000\n" +"Last-Translator: Pedro Moreira \n" +"Language-Team: Portuguese (Brazil) " +"\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -967,7 +967,7 @@ msgstr "Você realmente deseja LIMPAR a(s) partição(ões) seleciona(s)?" #, fuzzy #| msgid "Do you really want to execute \"%s\"?" msgid "Do you really want to RESET SLAVE?" -msgstr "Você realmente deseja executar \"%s\"?" +msgstr "Você realmente deseja REINICIAR O SLAVE?" #: js/messages.php:68 msgid "" @@ -1012,7 +1012,7 @@ msgid "" "Are you sure you wish to change all the column collations and convert the " "data?" msgstr "" -"Tem certeza de que deseja mudar todos os agrupamentos de coluna e converter " +"Você tem certeza que quer mudar todos os agrupamento de colunas e converter " "os dados?" #: js/messages.php:89 @@ -2633,6 +2633,7 @@ msgstr "Você realmente deseja excluir a busca \"%s\"?" #: js/messages.php:601 msgid "Some error occurred while getting SQL debug info." msgstr "" +"Ocorreram alguns erros enquanto informações de debug do SQL eram gerados." #: js/messages.php:602 #, fuzzy, php-format @@ -2643,7 +2644,7 @@ msgstr "Consultas executadas" #: js/messages.php:603 #, php-format msgid "%s argument(s) passed" -msgstr "" +msgstr "%s parâmetro(s) passado(s)" #: js/messages.php:604 #, fuzzy @@ -2659,7 +2660,7 @@ msgstr "Ocultar resultados da pesquisa" #: js/messages.php:606 libraries/Console.class.php:321 msgid "Time taken:" -msgstr "" +msgstr "Tempo gasto:" #: js/messages.php:607 msgid "" @@ -2669,6 +2670,12 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" +"Houve um problema ao acessar o armazenamento de seu navegador; algumas " +"funcionalidades podem estar incompletas. As probabilidades são de que seu " +"navegador não suporta armazenamento ou o limite foi atingido. No Firefox, " +"armazenamento corrompido também pode causar este problema e limpar os \"" +"Dados Offline de Sites\" pode ajudar. No Safari, este problema é normalmente " +"causado pelo \"Navegação Privada\"." #: js/messages.php:635 msgctxt "Previous month" @@ -3262,7 +3269,7 @@ msgstr "Executar sempre" #: libraries/Console.class.php:295 msgid "Time taken" -msgstr "" +msgstr "Tempo gasto" #: libraries/Console.class.php:298 #, fuzzy @@ -3386,7 +3393,7 @@ msgstr "Campo:" #: libraries/DBQbe.class.php:513 msgid "Alias:" -msgstr "" +msgstr "Apelido:" #: libraries/DBQbe.class.php:566 msgid "Sort:" @@ -3970,14 +3977,17 @@ msgstr "" "removida." #: libraries/Linter.class.php:96 +#, fuzzy msgid "" "Linting is disabled for this query because it exceeds the maximum length." msgstr "" +"A análise está desabilitada para esta query porque ela excede o tamanho " +"máximo." #: libraries/Linter.class.php:162 #, php-format msgid "%1$s (near %2$s)" -msgstr "" +msgstr "%1$s (próximo a %2$s)" #: libraries/Menu.class.php:203 libraries/ServerStatusData.class.php:442 #: libraries/config/messages.inc.php:933 @@ -11451,7 +11461,7 @@ msgid "Enabled" msgstr "Habilitado" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Configuração de pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ro.po b/po/ro.po index d62514922a..330ba3019b 100644 --- a/po/ro.po +++ b/po/ro.po @@ -11976,7 +11976,7 @@ msgstr "Activat" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Modificările au fost salvate" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ru.po b/po/ru.po index 81b49f3251..f0daf4ef37 100644 --- a/po/ru.po +++ b/po/ru.po @@ -11194,7 +11194,7 @@ msgid "Enabled" msgstr "Доступно" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Конфигурация pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/si.po b/po/si.po index 4d310ae246..610474c087 100644 --- a/po/si.po +++ b/po/si.po @@ -11600,7 +11600,7 @@ msgstr "සක්‍රිය කරන ලද" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "වින්‍යාසය සුරකින ලදි." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sk.po b/po/sk.po index 009c14df80..b03179c145 100644 --- a/po/sk.po +++ b/po/sk.po @@ -4,10 +4,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-10 22:29+0000\n" +"PO-Revision-Date: 2016-01-19 21:35+0000\n" "Last-Translator: Martin Lacina \n" -"Language-Team: Slovak \n" +"Language-Team: Slovak " +"\n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -10901,7 +10901,7 @@ msgid "Enabled" msgstr "Zapnuté" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurácia pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 @@ -10971,10 +10971,9 @@ msgid "Managing Central list of columns" msgstr "" #: libraries/relation.lib.php:332 -#, fuzzy #| msgid "Remember table's sorting" msgid "Remembering Designer Settings" -msgstr "Pamätať si triedenie tabuľky" +msgstr "Pamätať si nastavenia Dizajnéra" #: libraries/relation.lib.php:343 msgid "Saving export templates" @@ -13619,10 +13618,9 @@ msgid "The new name of the table was expected." msgstr "Bolo očakávané nové meno tabuľky." #: libraries/sql-parser/src/Components/RenameOperation.php:148 -#, fuzzy #| msgid "The row has been deleted." msgid "A rename operation was expected." -msgstr "Riadok bol zmazaný." +msgstr "Očakávala sa operácia premenovania." #: libraries/sql-parser/src/Lexer.php:267 msgid "Unexpected character." @@ -13644,10 +13642,9 @@ msgid "Ending quote %1$s was expected." msgstr "Udalosť %1$s bola vytvorená." #: libraries/sql-parser/src/Lexer.php:824 -#, fuzzy #| msgid "Table name template" msgid "Variable name was expected." -msgstr "Vzor pre názov tabuľky" +msgstr "Očakávalo sa meno premennej." #: libraries/sql-parser/src/Parser.php:417 msgid "Unexpected beginning of statement." @@ -13687,10 +13684,9 @@ msgid "The name of the entity was expected." msgstr "Počet práve otvorených tabuliek." #: libraries/sql-parser/src/Statements/CreateStatement.php:370 -#, fuzzy #| msgid "The row has been deleted." msgid "At least one column definition was expected." -msgstr "Riadok bol zmazaný." +msgstr "Očakávala sa aspoň jedna definícia stĺpca." #: libraries/sql-parser/src/Statements/CreateStatement.php:481 msgid "A \"RETURNS\" keyword was expected." @@ -14184,10 +14180,11 @@ msgid "Not enough privilege to view status variables." msgstr "" #: server_variables.php:83 -#, fuzzy, php-format +#, php-format #| msgid "Server variables and settings" msgid "Not enough privilege to view server variables and settings. %s" -msgstr "Premenné a nastavenia serveru" +msgstr "" +"Nedostatočné oprávnenia na zobrazenie premenných a nastavení servera. %s" #: setup/frames/config.inc.php:41 setup/frames/index.inc.php:278 msgid "Download" @@ -14545,10 +14542,9 @@ msgid "Operator" msgstr "Operátor" #: templates/database/designer/database_tables.phtml:29 -#, fuzzy #| msgid "Move columns" msgid "Show/hide columns" -msgstr "Presunúť stĺpce" +msgstr "Zobraziť/skryť stĺpce" #: templates/database/designer/database_tables.phtml:40 msgid "See table structure" @@ -15153,10 +15149,9 @@ msgstr "na začiatku tabuľky" #: templates/table/structure/display_partitions.phtml:3 #: templates/table/structure/display_structure.phtml:195 -#, fuzzy #| msgid "Position" msgid "Partitions" -msgstr "Pozícia" +msgstr "Oddiely" #: templates/table/structure/display_partitions.phtml:7 msgid "Partitioned by:" diff --git a/po/sl.po b/po/sl.po index 9fa92e1ae7..6af9b9a65b 100644 --- a/po/sl.po +++ b/po/sl.po @@ -4,16 +4,16 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2015-12-18 16:43+0000\n" +"PO-Revision-Date: 2016-01-16 01:16+0000\n" "Last-Translator: Domen \n" -"Language-Team: Slovenian \n" +"Language-Team: Slovenian " +"\n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" -"%100==4 ? 2 : 3;\n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " +"n%100==4 ? 2 : 3;\n" "X-Generator: Weblate 2.5-dev\n" #: changelog.php:37 license.php:30 @@ -2589,6 +2589,12 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" +"Pri dostopanju do shrambe vašega brskalnika je prišlo do napake, zato " +"nekatere zmožnosti morda ne bodo delovale pravilno. Najverjetneje brskalnik " +"ne podpira shrambe ali pa je bila dosežena omejitev kvote. V Firefoxu lahko " +"tako težavo povzroči tudi pokvarjena shramba, pri čemer lahko pomaga " +"čiščenje vaših \"Podatkov pri delu brez povezave\". V Safariju je za težavo " +"pogosto krivo \"Brskanje v zasebnem načinu\"." #: js/messages.php:635 msgctxt "Previous month" @@ -11139,7 +11145,7 @@ msgid "Enabled" msgstr "Omogočeno" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguracija pmadb ... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sq.po b/po/sq.po index aec965076b..95a720ed06 100644 --- a/po/sq.po +++ b/po/sq.po @@ -11218,7 +11218,7 @@ msgid "Enabled" msgstr "Aftëso" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurimi i pmadb… " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sr.po b/po/sr.po index 87f3cf7a8a..317b4fd594 100644 --- a/po/sr.po +++ b/po/sr.po @@ -11844,7 +11844,7 @@ msgstr "Омогућено" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Измене су сачуване" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sr@latin.po b/po/sr@latin.po index 8a09dfa181..784d3eeea1 100644 --- a/po/sr@latin.po +++ b/po/sr@latin.po @@ -11847,7 +11847,7 @@ msgstr "Omogućeno" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Podešavanja su sačuvana." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/sv.po b/po/sv.po index 176c5edcf1..d196ef7625 100644 --- a/po/sv.po +++ b/po/sv.po @@ -11079,7 +11079,7 @@ msgid "Enabled" msgstr "Aktiverat" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfigurationen av pmadb... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ta.po b/po/ta.po index c265800587..c306ec3974 100644 --- a/po/ta.po +++ b/po/ta.po @@ -10831,7 +10831,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "pmadbஇன் அமைப்பாக்கம்... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/te.po b/po/te.po index 8f315feccc..e2f654845d 100644 --- a/po/te.po +++ b/po/te.po @@ -11314,7 +11314,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Server configuration" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "సేవకి స్వరూపణం" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/th.po b/po/th.po index 7f2eb03611..bfab41c254 100644 --- a/po/th.po +++ b/po/th.po @@ -11553,7 +11553,7 @@ msgstr "เปิดใช้อยู่" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "บันทึกการแก้ไขเรียบร้อยแล้ว" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/tk.po b/po/tk.po index b5fa57fe62..fe7537326b 100644 --- a/po/tk.po +++ b/po/tk.po @@ -10498,7 +10498,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/tr.po b/po/tr.po index bead234383..0311ffa9e4 100644 --- a/po/tr.po +++ b/po/tr.po @@ -4,8 +4,8 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-15 03:20+0000\n" -"Last-Translator: kenan akgün \n" +"PO-Revision-Date: 2016-01-22 18:42+0000\n" +"Last-Translator: Burak Yavuz \n" "Language-Team: Turkish " "\n" "Language: tr\n" @@ -2596,16 +2596,17 @@ msgid "" "cause such a problem, clearing your \"Offline Website Data\" might help. In " "Safari, such problem is commonly caused by \"Private Mode Browsing\"." msgstr "" -"Sorun tarayıcı depolama, bazı özellikler düzgün çalışmayabilir erişirken bir " -"hata oluştu. Tarayıcı depolama desteklemiyor olması muhtemeldir ya da kota " -"sınırı ulaşıldı. Firefox, bozuk depolama da böyle bir sorun, \"web Sitesi " -"Verilerini\" yardımcı olabilir. Çevrimdışı takas neden olabilir Safari, bu " -"sorun genellikle neden olur \"Özel Tarama Modu\"." +"Tarayıcınızın depolamasına erişirken bir sorun oldu, bazı özellikler düzgün " +"olarak çalışmayabilir. Büyük olasılıkla tarayıcı depolamayı desteklemiyor ya " +"da kota sınırına ulaşıldı. Firefox'ta, bozuk depolama böyle bir soruna neden " +"olabilir, \"Çevrimdışı Web Sitesi Verileri\"nizi temizlemeniz yardımcı " +"olabilir. Safari'de, genellikle böyle bir soruna \"Özel Kipte Tarama\" neden " +"olur." #: js/messages.php:635 msgctxt "Previous month" msgid "Prev" -msgstr "önceki" +msgstr "Önceki" #: js/messages.php:640 msgctxt "Next month" @@ -11165,8 +11166,8 @@ msgid "Enabled" msgstr "Etkinleştirildi" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " -msgstr "pmadb yapılandırması... " +msgid "Configuration of pmadb…" +msgstr "pmadb yapılandırması…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 msgid "General relation features" diff --git a/po/tt.po b/po/tt.po index bf985ba37d..9f54b01e76 100644 --- a/po/tt.po +++ b/po/tt.po @@ -11724,7 +11724,7 @@ msgstr "Açıq" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Üzgärtülär saqlandı" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ug.po b/po/ug.po index d056fc9068..dcfb6b2908 100644 --- a/po/ug.po +++ b/po/ug.po @@ -11428,7 +11428,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Modifications have been saved" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "ئۆزگەرتىشلەر ساقلاندى" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/uk.po b/po/uk.po index 3df81f2191..5ecaa29c3a 100644 --- a/po/uk.po +++ b/po/uk.po @@ -11440,7 +11440,7 @@ msgstr "дозволено" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Конфігурація збережена." #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/ur.po b/po/ur.po index 1e862de0da..3731ef17d6 100644 --- a/po/ur.po +++ b/po/ur.po @@ -11864,7 +11864,7 @@ msgstr "" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration storage" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "تشکیل ذخیرہ" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/uz.po b/po/uz.po index b2b76b566d..076544e151 100644 --- a/po/uz.po +++ b/po/uz.po @@ -12631,7 +12631,7 @@ msgstr "Фаоллаштирилган" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration file" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Конфигурацион файл" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/uz@latin.po b/po/uz@latin.po index e9864e2b9e..5076046e7d 100644 --- a/po/uz@latin.po +++ b/po/uz@latin.po @@ -12673,7 +12673,7 @@ msgstr "Faollashtirilgan" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration file" -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Konfiguratsion fayl" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/vi.po b/po/vi.po index 15637a7e7e..1ec8aa18ee 100644 --- a/po/vi.po +++ b/po/vi.po @@ -8,10 +8,10 @@ msgstr "" "Project-Id-Version: phpMyAdmin 4.5.4-dev\n" "Report-Msgid-Bugs-To: translators@phpmyadmin.net\n" "POT-Creation-Date: 2016-01-14 09:16+0100\n" -"PO-Revision-Date: 2016-01-13 15:59+0000\n" +"PO-Revision-Date: 2016-01-22 10:12+0000\n" "Last-Translator: Michal Čihař \n" -"Language-Team: Vietnamese \n" +"Language-Team: Vietnamese " +"\n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,7 +30,7 @@ msgstr "" #: db_central_columns.php:105 msgid "The central list of columns for the current database is empty." -msgstr "Danh sách các cột trong CSDL hiện thời trống." +msgstr "Danh sách các cột trong Cơ sở dữ liệu hiện tại trống." #: db_central_columns.php:130 msgid "Click to sort." @@ -39,22 +39,22 @@ msgstr "Nhấn vào để sắp xếp." #: db_central_columns.php:149 #, php-format msgid "Showing rows %1$s - %2$s." -msgstr "Hiển thị các bản ghi từ %1$s tới %2$s." +msgstr "Hiển thị các hàng %1$s - %2$s." #: db_create.php:61 #, php-format msgid "Database %1$s has been created." -msgstr "Database %1$s đã được tạo." +msgstr "Cơ sở dữ liệu %1$s đã được tạo ra." #: db_datadict.php:58 libraries/operations.lib.php:33 msgid "Database comment" -msgstr "Chú thích của Database" +msgstr "Chú thích của cơ sở dữ liệu" #: db_datadict.php:105 #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:966 #: templates/columns_definitions/column_definitions_form.phtml:79 msgid "Table comments:" -msgstr "Các chú thích của Bảng:" +msgstr "Chú thích của bảng:" #: db_datadict.php:114 libraries/Index.class.php:699 #: libraries/insert_edit.lib.php:1565 @@ -80,7 +80,7 @@ msgstr "Các chú thích của Bảng:" #: templates/table/search/table_header.phtml:6 #: templates/table/search/zoom_result_form.phtml:33 msgid "Column" -msgstr "Trường" +msgstr "Cột" #: db_datadict.php:115 libraries/Index.class.php:696 #: libraries/central_columns.lib.php:697 libraries/central_columns.lib.php:1383 @@ -168,7 +168,7 @@ msgstr "Liên kết tới" #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:1029 #: templates/columns_definitions/table_fields_definitions.phtml:65 msgid "Comments" -msgstr "Chú thích" +msgstr "Ghi chú" #: db_datadict.php:156 #: libraries/controllers/TableStructureController.class.php:968 @@ -178,7 +178,7 @@ msgstr "Chú thích" #: templates/table/structure/check_all_table_column.phtml:22 #: templates/table/structure/display_structure.phtml:75 msgid "Primary" -msgstr "Khóa Chính" +msgstr "Chính" #: db_datadict.php:166 js/messages.php:318 libraries/Index.class.php:567 #: libraries/Index.class.php:606 libraries/Index.class.php:1021 @@ -238,14 +238,14 @@ msgstr "Có" #: db_export.php:44 msgid "View dump (schema) of database" -msgstr "Xem cấu trúc (lược đồ) của CSDL" +msgstr "Xem phần đổ (lược đồ) của cơ sở dữ liệu" #: db_export.php:48 db_tracking.php:101 export.php:381 #: libraries/DBQbe.class.php:326 #: libraries/controllers/DatabaseStructureController.class.php:180 #: libraries/navigation/NavigationTree.class.php:898 msgid "No tables found in database." -msgstr "Không có bảng nào trong CSDL." +msgstr "Không tìm thấy bảng nào trong cơ sở dữ liệu" #: db_export.php:62 libraries/ServerStatusData.class.php:129 #: libraries/build_html_for_db.lib.php:28 libraries/config/messages.inc.php:276 @@ -254,7 +254,7 @@ msgstr "Không có bảng nào trong CSDL." #: libraries/plugins/export/ExportXml.class.php:120 #: templates/database/structure/show_create.phtml:19 msgid "Tables" -msgstr "Bảng" +msgstr "Các bảng" #: db_export.php:63 libraries/Menu.class.php:320 libraries/Menu.class.php:428 #: libraries/Util.class.php:3350 libraries/Util.class.php:3360 @@ -296,17 +296,17 @@ msgstr "Chọn tất cả" #: db_operations.php:53 tbl_create.php:24 msgid "The database name is empty!" -msgstr "Tên cơ sở dữ liệu trống!" +msgstr "Tên cơ sở dữ liệu bị trống!" #: db_operations.php:141 #, php-format msgid "Database %1$s has been renamed to %2$s." -msgstr "CSDL %1$s đã được đổi tên thành %2$s." +msgstr "Cơ sở dữ liệu %1$s đã được đổi tên thành %2$s." #: db_operations.php:153 #, php-format msgid "Database %1$s has been copied to %2$s." -msgstr "CSDL %1$s đã được sao chép sang %2$s." +msgstr "Cơ sở dữ liệu %1$s đã được sao chép sang %2$s." #: db_operations.php:283 #, php-format @@ -316,23 +316,23 @@ msgstr "Cấu hình phpMyAdmin đã bị vô hiệu hóa. %sTìm hiểu lý do%s #: db_qbe.php:129 msgid "You have to choose at least one column to display!" -msgstr "Bạn phải chọn ít nhất 1 trường để hiển thị!" +msgstr "Bạn cần phải chỉ ra ít một cột cần hiển thị!" #: db_qbe.php:146 #, php-format msgid "Switch to %svisual builder%s" -msgstr "Chuyển sang chế độ %svisual builder%s" +msgstr "Chuyển sang %sbộ xây dựng trực quan%s" #: db_search.php:30 libraries/plugins/AuthenticationPlugin.class.php:70 #: libraries/plugins/auth/AuthenticationConfig.class.php:103 #: libraries/plugins/auth/AuthenticationConfig.class.php:118 #: libraries/plugins/auth/AuthenticationHttp.class.php:91 msgid "Access denied!" -msgstr "Truy cập bị từ chối!" +msgstr "Không đủ thẩm quyền!" #: db_tracking.php:51 db_tracking.php:76 msgid "Tracking data deleted successfully." -msgstr "Các dữ liệu theo dõi đã được xoá." +msgstr "Các dữ liệu theo dõi đã được xóa thành công." #: db_tracking.php:60 #, php-format @@ -346,7 +346,7 @@ msgstr "Chưa có bảng nào được chọn." #: db_tracking.php:145 msgid "Database Log" -msgstr "Database Log" +msgstr "Nhật ký Cơ sở dữ liệu" #: error_report.php:68 msgid "" @@ -376,19 +376,19 @@ msgstr "" #: error_report.php:85 msgid "You may want to refresh the page." -msgstr "Bạn cần làm mới lại trang." +msgstr "Bạn có lẽ nên làm tươi trang này lại." #: export.php:188 schema_export.php:61 msgid "Bad type!" -msgstr "Kiểu dữ liệu không phù hợp!" +msgstr "Sai kiểu!" #: export.php:275 msgid "Bad parameters!" -msgstr "Tham số không đúng!" +msgstr "Tham số sai!" #: file_echo.php:22 msgid "Invalid export type" -msgstr "Sai kiểu tập tin xuất" +msgstr "Kiểu xuất ra không hợp lệ" #: gis_data_editor.php:118 #, php-format @@ -412,7 +412,7 @@ msgstr "Hình dạng %d:" #: gis_data_editor.php:213 msgid "Point:" -msgstr "Điểm:" +msgstr "Tọa độ:" #: gis_data_editor.php:214 gis_data_editor.php:241 gis_data_editor.php:297 #: gis_data_editor.php:370 js/messages.php:434 @@ -1498,7 +1498,7 @@ msgstr "Xuất vùng chọn:" #: libraries/server_status_processes.lib.php:92 libraries/tracking.lib.php:279 #: libraries/tracking.lib.php:1620 msgid "Status" -msgstr "Trạng thái" +msgstr "Tình trạng" #: js/messages.php:245 js/messages.php:762 #: libraries/plugins/export/ExportHtmlword.class.php:472 @@ -2793,7 +2793,7 @@ msgstr "calendar-month-year" #: js/messages.php:751 msgctxt "Year suffix" msgid "none" -msgstr "none" +msgstr "Không" #: js/messages.php:763 msgid "Hour" @@ -2995,7 +2995,7 @@ msgstr "Truy vấn lại" #: templates/table/relation/foreign_key_row.phtml:165 #: templates/table/relation/internal_relational_row.phtml:55 msgid "Database" -msgstr "CSDL" +msgstr "Cơ sở dữ liệu" #: libraries/Console.class.php:100 #, php-format @@ -4736,7 +4736,7 @@ msgstr "Dùng giá trị này" #: templates/table/structure/display_partitions.phtml:24 #: templates/table/structure/row_stats_table.phtml:42 msgid "Rows" -msgstr "Bản ghi" +msgstr "Hàng" #: libraries/build_html_for_db.lib.php:48 libraries/engines/innodb.lib.php:180 #: libraries/server_databases.lib.php:173 libraries/server_status.lib.php:195 @@ -9017,7 +9017,7 @@ msgstr "Trình bày:" #: libraries/navigation/Navigation.class.php:219 libraries/tracking.lib.php:281 #: libraries/tracking.lib.php:1622 tbl_change.php:160 msgid "Show" -msgstr "Hiển thị" +msgstr "Hiện" #: libraries/navigation/NavigationHeader.class.php:162 msgid "Home" @@ -10167,22 +10167,22 @@ msgstr "" #: libraries/plugins/export/ExportSql.class.php:1395 #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:973 msgid "Creation:" -msgstr "Khởi tạo:" +msgstr "Tạo:" #: libraries/plugins/export/ExportSql.class.php:1408 #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:980 msgid "Last update:" -msgstr "Lần sửa đối cuối:" +msgstr "Cập nhật lần cuối:" #: libraries/plugins/export/ExportSql.class.php:1421 #: libraries/plugins/schema/pdf/Pdf_Relation_Schema.class.php:987 msgid "Last check:" -msgstr "Lần cuối kiểm tra:" +msgstr "Lần kiểm tra cuối:" #: libraries/plugins/export/ExportSql.class.php:1471 #: templates/database/structure/structure_table_row.phtml:183 msgid "in use" -msgstr "Thông dụng" +msgstr "đang dùng" #: libraries/plugins/export/ExportSql.class.php:1516 msgid "It appears your database uses views;" @@ -10689,7 +10689,7 @@ msgid "Enabled" msgstr "Bật" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "Cấu hình của pmadb…" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 @@ -13530,11 +13530,11 @@ msgstr "Ngưng hoạt động ngay" #: libraries/tracking.lib.php:277 libraries/tracking.lib.php:1618 msgid "Created" -msgstr "Đã tạo" +msgstr "Đã được tạo" #: libraries/tracking.lib.php:278 libraries/tracking.lib.php:1619 msgid "Updated" -msgstr "Đã cập nhật" +msgstr "Đã được cập nhật" #: libraries/tracking.lib.php:288 libraries/tracking.lib.php:351 msgid "Delete version" @@ -13548,17 +13548,17 @@ msgstr "Báo cáo theo dõi" #: libraries/tracking.lib.php:290 libraries/tracking.lib.php:827 #: libraries/tracking.lib.php:1633 msgid "Structure snapshot" -msgstr "Cấu trúc ảnh chụp" +msgstr "Chụp cấu trúc" #: libraries/tracking.lib.php:417 libraries/tracking.lib.php:1443 #: libraries/tracking.lib.php:1730 msgid "active" -msgstr "Kích hoạt" +msgstr "tích cực" #: libraries/tracking.lib.php:419 libraries/tracking.lib.php:1445 #: libraries/tracking.lib.php:1725 msgid "not active" -msgstr "Chưa kích hoạt" +msgstr "không hoạt động" #: libraries/tracking.lib.php:461 msgid "Tracking statements" @@ -13677,20 +13677,20 @@ msgstr "Phiên bản %1$s đã được tạo, việc theo dõi %2$s đang hoạ #: libraries/tracking.lib.php:1464 msgid "Untracked tables" -msgstr "Những bảng chưa theo dõi" +msgstr "Các bảng chưa được theo dõi" #: libraries/tracking.lib.php:1493 libraries/tracking.lib.php:1517 #: templates/table/structure/optional_action_links.phtml:18 msgid "Track table" -msgstr "Theo dõi bảng" +msgstr "Bảng theo dõi" #: libraries/tracking.lib.php:1605 msgid "Tracked tables" -msgstr "Các bảng đã theo dõi" +msgstr "Các bảng được theo dõi" #: libraries/tracking.lib.php:1617 msgid "Last version" -msgstr " " +msgstr "Phiên bản cuối" #: libraries/tracking.lib.php:1630 libraries/tracking.lib.php:1704 msgid "Delete tracking" diff --git a/po/vls.po b/po/vls.po index e8d5b9298d..43153c8c5d 100644 --- a/po/vls.po +++ b/po/vls.po @@ -10384,7 +10384,7 @@ msgid "Enabled" msgstr "" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/zh_CN.po b/po/zh_CN.po index ed5ffb7747..e5e5729a07 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -10779,7 +10779,7 @@ msgstr "已启用" #: libraries/relation.lib.php:100 #, fuzzy #| msgid "Configuration saved." -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "配置已保存。" #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/po/zh_TW.po b/po/zh_TW.po index c725140fa3..7835883c2f 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -10694,7 +10694,7 @@ msgid "Enabled" msgstr "已啓用" #: libraries/relation.lib.php:100 -msgid "Configuration of pmadb… " +msgid "Configuration of pmadb…" msgstr "設定 pmadb ... " #: libraries/relation.lib.php:104 libraries/relation.lib.php:140 diff --git a/prefs_manage.php b/prefs_manage.php index a6b2bcdd9b..de1d0341e7 100644 --- a/prefs_manage.php +++ b/prefs_manage.php @@ -58,7 +58,7 @@ if (isset($_POST['submit_export']) // directory if (!empty($open_basedir)) { $tmp_subdir = (PMA_IS_WINDOWS ? '.\\tmp\\' : 'tmp/'); - if (is_writable($tmp_subdir)) { + if (@is_writable($tmp_subdir)) { $import_file_new = tempnam($tmp_subdir, 'prefs'); if (move_uploaded_file($import_file, $import_file_new)) { $import_file = $import_file_new; diff --git a/setup/lib/index.lib.php b/setup/lib/index.lib.php index ac07d27db9..eb81fe75ad 100644 --- a/setup/lib/index.lib.php +++ b/setup/lib/index.lib.php @@ -199,13 +199,13 @@ function PMA_checkConfigRw(&$is_readable, &$is_writable, &$file_exists) $file_path = $GLOBALS['ConfigFile']->getFilePath(); $file_dir = dirname($file_path); $is_readable = true; - $is_writable = is_dir($file_dir); + $is_writable = @is_dir($file_dir); if (SETUP_DIR_WRITABLE) { - $is_writable = $is_writable && is_writable($file_dir); + $is_writable = $is_writable && @is_writable($file_dir); } $file_exists = file_exists($file_path); if ($file_exists) { $is_readable = is_readable($file_path); - $is_writable = $is_writable && is_writable($file_path); + $is_writable = $is_writable && @is_writable($file_path); } } diff --git a/tbl_operations.php b/tbl_operations.php index a4402d45f9..9dcaa6ffa0 100644 --- a/tbl_operations.php +++ b/tbl_operations.php @@ -136,9 +136,9 @@ if (isset($_REQUEST['submitoptions'])) { } if (! empty($_REQUEST['new_tbl_storage_engine']) - && /*overload*/mb_strtolower($_REQUEST['new_tbl_storage_engine']) !== $tbl_storage_engine + && /*overload*/mb_strtoupper($_REQUEST['new_tbl_storage_engine']) !== $tbl_storage_engine ) { - $new_tbl_storage_engine = $_REQUEST['new_tbl_storage_engine']; + $new_tbl_storage_engine = mb_strtoupper($_REQUEST['new_tbl_storage_engine']); // reset the globals for the new engine list($is_myisam_or_aria, $is_innodb, $is_isam, $is_berkeleydb, $is_aria, $is_pbxt diff --git a/tbl_replace.php b/tbl_replace.php index 00d37a335e..217652ffc7 100644 --- a/tbl_replace.php +++ b/tbl_replace.php @@ -182,6 +182,10 @@ foreach ($loop_array as $rownumber => $where_clause) { = isset($_REQUEST['auto_increment']['multi_edit'][$rownumber]) ? $_REQUEST['auto_increment']['multi_edit'][$rownumber] : null; + $multi_edit_virtual + = isset($_REQUEST['virtual']['multi_edit'][$rownumber]) + ? $_REQUEST['virtual']['multi_edit'][$rownumber] + : null; // When a select field is nullified, it's not present in $_REQUEST // so initialize it; this way, the foreach($multi_edit_columns) will process it @@ -243,7 +247,7 @@ foreach ($loop_array as $rownumber => $where_clause) { } if ($file_to_insert->isError()) { - $message .= $file_to_insert->getError(); + $insert_errors[] = $file_to_insert->getError(); } // delete $file_to_insert temporary variable $file_to_insert->cleanUp(); @@ -253,7 +257,7 @@ foreach ($loop_array as $rownumber => $where_clause) { $current_value, $multi_edit_auto_increment, $rownumber, $multi_edit_columns_name, $multi_edit_columns_null, $multi_edit_columns_null_prev, $is_insert, - $using_key, $where_clause, $table + $using_key, $where_clause, $table, $multi_edit_funcs ); $current_value_as_an_array = PMA_getCurrentValueAsAnArrayForMultipleEdit( @@ -262,13 +266,15 @@ foreach ($loop_array as $rownumber => $where_clause) { $gis_from_wkb_functions, $func_optional_param, $func_no_param, $key ); - list($query_values, $query_fields) - = PMA_getQueryValuesForInsertAndUpdateInMultipleEdit( - $multi_edit_columns_name, $multi_edit_columns_null, $current_value, - $multi_edit_columns_prev, $multi_edit_funcs, $is_insert, - $query_values, $query_fields, $current_value_as_an_array, - $value_sets, $key, $multi_edit_columns_null_prev - ); + if (! isset($multi_edit_virtual) || ! isset($multi_edit_virtual[$key])) { + list($query_values, $query_fields) + = PMA_getQueryValuesForInsertAndUpdateInMultipleEdit( + $multi_edit_columns_name, $multi_edit_columns_null, $current_value, + $multi_edit_columns_prev, $multi_edit_funcs, $is_insert, + $query_values, $query_fields, $current_value_as_an_array, + $value_sets, $key, $multi_edit_columns_null_prev + ); + } if (isset($multi_edit_columns_null[$key])) { $multi_edit_columns[$key] = null; } diff --git a/test/classes/PMA_Error_test.php b/test/classes/PMA_Error_test.php index 2c5d0c1184..6fa0ad21c7 100644 --- a/test/classes/PMA_Error_test.php +++ b/test/classes/PMA_Error_test.php @@ -82,15 +82,26 @@ class PMA_Error_Test extends PHPUnit_Framework_TestCase * Test for setFile * * @return void + * + * @dataProvider filePathProvider */ - public function testSetFile() + public function testSetFile($file, $expected) { - $this->object->setFile('./pma.txt'); - $this->assertStringStartsWith( - implode( - DIRECTORY_SEPARATOR, - array('.', '..', '..') - ), $this->object->getFile() + $this->object->setFile($file); + $this->assertEquals($expected, $this->object->getFile()); + } + + /** + * Data provider for setFile + * + * @return array + */ + public function filePathProvider() + { + return array( + array('./ChangeLog', './ChangeLog'), + array(__FILE__, './test/classes/PMA_Error_test.php'), + array('./NONEXISTING', './NONEXISTING'), ); } diff --git a/test/libraries/PMA_ConfigGenerator_test.php b/test/libraries/PMA_ConfigGenerator_test.php index 63ae7d2b5b..1d0d2f1959 100644 --- a/test/libraries/PMA_ConfigGenerator_test.php +++ b/test/libraries/PMA_ConfigGenerator_test.php @@ -45,8 +45,6 @@ class PMA_ConfigGenerator_Test extends PHPUnit_Framework_TestCase $cf->setPersistKeys(array("1/", 2)); - /* TODO: This is sometimes one second off... */ - $date = date(DATE_RFC1123); $result = ConfigGenerator::getConfigFile($cf); $this->assertContains( @@ -54,9 +52,7 @@ class PMA_ConfigGenerator_Test extends PHPUnit_Framework_TestCase "/*\n" . " * Generated configuration file\n" . " * Generated by: phpMyAdmin " . - $GLOBALS['PMA_Config']->get('PMA_VERSION') . " setup script\n" . - " * Date: " . $date . "\n" . - " */\n\n", + $GLOBALS['PMA_Config']->get('PMA_VERSION') . " setup script\n", $result ); diff --git a/test/libraries/PMA_insert_edit_test.php b/test/libraries/PMA_insert_edit_test.php index 94c5bd3070..3b2b4a649a 100644 --- a/test/libraries/PMA_insert_edit_test.php +++ b/test/libraries/PMA_insert_edit_test.php @@ -2444,7 +2444,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase $result = PMA_getCurrentValueForDifferentTypes( '123', '0', array(), '', array(), 0, array(), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2455,7 +2455,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 2 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('test'), '', array(1), 0, array(), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2466,7 +2466,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 3 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('test'), '', array(), 0, array(), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2478,7 +2478,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase $_REQUEST['fields']['multi_edit'][0][0] = array(); $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('set'), '', array(), 0, array(), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2489,7 +2489,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 5 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('protected'), '', array(), 0, array('a'), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2500,7 +2500,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 6 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('protected'), '', array(), 0, array('a'), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2511,7 +2511,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 7 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('bit'), '20\'12', array(), 0, array('a'), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2522,7 +2522,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 7 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('date'), '20\'12', array(), 0, array('a'), array(), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2534,7 +2534,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase $_REQUEST['fields']['multi_edit'][0][0] = array(); $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('set'), '', array(), 0, array(), array(1), - array(), true, true, '1', 'table' + array(), true, true, '1', 'table', array() ); $this->assertEquals( @@ -2545,7 +2545,7 @@ class PMA_InsertEditTest extends PHPUnit_Framework_TestCase // case 9 $result = PMA_getCurrentValueForDifferentTypes( false, '0', array('protected'), '', array(), 0, array('a'), array(), - array(1), true, true, '1', 'table' + array(1), true, true, '1', 'table', array() ); $this->assertEquals( diff --git a/user_password.php b/user_password.php index 93149947bb..30940f4cbf 100644 --- a/user_password.php +++ b/user_password.php @@ -210,7 +210,7 @@ function PMA_changePassHashingFunction() } /** - * Generate the error url and submit the query + * Changes password for a user * * @param string $username Username * @param string $hostname Hostname @@ -235,6 +235,7 @@ function PMA_changePassUrlParamsAndSubmitQuery( : '\'' . PMA_Util::sqlAddSlashes($password) . '\''); } else if ($serverType == 'MariaDB' && PMA_MYSQL_INT_VERSION >= 50200 + && PMA_MYSQL_INT_VERSION < 100100 ) { if ($orig_auth_plugin == 'mysql_native_password') { // Set the hashing method used by PASSWORD() diff --git a/view_operations.php b/view_operations.php index 4e6e923cd8..d503c068d1 100644 --- a/view_operations.php +++ b/view_operations.php @@ -18,6 +18,14 @@ $pma_table = new PMA_Table($GLOBALS['table'], $GLOBALS['db']); */ require_once 'libraries/operations.lib.php'; +/** + * Load JavaScript files + */ +$response = PMA_Response::getInstance(); +$header = $response->getHeader(); +$scripts = $header->getScripts(); +$scripts->addFile('tbl_operations.js'); + /** * Runs common work */