X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=admin%2Finst_upgrade.php;h=5e5e1a9809ff1a514011a2fe8d659fb659597234;hb=a31195793c023906ab5da62f06ab84aefed445c3;hp=2946c79d1e65d1037af1ee8abbf29e2a11d8e749;hpb=d357340b3926a4f2956bbd9792c27e9922b00f15;p=fa-stable.git diff --git a/admin/inst_upgrade.php b/admin/inst_upgrade.php index 2946c79d..5e5e1a98 100644 --- a/admin/inst_upgrade.php +++ b/admin/inst_upgrade.php @@ -1,199 +1,121 @@ . + See the License here . ***********************************************************************/ -$page_security = 20; +$page_security = 'SA_SOFTWAREUPGRADE'; $path_to_root=".."; include_once($path_to_root . "/includes/session.inc"); -page(_("Software Upgrade")); +if ($SysPrefs->use_popup_windows) { + $js = get_js_open_window(900, 500); +} +page(_($help_context = "Software Upgrade"), false, false, "", $js); include_once($path_to_root . "/includes/date_functions.inc"); include_once($path_to_root . "/admin/db/company_db.inc"); include_once($path_to_root . "/admin/db/maintenance_db.inc"); include_once($path_to_root . "/includes/ui.inc"); +include_once($path_to_root . "/admin/includes/fa_patch.class.inc"); -// -// Checks $field existence in $table with given field $properties -// $table - table name without prefix -// $field - optional field name -// $properties - optional properties of field defined by MySQL: -// 'Type', 'Null', 'Key', 'Default', 'Extra' -// -function check_table($pref, $table, $field=null, $properties=null) -{ - $fields = db_query("SHOW COLUMNS FROM ".$pref.$table); - if (!$fields) - return 1; // no such table or error +$site_status = get_site_status($db_connections); +$installers = get_installers(); - if (!isset($field)) - return 0; // table exists +if (get_post('Upgrade')) +{ + $comp = get_post('select_comp'); - while( $row = db_fetch_assoc($fields)) - { - if ($row['Field'] == $field) + if ($comp === '') + display_error(_('Select company to be upgraded.')); + else { + $patch = @$installers[$site_status[$comp]['version']]; + if ($patch) { - if (!isset($properties)) - return 0; - foreach($properties as $property => $value) - { - if ($row[$property] != $value) - return 3; // failed type/length check - } - return 0; // property check ok. + if (!$patch->upgrade_company($comp, check_value('force'))) + display_error(implode('
', $patch->errors)); + else + display_notification(_("Company upgraded successfully.")); + + $site_status = get_site_status($db_connections); // update info + $Ajax->activate('_page_body'); } } - return 2; // field not found } -// -// Creates table of installer objects sorted by version. -// -function get_installers() +$i = find_submit('Clear'); +if ($i != -1) { - global $path_to_root; - - $patchdir = $path_to_root."/sql/"; - $upgrades = array(); - $datadir = @opendir($patchdir); - - if ($datadir) - { - while(false !== ($fname = readdir($datadir))) - { // check all php files but index.php - if (!is_dir($patchdir . $fname) && ($fname != 'index.php') - && stristr($fname, '.php') != false) - { - unset($install); - include_once($patchdir . $fname); - if (isset($install)) // add installer if found - $upgrades[$install->version] = $install; - } - } - ksort($upgrades); // sort by file name - $upgrades = array_values($upgrades); - } - return $upgrades; + unlink(VARLOG_PATH.'/upgrade.'.$i.'.log'); + $Ajax->activate('_page_body'); } -// -// Apply one differential data set. -// -function upgrade_step($index, $conn) +if (get_post('_select_comp_update')) { - global $path_to_root, $installers; + $Ajax->activate('_page_body'); +} - $inst = $installers[$index]; - $sql = $inst->sql; - $pref = $conn['tbpref']; - $ret = true; +start_form(); - $force = get_post('force_'.$index); - if ($force || get_post('install_'.$index)) - { - if (!$inst->installed($pref) || $force) - { - if (!$inst->pre_check($pref)) return false; +$th = array(_("Company"), _("Table set"), _("Current version"), _("Last log"), _('Upgrade')); +start_table(TABLESTYLE); +table_header($th); +$k = 0; //row colour counter - if ($sql != '') - $ret &= db_import($path_to_root.'/sql/'.$sql, $conn, $force); +$uptodate = true; +foreach($site_status as $i => $comp) +{ + $status = $comp['version']==$db_version; - $ret &= $inst->install($pref, $force); - } - } - return $ret; -} + alt_table_row_color($k); -function db_open($conn) -{ - $db = mysql_connect($conn["host"] ,$conn["dbuser"], $conn["dbpassword"]); - if (!$db) - return false; - if (!mysql_select_db($conn["dbname"], $db)) - return false; - return $db; -} + label_cell($comp['name']); + label_cell($comp['table_set']); -$installers = get_installers(); + label_cell($comp['version'], 'align=center' .($status ? '':' class=redfg')/*, 'class='.( $status ? 'ok' : 'error')*/); + + $log = VARLOG_PATH.'/upgrade.'.$i.'.log'; + if (file_exists($log)) + { + label_cell(viewer_link(_('View log'), "admin/view/view_upgrade_log.php?id=$i", null, $i, 'log.png') + .button('Clear'.$i, _('Clear'), _('Clear log'), ICON_DELETE), 'align=center'); + submit_js_confirm('Clear'.$i, _("Do you really want to clear this upgrade log?")); + } else + label_cell('-', 'align=center'); -if (get_post('Upgrade')) -{ - $ret = true; - foreach ($db_connections as $conn) + if (!$status) { - // connect to database - if (!($db = db_open($conn))) - { - display_error(_("Cannot connect to database for company") - ." '".$conn['name']."'"); - continue; - } - // create security backup - if ($conn['tbpref'] != "") - $filename = $conn['dbname'] . "_" . $conn['tbpref'] . date("Ymd_Hi") . ".sql"; - else - $filename = $conn['dbname'] . "_" . date("Ymd_Hi") . ".sql"; - - db_export($conn, $filename, 'no', 'Security backup before upgrade', $conn['tbpref']); - // apply all upgrade data - foreach ($installers as $i => $inst) - { - $ret = upgrade_step($i, $conn); - if (!$ret) - display_error( - sprintf(_("Database upgrade to version %s failed for company '%s'."), - $inst->version, $conn['name']) - .'
' - ._('You should restore company database from latest backup file')); - } -// db_close($conn); ? - if (!$ret) break; - } - if($ret) - { // re-read the prefs - global $path_to_root; - include_once($path_to_root . "/admin/db/users_db.inc"); - $user = get_user($_SESSION["wa_current_user"]->username); - $_SESSION["wa_current_user"]->prefs = new user_prefs($user); - display_notification(_('All companies data has been successfully updated')); - } - $Ajax->activate('_page_body'); + label_cell(radio(null, 'select_comp', $i, null, true), 'align=center'); + $uptodate = false; + } else + label_cell(_('Up to date')); + end_row(); } -start_form(); -start_table($table_style); -$th = array(_("Version"), _("Description"), _("Sql file"), _("Install"), - _("Force upgrade")); -table_header($th); +end_table(); +br(); -$k = 0; //row colour counter -foreach($installers as $i => $inst) +div_start('upgrade_args'); +if (get_post('select_comp') !== '') { - alt_table_row_color($k); - start_row(); - label_cell($inst->version); - label_cell($inst->description); - label_cell($inst->sql ? $inst->sql : ''._('None').'', 'align=center'); -// this is checked only for first (site admin) company, -// but in fact we should always upgrade all data sets after -// source upgrade. - if ($inst->installed(TB_PREF)) - label_cell(_("Installed")); - else - check_cells(null,'install_'.$i, 0); - check_cells(null,'force_'.$i, 0); - end_row(); + $patch = @$installers[$site_status[get_post('select_comp')]['version']]; + if ($patch) + $patch->show_params(get_post('select_comp')); +} +div_end(); + +if ($uptodate) + display_note(_('All company database schemes are up to date.')); +else { + if (get_post('select_comp') === '') + display_note(_("Select company for incremental upgrade."), 0, 1, "class='stockmankofg'"); + submit_center('Upgrade', _('Upgrade'), true, _('Save database and perform upgrade'), 'nonajax'); } -end_table(1); -submit_center('Upgrade', _('Upgrade system'), true, _('Save database and perform upgrade'), 'process'); end_form(); end_page(); -?> \ No newline at end of file