From: Janusz Dobrowolski Date: Sun, 21 Jul 2019 20:19:39 +0000 (+0200) Subject: System Upgrade: fixed upgrade helpers to preserve sql script queries order, upgrade... X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=commitdiff_plain;h=5866801d02b8007f74ea5bfd15a8ecac7c1c58c1;hp=052d2ef59dfd71c239c163d9c9ace5f75f65ac01;p=fa-stable.git System Upgrade: fixed upgrade helpers to preserve sql script queries order, upgrade options selections now run in target database context. --- diff --git a/admin/db/maintenance_db.inc b/admin/db/maintenance_db.inc index e574fc98..9fa78b99 100644 --- a/admin/db/maintenance_db.inc +++ b/admin/db/maintenance_db.inc @@ -262,9 +262,9 @@ function write_lang() $force - ignore duplicate errors $init - presume $filename is initialization file with '0_' prefix $protect - protect users/roles - $return_errors - return errors instead of display them + $system - system upgrade; no constrains on queries, does not rearrange sql queries, returns collected errors */ -function db_import($filename, $connection, $force=true, $init=true, $protect=false, $return_errors=false) +function db_import($filename, $connection, $force=true, $init=true, $protect=false, $system=false) { global $db, $SysPrefs; @@ -339,29 +339,34 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal if ($query_table == '') { // check if line begins with one of allowed queries - foreach($allowed_commands as $cmd => $table) - { - if (strtolower(substr($line, 0, strlen($cmd))) == $cmd) + if ($system) { + $query_table = 'data_queries'; // dont reorder queries, only standard delimiter allowed + ${$query_table}[] = array('', $line_no+1); + $skip = false; + } else + foreach($allowed_commands as $cmd => $table) { - if ($cmd == 'delimiter') { - $delimiter = trim(substr($line, 10)); - continue 2; - } - $query_table = $table; - $skip = false; - if ($protect) + if (strtolower(substr($line, 0, strlen($cmd))) == $cmd) { - foreach($protected as $protbl) - if (strpos($line, $connection["tbpref"].$protbl) !== false) - { - $skip = true; break; - } + if ($cmd == 'delimiter') { + $delimiter = trim(substr($line, 10)); + continue 2; + } + $query_table = $table; + $skip = false; + if ($protect) + { + foreach($protected as $protbl) + if (strpos($line, $connection["tbpref"].$protbl) !== false) + { + $skip = true; break; + } + } + if (!$skip) + ${$query_table}[] = array('', $line_no+1); + break; } - if (!$skip) - ${$query_table}[] = array('', $line_no+1); - break; } - } } if($query_table != '') // inside allowed query { @@ -401,7 +406,7 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal if ($new_file) // import on old db is forbidden: this would destroy db content unless latin1 was used before in UI { $msg = _("This is new format backup file which cannot be restored on database not migrated to utf8."); - if ($return_errors) + if ($system) return $msg; else display_error($msg); @@ -423,7 +428,7 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal fclose($f); } /*/ - if ($return_errors) + if ($system) { // prevent errors display $save_debug = $SysPrefs->go_debug; $SysPrefs->go_debug = 0; @@ -468,7 +473,7 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal } } - if ($return_errors) + if ($system) $SysPrefs->go_debug = $save_debug; $SysPrefs->sql_trail = $trail; @@ -479,7 +484,7 @@ function db_import($filename, $connection, $force=true, $init=true, $protect=fal db_set_charset($db, $old_encoding); // restore connection encoding if (count($sql_errors)) { - if ($return_errors) + if ($system) return $sql_errors; // display first failure message; the rest are probably derivative diff --git a/admin/includes/fa_patch.class.inc b/admin/includes/fa_patch.class.inc index 0af328f5..336d924d 100644 --- a/admin/includes/fa_patch.class.inc +++ b/admin/includes/fa_patch.class.inc @@ -165,8 +165,7 @@ class fa_patch { { foreach($result as $err) $this->log_error($err[1] . ':'. $err[0]); - } else - { + } else { $this->log_error($result); unset($this->backup); // prevent restore (database was not touched due to other errors) } @@ -242,8 +241,9 @@ class fa_patch { } /* - Present upgrade parameters to administrator - This function presents upgrade choices, after selection company to be upgraded. + Present upgrade parameters to administrator. + This function is run after successfull switching to target database connection + and presents upgrade choices, later fetched in prepare() method. */ function show_params($comp) { @@ -251,7 +251,7 @@ class fa_patch { /* Fetch & check upgrade parameters, check additional upgrade pre-conditions. - This function is run after successfull switching to target database connection. + This function is run after successfull switching to target database connection, before sql upgrade script is run. */ function prepare() { diff --git a/admin/inst_upgrade.php b/admin/inst_upgrade.php index 5e5e1a98..183221e1 100644 --- a/admin/inst_upgrade.php +++ b/admin/inst_upgrade.php @@ -86,7 +86,6 @@ foreach($site_status as $i => $comp) } else label_cell('-', 'align=center'); - if (!$status) { label_cell(radio(null, 'select_comp', $i, null, true), 'align=center'); @@ -103,8 +102,14 @@ div_start('upgrade_args'); if (get_post('select_comp') !== '') { $patch = @$installers[$site_status[get_post('select_comp')]['version']]; - if ($patch) - $patch->show_params(get_post('select_comp')); + if ($patch) { + if (!set_global_connection(get_post('select_comp'))) // create page in target database context + display_error(_("Cannot connect to company database for database restore.")); + else { + $patch->show_params(get_post('select_comp')); + set_global_connection(); // switch back + } + } } div_end();