mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-02-20 13:46:52 +01:00
Fix repair to convert charset utf8 utf8mb4
This commit is contained in:
parent
9ea29c01a6
commit
3d3527d466
|
|
@ -97,7 +97,7 @@ if (@file_exists($forcedfile)) {
|
|||
|
||||
session_start(); // To be able to keep info into session (used for not losing pass during navigation. pass must not transit through parameters)
|
||||
|
||||
pHeader($langs->trans("ConfigurationFile"), "step1", "set", "", (empty($force_dolibarr_js_JQUERY) ? '' : $force_dolibarr_js_JQUERY.'/'), 'main-inside-bis');
|
||||
pHeader($langs->trans("DolibarrSetup").' - '.$langs->trans("ConfigurationFile"), "step1", "set", "", (empty($force_dolibarr_js_JQUERY) ? '' : $force_dolibarr_js_JQUERY.'/'), 'main-inside-bis');
|
||||
|
||||
// Test if we can run a first install process
|
||||
if (!is_writable($conffile)) {
|
||||
|
|
|
|||
|
|
@ -592,9 +592,11 @@ function pHeader($subtitle, $next, $action = 'set', $param = '', $forcejqueryurl
|
|||
print DOL_VERSION;
|
||||
print '</div><br>';
|
||||
|
||||
print '<span class="titre">'.$langs->trans("DolibarrSetup");
|
||||
print '<span class="titre">';
|
||||
if ($subtitle) {
|
||||
print ' - '.$subtitle;
|
||||
print $subtitle;
|
||||
} else {
|
||||
print $langs->trans("DolibarrSetup");
|
||||
}
|
||||
print '</span>'."\n";
|
||||
|
||||
|
|
|
|||
|
|
@ -73,13 +73,11 @@ if (!is_object($conf)) {
|
|||
* View
|
||||
*/
|
||||
|
||||
pHeader('', "upgrade2", GETPOST('action', 'aZ09'));
|
||||
pHeader($langs->trans("Repair"), "upgrade2", GETPOST('action', 'aZ09'));
|
||||
|
||||
// Action to launch the repair script
|
||||
$actiondone = 1;
|
||||
|
||||
print '<h3>'.$langs->trans("Repair").'</h3>';
|
||||
|
||||
print '<div class="warning" style="padding-top: 10px">';
|
||||
print $langs->trans("SetAtLeastOneOptionAsUrlParameter");
|
||||
print '</div>';
|
||||
|
|
@ -1298,16 +1296,54 @@ if ($ok && GETPOST('force_utf8_on_tables', 'alpha')) {
|
|||
if ($force_utf8_on_tables == 'confirmed') {
|
||||
$sql = 'SET FOREIGN_KEY_CHECKS=0';
|
||||
print '<!-- '.$sql.' -->';
|
||||
print '<tr><td colspan="2">'.$sql.'</td></tr>';
|
||||
$resql = $db->query($sql);
|
||||
}
|
||||
|
||||
$foreignkeystorestore = array();
|
||||
|
||||
// First loop to delete foreign keys
|
||||
foreach ($listoftables as $table) {
|
||||
// do not convert llx_const if mysql encrypt/decrypt is used
|
||||
if ($conf->db->dolibarr_main_db_encryption != 0 && preg_match('/\_const$/', $table[0])) {
|
||||
continue;
|
||||
}
|
||||
if ($table[1] == 'VIEW') {
|
||||
print '<tr><td colspan="2">'.$table[0].' is a '.$table[1].' <span class="opacitymedium">(Skipped)</span></td></tr>';
|
||||
continue;
|
||||
}
|
||||
|
||||
// Special case of tables with foreign key on varchar fields
|
||||
$arrayofforeignkey = array(
|
||||
'llx_accounting_account' => 'fk_accounting_account_fk_pcg_version',
|
||||
'llx_accounting_system' => 'fk_accounting_account_fk_pcg_version',
|
||||
'llx_c_type_contact' => 'fk_societe_commerciaux_fk_c_type_contact_code',
|
||||
'llx_societe_commerciaux' => 'fk_societe_commerciaux_fk_c_type_contact_code'
|
||||
);
|
||||
|
||||
foreach ($arrayofforeignkey as $tmptable => $foreignkeyname) {
|
||||
if ($table[0] == $tmptable) {
|
||||
print '<tr><td colspan="2">';
|
||||
$sqltmp = 'ALTER TABLE '.$table[0].' DROP FOREIGN KEY '.$foreignkeyname;
|
||||
print $sqltmp;
|
||||
if ($force_utf8_on_tables == 'confirmed') {
|
||||
$resqltmp = $db->query($sqltmp);
|
||||
} else {
|
||||
print ' - <span class="opacitymedium">Disabled</span>';
|
||||
}
|
||||
print '</td></tr>';
|
||||
$foreignkeystorestore[$tmptable] = $foreignkeyname;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($listoftables as $table) {
|
||||
// do not convert llx_const if mysql encrypt/decrypt is used
|
||||
if ($conf->db->dolibarr_main_db_encryption != 0 && preg_match('/\_const$/', $table[0])) {
|
||||
continue;
|
||||
}
|
||||
if ($table[1] == 'VIEW') {
|
||||
print '<tr><td colspan="2">'.$table[0].' is a '.$table[1].' (Skipped)</td></tr>';
|
||||
print '<tr><td colspan="2">'.$table[0].' is a '.$table[1].' <span class="opacitymedium">(Skipped)</span></td></tr>';
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -1324,17 +1360,45 @@ if ($ok && GETPOST('force_utf8_on_tables', 'alpha')) {
|
|||
} else {
|
||||
$resql2 = false;
|
||||
}
|
||||
print ' - Done ('.(($resql1 && $resql2) ? 'OK' : 'KO').')';
|
||||
print ' - Done '.(($resql1 && $resql2) ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="'.dol_escape_htmltag($db->lasterror).'">(KO)</span>');
|
||||
} else {
|
||||
print ' - Disabled';
|
||||
print ' - <span class="opacitymedium">Disabled</span>';
|
||||
}
|
||||
print '</td></tr>';
|
||||
flush();
|
||||
ob_flush();
|
||||
}
|
||||
|
||||
// Restore dropped foreign keys
|
||||
foreach ($foreignkeystorestore as $tmptable => $foreignkeyname) {
|
||||
$stringtofindinline = 'ALTER TABLE .* ADD CONSTRAINT '.$foreignkeyname;
|
||||
$fileforkeys = DOL_DOCUMENT_ROOT.'/install/mysql/tables/'.$tmptable.'.key.sql';
|
||||
//print 'Search in '.$fileforkeys.' to get '.$stringtofindinline."<br>\n";
|
||||
|
||||
$handle = fopen($fileforkeys, 'r');
|
||||
if ($handle) {
|
||||
while (($line = fgets($handle)) !== false) {
|
||||
// Process the line read.
|
||||
if (preg_match('/^'.$stringtofindinline.'/i', $line)) {
|
||||
$resqltmp = $db->query($line);
|
||||
print '<tr><td colspan="2">';
|
||||
print $line;
|
||||
print ' - Done '.($resqltmp ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="'.dol_escape_htmltag($db->lasterror).'">(KO)</span>');
|
||||
print '</td></tr>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
fclose($handle);
|
||||
}
|
||||
flush();
|
||||
ob_flush();
|
||||
}
|
||||
|
||||
// Enable foreign key checking
|
||||
if ($force_utf8_on_tables == 'confirmed') {
|
||||
$sql = 'SET FOREIGN_KEY_CHECKS=1';
|
||||
print '<!-- '.$sql.' -->';
|
||||
print '<tr><td colspan="2">'.$sql.'</td></tr>';
|
||||
$resql = $db->query($sql);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1349,22 +1413,61 @@ if ($ok && GETPOST('force_utf8mb4_on_tables', 'alpha')) {
|
|||
if ($db->type == "mysql" || $db->type == "mysqli") {
|
||||
$force_utf8mb4_on_tables = GETPOST('force_utf8mb4_on_tables', 'alpha');
|
||||
|
||||
|
||||
$listoftables = $db->DDLListTablesFull($db->database_name);
|
||||
|
||||
// Disable foreign key checking for avoid errors
|
||||
if ($force_utf8mb4_on_tables == 'confirmed') {
|
||||
$sql = 'SET FOREIGN_KEY_CHECKS=0';
|
||||
print '<!-- '.$sql.' -->';
|
||||
print '<tr><td colspan="2">'.$sql.'</td></tr>';
|
||||
$resql = $db->query($sql);
|
||||
}
|
||||
|
||||
$foreignkeystorestore = array();
|
||||
|
||||
// First loop to delete foreign keys
|
||||
foreach ($listoftables as $table) {
|
||||
// do not convert llx_const if mysql encrypt/decrypt is used
|
||||
if ($conf->db->dolibarr_main_db_encryption != 0 && preg_match('/\_const$/', $table[0])) {
|
||||
continue;
|
||||
}
|
||||
if ($table[1] == 'VIEW') {
|
||||
print '<tr><td colspan="2">'.$table[0].' is a '.$table[1].' <span class="opacitymedium">(Skipped)</span></td></tr>';
|
||||
continue;
|
||||
}
|
||||
|
||||
// Special case of tables with foreign key on varchar fields
|
||||
$arrayofforeignkey = array(
|
||||
'llx_accounting_account' => 'fk_accounting_account_fk_pcg_version',
|
||||
'llx_accounting_system' => 'fk_accounting_account_fk_pcg_version',
|
||||
'llx_c_type_contact' => 'fk_societe_commerciaux_fk_c_type_contact_code',
|
||||
'llx_societe_commerciaux' => 'fk_societe_commerciaux_fk_c_type_contact_code'
|
||||
);
|
||||
|
||||
foreach ($arrayofforeignkey as $tmptable => $foreignkeyname) {
|
||||
if ($table[0] == $tmptable) {
|
||||
print '<tr><td colspan="2">';
|
||||
$sqltmp = 'ALTER TABLE '.$table[0].' DROP FOREIGN KEY '.$foreignkeyname;
|
||||
print $sqltmp;
|
||||
if ($force_utf8mb4_on_tables == 'confirmed') {
|
||||
$resqltmp = $db->query($sqltmp);
|
||||
} else {
|
||||
print ' - <span class="opacitymedium">Disabled</span>';
|
||||
}
|
||||
print '</td></tr>';
|
||||
$foreignkeystorestore[$tmptable] = $foreignkeyname;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($listoftables as $table) {
|
||||
// do not convert llx_const if mysql encrypt/decrypt is used
|
||||
if ($conf->db->dolibarr_main_db_encryption != 0 && preg_match('/\_const$/', $table[0])) {
|
||||
continue;
|
||||
}
|
||||
if ($table[1] == 'VIEW') {
|
||||
print '<tr><td colspan="2">'.$table[0].' is a '.$table[1].' (Skipped)</td></tr>';
|
||||
print '<tr><td colspan="2">'.$table[0].' is a '.$table[1].' <span class="opacitymedium">(Skipped)</span></td></tr>';
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -1381,19 +1484,45 @@ if ($ok && GETPOST('force_utf8mb4_on_tables', 'alpha')) {
|
|||
} else {
|
||||
$resql2 = false;
|
||||
}
|
||||
print ' - Done ('.(($resql1 && $resql2) ? 'OK' : 'KO').')';
|
||||
print ' - Done '.(($resql1 && $resql2) ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="'.dol_escape_htmltag($db->lasterror).'">(KO)</span>');
|
||||
} else {
|
||||
print ' - Disabled';
|
||||
print ' - <span class="opacitymedium">Disabled</span>';
|
||||
}
|
||||
print '</td></tr>';
|
||||
flush();
|
||||
ob_flush();
|
||||
}
|
||||
|
||||
// Restore dropped foreign keys
|
||||
foreach ($foreignkeystorestore as $tmptable => $foreignkeyname) {
|
||||
$stringtofindinline = 'ALTER TABLE .* ADD CONSTRAINT '.$foreignkeyname;
|
||||
$fileforkeys = DOL_DOCUMENT_ROOT.'/install/mysql/tables/'.$tmptable.'.key.sql';
|
||||
//print 'Search in '.$fileforkeys.' to get '.$stringtofindinline."<br>\n";
|
||||
|
||||
$handle = fopen($fileforkeys, 'r');
|
||||
if ($handle) {
|
||||
while (($line = fgets($handle)) !== false) {
|
||||
// Process the line read.
|
||||
if (preg_match('/^'.$stringtofindinline.'/i', $line)) {
|
||||
$resqltmp = $db->query($line);
|
||||
print '<tr><td colspan="2">';
|
||||
print $line;
|
||||
print ' - Done '.($resqltmp ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="'.dol_escape_htmltag($db->lasterror).'">(KO)</span>');
|
||||
print '</td></tr>';
|
||||
break;
|
||||
}
|
||||
}
|
||||
fclose($handle);
|
||||
}
|
||||
flush();
|
||||
ob_flush();
|
||||
}
|
||||
|
||||
// Enable foreign key checking
|
||||
if ($force_utf8mb4_on_tables == 'confirmed') {
|
||||
$sql = 'SET FOREIGN_KEY_CHECKS=1';
|
||||
print '<!-- '.$sql.' -->';
|
||||
print '<tr><td colspan="2">'.$sql.'</td></tr>';
|
||||
$resql = $db->query($sql);
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1439,9 +1568,9 @@ if ($ok && GETPOST('force_collation_from_conf_on_tables', 'alpha')) {
|
|||
} else {
|
||||
$resql2 = false;
|
||||
}
|
||||
print ' - Done ('.(($resql1 && $resql2) ? 'OK' : 'KO').')';
|
||||
print ' - Done '.(($resql1 && $resql2) ? '<span class="opacitymedium">(OK)</span>' : '<span class="error" title="'.dol_escape_htmltag($db->lasterror).'">(KO)</span>');
|
||||
} else {
|
||||
print ' - Disabled';
|
||||
print ' - <span class="opacitymedium">Disabled</span>';
|
||||
}
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ $error = 0;
|
|||
|
||||
dolibarr_install_syslog("--- step1: entering step1.php page");
|
||||
|
||||
pHeader($langs->trans("ConfigurationFile"), "step2");
|
||||
pHeader($langs->trans("DolibarrSetup").' - '.$langs->trans("ConfigurationFile"), "step2");
|
||||
|
||||
// Test if we can run a first install process
|
||||
if (!is_writable($conffile)) {
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ dolibarr_install_syslog("--- step2: entering step2.php page");
|
|||
* View
|
||||
*/
|
||||
|
||||
pHeader($langs->trans("CreateDatabaseObjects"), "step4");
|
||||
pHeader($langs->trans("DolibarrSetup").' - '.$langs->trans("CreateDatabaseObjects"), "step4");
|
||||
|
||||
// Test if we can run a first install process
|
||||
if (!is_writable($conffile)) {
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ $ok = 0;
|
|||
* View
|
||||
*/
|
||||
|
||||
pHeader($langs->trans("AdminAccountCreation"), "step5");
|
||||
pHeader($langs->trans("DolibarrSetup").' - '.$langs->trans("AdminAccountCreation"), "step5");
|
||||
|
||||
// Test if we can run a first install process
|
||||
if (!is_writable($conffile)) {
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ if ($action == "set") {
|
|||
|
||||
$morehtml = '';
|
||||
|
||||
pHeader($langs->trans("SetupEnd"), "step5", 'set', '', '', 'main-inside main-inside-borderbottom');
|
||||
pHeader($langs->trans("DolibarrSetup").' - '.$langs->trans("SetupEnd"), "step5", 'set', '', '', 'main-inside main-inside-borderbottom');
|
||||
print '<br>';
|
||||
|
||||
// Test if we can run a first install process
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user