Marius Burkard
2016-07-10 e1ceb050e19c7574bca146a8da7047ee4ff456b5
install/lib/update.lib.php
@@ -29,10 +29,10 @@
//* Installer patch stub class
class installer_patch_update {
   protected function onBeforeSQL() {
   public function onBeforeSQL() {
   }
   protected function onAfterSQL() {
   public function onAfterSQL() {
   }
}
@@ -123,8 +123,17 @@
function updateDbAndIni() {
   global $inst, $conf;
   //* check sql-mode
   $check_sql_mode = $inst->db->queryOneRecord("SELECT @@sql_mode");
   if ($check_sql_mode['@@sql_mode'] != '' && $check_sql_mode['@@sql_mode'] != 'NO_ENGINE_SUBSTITUTION') {
      echo "Wrong SQL-mode. You should use NO_ENGINE_SUBSTITUTION. Add\n\n";
      echo "    sql-mode=\"NO_ENGINE_SUBSTITUTION\"\n\n";
      echo"to the mysqld-section in your mysql-config and restart mysqld afterwards\n";
      die();
   }
   //* Update $conf array with values from the server.ini that shall be preserved
   $tmp = $inst->db->queryOneRecord("SELECT * FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
   $tmp = $inst->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . '.server', $conf['server_id']);
   $ini_array = ini_to_array(stripslashes($tmp['config']));
   $current_db_version = (isset($tmp['dbversion']))?intval($tmp['dbversion']):0;
@@ -153,17 +162,22 @@
      $conf['nginx']['installed'] = false;
   }
   //* Do incremental DB updates only on installed ISPConfig versions > 3.0.3
   if(compare_ispconfig_version('3.0.3', ISPC_APP_VERSION) >= 0) {
   //* Do incremental DB updates only on installed ISPConfig versions >= 3.0.3
   if(version_compare('3.0.3', ISPC_APP_VERSION, '<=')) {
      swriteln($inst->lng('Starting incremental database update.'));
      //* get the version of the db schema from the server table
      $found = true;
      $dev_patch = false;
      while($found == true) {
         $next_db_version = intval($current_db_version + 1);
         if($dev_patch == true) $next_db_version = 'dev_collection';
         else $next_db_version = intval($current_db_version + 1);
         $sql_patch_filename = realpath(dirname(__FILE__).'/../').'/sql/incremental/upd_'.str_pad($next_db_version, 4, '0', STR_PAD_LEFT).'.sql';
         $php_patch_filename = realpath(dirname(__FILE__).'/../').'/patches/upd_'.str_pad($next_db_version, 4, '0', STR_PAD_LEFT).'.php';
         // comma separated list of version numbers were a update has to be done silently
         $silent_update_versions = 'dev_collection,75';
         if(is_file($sql_patch_filename)) {
@@ -179,34 +193,42 @@
            }
            //* Exec onBeforeSQL function
            if(isset($php_patch) && is_object($php_patch)) {
            if(isset($php_patch) && is_object($php_patch) && method_exists($php_patch, 'onBeforeSQL')) {
               $php_patch->onBeforeSQL();
               swriteln($inst->lng('Executing PHP patch file').': '.$php_patch_filename);
            }
            //* Load patch file into database
            if( !empty($conf["mysql"]["admin_password"]) ) {
               system("mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." --force -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." ".escapeshellarg($conf['mysql']['database'])." < ".$sql_patch_filename);
               $cmd = "mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." --force -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." -p".escapeshellarg($conf['mysql']['admin_password'])." ".escapeshellarg($conf['mysql']['database'])." < ".$sql_patch_filename;
            } else {
               system("mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." --force -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." ".escapeshellarg($conf['mysql']['database'])." < ".$sql_patch_filename);
               $cmd = "mysql --default-character-set=".escapeshellarg($conf['mysql']['charset'])." --force -h ".escapeshellarg($conf['mysql']['host'])." -u ".escapeshellarg($conf['mysql']['admin_user'])." ".escapeshellarg($conf['mysql']['database'])." < ".$sql_patch_filename;
            }
            if(in_array($next_db_version,explode(',',$silent_update_versions))) $cmd .= ' > /dev/null 2> /dev/null';
            system($cmd);
            swriteln($inst->lng('Loading SQL patch file').': '.$sql_patch_filename);
            //* Exec onAfterSQL function
            if(isset($php_patch) && is_object($php_patch)) {
            if(isset($php_patch) && is_object($php_patch) && method_exists($php_patch, 'onAfterSQL')) {
               $php_patch->onAfterSQL();
            }
            $current_db_version = $next_db_version;
            if($dev_patch == false) $current_db_version = $next_db_version;
            else $found = false;
            if(isset($php_patch)) unset($php_patch);
         } elseif($dev_patch == false) {
            $dev_patch = true;
         } else {
            $found = false;
         }
      }
      //* update the database version in server table
      $inst->db->query("UPDATE ".$conf["mysql"]["database"].".server SET dbversion = '".$current_db_version."' WHERE server_id = ".$conf['server_id']);
      if($inst->db->dbHost != $inst->dbmaster->dbHost) $inst->dbmaster->query("UPDATE ".$conf["mysql"]["master_database"].".server SET dbversion = '".$current_db_version."' WHERE server_id = ".$conf['server_id']);
      $inst->db->query("UPDATE ?? SET dbversion = ? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $current_db_version, $conf['server_id']);
      if($inst->db->dbHost != $inst->dbmaster->dbHost) $inst->dbmaster->query("UPDATE ?? SET dbversion = ? WHERE server_id = ?", $conf["mysql"]["master_database"] . ".server", $current_db_version, $conf['server_id']);
      //* If ISPConfig Version < 3.0.3, we will do a full db update
@@ -215,7 +237,7 @@
      swriteln($inst->lng('Starting full database update.'));
      //** Delete the old database
      if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['mysql']['database']) ) {
      if( !$inst->db->query('DROP DATABASE IF EXISTS ??', $conf['mysql']['database']) ) {
         $inst->error('Unable to drop MySQL database: '.$conf['mysql']['database'].'.');
      }
@@ -226,7 +248,7 @@
      $db_tables = $inst->db->getTables();
      foreach($db_tables as $table) {
         $inst->db->query("TRUNCATE $table");
         $inst->db->query("TRUNCATE ??", $table);
      }
      //** load old data back into database
@@ -249,15 +271,15 @@
      }
      //* update the database version in server table
      $inst->db->query("UPDATE ".$conf["mysql"]["database"].".server SET dbversion = '".$current_db_version."' WHERE server_id = ".$conf['server_id']);
      if($inst->db->dbHost != $inst->dbmaster->dbHost) $inst->dbmaster->query("UPDATE ".$conf["mysql"]["master_database"].".server SET dbversion = '".$current_db_version."' WHERE server_id = ".$conf['server_id']);
      $inst->db->query("UPDATE ?? SET dbversion = ? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $current_db_version, $conf['server_id']);
      if($inst->db->dbHost != $inst->dbmaster->dbHost) $inst->dbmaster->query("UPDATE ?? SET dbversion = ? WHERE server_id = ?", $conf["mysql"]["master_database"] . ".server", $current_db_version, $conf['server_id']);
      if ($conf['powerdns']['installed']) {
         swriteln($inst->lng('Starting full PowerDNS database update.'));
         //** Delete the old PowerDNS database
         if( !$inst->db->query('DROP DATABASE IF EXISTS '.$conf['powerdns']['database']) ) {
         if( !$inst->db->query('DROP DATABASE IF EXISTS ??', $conf['powerdns']['database']) ) {
            $inst->error('Unable to drop MySQL database: '.$conf['powerdns']['database'].'.');
         }
@@ -275,7 +297,7 @@
   //** Update server ini
   $tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM ".$conf["mysql"]["database"].".server WHERE server_id = ".$conf['server_id']);
   $tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
   $old_ini_array = ini_to_array(stripslashes($tmp_server_rec['config']));
   unset($tmp_server_rec);
   $tpl_ini_array = ini_to_array(rf('tpl/server.ini.master'));
@@ -331,12 +353,12 @@
   }
   $new_ini = array_to_ini($tpl_ini_array);
   $sql = "UPDATE ".$conf["mysql"]["database"].".server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id'];
   $inst->db->query($sql);
   $sql = "UPDATE ?? SET config = ? WHERE server_id = ?";
   $inst->db->query($sql, $conf["mysql"]["database"] . ".server", $new_ini, $conf['server_id']);
   if($inst->db->dbHost != $inst->dbmaster->dbHost) {
      $sql = "UPDATE ".$conf["mysql"]["master_database"].".server SET config = '".mysql_real_escape_string($new_ini)."' WHERE server_id = ".$conf['server_id'];
      $inst->dbmaster->query($sql);
      $sql = "UPDATE ?? SET config = ? WHERE server_id = ?";
      $inst->dbmaster->query($sql, $conf["mysql"]["master_database"].".server", $new_ini, $conf['server_id']);
   }
   unset($old_ini_array);
   unset($tpl_ini_array);
@@ -344,7 +366,7 @@
   //** Update system ini
   $tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM ".$conf["mysql"]["database"].".sys_ini WHERE sysini_id = 1");
   $tmp_server_rec = $inst->db->queryOneRecord("SELECT config FROM ?? WHERE sysini_id = 1", $conf["mysql"]["database"] . ".sys_ini");
   $old_ini_array = ini_to_array(stripslashes($tmp_server_rec['config']));
   unset($tmp_server_rec);
   $tpl_ini_array = ini_to_array(rf('tpl/system.ini.master'));
@@ -359,11 +381,11 @@
   }
   $new_ini = array_to_ini($tpl_ini_array);
   $tmp = $inst->db->queryOneRecord('SELECT count(sysini_id) as number FROM '.$conf["mysql"]["database"].'.sys_ini WHERE 1');
   $tmp = $inst->db->queryOneRecord('SELECT count(sysini_id) as number FROM ?? WHERE 1', $conf["mysql"]["database"] . '.sys_ini');
   if($tmp['number'] == 0) {
      $inst->db->query("INSERT INTO ".$conf["mysql"]["database"].".sys_ini (sysini_id, config) VALUES (1,'".mysql_real_escape_string($new_ini)."')");
      $inst->db->query("INSERT INTO ?? (sysini_id, config) VALUES (1,?)", $conf["mysql"]["database"] . ".sys_ini", $new_ini);
   } else {
      $inst->db->query("UPDATE ".$conf["mysql"]["database"].".sys_ini SET config = '".mysql_real_escape_string($new_ini)."' WHERE sysini_id = 1");
      $inst->db->query("UPDATE ?? SET config = ? WHERE sysini_id = 1", $conf["mysql"]["database"] . ".sys_ini", $new_ini);
   }
   unset($old_ini_array);
   unset($tpl_ini_array);
@@ -372,4 +394,24 @@
function setDefaultServers(){
   global $inst, $conf;
   // clients
   $clients = $inst->db->queryAllRecords("SELECT * FROM ".$conf["mysql"]["database"].".client");
   if(is_array($clients) && !empty($clients)){
      foreach($clients as $client){
         // mailserver
         if(trim($client['mail_servers']) == '') $inst->db->query("UPDATE ?? SET mail_servers = ? WHERE client_id = ?", $conf["mysql"]["database"].".client", trim($client['default_mailserver']), $client['client_id']);
         // webserver
         if(trim($client['web_servers']) == '') $inst->db->query("UPDATE ?? SET web_servers = ? WHERE client_id = ?", $conf["mysql"]["database"].".client", trim($client['default_webserver']), $client['client_id']);
         // dns server
         if(trim($client['dns_servers']) == '') $inst->db->query("UPDATE ?? SET dns_servers = ? WHERE client_id = ?", $conf["mysql"]["database"].".client", trim($client['default_dnsserver']), $client['client_id']);
         // db server
         if(trim($client['db_servers']) == '') $inst->db->query("UPDATE ?? SET db_servers = ? WHERE client_id = ?", $conf["mysql"]["database"].".client", trim($client['default_dbserver']), $client['client_id']);
      }
   }
}
?>