39 $this->db =& $a_db_handler;
54 $this->db = $mySetup->db;
63 $this->current_file = $updatefile;
64 $this->DB_UPDATE_FILE = $this->PATH.
"setup/sql/".$updatefile;
69 $this->LAST_UPDATE_FILE = $this->PATH.
"setup/sql/dbupdate_04.php";
84 if ((
int)$a_version > 4182)
86 return "dbupdate_04.php";
88 else if ((
int)$a_version > 2948)
90 return "dbupdate_03.php";
92 else if ((
int)$a_version > 864)
94 return "dbupdate_02.php";
98 return "dbupdate.php";
113 if (!file_exists($this->DB_UPDATE_FILE))
115 $this->
error =
"no_db_update_file";
116 $this->filecontent = array();
120 $this->filecontent = @file($this->DB_UPDATE_FILE);
126 if (!file_exists($this->LAST_UPDATE_FILE))
128 $this->
error =
"no_last_update_file";
129 $this->lastfilecontent = array();
133 $this->lastfilecontent = @file($this->LAST_UPDATE_FILE);
139 include_once
'./Services/Administration/classes/class.ilSetting.php';
141 $this->currentVersion = (integer) $set->get(
"db_version");
147 include_once
'./Services/Administration/classes/class.ilSetting.php';
149 $set->set(
"db_version", $a_version);
150 $this->currentVersion = $a_version;
162 include_once
'./Services/Administration/classes/class.ilSetting.php';
164 $set->set(
"db_update_running", $a_nr);
165 $this->db_update_running = $a_nr;
175 include_once
'./Services/Administration/classes/class.ilSetting.php';
177 $this->db_update_running = (integer) $set->get(
"db_update_running");
179 return $this->db_update_running;
187 include_once
'./Services/Administration/classes/class.ilSetting.php';
189 $set->set(
"db_update_running", 0);
190 $this->db_update_running = 0;
196 reset($this->lastfilecontent);
198 foreach ($this->lastfilecontent as
$row)
200 if (preg_match(
'/^<\#([0-9]+)>/',
$row, $regs))
206 $this->fileVersion = (integer)
$version;
226 $sql = explode(
"\n",trim($str));
227 for ($i=0; $i<count($sql); $i++)
229 $sql[$i] = trim($sql[$i]);
230 if ($sql[$i] !=
"" && substr($sql[$i],0,1)!=
"#")
233 if (substr($sql[$i],-1)==
";")
236 $q .=
" ".substr($sql[$i],0,-1);
245 $this->
error = $e->getMessage();
252 $this->
error = $check;
265 echo
"incomplete_statement: ".$q.
"<br>";
286 include_once
'./Services/Database/classes/class.ilMySQLAbstraction.php';
289 $GLOBALS[
'ilMySQLAbstraction'] = $ilMySQLAbstraction;
294 if ($a_break > $this->currentVersion &&
295 $a_break < $this->fileVersion)
303 for ($i=($c+1); $i<=$f; $i++)
308 $this->DB_UPDATE_FILE = $this->PATH.
"setup/sql/".$this->
getFileForStep($i);
317 "msg" =>
"update_error: ".$this->
error,
320 $this->updateMsg = $msg;
326 "msg" =>
"update_applied",
332 $this->updateMsg = $msg;
336 $this->updateMsg =
"no_changes";
339 if ($f < $this->fileVersion)
354 require_once
"./setup/classes/class.ilModuleReader.php";
355 require_once
"./setup/classes/class.ilServiceReader.php";
356 require_once
"./setup/classes/class.ilCtrlStructureReader.php";
358 require_once
"./Services/Component/classes/class.ilModule.php";
359 require_once
"./Services/Component/classes/class.ilService.php";
365 foreach($modules as $module)
367 $mr =
new ilModuleReader(ILIAS_ABSOLUTE_PATH.
"/Modules/".$module[
"subdir"].
"/module.xml",
368 $module[
"subdir"],
"Modules");
375 foreach($services as $service)
377 $sr =
new ilServiceReader(ILIAS_ABSOLUTE_PATH.
"/Services/".$service[
"subdir"].
"/service.xml",
378 $service[
"subdir"],
"Services");
399 reset($this->filecontent);
401 if (!$hotfix && !$custom_update)
410 while (!preg_match(
"/^<\#".$nr.
">/", $this->filecontent[$i]) && $i<count($this->filecontent))
416 if ($i == count($this->filecontent))
418 $this->
error =
"update_not_found";
426 while ($i<count($this->filecontent) && !preg_match(
"/^<#".($nr+1).
">/", $this->filecontent[$i]))
428 $update[] = trim($this->filecontent[$i]);
437 foreach ($update as
$row)
439 if (preg_match(
"/<\?php/",
$row))
443 if ($this->
execQuery($this->db, implode(
"\n", $sql)) ==
false)
452 elseif (preg_match(
"/\?>/",
$row))
457 if (eval(
$code) ===
false)
459 $this->
error =
"Parse error: ".$code;
481 if ($mode ==
"sql" && count($sql) > 0)
483 if ($this->
execQuery($this->db, implode(
"\n", $sql)) ==
false)
485 $this->
error =
"dump_error: ".$this->error;
491 if (!$hotfix && !$custom_update)
499 elseif($custom_update)
504 if (!$hotfix && !$custom_update)
516 if ($this->fileVersion > $this->currentVersion)
532 "name" => $status[
"Table"],
534 "status" => $status[
"Msg_text"]
544 $query =
"ANALYZE TABLE ".$table;
562 return $this->hotfix_current_version;
571 $this->hotfix_setting->set(
"db_hotfixes_".
572 $this->hotfix_version[0].
"_".$this->hotfix_version[1], $a_version);
573 $this->hotfix_current_version = $a_version;
583 return $this->hotfix_file_version;
592 reset($a_file_content);
594 foreach ($a_file_content as
$row)
596 if (preg_match(
"/^<#([0-9]+)>/",
$row, $regs))
610 if ($this->hotfix_info_read && !$a_force)
614 include_once
'./Services/Administration/classes/class.ilSetting.php';
615 $this->hotfix_setting =
new ilSetting(
"common",
true);
617 $version_array = explode(
".", $ilias_version);
618 $this->hotfix_version[0] = $version_array[0];
619 $this->hotfix_version[1] = $version_array[1];
620 $hotfix_file = $this->PATH.
"setup/sql/".$this->hotfix_version[0].
"_".$this->hotfix_version[1].
"_hotfixes.php";
621 if (is_file($hotfix_file))
623 $this->hotfix_content = @file($hotfix_file);
624 $this->hotfix_current_version = (int) $this->hotfix_setting->get(
"db_hotfixes_".
625 $this->hotfix_version[0].
"_".$this->hotfix_version[1]);
628 $this->hotfix_info_read =
true;
637 if ($this->hotfix_file_version > $this->hotfix_current_version)
651 include_once
'./Services/Database/classes/class.ilMySQLAbstraction.php';
654 $GLOBALS[
'ilMySQLAbstraction'] = $ilMySQLAbstraction;
664 for ($i=($c+1); $i<=$f; $i++)
668 $this->filecontent = $this->hotfix_content;
673 "msg" =>
"update_error: ".$this->
error,
676 $this->updateMsg = $msg;
682 "msg" =>
"hotfix_applied",
688 $this->updateMsg = $msg;
692 $this->updateMsg =
"no_changes";
701 return $this->custom_updates_current_version;
707 $this->custom_updates_setting->set(
'db_version_custom', $a_version);
708 $this->custom_updates_current_version = $a_version;
715 return $this->custom_updates_file_version;
721 reset($a_file_content);
723 foreach ($a_file_content as
$row)
725 if (preg_match(
"/^<#([0-9]+)>/",
$row, $regs))
736 if ($this->custom_updates_info_read && !$a_force)
740 include_once
'./Services/Administration/classes/class.ilSetting.php';
742 $this->custom_updates_setting =
new ilSetting();
743 $custom_updates_file = $this->PATH.
"setup/sql/dbupdate_custom.php";
744 if (is_file($custom_updates_file))
746 $this->custom_updates_content = @file($custom_updates_file);
747 $this->custom_updates_current_version = (int) $this->custom_updates_setting->get(
'db_version_custom', 0);
750 $this->custom_updates_info_read =
true;
759 if ($this->custom_updates_file_version > $this->custom_updates_current_version)
770 include_once
'./Services/Database/classes/class.ilMySQLAbstraction.php';
773 $GLOBALS[
'ilMySQLAbstraction'] = $ilMySQLAbstraction;
783 for ($i=($c+1); $i<=$f; $i++)
787 $this->filecontent = $this->custom_updates_content;
792 "msg" =>
"update_error: ".$this->
error,
795 $this->updateMsg = $msg;
801 "msg" =>
"custom_update_applied",
807 $this->updateMsg = $msg;
811 $this->updateMsg =
"no_changes";
831 if ($a_break > $this->currentVersion &&
832 $a_break < $this->fileVersion)
840 for ($i=($c+1); $i<=$f; $i++)
845 $this->DB_UPDATE_FILE = $this->PATH.
"setup/sql/".$this->
getFileForStep($i);
873 for ($i=($c+1); $i<=$f; $i++)
875 $this->filecontent = $this->hotfix_content;
895 reset($this->filecontent);
901 while (!preg_match(
"/^<#".$nr.
">/", $this->filecontent[$i]) && $i<count($this->filecontent))
907 if ($i == count($this->filecontent))
916 while ($i<count($this->filecontent) && !preg_match(
"/^<#".($nr+1).
">/", $this->filecontent[$i]))
918 $str.= $this->filecontent[$i];
922 return "<pre><b><#".$nr.
"></b>\n".htmlentities($str).
"</pre>";
An exception for terminatinating execution or to throw for unit testing.
error($a_errmsg)
set error message @access public
getUpdateStepNr($nr, $hotfix=false, $custom_update=false)
Get single update step for presentation.
getFileVersion()
Get Version of file.
applyUpdate($a_break=0)
Apply update.
readCustomUpdatesInfo($a_force=false)
$DB_UPDATE_FILE
db update file
getHotfixSteps()
Get hotfix steps.
setCurrentVersion($a_version)
getFileForStep($a_version)
Get db update file name for db step.
getCustomUpdatesFileVersion()
getUpdateSteps($a_break=0)
Get update steps as string (for presentation)
setRunningStatus($a_nr)
Set running status for a step.
getCustomUpdatesCurrentVersion()
setHotfixCurrentVersion($a_version)
Set current hotfix version.
execQuery($db, $str)
execute a query
checkQuery($q)
check query
getHotfixCurrentVersion()
Get current hotfix version.
getHotfixFileVersion()
Get current hotfix version.
readHotfixInfo($a_force=false)
Get status of hotfix file.
__construct($a_db_handler=0, $tmp_flag=false)
constructor
readCustomUpdatesFileVersion($a_file_content)
hotfixAvailable()
Get status of hotfix file.
setCustomUpdatesCurrentVersion($a_version)
applyUpdateNr($nr, $hotfix=false, $custom_update=false)
apply an update
clearRunningStatus()
Clear running status.
applyHotfix()
Apply hotfix.
getRunningStatus()
Get running status.
readHotfixFileVersion($a_file_content)
Set current hotfix version.
Class ilDatabaseException.
static getAvailableCoreModules()
Get all available core modules.
This class includes methods that help to abstract ILIAS 3.10.x MySQL tables for the use with MDB2 abs...
static getAvailableCoreServices()
Get all available core services.
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
const ILIAS_VERSION_NUMERIC