From 7a15aababab99ac8fba0ce9db9a4bc0e7e158740 Mon Sep 17 00:00:00 2001 From: ldestailleur Date: Mon, 25 Aug 2025 12:46:32 +0200 Subject: [PATCH] NEW Better navigation and report into database admin tools --- htdocs/admin/accountant.php | 2 ++ htdocs/admin/system/database-tables.php | 28 ++++++++++++++++++++----- htdocs/admin/system/database.php | 25 +++++++++++++++------- htdocs/admin/system/dbtable.php | 21 ++++++++++++++++++- 4 files changed, 63 insertions(+), 13 deletions(-) diff --git a/htdocs/admin/accountant.php b/htdocs/admin/accountant.php index aa60a5f7def..e2168f45de4 100644 --- a/htdocs/admin/accountant.php +++ b/htdocs/admin/accountant.php @@ -50,6 +50,8 @@ if (!$user->admin) { $error = 0; +$object = new stdClass(); + /* * Actions diff --git a/htdocs/admin/system/database-tables.php b/htdocs/admin/system/database-tables.php index 5742cd16e29..44019b61de2 100644 --- a/htdocs/admin/system/database-tables.php +++ b/htdocs/admin/system/database-tables.php @@ -57,9 +57,13 @@ $action = GETPOST('action', 'aZ09'); * Actions */ +$sqllog = ''; +$resultsql = true; + if ($action == 'convert') { // Convert engine into innodb $sql = "ALTER TABLE ".$db->sanitize($table)." ENGINE=INNODB"; - $db->query($sql); + $sqllog .= $sql.'
'; + $resultsql = $db->query($sql); } if ($action == 'convertutf8') { $collation = 'utf8_unicode_ci'; @@ -68,14 +72,18 @@ if ($action == 'convertutf8') { $collation = 'utf8_general_ci'; } $sql = "ALTER TABLE ".$db->sanitize($table)." CHARACTER SET utf8 COLLATE ".$db->sanitize($collation); // Set the default value on table + $sqllog .= $sql.'
'; $resql1 = $db->query($sql); if (!$resql1) { setEventMessages($db->lasterror(), null, 'warnings'); + $resultsql = $resql1; } else { $sql = "ALTER TABLE ".$db->sanitize($table)." CONVERT TO CHARACTER SET utf8 COLLATE ".$db->sanitize($collation); // Switch fields (may fails due to foreign key) + $sqllog .= $sql.'
'; $resql2 = $db->query($sql); if (!$resql2) { setEventMessages($db->lasterror(), null, 'warnings'); + $resultsql = $resql2; } } } @@ -86,20 +94,25 @@ if ($action == 'convertutf8mb4') { $collation = 'utf8mb4_general_ci'; } $sql = "ALTER TABLE ".$db->sanitize($table)." CHARACTER SET utf8mb4 COLLATE ".$db->sanitize($collation); // Set the default value on table + $sqllog .= $sql.'
'; $resql1 = $db->query($sql); if (!$resql1) { setEventMessages($db->lasterror(), null, 'warnings'); + $resultsql = $resql1; } else { $sql = "ALTER TABLE ".$db->sanitize($table)." CONVERT TO CHARACTER SET utf8mb4 COLLATE ".$db->sanitize($collation); // Switch fields (may fails due to foreign key) + $sqllog .= $sql.'
'; $resql2 = $db->query($sql); if (!$resql2) { setEventMessages($db->lasterror(), null, 'warnings'); + $resultsql = $resql2; } } } if ($action == 'convertdynamic') { $sql = "ALTER TABLE ".$db->sanitize($table)." ROW_FORMAT=DYNAMIC;"; - $db->query($sql); + $sqllog .= $sql.'
'; + $resultsql = $db->query($sql); } @@ -109,8 +122,13 @@ if ($action == 'convertdynamic') { llxHeader('', '', '', '', 0, 0, '', '', '', 'mod-admin page-database_tables'); -print load_fiche_titre($langs->trans("Tables")." ".ucfirst($conf->db->type), '', 'title_setup'); +$linkback = ''.img_picto($langs->trans("Back"), 'back', 'class="pictofixedwidth"').''.$langs->trans("Back").''; +print load_fiche_titre($langs->trans("Tables")." ".ucfirst($conf->db->type), $linkback, 'title_setup'); + +if ($sqllog) { + print info_admin($sqllog.' '.(empty($resultsql) ? ' => KO '.$db->lasterror() : ' => OK')); +} // Define request to get table description $base = 0; @@ -216,10 +234,10 @@ if (!$base) { if (isset($obj->Collation)) { print '
'.$langs->trans("ConvertInto"); if (!in_array($obj->Collation, array("utf8_unicode_ci"))) { - print ' utf8'; + print ' utf8'; } if (!in_array($obj->Collation, array("utf8mb4_unicode_ci"))) { - print ' utf8mb4'; + print ' utf8mb4'; } print ''; } diff --git a/htdocs/admin/system/database.php b/htdocs/admin/system/database.php index 40e6b6c68f1..4d12a2b4005 100644 --- a/htdocs/admin/system/database.php +++ b/htdocs/admin/system/database.php @@ -53,21 +53,28 @@ if (!$user->admin) { * Actions */ +$sqllog = ''; +$resultsql = null; + if ($action == 'convertutf8unicode') { // Test on permission already done. $sql = "ALTER DATABASE ".$db->sanitize($db->database_name)." CHARACTER SET utf8 COLLATE utf8_unicode_ci"; - $db->query($sql); + $sqllog .= $sql.'
'; + $resultsql = $db->query($sql); } if ($action == 'convertutf8mb4unicode') { // Test on permission already done. - $sql = "ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; - $db->query($sql); + $sql = "ALTER DATABASE ".$db->sanitize($db->database_name)." CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; + $sqllog .= $sql.'
'; + $resultsql = $db->query($sql); } if ($action == 'convertutf8general') { // Test on permission already done. $sql = "ALTER DATABASE ".$db->sanitize($db->database_name)." CHARACTER SET utf8 COLLATE utf8_general_ci"; - $db->query($sql); + $sqllog .= $sql.'
'; + $resultsql = $db->query($sql); } if ($action == 'convertutf8mb4general') { // Test on permission already done. $sql = "ALTER DATABASE ".$db->sanitize($db->database_name)." CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"; - $db->query($sql); + $sqllog .= $sql.'
'; + $resultsql = $db->query($sql); } @@ -81,6 +88,10 @@ llxHeader('', '', '', '', 0, 0, '', '', '', 'mod-admin page-system_database'); print load_fiche_titre($langs->trans("InfoDatabase"), '', 'title_setup'); +if ($sqllog) { + print info_admin($sqllog.' '.(empty($resultsql) ? ' => KO '.$db->lasterror() : ' => OK')); +} + // Database print '
'; print ''; @@ -96,7 +107,7 @@ print ''."\n"; @@ -109,7 +120,7 @@ if ($db->type == 'mysqli') { print img_warning('The database default value of collation '.$defaultcollation.' differs from conf setup '.$conf->db->dolibarr_main_db_collation); } $tooltipexample = "
SHOW VARIABLES LIKE 'collation_database' (cached)
You can avoid cache effect with:
SELECT DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '".$db->escape($conf->db->name)."'"; - print ' '.$form->textwithpicto('', $langs->transnoentitiesnoconv("HelpMariaDBToGetValue", $tooltipexample.'
'.$langs->transnoentitiesnoconv("HelpMariaDBToGetPossibleValues", "
SHOW COLLATION")."

Example to change value: ALTER DATABASE ".$conf->db->name." CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;")); + print ' '.$form->textwithpicto('', $langs->transnoentitiesnoconv("HelpMariaDBToGetValue", $tooltipexample.'
'.$langs->transnoentitiesnoconv("HelpMariaDBToGetPossibleValues", "
SHOW COLLATION")."

Example to change value: ALTER DATABASE ".$conf->db->name." CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"), 1, 'help', 'valignmiddle', 0, 3, 'tooltipcollation'); // We can use $db->getDefaultCollationDatabase(), $db->getListOfCollation(); print '       '.$langs->trans("ConvertInto"); diff --git a/htdocs/admin/system/dbtable.php b/htdocs/admin/system/dbtable.php index 73907196dff..e3262724636 100644 --- a/htdocs/admin/system/dbtable.php +++ b/htdocs/admin/system/dbtable.php @@ -52,8 +52,13 @@ $action = GETPOST('action', 'aZ09'); * Actions */ + +$sqllog = ''; +$resultsql = true; + if ($action == 'convertutf8') { $sql = "SHOW FULL COLUMNS IN ".$db->sanitize($table); + $sqllog .= $sql.'
'; $resql = $db->query($sql); if ($resql) { @@ -63,6 +68,8 @@ if ($action == 'convertutf8') { $row = $db->fetch_row($resql); if ($row[0] == $field) { $sql = "ALTER TABLE ".$db->sanitize($table)." MODIFY ".$db->sanitize($row[0])." ".$row[1]." CHARACTER SET utf8"; // We must not sanitize the $row[1] + $sqllog .= $sql.'
'; + $db->query($sql); $collation = 'utf8_unicode_ci'; @@ -72,6 +79,8 @@ if ($action == 'convertutf8') { } $sql = "ALTER TABLE ".$db->sanitize($table)." MODIFY ".$db->sanitize($row[0])." ".$row[1]." COLLATE ".$db->sanitize($collation); // We must not sanitize the $row[1] + $sqllog .= $sql.'
'; + $resql2 = $db->query($sql); if (!$resql2) { setEventMessages($db->lasterror(), null, 'warnings'); @@ -84,6 +93,7 @@ if ($action == 'convertutf8') { } if ($action == 'convertutf8mb4') { $sql = "SHOW FULL COLUMNS IN ".$db->sanitize($table); + $sqllog .= $sql.'
'; $resql = $db->query($sql); if ($resql) { @@ -93,6 +103,8 @@ if ($action == 'convertutf8mb4') { $row = $db->fetch_row($resql); if ($row[0] == $field) { $sql = "ALTER TABLE ".$db->sanitize($table)." MODIFY ".$db->sanitize($row[0])." ".$row[1]." CHARACTER SET utf8mb4"; // We must not sanitize the $row[1] + $sqllog .= $sql.'
'; + $db->query($sql); $collation = 'utf8mb4_unicode_ci'; @@ -102,6 +114,8 @@ if ($action == 'convertutf8mb4') { } $sql = "ALTER TABLE ".$db->sanitize($table)." MODIFY ".$db->sanitize($row[0])." ".$row[1]." COLLATE ".$db->sanitize($collation); // We must not sanitize the $row[1] + $sqllog .= $sql.'
'; + $resql2 = $db->query($sql); if (!$resql2) { setEventMessages($db->lasterror(), null, 'warnings'); @@ -120,8 +134,13 @@ if ($action == 'convertutf8mb4') { llxHeader('', '', '', '', 0, 0, '', '', '', 'mod-admin page-system_dbtable'); +$linkback = ''.img_picto($langs->trans("Back"), 'back', 'class="pictofixedwidth"').''.$langs->trans("Back").''; -print load_fiche_titre($langs->trans("Table")." ".$table, '', 'title_setup'); +print load_fiche_titre($langs->trans("Table")." ".$table, $linkback, 'title_setup'); + +if ($sqllog) { + print info_admin($sqllog.' '.(empty($resultsql) ? ' => KO '.$db->lasterror() : ' => OK')); +} // Define request to get table description $base = 0;
'.$langs->trans("Password").''.$langs->trans("DBStoringCharset").''.$db->getDefaultCharacterSetDatabase(); if ($db->type == 'mysqli') { $tooltipexample = "
SHOW VARIABLES LIKE 'character_set_database' (cached)
You can avoid cache effect with:
SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '".$db->escape($conf->db->name)."'"; - print ' '.$form->textwithpicto('', $langs->transnoentitiesnoconv("HelpMariaDBToGetValue", $tooltipexample.'
'.$langs->transnoentitiesnoconv("HelpMariaDBToGetPossibleValues", "
SHOW CHARSET")."

Example to change value: ALTER DATABASE ".$conf->db->name." CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;")); + print ' '.$form->textwithpicto('', $langs->transnoentitiesnoconv("HelpMariaDBToGetValue", $tooltipexample.'
'.$langs->transnoentitiesnoconv("HelpMariaDBToGetPossibleValues", "
SHOW CHARSET")."

Example to change value: ALTER DATABASE ".$conf->db->name." CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"), 1, 'help', 'valignmiddle', 0, 3, 'tooltipcharset'); // We can use $db->getDefaultCharacterSetDatabase(), $db->getListOfCharacterSet(), } print '