Public Member Functions | Data Fields

ilDBUpdate Class Reference

Public Member Functions

 ilDBUpdate ($a_db_handler=0, $tmp_flag=false)
 constructor
 _DBUpdate ()
 destructor
 readDBUpdateFile ()
 getCurrentVersion ()
 setCurrentVersion ($a_version)
 getFileVersion ()
 execQuery ($db, $str)
 execute a query
 applyUpdate ()
 applyUpdateNr ($nr)
 apply an update
 getDBVersionStatus ()
 getTables ()
 getTableStatus ($table)
 optimizeTables ($tables)

Data Fields

 $DB_UPDATE_FILE
 db update file
 $currentVersion
 $fileVersion

Detailed Description

Definition at line 35 of file class.ilDBUpdate.php.


Member Function Documentation

ilDBUpdate::_DBUpdate (  ) 

destructor

Returns:
boolean

Definition at line 90 of file class.ilDBUpdate.php.

        {
                $this->db->disconnect();
        }

ilDBUpdate::applyUpdate (  ) 

Definition at line 190 of file class.ilDBUpdate.php.

References $ilCtrlStructureReader, and applyUpdateNr().

        {
                global $ilCtrlStructureReader;
                
                $f = $this->fileVersion;
                $c = $this->currentVersion;

                if ($c < $f)
                {
                        $msg = array();
                        for ($i=($c+1); $i<=$f; $i++)
                        {
                                if ($this->applyUpdateNr($i) == false)
                                {
                                        $msg[] = array(
                                                "msg" => "update_error: ".$this->error,
                                                "nr" => $i
                                        );
                                        $this->updateMsg = $msg;
                                        return false;
                                }
                                else
                                {
                                        $msg[] = array(
                                                "msg" => "update_applied",
                                                "nr" => $i
                                        );
                                }
                        }

                        $this->updateMsg = $msg;
                }
                else
                {
                        $this->updateMsg = "no_changes";
                }
                
                // read module and service information into db
                require_once "./classes/class.ilModuleReader.php";
                require_once "./classes/class.ilServiceReader.php";
                require_once "./classes/class.ilCtrlStructureReader.php";
                $ilModuleReader = new ilModuleReader();
                $ilModuleReader->getModules();
                $ilServiceReader = new ilServiceReader();
                $ilServiceReader->getServices();
                $ilCtrlStructureReader->readStructure();
                                
                return true;
        }

Here is the call graph for this function:

ilDBUpdate::applyUpdateNr ( nr  ) 

apply an update

Parameters:
int nr number what patch to apply
Returns:
bool private

Definition at line 246 of file class.ilDBUpdate.php.

References $ilCtrlStructureReader, $ilErr, $row, execQuery(), and setCurrentVersion().

Referenced by applyUpdate().

        {
                global $ilDB,$ilErr,$ilUser,$ilCtrlStructureReader,$ilModuleReader;

                //search for desired $nr
                reset($this->filecontent);

                //init
                $i = 0;

            //go through filecontent
                while (!ereg("^<#".$nr.">", $this->filecontent[$i]) && $i<count($this->filecontent))
                {
                        $i++;
                }

                //update not found
                if ($i == count($this->filecontent))
                {
                        $this->error = "update_not_found";
                        return false;
                }

                $i++;

                //update found, now extract this update to a new array
                $update = array();
                while ($i<count($this->filecontent) && !ereg("^<#".($nr+1).">", $this->filecontent[$i]))
                {
                        $update[] = trim($this->filecontent[$i]);
                        $i++;
                }

                //now you have the update, now process it
                $sql = array();
                $php = array();
                $mode = "sql";

                foreach ($update as $row)
                {
                        if (ereg("<\?php", $row))
                        {
                                if (count($sql)>0)
                                {
                                        if ($this->execQuery($this->db, implode("\n", $sql)) == false)
                                        {
                                                $this->error = "dump_error: ".$this->error;
                                                return false;
                                        }
                                        $sql = array();
                                }
                                $mode = "php";
                        }
                        elseif (ereg("\?>", $row))
                        {
                                if (count($php)>0)
                                {
                                        eval(implode("\n", $php));
                                        $php = array();
                                }
                                $mode = "sql";

                        }
                        else
                        {
                                if ($mode == "sql")
                                {
                                        $sql[] = $row;
                                }

                                if ($mode == "php")
                                {
                                        $php[] = $row;
                                }
                        } //else
                } //foreach

                if ($mode == "sql" && count($sql) > 0)
                {
                        if ($this->execQuery($this->db, implode("\n", $sql)) == false)
                        {
                                $this->error = "dump_error: ".$this->error;
                                return false;
                        }
                }
        
                //increase db_Version number
                $this->setCurrentVersion($nr);
                //$this->currentVersion = $ilias->getSetting("db_version");
                
                return true;
                
        }

Here is the call graph for this function:

Here is the caller graph for this function:

ilDBUpdate::execQuery ( db,
str 
)

execute a query

Parameters:
object DB
string query
Returns:
boolean

Definition at line 158 of file class.ilDBUpdate.php.

References $q.

Referenced by applyUpdateNr().

        {
                $sql = explode("\n",trim($str));
                for ($i=0; $i<count($sql); $i++)
                {
                        $sql[$i] = trim($sql[$i]);
                        if ($sql[$i] != "" && substr($sql[$i],0,1)!="#")
                        {
                                //take line per line, until last char is ";"
                                if (substr($sql[$i],-1)==";")
                                {
                                        //query is complete
                                        $q .= " ".substr($sql[$i],0,-1);
                                        $r = $db->query($q);
                                        if (DB::isError($r))
                                        {
                                                $this->error = $r->getMessage();
                                                return false;
                                        }
                                        unset($q);
                                } //if
                                else
                                {
                                        $q .= " ".$sql[$i];
                                } //else
                        } //if
                } //for
                if ($q != "")
                        echo "incomplete_statement: ".$q."<br>";
                return true;
        }

Here is the caller graph for this function:

ilDBUpdate::getCurrentVersion (  ) 

Definition at line 108 of file class.ilDBUpdate.php.

References $q, and $row.

Referenced by ilDBUpdate().

        {
                $q = "SELECT value FROM settings ".
                         "WHERE keyword = 'db_version'";
                $r = $this->db->query($q);
                        
                $row = $r->fetchRow(DB_FETCHMODE_OBJECT);
                        
                $this->currentVersion = (integer) $row->value;

                return $this->currentVersion;
        }

Here is the caller graph for this function:

ilDBUpdate::getDBVersionStatus (  ) 

Definition at line 340 of file class.ilDBUpdate.php.

        {
                if ($this->fileVersion > $this->currentVersion)
                        return false;
                else
                        return true;
        }

ilDBUpdate::getFileVersion (  ) 

Definition at line 135 of file class.ilDBUpdate.php.

References $row.

Referenced by ilDBUpdate().

        {
                //go through filecontent and search for last occurence of <#x>
                reset($this->filecontent);
                $regs = array();
                foreach ($this->filecontent as $row)
                {
                        if (ereg("^<#([0-9]+)>", $row, $regs))
                        {
                                $version = $regs[1];
                        }
                }

                $this->fileVersion = (integer) $version;
                return $this->fileVersion; 
        }

Here is the caller graph for this function:

ilDBUpdate::getTables (  ) 

Definition at line 348 of file class.ilDBUpdate.php.

References $query, $res, $row, and getTableStatus().

        {
                $a = array();
        
                $query = "SHOW TABLES"; 
                $res = $this->db->query($query);
                while ($row = $res->fetchRow())
                {
                        $status = $this->getTableStatus($row[0]);
                        $a[] = array(
                                "name" => $status["Table"],
                                "table" => $row[0],
                                "status" => $status["Msg_text"]
                        );
                }
                return $a;
        }

Here is the call graph for this function:

ilDBUpdate::getTableStatus ( table  ) 

Definition at line 366 of file class.ilDBUpdate.php.

References $query, $res, and $row.

Referenced by getTables().

        {
                $a = array();
        
                $query = "ANALYZE TABLE ".$table;       
                $res = $this->db->query($query);
                $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
                return $row;
        }

Here is the caller graph for this function:

ilDBUpdate::ilDBUpdate ( a_db_handler = 0,
tmp_flag = false 
)

constructor

Definition at line 57 of file class.ilDBUpdate.php.

References $mySetup, getCurrentVersion(), getFileVersion(), and readDBUpdateFile().

        {
                // workaround to allow setup migration
                if ($a_db_handler)
                {
                        $this->db =& $a_db_handler;
                        
                        if ($tmp_flag)
                        {
                                $this->DB_UPDATE_FILE = "./sql/dbupdate.php";                   
                        }
                        else
                        {
                                $this->DB_UPDATE_FILE = "../sql/dbupdate.php";
                        }
                }
                else
                {
                        global $mySetup;
                        $this->db = $mySetup->db;       
                        $this->DB_UPDATE_FILE = "./sql/dbupdate.php";
                }
   
                $this->readDBUpdateFile();
                $this->getFileVersion();
                $this->getCurrentVersion();
        }

Here is the call graph for this function:

ilDBUpdate::optimizeTables ( tables  ) 

Definition at line 376 of file class.ilDBUpdate.php.

References $_POST, $key, $query, and $res.

        {
                $msg = array();
                foreach ($_POST["tables"] as $key => $value)
                {
                        $query = "OPTIMIZE TABLE ".$key;        
                        $res = $this->db->query($query);
                        $msg[] = "table $key: ok";
                }       
                return $msg;
        }

ilDBUpdate::readDBUpdateFile (  ) 

Definition at line 95 of file class.ilDBUpdate.php.

Referenced by ilDBUpdate().

        {
                if (!file_exists($this->DB_UPDATE_FILE))
                {
                        $this->error = "no_db_update_file";
                        $this->filecontent = array();
                        return false;
                }
                
                $this->filecontent = @file($this->DB_UPDATE_FILE);
                return true;
        }

Here is the caller graph for this function:

ilDBUpdate::setCurrentVersion ( a_version  ) 

Definition at line 121 of file class.ilDBUpdate.php.

References $q.

Referenced by applyUpdateNr().

        {
                {
                        $q = "UPDATE settings SET ".
                                 "value = '".$a_version."' ".
                                 "WHERE keyword = 'db_version'";
                }

                $this->db->query($q);
                $this->currentVersion = $a_version;
                
                return true;
        }

Here is the caller graph for this function:


Field Documentation

ilDBUpdate::$currentVersion

Definition at line 46 of file class.ilDBUpdate.php.

ilDBUpdate::$DB_UPDATE_FILE

db update file

Definition at line 40 of file class.ilDBUpdate.php.

ilDBUpdate::$fileVersion

Definition at line 52 of file class.ilDBUpdate.php.


The documentation for this class was generated from the following file: