Public Member Functions | Data Fields

ilCtrlStructureReader Class Reference

Public Member Functions

 ilCtrlStructureReader ()
 setErrorObject (&$err)
 getStructure ()
 parse code files and store call structure in db
 readStructure ($a_force=false)
 read ($a_cdir)
 read structure into internal variables
 store ($a_cdir="./..")
 read structure into internal variables

Data Fields

 $class_script
 $class_childs
 $executed

Detailed Description

Definition at line 34 of file class.ilCtrlStructureReader.php.


Member Function Documentation

ilCtrlStructureReader::getStructure (  ) 

parse code files and store call structure in db

Definition at line 55 of file class.ilCtrlStructureReader.php.

        {
                $this->get_structure = true;
        }

ilCtrlStructureReader::ilCtrlStructureReader (  ) 

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

        {
                $this->class_script = array();
                $this->class_childs = array();
                $this->executed = false;
        }

ilCtrlStructureReader::read ( a_cdir  ) 

read structure into internal variables

private

Definition at line 89 of file class.ilCtrlStructureReader.php.

References $dir, $file, $lng, $pos, and $q.

Referenced by readStructure().

        {
                global $ilDB, $lng;
                
                // check wether $a_cdir is a directory
                if (!@is_dir($a_cdir))
                {
                        return false;
                }

                // read current directory
                $dir = opendir($a_cdir);

                while($file = readdir($dir))
                {
                        if ($file != "." and
                                $file != "..")
                        {
                                // directories
                                if (@is_dir($a_cdir."/".$file))
                                {
                                        if ($a_cdir."/".$file != ILIAS_ABSOLUTE_PATH."/data")
                                        {
                                                $this->read($a_cdir."/".$file);
                                        }
                                }

                                // files
                                if (@is_file($a_cdir."/".$file))
                                {
                                        if (eregi("^class.*php$", $file))
                                        {
                                                $handle = fopen($a_cdir."/".$file, "r");
//echo "<br>".$a_cdir."/".$file;
                                                while (!feof($handle)) {
                                                        $line = fgets($handle, 4096);
                                                        $pos = strpos(strtolower($line), "@ilctrl_calls");
                                                        if (is_int($pos))
                                                        {
                                                                $com = substr($line, $pos + 14);
                                                                $pos2 = strpos($com, ":");
                                                                if (is_int($pos2))
                                                                {
                                                                        $com_arr = explode(":", $com);
                                                                        $parent = strtolower(trim($com_arr[0]));
                                                                        
                                                                        // check file duplicates
                                                                        if ($parent != "" && isset($this->class_script[$parent]) &&
                                                                                $this->class_script[$parent] != $a_cdir."/".$file)
                                                                        {
                                                                                // delete all class to file assignments
                                                                                $q = "DELETE FROM ctrl_classfile";
                                                                                $ilDB->query($q);
                                                                
                                                                                // delete all call entries
                                                                                $q = "DELETE FROM ctrl_calls";
                                                                                $ilDB->query($q);
                                                                                
                                                                                $this->err_object->raiseError(
                                                                                        sprintf($lng->txt("duplicate_ctrl"),
                                                                                                $parent,
                                                                                                $this->class_script[$parent],
                                                                                                $a_cdir."/".$file)
                                                                                        , $this->err_object->MESSAGE);
                                                                        }

                                                                        $this->class_script[$parent] = $a_cdir."/".$file;
                                                                        $childs = explode(",", $com_arr[1]);
                                                                        foreach($childs as $child)
                                                                        {
                                                                                $child = trim(strtolower($child));
                                                                                if (!is_array($this->class_childs[$parent]) || !in_array($child, $this->class_childs[$parent]))
                                                                                {
                                                                                        $this->class_childs[$parent][] = $child;
                                                                                }
                                                                        }
                                                                }
                                                        }
                                                }
                                                fclose($handle);
                                        }
                                }
                        }
                }
        }

Here is the caller graph for this function:

ilCtrlStructureReader::readStructure ( a_force = false  ) 

Definition at line 60 of file class.ilCtrlStructureReader.php.

References read(), and store().

        {

                if (!$this->get_structure && !$a_force)
                {
                        return;
                }

                // only run one time per db_update request
                if (!$this->executed)
                {
                        $this->read(ILIAS_ABSOLUTE_PATH);
                        $this->store();
                        $this->executed = true;
                }
                
                // read module information
                // not clear whether this is a good place for module reading info
                // or not
                require_once("../classes/class.ilCtrl.php");
                $ctrl = new ilCtrl();
                $ctrl->storeCommonStructures();
        }

Here is the call graph for this function:

ilCtrlStructureReader::setErrorObject ( &$  err  ) 

Definition at line 47 of file class.ilCtrlStructureReader.php.

        {
                $this->err_object =& $err;
        }

ilCtrlStructureReader::store ( a_cdir = "./.."  ) 

read structure into internal variables

private

Definition at line 180 of file class.ilCtrlStructureReader.php.

References $file, and $q.

Referenced by readStructure().

        {
                global $ilDB;

                // delete all class to file assignments
                $q = "DELETE FROM ctrl_classfile";
                $ilDB->query($q);

                // delete all call entries
                $q = "DELETE FROM ctrl_calls";
                $ilDB->query($q);

                foreach($this->class_script as $class => $script)
                {
                        $file = substr($script, strlen(ILIAS_ABSOLUTE_PATH) + 1);

                        // store class to file assignment
                        $q = "INSERT INTO ctrl_classfile (class, file) VALUES".
                                "(".$ilDB->quote($class).",".$ilDB->quote($file).")";
                        $ilDB->query($q);

                        if (is_array($this->class_childs[$class]))
                        {
                                foreach($this->class_childs[$class] as $child)
                                {
                                        // store call entry
                                        $q = "INSERT INTO ctrl_calls (parent, child) VALUES".
                                                "(".$ilDB->quote($class).",".$ilDB->quote($child).")";
                                        $ilDB->query($q);
                                }
                        }
                }

        }

Here is the caller graph for this function:


Field Documentation

ilCtrlStructureReader::$class_childs

Definition at line 37 of file class.ilCtrlStructureReader.php.

ilCtrlStructureReader::$class_script

Definition at line 36 of file class.ilCtrlStructureReader.php.

ilCtrlStructureReader::$executed

Definition at line 38 of file class.ilCtrlStructureReader.php.


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