Merge branch 'QA_5_0' into STABLE

This commit is contained in:
Isaac Bennetch 2020-01-07 21:07:23 -05:00
commit 37ba6991b5
33 changed files with 350 additions and 164 deletions

View File

@ -49,7 +49,6 @@ jobs:
allow_failures:
- php: nightly
- os: osx
- name: "PHP 7.1 with dbase extension"
include:
- stage: "Lint and analyse code"
@ -144,6 +143,7 @@ jobs:
install:
- pecl channel-update pecl.php.net
- pecl install dbase
- php -m |grep -F 'dbase'
- composer install --no-interaction
- yarn install --non-interactive

View File

@ -1,6 +1,24 @@
phpMyAdmin - ChangeLog
======================
5.0.1 (2020-01-07)
- issue #15719 Fixed error 500 when browsing a table when $cfg['LimitChars'] used a string and not an int value
- issue #14936 Fixed display NULL on numeric fields has showing empty string since 5.0.0
- issue #15722 Fix get Database structure fails with PHP error on replicated server
- issue #15723 Fix can't browse certain tables since 5.0.0 update
- issue Prevent line wrap in DB structure size column
- issue Remove extra line break from downloaded blob content
- issue #15725 Fixed error 500 when exporting - set time limit when $cfg['ExecTimeLimit'] used a string and not an int value
- issue #15726 Fixed double delete icons on enum editor
- issue #15717 Fixed warning popup not dissapearing on table stucture when using actions without any column selection
- issue #15693 Fixed focus of active tab is lost by clicking refresh option on browse tab
- issue #15734 Fix Uncaught TypeError: http_build_query() in setup
- issue Fix double slash in path when $cfg['TempDir'] has a trailing slash
- issue #14875 Fix shp file import tests where failing when php dbase extension was enabled
- issue #14299 Fix JS error "PMA_makegrid is not defined" when clicking on a table from the "Insert" tab opened in a new tab
- issue #15351 Fixed 2FA setting removed each time the user edits another configuration setting
- issue [security] Fix SQL injection vulnerability on the user accounts page (PMASA-2020-1)
5.0.0 (2019-12-26)
- issue #13896 Drop support for PHP 5.5, PHP 5.6, PHP 7.0 and HHVM
- issue #14007 Enable columns names by default for CSV exports
@ -47,6 +65,10 @@ phpMyAdmin - ChangeLog
- issue #15677 Fix show process-list triggers a php exception
- issue #15697 Fix uncaught php error: "Call to a member function get() on null" in db_export.php when exporting a table from the list
4.9.4 (2020-01-07)
- issue #15724 Fix 2FA was disabled by a bug
- issue [security] Fix SQL injection vulnerability on the user accounts page (PMASA-2020-1)
4.9.3 (2019-12-26)
- issue #15570 Fix page contents go underneath of floating menubar in some cases
- issue #15591 Fix php notice 'Undefined index: foreign_keys_data' on relations view when the user has column access

2
README
View File

@ -1,7 +1,7 @@
phpMyAdmin - Readme
===================
Version 5.0.0
Version 5.0.1
A web interface for MySQL and MariaDB.

View File

@ -34,10 +34,10 @@ $template = $containerBuilder->get('template');
$containerBuilder->set(
'browse_foreigners',
new BrowseForeigners(
$GLOBALS['cfg']['LimitChars'],
$GLOBALS['cfg']['MaxRows'],
$GLOBALS['cfg']['RepeatCells'],
$GLOBALS['cfg']['ShowAll'],
(int) $GLOBALS['cfg']['LimitChars'],
(int) $GLOBALS['cfg']['MaxRows'],
(int) $GLOBALS['cfg']['RepeatCells'],
(bool) $GLOBALS['cfg']['ShowAll'],
$GLOBALS['pmaThemeImage'],
$template
)

View File

@ -51,7 +51,7 @@ copyright = u'2012 - 2018, The phpMyAdmin devel team'
# built documents.
#
# The short X.Y version.
version = '5.0.0'
version = '5.0.1'
# The full version, including alpha/beta/rc tags.
release = version

View File

@ -692,6 +692,30 @@ A list of files and corresponding functionality which degrade gracefully when re
* :file:`./sql/` (SQL scripts to configure advanced functionality)
* :file:`./js/vendor/openlayers/` (GIS visualization)
.. _faq1_45:
1.45 I get an error message about unknown authentication method caching_sha2_password when trying to log in
-----------------------------------------------------------------------------------------------------------
When logging in using MySQL version 8 or newer, you may encounter an error message like this:
mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client
This error is because of a version compatibility problem between PHP and MySQL. The MySQL project introduced a new authentication
method (our tests show this began with version 8.0.11) however PHP did not include the ability to use that authentication method.
PHP reports that this was fixed in PHP version 7.4.
Users experiencing this are encouraged to upgrade their PHP installation, however a workaround exists. Your MySQL user account
can be set to use the older authentication with a command such as
.. code-block:: mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
.. seealso:: <https://github.com/phpmyadmin/phpmyadmin/issues/14220>, <https://stackoverflow.com/questions/49948350/phpmyadmin-on-mysql-8-0>, <https://bugs.php.net/bug.php?id=76243>
.. _faqconfig:
Configuration

View File

@ -788,9 +788,30 @@ You will also need to have a controluser
with the proper rights to those tables. For example you can create it
using following statement:
And for any MariaDB version:
.. code-block:: mysql
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass';
CREATE USER 'pma'@'localhost' IDENTIFIED VIA mysql_native_password USING 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON `<pma_db>`.* TO 'pma'@'localhost';
For MySQL 8.0 and newer:
.. code-block:: mysql
CREATE USER 'pma'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';
For MySQL older than 8.0:
.. code-block:: mysql
CREATE USER 'pma'@'localhost' IDENTIFIED WITH mysql_native_password AS 'pmapass';
GRANT SELECT, INSERT, UPDATE, DELETE ON <pma_db>.* TO 'pma'@'localhost';
Note that MySQL installations with PHP older than 7.4 and MySQL newer than 8.0 may require
using the mysql_native_password authentication as a workaround, see
:ref:`faq1_45` for details.
.. _upgrading:

View File

@ -113,7 +113,7 @@ class Config
*/
public function checkSystem(): void
{
$this->set('PMA_VERSION', '5.0.0');
$this->set('PMA_VERSION', '5.0.1');
/* Major version */
$this->set(
'PMA_MAJOR_VERSION',
@ -1673,7 +1673,7 @@ class Config
if (empty($path)) {
$path = null;
} else {
$path .= '/' . $name;
$path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $name;
if (! @is_dir($path)) {
@mkdir($path, 0770, true);
}

View File

@ -767,8 +767,8 @@ class StructureController extends AbstractController
$GLOBALS['replication_info']['slave']['Do_DB']
);
$do = strlen($searchDoDBInTruename) > 0
|| strlen($searchDoDBInDB) > 0
$do = (is_string($searchDoDBInTruename) && strlen($searchDoDBInTruename) > 0)
|| (is_string($searchDoDBInDB) && strlen($searchDoDBInDB) > 0)
|| ($nbServSlaveDoDb == 0 && $nbServSlaveIgnoreDb == 0)
|| $this->hasTable(
$GLOBALS['replication_info']['slave']['Wild_Do_Table'],
@ -783,8 +783,8 @@ class StructureController extends AbstractController
$table,
$GLOBALS['replication_info']['slave']['Ignore_Table']
);
$ignored = strlen($searchTable) > 0
|| strlen($searchDb) > 0
$ignored = (is_string($searchTable) && strlen($searchTable) > 0)
|| (is_string($searchDb) && strlen($searchDb) > 0)
|| $this->hasTable(
$GLOBALS['replication_info']['slave']['Wild_Ignore_Table'],
$table

View File

@ -291,7 +291,8 @@ class StructureController extends AbstractController
}
} else {
$this->response->setRequestStatus(false);
$this->response->addJSON('message', __('No column selected.'));
$message = Message::error(__('No column selected.'));
$this->response->addJSON('message', $message);
}
}

View File

@ -1247,11 +1247,15 @@ class DatabaseInterface
$columns[$column_name]['TABLE_SCHEMA'] = $database;
$columns[$column_name]['TABLE_NAME'] = $table;
$columns[$column_name]['ORDINAL_POSITION'] = $ordinal_position;
$colType = $columns[$column_name]['COLUMN_TYPE'];
$colType = is_string($colType) ? $colType : '';
$colTypePosComa = strpos($colType, '(');
$colTypePosComa = $colTypePosComa !== false ? $colTypePosComa : strlen($colType);
$columns[$column_name]['DATA_TYPE']
= substr(
$columns[$column_name]['COLUMN_TYPE'],
$colType,
0,
strpos($columns[$column_name]['COLUMN_TYPE'], '(')
$colTypePosComa
);
/**
* @todo guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE
@ -1263,11 +1267,15 @@ class DatabaseInterface
$columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null;
$columns[$column_name]['NUMERIC_PRECISION'] = null;
$columns[$column_name]['NUMERIC_SCALE'] = null;
$colCollation = $columns[$column_name]['COLLATION_NAME'];
$colCollation = is_string($colCollation) ? $colCollation : '';
$colCollationPosUnderscore = strpos($colCollation, '_');
$colCollationPosUnderscore = $colCollationPosUnderscore !== false ? $colCollationPosUnderscore : strlen($colCollation);
$columns[$column_name]['CHARACTER_SET_NAME']
= substr(
$columns[$column_name]['COLLATION_NAME'],
$colCollation,
0,
strpos($columns[$column_name]['COLLATION_NAME'], '_')
$colCollationPosUnderscore
);
$ordinal_position++;
@ -1620,6 +1628,28 @@ class DatabaseInterface
}
}
/**
* This function checks and initialises the phpMyAdmin configuration
* storage state before it is used into session cache.
*
* @return void
*/
public function initRelationParamsCache()
{
if (strlen($GLOBALS['db'])) {
$cfgRelation = $this->relation->getRelationsParam();
if (empty($cfgRelation['db'])) {
$this->relation->fixPmaTables($GLOBALS['db'], false);
}
}
$cfgRelation = $this->relation->getRelationsParam();
if (empty($cfgRelation['db']) && isset($GLOBALS['dblist'])) {
if ($GLOBALS['dblist']->databases->exists('phpmyadmin')) {
$this->relation->fixPmaTables('phpmyadmin', false);
}
}
}
/**
* Function called just after a connection to the MySQL database server has
* been established. It sets the connection collation, and determines the
@ -1636,16 +1666,7 @@ class DatabaseInterface
*/
$GLOBALS['dblist'] = new DatabaseList();
if (strlen($GLOBALS['db'])) {
$cfgRelation = $this->relation->getRelationsParam();
if (empty($cfgRelation['db'])) {
$this->relation->fixPmaTables($GLOBALS['db'], false);
}
}
$cfgRelation = $this->relation->getRelationsParam();
if (empty($cfgRelation['db']) && $GLOBALS['dblist']->databases->exists('phpmyadmin')) {
$this->relation->fixPmaTables('phpmyadmin', false);
}
$this->initRelationParamsCache();
}
}

View File

@ -2948,7 +2948,7 @@ class Results
$display_params['data'][$row_no][$i]
= $this->_getDataCellForNumericColumns(
(string) $row[$i],
$row[$i] === null ? null : (string) $row[$i],
$class,
$condition_field,
$meta,
@ -4449,7 +4449,7 @@ class Results
mb_substr(
(string) $column_for_first_row,
0,
$GLOBALS['cfg']['LimitChars']
(int) $GLOBALS['cfg']['LimitChars']
) . '...'
);
@ -4478,7 +4478,7 @@ class Results
mb_substr(
(string) $column_for_last_row,
0,
$GLOBALS['cfg']['LimitChars']
(int) $GLOBALS['cfg']['LimitChars']
) . '...'
);
@ -5682,7 +5682,7 @@ class Results
$str = mb_substr(
$str,
0,
$GLOBALS['cfg']['LimitChars']
(int) $GLOBALS['cfg']['LimitChars']
) . '...';
$truncated = true;
} else {

View File

@ -402,8 +402,8 @@ class Header
*/
public function getDisplay(): string
{
if (! $this->_headerIsSent) {
if (! $this->_isAjax && $this->_isEnabled) {
if (! $this->_headerIsSent && $this->_isEnabled) {
if (! $this->_isAjax) {
$this->sendHttpHeaders();
$baseDir = defined('PMA_PATH_TO_BASEDIR') ? PMA_PATH_TO_BASEDIR : '';
@ -452,7 +452,7 @@ class Header
$console = $this->_console->getDisplay();
$messages = $this->getMessage();
}
if ($this->_isEnabled && empty($_REQUEST['recent_table'])) {
if (empty($_REQUEST['recent_table'])) {
$recentTable = $this->_addRecentTable(
$GLOBALS['db'],
$GLOBALS['table']

View File

@ -2420,7 +2420,7 @@ class InsertEdit
$foreigner['foreign_table']
);
// Field to display from the foreign table?
if ($display_field !== null && strlen($display_field) > 0) {
if (is_string($display_field) && strlen($display_field) > 0) {
$dispsql = 'SELECT ' . Util::backquote($display_field)
. ' FROM ' . Util::backquote($foreigner['foreign_db'])
. '.' . Util::backquote($foreigner['foreign_table'])

View File

@ -115,21 +115,24 @@ class ImportShp extends ImportPlugin
$dbf_file_name
);
if ($extracted !== false) {
$dbf_file_path = $temp . (PMA_IS_WINDOWS ? '\\' : '/')
. Sanitize::sanitizeFilename($dbf_file_name, true);
$handle = fopen($dbf_file_path, 'wb');
if ($handle !== false) {
fwrite($handle, $extracted);
fclose($handle);
// remove filename extension, e.g.
// dresden_osm.shp/gis.osm_transport_a_v06.dbf
// to
// dresden_osm.shp/gis.osm_transport_a_v06
$path_parts = pathinfo($dbf_file_name);
$dbf_file_name = $path_parts['dirname'] . '/' . $path_parts['filename'];
// sanitize filename
$dbf_file_name = Sanitize::sanitizeFilename($dbf_file_name, true);
// concat correct filename and extension
$dbf_file_path = $temp . '/' . $dbf_file_name . '.dbf';
if (file_put_contents($dbf_file_path, $extracted, LOCK_EX) !== false) {
$temp_dbf_file = true;
// Replace the .dbf with .*, as required
// by the bsShapeFiles library.
$file_name = substr(
$dbf_file_path,
0,
strlen($dbf_file_path) - 4
) . '.*';
$shp->FileName = $file_name;
// Replace the .dbf with .*, as required by the bsShapeFiles library.
$shp->FileName = substr($dbf_file_path, 0, -4) . '.*';
}
}
}
@ -150,6 +153,9 @@ class ImportShp extends ImportPlugin
}
}
// It should load data before file being deleted
$shp->loadFromFile('');
// Delete the .dbf file extracted to 'TempDir'
if ($temp_dbf_file
&& isset($dbf_file_path)
@ -158,9 +164,7 @@ class ImportShp extends ImportPlugin
unlink($dbf_file_path);
}
// Load data
$shp->loadFromFile('');
if ($shp->lastError != "") {
if ($shp->lastError != '') {
$error = true;
$message = Message::error(
__('There was an error importing the ESRI shape file: "%s".')
@ -224,7 +228,7 @@ class ImportShp extends ImportPlugin
if ($shp->getDBFHeader() !== null) {
foreach ($shp->getDBFHeader() as $c) {
$cell = trim($record->DBFData[$c[0]]);
$cell = trim((string) $record->DBFData[$c[0]]);
if (! strcmp($cell, '')) {
$cell = 'NULL';

View File

@ -1354,7 +1354,7 @@ class Relation
mb_substr(
$value,
0,
$GLOBALS['cfg']['LimitChars']
(int) $GLOBALS['cfg']['LimitChars']
) . '...'
);
}

View File

@ -3213,7 +3213,7 @@ class Privileges
if (isset($_GET['validate_username'])) {
$sql_query = "SELECT * FROM `mysql`.`user` WHERE `User` = '"
. $_GET['username'] . "';";
. $this->dbi->escapeString($_GET['username']) . "';";
$res = $this->dbi->query($sql_query);
$row = $this->dbi->fetchRow($res);
if (empty($row)) {

View File

@ -29,12 +29,19 @@ class SysInfoLinux extends SysInfoBase
public function loadavg()
{
$buf = file_get_contents('/proc/stat');
if ($buf === false) {
$buf = '';
}
$pos = mb_strpos($buf, "\n");
if ($pos === false) {
$pos = 0;
}
$nums = preg_split(
"/\s+/",
mb_substr(
$buf,
0,
mb_strpos($buf, "\n")
$pos
)
);

View File

@ -62,6 +62,10 @@ class TwoFactor
*/
public function __construct($user)
{
/** @var DatabaseInterface $dbi */
global $dbi;
$dbi->initRelationParamsCache();
$this->userPreferences = new UserPreferences();
$this->user = $user;
$this->_available = $this->getAvailable();

View File

@ -1174,7 +1174,7 @@ class Util
&& ! isset($GLOBALS['show_as_php']) // 'Submit query' does the same
&& preg_match('@^(SELECT|SHOW)[[:space:]]+@i', $sql_query)
) {
$refresh_link = 'import.php' . Url::getCommon($url_params);
$refresh_link = 'sql.php' . Url::getCommon($url_params);
$refresh_link = ' [&nbsp;'
. self::linkOrButton($refresh_link, __('Refresh')) . ']';
} else {
@ -2972,7 +2972,7 @@ class Util
mb_substr(
$printtype,
0,
$GLOBALS['cfg']['LimitChars']
(int) $GLOBALS['cfg']['LimitChars']
) . '...'
);
$displayed_type .= '</abbr>';
@ -4448,7 +4448,7 @@ class Util
) {
$rows = $_SESSION['tmpval']['max_rows'];
} else {
$rows = $GLOBALS['cfg']['MaxRows'];
$rows = (int) $GLOBALS['cfg']['MaxRows'];
$_SESSION['tmpval']['max_rows'] = $rows;
}
@ -4839,7 +4839,7 @@ class Util
{
// The function can be disabled in php.ini
if (function_exists('set_time_limit')) {
@set_time_limit($GLOBALS['cfg']['ExecTimeLimit']);
@set_time_limit((int) $GLOBALS['cfg']['ExecTimeLimit']);
}
}

View File

@ -1,6 +1,6 @@
{
"name": "phpmyadmin",
"version": "5.0.0",
"version": "5.0.1",
"description": "A web interface for MySQL and MariaDB",
"repository": "https://github.com/phpmyadmin/phpmyadmin.git",
"author": "The phpMyAdmin Team <developers@phpmyadmin.net> (https://www.phpmyadmin.net/team/)",

124
po/fr.po
View File

@ -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: 2019-12-23 15:37-0300\n"
"PO-Revision-Date: 2019-12-23 19:26+0000\n"
"Last-Translator: William Desportes <williamdes@wdes.fr>\n"
"PO-Revision-Date: 2020-01-04 14:21+0000\n"
"Last-Translator: Olivier Humbert <trebmuh@tuxfamily.org>\n"
"Language-Team: French <https://hosted.weblate.org/projects/phpmyadmin/5-0/fr/"
">\n"
"Language: fr\n"
@ -3942,7 +3942,7 @@ msgstr ""
#: libraries/classes/Config/Descriptions.php:285
msgid "Foreign key checks"
msgstr "Vérification des clés étrangères :"
msgstr "Vérification des clés étrangères"
#: libraries/classes/Config/Descriptions.php:286
msgid "Browse mode"
@ -5962,7 +5962,7 @@ msgstr "Ordre"
#: libraries/classes/Config/Descriptions.php:926
msgid "Order by"
msgstr "Trier par :"
msgstr "Trier par"
#: libraries/classes/Config/Descriptions.php:927
msgid "Server connection collation"
@ -7634,7 +7634,7 @@ msgstr "Alias :"
#: libraries/classes/Database/Qbe.php:568
msgid "Sort:"
msgstr "Tri : "
msgstr "Tri :"
#: libraries/classes/Database/Qbe.php:627
msgid "Sort order:"
@ -7646,7 +7646,7 @@ msgstr "Afficher :"
#: libraries/classes/Database/Qbe.php:719
msgid "Criteria:"
msgstr "Critère : "
msgstr "Critère :"
#: libraries/classes/Database/Qbe.php:799
#: libraries/classes/Database/Qbe.php:831
@ -7660,12 +7660,12 @@ msgstr "Utiliser les tables"
#: libraries/classes/Database/Qbe.php:854
#: libraries/classes/Database/Qbe.php:961
msgid "Or:"
msgstr "Ou : "
msgstr "Ou :"
#: libraries/classes/Database/Qbe.php:858
#: libraries/classes/Database/Qbe.php:946
msgid "And:"
msgstr "Et : "
msgstr "Et :"
#: libraries/classes/Database/Qbe.php:863
msgid "Ins"
@ -7677,15 +7677,15 @@ msgstr "Suppr."
#: libraries/classes/Database/Qbe.php:882
msgid "Modify:"
msgstr "Modifier : "
msgstr "Modifier :"
#: libraries/classes/Database/Qbe.php:941
msgid "Ins:"
msgstr "Insérer : "
msgstr "Insérer :"
#: libraries/classes/Database/Qbe.php:956
msgid "Del:"
msgstr "Supprimer : "
msgstr "Supprimer :"
#: libraries/classes/Database/Qbe.php:1810
#, php-format
@ -7812,7 +7812,7 @@ msgstr "Aucun mot de passe"
#: templates/server/replication/master_add_slave_user.twig:49
#: templates/server/replication/change_master.twig:18
msgid "Password:"
msgstr "Mot de passe : "
msgstr "Mot de passe :"
#: libraries/classes/Display/ChangePassword.php:92
msgid "Enter:"
@ -7827,7 +7827,7 @@ msgstr "Saisir à nouveau :"
#: libraries/classes/Display/ChangePassword.php:133
#: libraries/classes/Display/ChangePassword.php:168
msgid "Password Hashing:"
msgstr "Hachage du mot de passe : "
msgstr "Hachage du mot de passe :"
#: libraries/classes/Display/ChangePassword.php:146
#: libraries/classes/Server/Privileges.php:1870
@ -7890,7 +7890,7 @@ msgstr "aucune branche"
#: libraries/classes/Display/GitRevision.php:109
msgid "Git revision:"
msgstr "Révision Git : "
msgstr "Révision Git :"
#: libraries/classes/Display/GitRevision.php:112
#, php-format
@ -9055,20 +9055,20 @@ msgstr "Évènements :"
#: libraries/classes/Navigation/Navigation.php:220
msgid "Functions:"
msgstr "Fonctions : "
msgstr "Fonctions :"
#: libraries/classes/Navigation/Navigation.php:221
msgid "Procedures:"
msgstr "Procédures : "
msgstr "Procédures :"
#: libraries/classes/Navigation/Navigation.php:222
#: templates/display/export/selection.twig:5
msgid "Tables:"
msgstr "Tables : "
msgstr "Tables :"
#: libraries/classes/Navigation/Navigation.php:223
msgid "Views:"
msgstr "Vues : "
msgstr "Vues :"
#: libraries/classes/Navigation/NavigationTree.php:777
msgid ""
@ -9733,7 +9733,7 @@ msgstr "Retirer le partitionnement"
#: libraries/classes/Operations.php:1767
msgid "Check referential integrity:"
msgstr "Vérifier l'intégrité référentielle : "
msgstr "Vérifier l'intégrité référentielle :"
#: libraries/classes/Operations.php:2169
msgid "Can't move table to same one!"
@ -9769,7 +9769,7 @@ msgstr "Le nom de la table est vide !"
#: libraries/classes/Pdf.php:155
msgid "Error while creating PDF:"
msgstr "Erreur pendant la création du PDF : "
msgstr "Erreur pendant la création du PDF :"
#: libraries/classes/Plugins.php:627
msgid "This format has no options"
@ -9845,11 +9845,11 @@ msgstr "Serveur : "
#: libraries/classes/Plugins/Auth/AuthenticationCookie.php:217
msgid "Username:"
msgstr "Utilisateur : "
msgstr "Utilisateur :"
#: libraries/classes/Plugins/Auth/AuthenticationCookie.php:229
msgid "Server Choice:"
msgstr "Choix du serveur : "
msgstr "Choix du serveur :"
#: libraries/classes/Plugins/Auth/AuthenticationCookie.php:359
msgid "Failed to connect to the reCAPTCHA service!"
@ -9904,17 +9904,17 @@ msgstr ""
#: templates/display/import/import.twig:169
#: templates/display/export/format_dropdown.twig:2
msgid "Format:"
msgstr "Format : "
msgstr "Format :"
#: libraries/classes/Plugins/Export/ExportCsv.php:66
#: libraries/classes/Plugins/Import/AbstractImportCsv.php:60
msgid "Columns separated with:"
msgstr "Colonnes séparées par : "
msgstr "Colonnes séparées par :"
#: libraries/classes/Plugins/Export/ExportCsv.php:71
#: libraries/classes/Plugins/Import/AbstractImportCsv.php:66
msgid "Columns enclosed with:"
msgstr "Colonnes entourées par : "
msgstr "Colonnes entourées par :"
#: libraries/classes/Plugins/Export/ExportCsv.php:76
#: libraries/classes/Plugins/Import/AbstractImportCsv.php:73
@ -9924,7 +9924,7 @@ msgstr "Colonnes échappées avec :"
#: libraries/classes/Plugins/Export/ExportCsv.php:81
#: libraries/classes/Plugins/Import/AbstractImportCsv.php:80
msgid "Lines terminated with:"
msgstr "Lignes terminées par : "
msgstr "Lignes terminées par :"
#: libraries/classes/Plugins/Export/ExportCsv.php:86
#: libraries/classes/Plugins/Export/ExportExcel.php:54
@ -9934,7 +9934,7 @@ msgstr "Lignes terminées par : "
#: libraries/classes/Plugins/Export/ExportOdt.php:138
#: libraries/classes/Plugins/Export/ExportTexytext.php:95
msgid "Replace NULL with:"
msgstr "Remplacer NULL par : "
msgstr "Remplacer NULL par :"
#: libraries/classes/Plugins/Export/ExportCsv.php:91
#: libraries/classes/Plugins/Export/ExportExcel.php:59
@ -9943,7 +9943,7 @@ msgstr "Retirer les caractères de fin de ligne à l'intérieur des colonnes"
#: libraries/classes/Plugins/Export/ExportExcel.php:69
msgid "Excel edition:"
msgstr "Version d'Excel : "
msgstr "Version d'Excel :"
#: libraries/classes/Plugins/Export/ExportHtmlword.php:73
#: libraries/classes/Plugins/Export/ExportLatex.php:106
@ -10108,7 +10108,7 @@ msgstr "Afficher les types média (MIME)"
#: libraries/classes/Plugins/Export/ExportLatex.php:173
msgid "Put columns names in the first row:"
msgstr "Afficher les noms de colonnes en première ligne : "
msgstr "Afficher les noms de colonnes en première ligne :"
#: libraries/classes/Plugins/Export/ExportLatex.php:221
#: libraries/classes/Plugins/Export/ExportSql.php:718
@ -10122,7 +10122,7 @@ msgstr "Hôte :"
#: libraries/classes/Plugins/Export/ExportSql.php:724
#: libraries/classes/Plugins/Export/ExportXml.php:249
msgid "Generation Time:"
msgstr "Généré le : "
msgstr "Généré le :"
#: libraries/classes/Plugins/Export/ExportLatex.php:228
#: libraries/classes/Plugins/Export/ExportSql.php:728
@ -10135,23 +10135,23 @@ msgstr "Version du serveur : "
#: libraries/classes/Plugins/Export/ExportSql.php:730
#: libraries/classes/Plugins/Export/ExportXml.php:252
msgid "PHP Version:"
msgstr "Version de PHP : "
msgstr "Version de PHP :"
#: libraries/classes/Plugins/Export/ExportLatex.php:259
#: libraries/classes/Plugins/Export/ExportSql.php:919
#: libraries/classes/Plugins/Export/ExportXml.php:420
#: libraries/classes/Plugins/Export/Helpers/Pdf.php:181
msgid "Database:"
msgstr "Base de données : "
msgstr "Base de données :"
#: libraries/classes/Plugins/Export/ExportLatex.php:332
#: libraries/classes/Plugins/Export/ExportSql.php:2241
msgid "Data:"
msgstr "Données : "
msgstr "Données :"
#: libraries/classes/Plugins/Export/ExportLatex.php:520
msgid "Structure:"
msgstr "Structure : "
msgstr "Structure :"
#: libraries/classes/Plugins/Export/ExportMediawiki.php:86
msgid "Export table names"
@ -10163,7 +10163,7 @@ msgstr "Exporter les entêtes de table"
#: libraries/classes/Plugins/Export/ExportPdf.php:104
msgid "Report title:"
msgstr "Titre du rapport : "
msgstr "Titre du rapport :"
#: libraries/classes/Plugins/Export/ExportPdf.php:235
msgid "Dumping data"
@ -10205,8 +10205,8 @@ msgstr "Exporter les métadonnées"
msgid ""
"Database system or older MySQL server to maximize output compatibility with:"
msgstr ""
"Maximiser la compatibilité avec un système de base de données ou un ancien "
"serveur MySQL : "
"Système de base de données ou ancien serveur MySQL pour maximiser la "
"compatibilité de sortie avec :"
#: libraries/classes/Plugins/Export/ExportSql.php:238
msgid "Add statements:"
@ -10270,7 +10270,7 @@ msgstr "Fonction à utiliser lors du déchargement des données :"
#: libraries/classes/Plugins/Export/ExportSql.php:423
msgid "Syntax to use when inserting data:"
msgstr "Syntaxe à utiliser lors de l'insertion de données : "
msgstr "Syntaxe à utiliser lors de l'insertion de données :"
#: libraries/classes/Plugins/Export/ExportSql.php:433
msgid ""
@ -10354,17 +10354,17 @@ msgstr "Métadonnées pour la base de données %s"
#: libraries/classes/Plugins/Export/ExportSql.php:1440
#: libraries/classes/Plugins/Schema/Pdf/PdfRelationSchema.php:649
msgid "Creation:"
msgstr "Création : "
msgstr "Création :"
#: libraries/classes/Plugins/Export/ExportSql.php:1453
#: libraries/classes/Plugins/Schema/Pdf/PdfRelationSchema.php:660
msgid "Last update:"
msgstr "Dernière modification : "
msgstr "Dernière modification :"
#: libraries/classes/Plugins/Export/ExportSql.php:1466
#: libraries/classes/Plugins/Schema/Pdf/PdfRelationSchema.php:671
msgid "Last check:"
msgstr "Dernière vérification : "
msgstr "Dernière vérification :"
#: libraries/classes/Plugins/Export/ExportSql.php:1522
#, php-format
@ -10435,7 +10435,7 @@ msgstr "Exporter les contenus"
#: libraries/classes/Plugins/Export/Helpers/Pdf.php:182
msgid "Table:"
msgstr "Table : "
msgstr "Table :"
#: libraries/classes/Plugins/Export/Helpers/Pdf.php:183
msgid "Purpose:"
@ -10577,7 +10577,7 @@ msgstr "Le fichier importé ne contient aucune donnée !"
#: libraries/classes/Plugins/Import/ImportSql.php:72
msgid "SQL compatibility mode:"
msgstr "Mode de compatibilité SQL : "
msgstr "Mode de compatibilité SQL :"
#: libraries/classes/Plugins/Import/ImportSql.php:84
msgid "Do not use <code>AUTO_INCREMENT</code> for zero values"
@ -11087,7 +11087,7 @@ msgstr "Enregistrement des modèles d'exportation"
#: libraries/classes/Relation.php:386
msgid "Quick steps to set up advanced features:"
msgstr "Guide rapide de configuration des fonctions avancées : "
msgstr "Guide rapide de configuration des fonctions avancées :"
#: libraries/classes/Relation.php:392
#, php-format
@ -11340,7 +11340,7 @@ msgstr "Il faut fournir une définition pour l'évènement."
#: libraries/classes/Rte/Routines.php:1358
#: libraries/classes/Rte/Routines.php:1563
msgid "Error in processing request:"
msgstr "Erreur dans le traitement de la requête : "
msgstr "Erreur dans le traitement de la requête :"
#: libraries/classes/Rte/Footer.php:125
msgid "OFF"
@ -11356,7 +11356,7 @@ msgstr "État du planificateur d'évènements"
#: libraries/classes/Rte/General.php:61
msgid "The backed up query was:"
msgstr "La requête conservée est : "
msgstr "La requête conservée est :"
#: libraries/classes/Rte/Routines.php:142
msgid ""
@ -12020,7 +12020,7 @@ msgstr "Informations pour la connexion"
#: templates/server/replication/master_add_slave_user.twig:16
#: templates/server/replication/change_master.twig:14
msgid "User name:"
msgstr "Nom d'utilisateur : "
msgstr "Nom d'utilisateur :"
#: libraries/classes/Server/Privileges.php:1641
#: libraries/classes/Server/Privileges.php:1662
@ -12477,7 +12477,7 @@ msgstr "Attributions de menu du groupe d'utilisateurs"
#: libraries/classes/Server/UserGroups.php:257
msgid "Group name:"
msgstr "Nom du groupe : "
msgstr "Nom du groupe :"
#: libraries/classes/Server/UserGroups.php:294
msgid "Server-level tabs"
@ -12666,7 +12666,7 @@ msgstr "Nom de base de données invalide : "
#: libraries/classes/Table.php:1576
msgid "Invalid table name:"
msgstr "Nom de table invalide : "
msgstr "Nom de table invalide :"
#: libraries/classes/Table.php:1613
#, php-format
@ -12748,7 +12748,7 @@ msgstr "Chemin non trouvé pour le thème %s !"
#: libraries/classes/ThemeManager.php:352
msgid "Theme:"
msgstr "Thème : "
msgstr "Thème :"
#: libraries/classes/Tracking.php:275
#: templates/database/tracking/tables.twig:78
@ -13746,7 +13746,7 @@ msgstr "Colonnes des graphiques"
#: templates/server/status/monitor/index.twig:74
msgid "Chart arrangement"
msgstr "Actions sur la dispositions des graphiques :"
msgstr "Actions sur la dispositions des graphiques"
#: templates/server/status/monitor/index.twig:75
msgid ""
@ -13780,7 +13780,7 @@ msgstr ""
#: templates/server/status/monitor/index.twig:101
msgid "Using the monitor:"
msgstr "Utilisation de la surveillance : "
msgstr "Utilisation de la surveillance :"
#: templates/server/status/monitor/index.twig:103
msgid ""
@ -13809,7 +13809,7 @@ msgstr ""
#: templates/server/status/monitor/index.twig:114
msgid "Please note:"
msgstr "Note : "
msgstr "Veuillez noter :"
#: templates/server/status/monitor/index.twig:117
msgid ""
@ -15203,7 +15203,7 @@ msgstr ""
#: templates/server/replication/change_master.twig:26
msgid "Port:"
msgstr "Port : "
msgstr "Port :"
#: templates/setup/config/index.twig:4 templates/setup/home/index.twig:93
msgid "Configuration file"
@ -15284,7 +15284,7 @@ msgstr "Voir l'état de l'esclave"
#: templates/server/replication/slave_configuration.twig:37
msgid "Control slave:"
msgstr "Contrôler le serveur esclave : "
msgstr "Contrôler le serveur esclave :"
#: templates/server/replication/slave_configuration.twig:47
msgid "Reset slave"
@ -15308,7 +15308,7 @@ msgstr "Arrêter seulement le fil d'exécution des entrées/sorties"
#: templates/server/replication/slave_configuration.twig:73
msgid "Error management:"
msgstr "Gestion des erreurs : "
msgstr "Gestion des erreurs :"
#: templates/server/replication/slave_configuration.twig:76
msgid "Skipping errors might lead into unsynchronized master and slave!"
@ -15479,7 +15479,7 @@ msgstr "Survol"
#: templates/filter.twig:4 templates/server/status/variables/index.twig:14
msgid "Containing the word:"
msgstr "Contenant le mot : "
msgstr "Contenant le mot :"
#: templates/database/designer/main.twig:21
#: templates/database/designer/main.twig:27
@ -15932,7 +15932,7 @@ msgstr "Afficher les valeurs non formatées"
#: templates/server/status/variables/index.twig:45
msgid "Related links:"
msgstr "Liens connexes : "
msgstr "Liens connexes :"
#: templates/server/status/variables/index.twig:70
#: templates/server/variables/index.twig:28
@ -16317,15 +16317,15 @@ msgstr "Nombre d'instructions exécutées depuis le démarrage :"
#: templates/server/status/queries/index.twig:17
msgid "per hour:"
msgstr "par heure : "
msgstr "par heure :"
#: templates/server/status/queries/index.twig:18
msgid "per minute:"
msgstr "par minute : "
msgstr "par minute :"
#: templates/server/status/queries/index.twig:20
msgid "per second:"
msgstr "par seconde : "
msgstr "par seconde :"
#: templates/server/status/queries/index.twig:32
msgid "Statements"
@ -16689,7 +16689,7 @@ msgstr "Conserver cette requête SQL dans les signets"
#: templates/sql/bookmark.twig:15
msgid "Label:"
msgstr "Intitulé : "
msgstr "Intitulé :"
#: templates/error/report_form.twig:6
msgid ""

View File

@ -3,17 +3,16 @@ msgstr ""
"Project-Id-Version: phpMyAdmin 5.0.0-rc1\n"
"Report-Msgid-Bugs-To: translators@phpmyadmin.net\n"
"POT-Creation-Date: 2019-12-23 15:37-0300\n"
"PO-Revision-Date: 2018-05-19 17:38+0000\n"
"Last-Translator: Muhammad Rifqi Priyo Susanto "
"<muhammadrifqipriyosusanto@gmail.com>\n"
"PO-Revision-Date: 2020-01-07 01:21+0000\n"
"Last-Translator: Timothy Aditya Sutantyo <timisutantyo@gmail.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/phpmyadmin/"
"master/id/>\n"
"5-0/id/>\n"
"Language: id\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.0-dev\n"
"X-Generator: Weblate 3.10\n"
"X-Poedit-Basepath: ../../..\n"
#: ajax.php:35 ajax.php:73 export.php:214 libraries/classes/Export.php:1219
@ -125,16 +124,12 @@ msgid "You have to choose at least one column to display!"
msgstr "Anda harus memilih paling sedikit satu kolom untuk ditampilkan!"
#: db_qbe.php:159 templates/database/multi_table_query/form.twig:3
#, fuzzy
#| msgid "Simulate query"
msgid "Multi-table query"
msgstr "Simulasikan query"
msgstr "Query multi tabel"
#: db_qbe.php:163 templates/database/multi_table_query/form.twig:3
#, fuzzy
#| msgid "Query failed"
msgid "Query by example"
msgstr "Kueri gagal"
msgstr "Kueri dengan contoh"
#: db_qbe.php:182
#, php-format
@ -344,7 +339,6 @@ msgid "Dropping Primary Key/Index"
msgstr "Menghapus Kunci Primer/Indeks"
#: js/messages.php:66
#, fuzzy
msgid "Dropping Foreign key."
msgstr "Penghapusan Foreign Key."
@ -540,10 +534,8 @@ msgid "Y values"
msgstr "Nilai Y"
#: js/messages.php:146
#, fuzzy
#| msgid "Please enter the same value again"
msgid "Please enter the SQL query first."
msgstr "Silakan masukkan lagi nilai yang sama"
msgstr "Silakan masukkan kueri SQL dulu."
#: js/messages.php:149
msgid "The host name is empty!"

View File

@ -14,6 +14,7 @@ use PhpMyAdmin\Core;
use PhpMyAdmin\Relation;
use PhpMyAdmin\Response;
use PhpMyAdmin\Template;
use PhpMyAdmin\TwoFactor;
use PhpMyAdmin\Url;
use PhpMyAdmin\UserPreferences;
use PhpMyAdmin\UserPreferencesHeader;
@ -59,8 +60,12 @@ if (isset($_POST['revert'])) {
$error = null;
if ($form_display->process(false) && ! $form_display->hasErrors()) {
// Load 2FA settings
$twoFactor = new TwoFactor($GLOBALS['cfg']['Server']['user']);
// save settings
$result = $userPreferences->save($cf->getConfigArray());
// save back the 2FA setting only
$twoFactor->save();
if ($result === true) {
// reload config
$GLOBALS['PMA_Config']->loadUserPreferences();

View File

@ -81,6 +81,7 @@ $comments_map = $insertEdit->getCommentsMap($db, $table);
$header = $response->getHeader();
$scripts = $header->getScripts();
$scripts->addFile('makegrid.js');
$scripts->addFile('sql.js');
$scripts->addFile('table/change.js');
$scripts->addFile('vendor/jquery/additional-methods.js');

View File

@ -129,8 +129,7 @@
{% if is_show_stats %}
<td class="value tbl_size">
<a href="tbl_structure.php{{ tbl_url_query|raw }}#showusage">
<span>{{ formatted_size }}</span>
<span class="unit">{{ unit }}</span>
<span>{{ formatted_size }}</span>&nbsp;<span class="unit">{{ unit }}</span>
</a>
</td>
<td class="value tbl_overhead">

View File

@ -58,7 +58,7 @@
</a>
|
<a class="delete-server" href="{{ get_common(server.params.remove) }}" data-post="
{{- get_common(server.params.token, '') }}">
{{- get_common({ token: server.params.token }, '') }}">
{% trans 'Delete' %}
</a>
</small>

View File

@ -1007,6 +1007,40 @@ class ConfigTest extends PmaTestCase
);
}
/**
* Test for getTempDir
*
* @return void
*
* @group file-system
*/
public function testGetTempDir(): void
{
$this->object->set('TempDir', sys_get_temp_dir() . DIRECTORY_SEPARATOR);
// Check no double slash is here
$this->assertEquals(
sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'upload',
$this->object->getTempDir('upload')
);
}
/**
* Test for getUploadTempDir
*
* @return void
*
* @group file-system
*/
public function testGetUploadTempDir(): void
{
$this->object->set('TempDir', realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR);
$this->assertEquals(
$this->object->getTempDir('upload'),
$this->object->getUploadTempDir()
);
}
/**
* Test for isGitRevision
*

View File

@ -59,7 +59,21 @@ class HeaderTest extends PmaTestCase
$header = new Header();
$header->disable();
$this->assertEquals(
"\n",
'',
$header->getDisplay()
);
}
/**
* Test for enable
*
* @return void
*/
public function testEnable()
{
$header = new Header();
$this->assertStringContainsString(
'<title>phpMyAdmin</title>',
$header->getDisplay()
);
}

View File

@ -1018,6 +1018,19 @@ class AuthenticationCookieTest extends PmaTestCase
'sec321'
)
);
$this->assertEquals(
'root',
$this->object->cookieDecrypt(
'{"iv":"AclJhCM7ryNiuPnw3Y8cXg==","mac":"d0ef75e852bc162e81496e116dc571182cb2cba6","payload":"O4vrt9R1xyzAw7ypvrLmQA=="}',
':Kb1?)c(r{]-{`HW*hOzuufloK(M~!p'
)
);
$this->assertFalse(
$this->object->cookieDecrypt(
'{"iv":"AclJhCM7ryNiuPnw3Y8cXg==","mac":"d0ef75e852bc162e81496e116dc571182cb2cba6","payload":"O4vrt9R1xyzAw7ypvrLmQA=="}',
'aedzoiefpzf,zf1z7ef6ef84'
)
);
}
/**

View File

@ -29,8 +29,9 @@ class ImportShpTest extends PmaTestCase
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*
* @access protected
* @return void
*
* @access protected
*/
protected function setUp(): void
{
@ -84,8 +85,9 @@ class ImportShpTest extends PmaTestCase
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*
* @access protected
* @return void
*
* @access protected
*/
protected function tearDown(): void
{
@ -138,13 +140,20 @@ class ImportShpTest extends PmaTestCase
$this->runImport('test/test_data/dresden_osm.shp.zip');
$this->assertMessages($import_notice);
$endsWith = "13.737122 51.0542065)))'))";
if (extension_loaded('dbase')) {
$endsWith = "13.737122 51.0542065)))'),";
}
$this->assertStringContainsString(
"(GeomFromText('MULTIPOLYGON((("
. "13.737122 51.0542065,"
. "13.7373039 51.0541298,"
. "13.7372661 51.0540944,"
. "13.7370842 51.0541711,"
. "13.737122 51.0542065)))'))",
. '13.737122 51.0542065,'
. '13.7373039 51.0541298,'
. '13.7372661 51.0540944,'
. '13.7370842 51.0541711,'
. $endsWith,
$sql_query
);
}
@ -166,22 +175,39 @@ class ImportShpTest extends PmaTestCase
//Test function called
$this->runImport('test/test_data/timezone.shp.zip');
//asset that all sql are executed
// asset that all sql are executed
$this->assertStringContainsString(
'CREATE DATABASE IF NOT EXISTS `SHP_DB` DEFAULT CHARACTER '
. 'SET utf8 COLLATE utf8_general_ci',
$sql_query
);
$this->assertStringContainsString(
'CREATE TABLE IF NOT EXISTS `SHP_DB`.`TBL_NAME` '
. '(`SPATIAL` geometry) DEFAULT CHARACTER '
. 'SET utf8 COLLATE utf8_general_ci;',
$sql_query
);
$this->assertStringContainsString(
"INSERT INTO `SHP_DB`.`TBL_NAME` (`SPATIAL`) VALUES",
$sql_query
);
// dbase extension will generate different sql statement
if (extension_loaded('dbase')) {
$this->assertStringContainsString(
'CREATE TABLE IF NOT EXISTS `SHP_DB`.`TBL_NAME` '
. '(`SPATIAL` geometry, `ID` int(2), `AUTHORITY` varchar(25), `NAME` varchar(42)) '
. 'DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;',
$sql_query
);
$this->assertStringContainsString(
'INSERT INTO `SHP_DB`.`TBL_NAME` (`SPATIAL`, `ID`, `AUTHORITY`, `NAME`) VALUES',
$sql_query
);
} else {
$this->assertStringContainsString(
'CREATE TABLE IF NOT EXISTS `SHP_DB`.`TBL_NAME` (`SPATIAL` geometry)',
$sql_query
);
$this->assertStringContainsString(
'INSERT INTO `SHP_DB`.`TBL_NAME` (`SPATIAL`) VALUES',
$sql_query
);
}
$this->assertStringContainsString(
"GeomFromText('POINT(1294523.1759236",
$sql_query

View File

@ -41,7 +41,6 @@ p.enum_notice {
}
img {
width: 1.8em;
vertical-align: middle;
}
}

View File

@ -41,7 +41,6 @@ p.enum_notice {
}
img {
width: 1.8em;
vertical-align: middle;
}
}