34 public function __construct($a_db_handler = 0, $tmp_flag =
false)
38 $this->db =&$a_db_handler;
48 $this->db = $mySetup->db;
57 $this->current_file = $updatefile;
58 $this->DB_UPDATE_FILE = $this->
PATH .
"setup/sql/" . $updatefile;
63 $this->LAST_UPDATE_FILE = $this->
PATH .
"setup/sql/dbupdate_04.php";
78 if ((
int) $a_version > 4182) {
79 return "dbupdate_04.php";
80 } elseif ((
int) $a_version > 2948) {
81 return "dbupdate_03.php";
82 } elseif ((
int) $a_version > 864) {
83 return "dbupdate_02.php";
85 return "dbupdate.php";
100 if (!file_exists($this->DB_UPDATE_FILE)) {
101 $this->error =
"no_db_update_file";
102 $this->filecontent =
array();
106 $this->filecontent = @
file($this->DB_UPDATE_FILE);
112 if (!file_exists($this->LAST_UPDATE_FILE)) {
113 $this->error =
"no_last_update_file";
114 $this->lastfilecontent =
array();
118 $this->lastfilecontent = @
file($this->LAST_UPDATE_FILE);
124 include_once
'./Services/Administration/classes/class.ilSetting.php';
126 $this->currentVersion = (integer) $set->get(
"db_version");
132 include_once
'./Services/Administration/classes/class.ilSetting.php';
134 $set->set(
"db_version", $a_version);
135 $this->currentVersion = $a_version;
147 include_once
'./Services/Administration/classes/class.ilSetting.php';
149 $set->set(
"db_update_running", $a_nr);
150 $this->db_update_running = $a_nr;
160 include_once
'./Services/Administration/classes/class.ilSetting.php';
162 $this->db_update_running = (integer) $set->get(
"db_update_running");
164 return $this->db_update_running;
172 include_once
'./Services/Administration/classes/class.ilSetting.php';
174 $set->set(
"db_update_running", 0);
175 $this->db_update_running = 0;
181 reset($this->lastfilecontent);
183 foreach ($this->lastfilecontent as
$row) {
184 if (preg_match(
'/^<\#([0-9]+)>/', $row, $regs)) {
189 $this->fileVersion = (integer)
$version;
209 $sql = explode(
"\n", trim($str));
210 for (
$i=0;
$i<count($sql);
$i++) {
211 $sql[
$i] = trim($sql[
$i]);
212 if ($sql[$i] !=
"" && substr($sql[$i], 0, 1)!=
"#") {
214 if (substr($sql[$i], -1)==
";") {
216 $q .=
" " . substr($sql[$i], 0, -1);
218 if ($check ===
true) {
224 $this->error = $e->getMessage();
229 $this->error = $check;
235 $q .=
" " . $sql[
$i];
240 echo
"incomplete_statement: " . $q .
"<br>";
261 include_once
'./Services/Database/classes/class.ilMySQLAbstraction.php';
264 $GLOBALS[
'ilMySQLAbstraction'] = $ilMySQLAbstraction;
269 if ($a_break > $this->currentVersion &&
270 $a_break < $this->fileVersion) {
276 for (
$i=($c+1);
$i<=$f;
$i++) {
287 "msg" =>
"update_error: " . $this->error,
290 $this->updateMsg = $msg;
294 "msg" =>
"update_applied",
300 $this->updateMsg = $msg;
302 $this->updateMsg =
"no_changes";
305 if ($f < $this->fileVersion) {
317 require_once
"./setup/classes/class.ilModuleReader.php";
318 require_once
"./setup/classes/class.ilServiceReader.php";
319 require_once
"./setup/classes/class.ilCtrlStructureReader.php";
321 require_once
"./Services/Component/classes/class.ilModule.php";
322 require_once
"./Services/Component/classes/class.ilService.php";
328 foreach ($modules as
$module) {
330 ILIAS_ABSOLUTE_PATH .
"/Modules/" . $module[
"subdir"] .
"/module.xml",
342 ILIAS_ABSOLUTE_PATH .
"/Services/" . $service[
"subdir"] .
"/service.xml",
350 $ilCtrlStructureReader->readStructure();
366 reset($this->filecontent);
368 if (!$hotfix && !$custom_update) {
376 while (!preg_match(
"/^<\#" . $nr .
">/", $this->filecontent[
$i]) && $i<count($this->filecontent)) {
381 if ($i == count($this->filecontent)) {
382 $this->error =
"update_not_found";
390 while ($i<count($this->filecontent) && !preg_match(
"/^<#" . ($nr+1) .
">/", $this->filecontent[$i])) {
391 $update[] = trim($this->filecontent[$i]);
400 foreach ($update as
$row) {
401 if (preg_match(
"/<\?php/", $row)) {
403 if ($this->
execQuery($this->db, implode(
"\n", $sql)) ==
false) {
410 } elseif (preg_match(
"/\?>/", $row)) {
413 if (eval(
$code) ===
false) {
414 $this->error =
"Parse error: " .
$code;
421 if ($mode ==
"sql") {
425 if ($mode ==
"php") {
431 if ($mode ==
"sql" && count($sql) > 0) {
432 if ($this->
execQuery($this->db, implode(
"\n", $sql)) ==
false) {
439 if (!$hotfix && !$custom_update) {
443 } elseif ($custom_update) {
447 if (!$hotfix && !$custom_update) {
457 if ($this->fileVersion > $this->currentVersion) {
473 "name" => $status[
"Table"],
475 "status" => $status[
"Msg_text"]
503 return $this->hotfix_current_version;
512 $this->hotfix_setting->set(
"db_hotfixes_" .
513 $this->hotfix_version[0] .
"_" . $this->hotfix_version[1], $a_version);
514 $this->hotfix_current_version = $a_version;
524 return $this->hotfix_file_version;
533 reset($a_file_content);
535 foreach ($a_file_content as
$row) {
536 if (preg_match(
"/^<#([0-9]+)>/", $row, $regs)) {
549 if ($this->hotfix_info_read && !$a_force) {
552 include_once
'./Services/Administration/classes/class.ilSetting.php';
553 $this->hotfix_setting =
new ilSetting(
"common",
true);
555 $version_array = explode(
".", $ilias_version);
556 $this->hotfix_version[0] = $version_array[0];
557 $this->hotfix_version[1] = $version_array[1];
558 $hotfix_file = $this->
PATH .
"setup/sql/" . $this->hotfix_version[0] .
"_" . $this->hotfix_version[1] .
"_hotfixes.php";
559 if (is_file($hotfix_file)) {
560 $this->hotfix_content = @
file($hotfix_file);
561 $this->hotfix_current_version = (int) $this->hotfix_setting->get(
"db_hotfixes_" .
562 $this->hotfix_version[0] .
"_" . $this->hotfix_version[1]);
565 $this->hotfix_info_read =
true;
574 if ($this->hotfix_file_version > $this->hotfix_current_version) {
587 include_once
'./Services/Database/classes/class.ilMySQLAbstraction.php';
590 $GLOBALS[
'ilMySQLAbstraction'] = $ilMySQLAbstraction;
599 for (
$i=($c+1);
$i<=$f;
$i++) {
602 $this->filecontent = $this->hotfix_content;
606 "msg" =>
"update_error: " . $this->error,
609 $this->updateMsg = $msg;
613 "msg" =>
"hotfix_applied",
619 $this->updateMsg = $msg;
621 $this->updateMsg =
"no_changes";
630 return $this->custom_updates_current_version;
636 $this->custom_updates_setting->set(
'db_version_custom', $a_version);
637 $this->custom_updates_current_version = $a_version;
644 return $this->custom_updates_file_version;
650 reset($a_file_content);
652 foreach ($a_file_content as
$row) {
653 if (preg_match(
"/^<#([0-9]+)>/", $row, $regs)) {
663 if ($this->custom_updates_info_read && !$a_force) {
666 include_once
'./Services/Administration/classes/class.ilSetting.php';
668 $this->custom_updates_setting =
new ilSetting();
669 $custom_updates_file = $this->
PATH .
"setup/sql/dbupdate_custom.php";
670 if (is_file($custom_updates_file)) {
671 $this->custom_updates_content = @
file($custom_updates_file);
672 $this->custom_updates_current_version = (int) $this->custom_updates_setting->get(
'db_version_custom', 0);
675 $this->custom_updates_info_read =
true;
684 if ($this->custom_updates_file_version > $this->custom_updates_current_version) {
694 include_once
'./Services/Database/classes/class.ilMySQLAbstraction.php';
697 $GLOBALS[
'ilMySQLAbstraction'] = $ilMySQLAbstraction;
706 for (
$i=($c+1);
$i<=$f;
$i++) {
709 $this->filecontent = $this->custom_updates_content;
713 "msg" =>
"update_error: " . $this->error,
716 $this->updateMsg = $msg;
720 "msg" =>
"custom_update_applied",
726 $this->updateMsg = $msg;
728 $this->updateMsg =
"no_changes";
748 if ($a_break > $this->currentVersion &&
749 $a_break < $this->fileVersion) {
755 for (
$i=($c+1);
$i<=$f;
$i++) {
784 for (
$i=($c+1);
$i<=$f;
$i++) {
785 $this->filecontent = $this->hotfix_content;
805 reset($this->filecontent);
811 while (!preg_match(
"/^<#" . $nr .
">/", $this->filecontent[
$i]) && $i<count($this->filecontent)) {
816 if ($i == count($this->filecontent)) {
824 while ($i<count($this->filecontent) && !preg_match(
"/^<#" . ($nr+1) .
">/", $this->filecontent[$i])) {
825 $str.= $this->filecontent[
$i];
829 return "<pre><b><#" . $nr .
"></b>\n" . htmlentities($str) .
"</pre>";
getFileForStep($a_version)
Get db update file name for db step.
getCustomUpdatesFileVersion()
This class includes methods that help to abstract ILIAS 3.10.x MySQL tables for the use with MDB2 abs...
const ILIAS_VERSION_NUMERIC
setRunningStatus($a_nr)
Set running status for a step.
getHotfixSteps()
Get hotfix steps.
$DB_UPDATE_FILE
db update file
$GLOBALS['loaded']
Global hash that tracks already loaded includes.
setCustomUpdatesCurrentVersion($a_version)
getHotfixFileVersion()
Get current hotfix version.
applyHotfix()
Apply hotfix.
applyUpdateNr($nr, $hotfix=false, $custom_update=false)
apply an update
Class ilDatabaseException.
if($modEnd===false) $module
readHotfixInfo($a_force=false)
Get status of hotfix file.
execQuery($db, $str)
execute a query
foreach($_POST as $key=> $value) $res
setHotfixCurrentVersion($a_version)
Set current hotfix version.
readCustomUpdatesFileVersion($a_file_content)
static getAvailableCoreServices()
Get all available core services.
__construct($a_db_handler=0, $tmp_flag=false)
constructor
getHotfixCurrentVersion()
Get current hotfix version.
Reload workbook from saved file
getUpdateStepNr($nr, $hotfix=false, $custom_update=false)
Get single update step for presentation.
readHotfixFileVersion($a_file_content)
Set current hotfix version.
checkQuery($q)
check query
Create styles array
The data for the language used.
getFileVersion()
Get Version of file.
readCustomUpdatesInfo($a_force=false)
setCurrentVersion($a_version)
getUpdateSteps($a_break=0)
Get update steps as string (for presentation)
hotfixAvailable()
Get status of hotfix file.
getRunningStatus()
Get running status.
getCustomUpdatesCurrentVersion()
if(empty($password)) $table
clearRunningStatus()
Clear running status.
applyUpdate($a_break=0)
Apply update.
static getAvailableCoreModules()
Get all available core modules.