ILIAS  Release_3_10_x_branch Revision 61812
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilCtrl Class Reference

This class provides processing control methods. More...

+ Collaboration diagram for ilCtrl:

Public Member Functions

 ilCtrl ()
 control class constructor
 debug ($str)
 getDebug ()
 init ()
 initialisation
 callBaseClass ()
 Calls base class of current request.
 getModuleDir ()
 get directory of current module
forwardCommand (&$a_gui_object)
 forward flow of control to next gui class this invokes the executeCommand() method of the gui object that is passed via reference
getHTML (&$a_gui_object)
 Gets an HTML output from another GUI class and returns the flow of control to the calling class.
 setContext ($a_obj_id, $a_obj_type, $a_sub_obj_id=0, $a_sub_obj_type="")
 Set context of current user interface.
 getContextObjId ()
 Get ContextObjId.
 getContextObjType ()
 Get ContextObjType.
 getContextSubObjId ()
 Get ContextSubObjId.
 getContextSubObjType ()
 Get ContextSubObjType.
 getNodeIdForTargetClass ($a_par_node, $a_class)
 Searchs a node for a given class ($a_class) "near" the another node ($a_par_node).
 getCmdNode ()
 get command target node
 addLocation ($a_title, $a_link, $a_target="", $a_ref_id=0)
 add a location to the locator array
 getLocations ()
 get locations array
 addTab ($a_lang_var, $a_link, $a_cmd, $a_class)
 add a tab to tabs array
 getTabs ()
 get tabs array
 getCallHistory ()
 Get controller call history.
 getCallStructure ($a_class, $a_nr=0, $a_parent=0)
 Get call structure of class context.
 storeCommonStructures ()
 stores often used common call structures (called from db_update script!!!)
 readCallStructure ($a_class, $a_nr=0, $a_parent=0)
 reads call structure from db
 forwards ($a_from_class, $a_to_class)
 Stores which classes forwards commands to which other classes.
 saveParameter (&$a_obj, $a_parameter)
 Set parameters that should be passed in every form and link of a gui class.
 saveParameterByClass ($a_class, $a_parameter)
 setParameter (&$a_obj, $a_parameter, $a_value)
 Set parameters that should be passed a form and link of a gui class.
 setParameterByClass ($a_class, $a_parameter, $a_value)
 Same as setParameterByClass, except that a class name is passed.
 clearParameters (&$a_obj)
 Clears all parameters that have been set via setParameter for a GUI class.
 clearParametersByClass ($a_class)
 Clears all parameters that have been set via setParameter for a GUI class.
 getNextClass ()
 Get next class in the control path from the current class to the target command class.
 lookupClassPath ($a_class_name)
 Get class path that can be used in include statements for a given class name.
 getClassForClasspath ($a_class_path)
 this method assumes that the class path has the format "dir/class.<class_name>.php"
 getPathNew ($a_source_node, $a_target_node)
 get path in call structure
 setTargetScript ($a_target_script)
 set target script name
 getTargetScript ()
 get target script name
 initBaseClass ($a_base_class)
 initialises new base class
 getCmd ($a_default_cmd="", $a_safe_commands="")
 determines current get/post command
 setCmd ($a_cmd)
 set the current command
 setCmdClass ($a_cmd_class)
 set the current command class
 getCmdClass ()
 determines responsible class for current command
 getFormAction (&$a_gui_obj, $a_fallback_cmd="", $a_anchor="", $a_asynch=false)
 get form action url for gui class object
 getFormActionByClass ($a_class, $a_fallback_cmd="", $a_anchor="", $a_asynch=false)
 get form action url for gui class name
 appendRequestTokenParameterString ($a_url)
 append request token as url parameter
 getRequestToken ()
 Get request token.
 verifyToken ()
 Verify Token.
 redirect (&$a_gui_obj, $a_cmd="", $a_anchor="")
 redirectByClass ($a_class, $a_cmd="")
 redirect to other gui class
 isAsynch ()
 getLinkTarget (&$a_gui_obj, $a_cmd="", $a_anchor="", $a_asynch=false)
 get link target for (current) gui class
 getLinkTargetByClass ($a_class, $a_cmd="", $a_anchor="", $a_asynch=false)
 get link target for a target class
 setReturn (&$a_gui_obj, $a_cmd)
 set return command
 setReturnByClass ($a_class, $a_cmd)
 set return command
 returnToParent (&$a_gui_obj, $a_anchor="")
 redirects to next parent class that used setReturn
 getRedirectSource ()
 get current redirect source
 getParentReturn (&$a_gui_obj)
 getParentReturnByClass ($a_class)
 searchReturnClass ($a_class)
 get current return class
 getUrlParameters ($a_class, $a_str, $a_cmd="", $a_transits="")
 appendTransitClasses ($a_str)
 getTransitArray ()
 addTransit ($a_class)
 getParameterArray (&$a_gui_obj, $a_cmd="", $a_incl_transit=true)
 getParameterArrayByClass ($a_class, $a_cmd="", $a_transits="")

Data Fields

const IL_RTOKEN_NAME = 'rtoken'
 $target_script
 $forward
 $parent
 $save_parameter
 $return
 $call_hist = array()
 $debug = array()

Detailed Description

This class provides processing control methods.

A global instance is available via variable $ilCtrl

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
Id:
class.ilCtrl.php 22099 2009-10-13 13:18:42Z akill

Definition at line 31 of file class.ilCtrl.php.

Member Function Documentation

ilCtrl::addLocation (   $a_title,
  $a_link,
  $a_target = "",
  $a_ref_id = 0 
)

add a location to the locator array

Parameters
string$a_titlelink text
string$a_linklink
string$a_targettarget frame

Definition at line 408 of file class.ilCtrl.php.

{
$this->location[] = array("title" => $a_title,
"link" => $a_link, "target" => $a_target, "ref_id" => $a_ref_id);
}
ilCtrl::addTab (   $a_lang_var,
  $a_link,
  $a_cmd,
  $a_class 
)

add a tab to tabs array

Parameters
string$a_lang_varlanguage variable
string$a_linklink
string$a_cmdcommand (must be same as in link)
string$a_classcommand class (must be same as in link)

Definition at line 432 of file class.ilCtrl.php.

{
$a_class = strtolower($a_class);
$this->tab[] = array("lang_var" => $a_lang_var,
"link" => $a_link, "cmd" => $a_cmd, "class" => $a_class);
}
ilCtrl::addTransit (   $a_class)

Definition at line 1382 of file class.ilCtrl.php.

References $_GET.

{
$a_class = strtolower($a_class);
$_GET["cmdTransit"][] = $a_class;
}
ilCtrl::appendRequestTokenParameterString (   $a_url)

append request token as url parameter

public

Definition at line 1020 of file class.ilCtrl.php.

References ilUtil\appendUrlParameterString(), and getRequestToken().

{
return ilUtil::appendUrlParameterString($a_url, self::IL_RTOKEN_NAME.'='.$this->getRequestToken());
}

+ Here is the call graph for this function:

ilCtrl::appendTransitClasses (   $a_str)

Definition at line 1355 of file class.ilCtrl.php.

References $_GET, and ilUtil\appendUrlParameterString().

{
if (is_array($_GET["cmdTransit"]))
{
reset($_GET["cmdTransit"]);
foreach ($_GET["cmdTransit"] as $transit)
{
$a_str = ilUtil::appendUrlParameterString($a_str, "cmdTransit[]=".$transit);
}
}
return $a_str;
}

+ Here is the call graph for this function:

ilCtrl::callBaseClass ( )

Calls base class of current request.

The base class is passed via $_GET["baseClass"] and is the first class in the call sequence of the request. Do not call this method within other scripts than ilias.php.

public

Definition at line 103 of file class.ilCtrl.php.

References $_GET, DB_FETCHMODE_ASSOC, exit, forwardCommand(), and getCallStructure().

{
global $ilDB;
$baseClass = strtolower($_GET["baseClass"]);
// get class information
$q = "SELECT * FROM module_class WHERE LOWER(class) = ".
$ilDB->quote($baseClass);
$mc_set = $ilDB->query($q);
$mc_rec = $mc_set->fetchRow(DB_FETCHMODE_ASSOC);
$module = $mc_rec["module"];
$class = $mc_rec["class"];
$class_dir = $mc_rec["dir"];
if ($module != "")
{
// get module information
$q = "SELECT * FROM il_component WHERE name = ".
$ilDB->quote($module);
$m_set = $ilDB->query($q);
$m_rec = $m_set->fetchRow(DB_FETCHMODE_ASSOC);
$this->module_dir = $m_rec["type"]."/".$m_rec["name"];
include_once $this->module_dir."/".$class_dir."/class.".$class.".php";
}
else // check whether class belongs to a service
{
// get class information
$q = "SELECT * FROM service_class WHERE LOWER(class) = ".
$ilDB->quote($baseClass);
$mc_set = $ilDB->query($q);
$mc_rec = $mc_set->fetchRow(DB_FETCHMODE_ASSOC);
$service = $mc_rec["service"];
$class = $mc_rec["class"];
$class_dir = $mc_rec["dir"];
if ($service == "")
{
echo "Could not find entry in modules.xml or services.xml for".
$baseClass;
}
// get service information
$q = "SELECT * FROM il_component WHERE name = ".
$ilDB->quote($service);
$m_set = $ilDB->query($q);
$m_rec = $m_set->fetchRow(DB_FETCHMODE_ASSOC);
$this->service_dir = $m_rec["type"]."/".$m_rec["name"];
include_once $this->service_dir."/".$class_dir."/class.".$class.".php";;
}
// forward processing to base class
$this->getCallStructure(strtolower($baseClass));
$base_class_gui =& new $class();
$this->forwardCommand($base_class_gui);
}

+ Here is the call graph for this function:

ilCtrl::clearParameters ( $a_obj)

Clears all parameters that have been set via setParameter for a GUI class.

Parameters
object$a_objgui object

Definition at line 714 of file class.ilCtrl.php.

References clearParametersByClass().

{
$this->clearParametersByClass(strtolower(get_class($a_obj)));
}

+ Here is the call graph for this function:

ilCtrl::clearParametersByClass (   $a_class)

Clears all parameters that have been set via setParameter for a GUI class.

Parameters
string$a_classgui class name

Definition at line 725 of file class.ilCtrl.php.

Referenced by clearParameters().

{
$this->parameter[strtolower($a_class)] = array();
}

+ Here is the caller graph for this function:

ilCtrl::debug (   $str)

Definition at line 62 of file class.ilCtrl.php.

{
//echo "<br>".$str;
$this->debug[] = $str;
}
& ilCtrl::forwardCommand ( $a_gui_object)

forward flow of control to next gui class this invokes the executeCommand() method of the gui object that is passed via reference

Parameters
object$a_gui_objectgui object that should receive the flow of control public
Returns
mixed return data of invoked executeCommand() method

Definition at line 184 of file class.ilCtrl.php.

References exit, getCmd(), and getNodeIdForTargetClass().

Referenced by callBaseClass().

{
$class = strtolower(get_class($a_gui_object));
$nr = $this->getNodeIdForTargetClass($this->current_node, $class);
if ($nr > 0)
{
$current_node = $this->current_node;
$this->current_node = $nr;
if (DEVMODE == "1")
{
$this->call_hist[] = array("class" => get_class($a_gui_object),
"mode" => "execComm", "cmd" => $this->getCmd());
}
$html = $a_gui_object->executeCommand();
// reset current node
$this->current_node = $current_node;
return $html;
}
echo "ERROR: Can't forward to class $class."; exit;
//echo "end forward<br>";
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::forwards (   $a_from_class,
  $a_to_class 
)

Stores which classes forwards commands to which other classes.

Parameters
string$a_from_classsource class name
string$a_to_classtarget class name

private

Definition at line 600 of file class.ilCtrl.php.

Referenced by init(), and readCallStructure().

{
$a_from_class = strtolower($a_from_class);
if (is_array($a_to_class))
{
foreach($a_to_class as $to_class)
{
$this->forward[$a_from_class][] = strtolower($to_class);
$this->parent[strtolower($to_class)][] = $a_from_class;
}
}
else
{
if (is_object($a_obj))
{
$this->forward[strtolower(get_class($a_obj))][] = strtolower($a_to_class);
$this->parent[strtolower($a_to_class)][] = strtolower(get_class($a_obj));
}
}
}

+ Here is the caller graph for this function:

ilCtrl::getCallHistory ( )

Get controller call history.

Definition at line 453 of file class.ilCtrl.php.

References $call_hist.

{
}
ilCtrl::getCallStructure (   $a_class,
  $a_nr = 0,
  $a_parent = 0 
)

Get call structure of class context.

This method must be called for the top level gui class in the leading php script. It must be called before the the current command is forwarded to the top level gui class. Example:

  include_once "classes/class.ilRepositoryGUI.php";
  $ilCtrl->setTargetScript("repository.php");
  $ilCtrl->getCallStructure("ilrepositorygui");
  $repository_gui =& new ilRepositoryGUI();
  $ilCtrl->forwardCommand($repository_gui);
Parameters
string$a_classgui class name
int$a_nrinternal counter (don't pass a value here)
int$a_parentinternal counter (don't pass a value here)

public

Definition at line 476 of file class.ilCtrl.php.

References $_GET, $ilLog, DB_FETCHMODE_ASSOC, readCallStructure(), redirect(), and ilUtil\sendInfo().

Referenced by callBaseClass().

{
global $ilDB, $ilLog, $ilUser;
$a_class = strtolower($a_class);
if (in_array($a_class, $this->stored_trees))
{
$q = "SELECT * FROM ctrl_structure WHERE root_class = ".
$ilDB->quote($a_class);
$set = $ilDB->query($q);
$rec = $set->fetchRow(DB_FETCHMODE_ASSOC);
$this->call_node = unserialize($rec["call_node"]);
$this->forward = unserialize($rec["forward"]);
$this->parent = unserialize($rec["parent"]);
$this->root_class = $a_class;
}
else
{
$this->readCallStructure($a_class, $a_nr, $a_parent);
}
// check whether command node and command class fit together
if ($_GET["cmdNode"] > 0)
{
if (strtolower($this->call_node[$_GET["cmdNode"]]["class"]) !=
strtolower($_GET["cmdClass"]))
{
if (DEVMODE)
{
die ("Internal Error: ilCtrl Node Error. cmdClass: '".$_GET["cmdClass"]
."', cmdNode: '".$_GET["cmdNode"]."' . Internally cmdNode is assigned to ".
"class '".$this->call_node[$_GET["cmdNode"]]["class"]."'.");
}
else
{
if (is_object($ilLog))
{
if (is_object($ilUser))
{
$user_str = "User: ".$ilUser->getLogin()." (".$ilUser->getId()."), ";
}
$ilLog->write("Invalid Request (class ilCtrl). Possible attack or Control Structure broken (see Setup). ".
$user_str."IP: ".$_SERVER["REMOTE_ADDR"].", URI: ".$_SERVER["REQUEST_URI"]);
}
ilUtil::sendInfo("Sorry, but the request includes invalid parameters." ,true);
ilUtil::redirect("repository.php?cmd=frameset");
}
}
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::getClassForClasspath (   $a_class_path)

this method assumes that the class path has the format "dir/class.<class_name>.php"

Parameters
string$a_class_pathclass path public
Returns
string class name

Definition at line 790 of file class.ilCtrl.php.

References $file.

{
$path = pathinfo($a_class_path);
$file = $path["basename"];
$class = substr($file, 6, strlen($file) - 10);
return $class;
}
ilCtrl::getCmd (   $a_default_cmd = "",
  $a_safe_commands = "" 
)

determines current get/post command

Parameters
stringdefault command
arraysafe commands: for these commands no token is checked for post requests

Definition at line 887 of file class.ilCtrl.php.

References $_GET, $cmd, and verifyToken().

Referenced by forwardCommand(), and getHTML().

{
$cmd = $_GET["cmd"];
if($cmd == "post")
{
if (is_array($_POST["cmd"]))
{
reset($_POST["cmd"]);
}
$cmd = @key($_POST["cmd"]);
// verify command
if ($this->verified_cmd != "")
{
return $this->verified_cmd;
}
else
{
if (!$this->verifyToken() &&
(!is_array($a_safe_commands) || !in_array($cmd, $a_safe_commands)))
{
return $a_default_cmd;
}
}
$this->verified_cmd = $cmd;
if($cmd == "" && isset($_POST["select_cmd"])) // selected command in multi-list (table2)
{
$cmd = $_POST["selected_cmd"];
$this->verified_cmd = $cmd;
}
if($cmd == "")
{
$cmd = $_GET["fallbackCmd"];
$this->verified_cmd = $cmd;
}
}
if($cmd == "")
{
$cmd = $a_default_cmd;
}
return $cmd;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::getCmdClass ( )

determines responsible class for current command

Definition at line 968 of file class.ilCtrl.php.

References $_GET.

{
return strtolower($_GET["cmdClass"]);
}
ilCtrl::getCmdNode ( )

get command target node

Returns
int id of current command target node

Definition at line 396 of file class.ilCtrl.php.

References $_GET.

Referenced by getNextClass().

{
return $_GET["cmdNode"];
}

+ Here is the caller graph for this function:

ilCtrl::getContextObjId ( )

Get ContextObjId.

Returns
int

Definition at line 268 of file class.ilCtrl.php.

{
return $this->context_obj_id;
}
ilCtrl::getContextObjType ( )

Get ContextObjType.

Returns
int

Definition at line 278 of file class.ilCtrl.php.

{
return $this->context_obj_type;
}
ilCtrl::getContextSubObjId ( )

Get ContextSubObjId.

Returns
int

Definition at line 288 of file class.ilCtrl.php.

{
return $this->context_sub_obj_id;
}
ilCtrl::getContextSubObjType ( )

Get ContextSubObjType.

Returns
int

Definition at line 298 of file class.ilCtrl.php.

{
return $this->context_sub_obj_type;
}
ilCtrl::getDebug ( )

Definition at line 68 of file class.ilCtrl.php.

References $debug.

{
return $this->debug;
}
ilCtrl::getFormAction ( $a_gui_obj,
  $a_fallback_cmd = "",
  $a_anchor = "",
  $a_asynch = false 
)

get form action url for gui class object

Parameters
object$a_gui_objgui object
string$a_fallback_cmdfallback command
string$a_anchoranchor
bool$a_asnychasync

Definition at line 981 of file class.ilCtrl.php.

References getFormActionByClass().

{
$script = $this->getFormActionByClass(strtolower(get_class($a_gui_obj)),
$a_fallback_cmd, $a_anchor, $a_asynch);
return $script;
}

+ Here is the call graph for this function:

ilCtrl::getFormActionByClass (   $a_class,
  $a_fallback_cmd = "",
  $a_anchor = "",
  $a_asynch = false 
)

get form action url for gui class name

Parameters
string$a_classgui class name

Definition at line 993 of file class.ilCtrl.php.

References ilUtil\appendUrlParameterString(), getLinkTargetByClass(), and getRequestToken().

Referenced by getFormAction().

{
$a_class = strtolower($a_class);
$tok = $this->getRequestToken();
//echo "-$tok-";
$script = $this->getLinkTargetByClass($a_class, "post", "", $a_asynch);
if ($a_fallback_cmd != "")
{
$script = ilUtil::appendUrlParameterString($script, "fallbackCmd=".$a_fallback_cmd);
}
$script = ilUtil::appendUrlParameterString($script, self::IL_RTOKEN_NAME.'='.$this->getRequestToken());
if ($a_anchor != "")
{
$script = $script."#".$a_anchor;
}
return $script;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

& ilCtrl::getHTML ( $a_gui_object)

Gets an HTML output from another GUI class and returns the flow of control to the calling class.

Parameters
object$a_gui_objectgui object that returns the HTML block public
Returns
string HTML

Definition at line 222 of file class.ilCtrl.php.

References exit, getCmd(), and getNodeIdForTargetClass().

{
$class = strtolower(get_class($a_gui_object));
$nr = $this->getNodeIdForTargetClass($this->current_node, $class);
if ($nr > 0)
{
$current_node = $this->current_node;
// set current node to new gui class
$this->current_node = $nr;
if (DEVMODE == "1")
{
$this->call_hist[] = array("class" => get_class($a_gui_object),
"mode" => "getHtml", "cmd" => $this->getCmd());
}
// get block
$html = $a_gui_object->getHTML();
// reset current node
$this->current_node = $current_node;
// return block
return $html;
}
echo "ERROR: Can't getHTML from class $class."; exit;
}

+ Here is the call graph for this function:

ilCtrl::getLinkTarget ( $a_gui_obj,
  $a_cmd = "",
  $a_anchor = "",
  $a_asynch = false 
)

get link target for (current) gui class

Parameters
object$a_gui_obj(current) gui object (usually $this)
string$a_cmdcommand
Returns
string target link

Definition at line 1198 of file class.ilCtrl.php.

References getLinkTargetByClass().

{
//echo "<br>getLinkTarget";
$script = $this->getLinkTargetByClass(strtolower(get_class($a_gui_obj)), $a_cmd, $a_anchor, $a_asynch);
return $script;
}

+ Here is the call graph for this function:

ilCtrl::getLinkTargetByClass (   $a_class,
  $a_cmd = "",
  $a_anchor = "",
  $a_asynch = false 
)

get link target for a target class

Parameters
string$a_classcommand target class
string$a_cmdcommand
array$a_anchor# anchor
array$a_asynchasynchronous mode
Returns
string target link

Definition at line 1216 of file class.ilCtrl.php.

References getTargetScript(), and getUrlParameters().

Referenced by getFormActionByClass(), getLinkTarget(), redirect(), and redirectByClass().

{
// note: $a_class may be an array
//$a_class = strtolower($a_class);
//echo "<br>getLinkTargetByClass";
$script = $this->getTargetScript();
$script = $this->getUrlParameters($a_class, $script, $a_cmd);
if ($a_asynch)
{
$script.= "&cmdMode=asynch";
}
if ($a_anchor != "")
{
$script = $script."#".$a_anchor;
}
return $script;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::getLocations ( )

get locations array

Returns
array array of locations (array("title", "link", "target"))

Definition at line 419 of file class.ilCtrl.php.

References $location.

{
}
ilCtrl::getModuleDir ( )

get directory of current module

Definition at line 168 of file class.ilCtrl.php.

{
return $this->module_dir;
}
ilCtrl::getNextClass ( )

Get next class in the control path from the current class to the target command class.

This is the class that should be instantiated and be invoked via $ilCtrl->forwardCommand($class) next.

Returns
string class name of next class

Definition at line 738 of file class.ilCtrl.php.

References getCmdNode(), and getPathNew().

{
//echo "getNextClass:";
$cmdNode = $this->getCmdNode();
if ($cmdNode == "")
{
return false;
}
else
{
if ($this->current_node == $cmdNode)
{
//echo "1:".$this->call_node[$cmdNode]["class"]."<br>";
//return $this->call_node[$cmdNode]["class"];
return "";
}
else
{
$path = $this->getPathNew($this->current_node, $cmdNode);
//echo "2:".$this->call_node[$path[1]]["class"]."<br>";
return $this->call_node[$path[1]]["class"];
}
}
}

+ Here is the call graph for this function:

ilCtrl::getNodeIdForTargetClass (   $a_par_node,
  $a_class 
)

Searchs a node for a given class ($a_class) "near" the another node ($a_par_node).

It first looks if the given class is a child class of the current node. If such a child node has been found, its id is returned.

If not, this method determines wether the given class is a sibling of the current node within the call structure. If this is the case then the corresponding id is returned.

At last the methode searchs for the given class along the path from the current node to the root class of the call structure.

Parameters
$a_par_nodeid of starting node for the search
$a_classclass that should be searched

private

Returns
int id of target node that has been found

Definition at line 324 of file class.ilCtrl.php.

References exit.

Referenced by forwardCommand(), getHTML(), getParameterArrayByClass(), searchReturnClass(), and setCmdClass().

{
$class = strtolower($a_class);
// target class is class of current node id
if ($class == $this->call_node[$a_par_node]["class"])
{
return $a_par_node;
}
// target class is child of current node id
foreach($this->call_node as $nr => $node)
{
if (($node["parent"] == $a_par_node) &&
($node["class"] == $class))
{
return $nr;
}
}
// target class is sibling
$par = $this->call_node[$a_par_node]["parent"];
if ($par != 0)
{
foreach($this->call_node as $nr => $node)
{
if (($node["parent"] == $par) &&
($node["class"] == $class))
{
return $nr;
}
}
}
// target class is parent
while($par != 0)
{
if ($this->call_node[$par]["class"] == $class)
{
return $par;
}
$par = $this->call_node[$par]["parent"];
}
// Please do NOT change these lines.
// Developers must be aware, if they use classes unknown to the controller
// otherwise certain problem will be extremely hard to track down...
echo "ERROR: Can't find target class $a_class for node $a_par_node ".
"(".$this->call_node[$a_par_node]["class"].").<br>";
error_log( "ERROR: Can't find target class $a_class for node $a_par_node ".
"(".$this->call_node[$a_par_node]["class"].")");
if (DEVMODE == 1)
{
try
{
throw new Exception("");
}
catch(Exception $e)
{
echo "<pre>".$e->getTraceAsString()."</pre>";
}
}
}

+ Here is the caller graph for this function:

ilCtrl::getParameterArray ( $a_gui_obj,
  $a_cmd = "",
  $a_incl_transit = true 
)

Definition at line 1388 of file class.ilCtrl.php.

References getParameterArrayByClass().

{
$par_arr = $this->getParameterArrayByClass(strtolower(get_class($a_gui_obj)), $a_cmd,
$trans_arr);
return $par_arr;
}

+ Here is the call graph for this function:

ilCtrl::getParameterArrayByClass (   $a_class,
  $a_cmd = "",
  $a_transits = "" 
)

Definition at line 1399 of file class.ilCtrl.php.

References $_GET, getNodeIdForTargetClass(), and getPathNew().

Referenced by getParameterArray(), and getUrlParameters().

{
//echo "<br>getparameter for $a_class";
if ($a_class == "")
{
return array();
}
if (!is_array($a_class))
{
$a_class = array($a_class);
}
$nr = $this->current_node;
foreach ($a_class as $class)
{
//echo "<br>-$class-";
$class = strtolower($class);
$nr = $this->getNodeIdForTargetClass($nr, $class);
$target_class = $class;
//echo "-$nr-";
}
$path = $this->getPathNew(1, $nr);
$params = array();
// append parameters of parent classes
foreach($path as $node_id)
{
$class = $this->call_node[$node_id]["class"];
if (is_array($this->save_parameter[$class]))
{
foreach($this->save_parameter[$class] as $par)
{
$params[$par] = $_GET[$par];
}
}
if (is_array($this->parameter[$class]))
{
foreach($this->parameter[$class] as $par => $value)
{
$params[$par] = $value;
}
}
}
if ($a_cmd != "")
{
$params["cmd"] = $a_cmd;
}
$params["cmdClass"] = $target_class;
$params["cmdNode"] = $nr;
$params["baseClass"] = $_GET["baseClass"];
return $params;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::getParentReturn ( $a_gui_obj)

Definition at line 1295 of file class.ilCtrl.php.

References getParentReturnByClass().

Referenced by returnToParent().

{
return $this->getParentReturnByClass(strtolower(get_class($a_gui_obj)));
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::getParentReturnByClass (   $a_class)

Definition at line 1301 of file class.ilCtrl.php.

References searchReturnClass().

Referenced by getParentReturn().

{
$a_class = strtolower($a_class);
$ret_class = $this->searchReturnClass($a_class);
//echo ":$ret_class:";
if($ret_class)
{
//echo ":".$this->return[$ret_class].":";
return $this->return[$ret_class];
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::getPathNew (   $a_source_node,
  $a_target_node 
)

get path in call structure

Parameters
string$a_source_nodesource node id
string$a_source_nodetarget node id

private

Definition at line 807 of file class.ilCtrl.php.

References exit.

Referenced by getNextClass(), getParameterArrayByClass(), and searchReturnClass().

{
//echo "-".$a_source_node."-";
$path_rev = array();
$c_target = $a_target_node;
while ($a_source_node != $c_target)
{
$path_rev[] = $c_target;
$c_target = $this->call_node[$c_target]["parent"];
if(!($c_target > 0))
{
echo "ERROR: Path not found. Source:".$a_source_node.
" (".$this->call_node[$a_source_node]["class"].")".
", Target:".$a_target_node.
" (".$this->call_node[$a_target_node]["class"].")";
}
}
if ($a_source_node == $c_target)
{
$path_rev[] = $c_target;
}
$path = array();
for ($i=0; $i<count($path_rev); $i++)
{
$path[] = $path_rev[count($path_rev) - ($i + 1)];
}
foreach($path as $node)
{
//echo "<br>-->".$node.":".$this->call_node[$node]["class"];
}
return $path;
}

+ Here is the caller graph for this function:

ilCtrl::getRedirectSource ( )

get current redirect source

Returns
string redirect source class

Definition at line 1287 of file class.ilCtrl.php.

References $_GET.

{
return $_GET["redirectSource"];
}
ilCtrl::getRequestToken ( )

Get request token.

Definition at line 1028 of file class.ilCtrl.php.

References $res.

Referenced by appendRequestTokenParameterString(), and getFormActionByClass().

{
global $ilDB, $ilUser;
if ($this->rtoken != "")
{
return $this->rtoken;
}
else
{
if (is_object($ilDB) && is_object($ilUser) && $ilUser->getId() > 0 &&
$ilUser->getId() != ANONYMOUS_USER_ID)
{
$st = $ilDB->prepare("SELECT token FROM il_request_token WHERE user_id = ? AND session = ?",
array("integer", "text"));
$res =$ilDB->execute($st, array($ilUser->getId(), session_id()));
$rec = $ilDB->fetchAssoc($res);
if ($rec["token"] != "")
{
return $rec["token"];
}
$this->rtoken = md5(uniqid(rand(), true));
// IMPORTANT: Please do NOT try to move this implementation to a
// session basis. This will fail due to framesets that are used
// occasionally in ILIAS, e.g. in the chat, where multiple
// forms are loaded in different frames.
$ilDB->query("INSERT INTO il_request_token (user_id, token, session) VALUES ".
"(".$ilDB->quote($ilUser->getId()).",".$ilDB->quote($this->rtoken).
",".$ilDB->quote(session_id()).")");
return $this->rtoken;
}
//$this->rtoken = md5(uniqid(rand(), true));
}
return "";
}

+ Here is the caller graph for this function:

ilCtrl::getTabs ( )

get tabs array

Returns
array array of tab entries (array("lang_var", "link", "cmd", "class))

Definition at line 445 of file class.ilCtrl.php.

References $tab.

{
return $this->tab;
}
ilCtrl::getTargetScript ( )

get target script name

Returns
string target script name

Definition at line 859 of file class.ilCtrl.php.

References $target_script.

Referenced by getLinkTargetByClass(), setReturn(), and setReturnByClass().

{
}

+ Here is the caller graph for this function:

ilCtrl::getTransitArray ( )

Definition at line 1368 of file class.ilCtrl.php.

References $_GET.

{
$trans_arr = array();
if (is_array($_GET["cmdTransit"]))
{
reset($_GET["cmdTransit"]);
foreach ($_GET["cmdTransit"] as $key => $transit)
{
$trans_arr["cmdTransit[".$key."]"] = $transit;
}
}
return $trans_arr;
}
ilCtrl::getUrlParameters (   $a_class,
  $a_str,
  $a_cmd = "",
  $a_transits = "" 
)

Definition at line 1337 of file class.ilCtrl.php.

References ilUtil\appendUrlParameterString(), and getParameterArrayByClass().

Referenced by getLinkTargetByClass(), setReturn(), and setReturnByClass().

{
// note: $a_class may be an array!
//$a_class = strtolower($a_class);
$params = $this->getParameterArrayByClass($a_class, $a_cmd, $a_transits);
foreach ($params as $par => $value)
{
if (strlen($value))
{
$a_str = ilUtil::appendUrlParameterString($a_str, $par."=".$value);
}
}
return $a_str;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::ilCtrl ( )

control class constructor

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

References $ilBench, and init().

{
global $ilBench;
$this->bench =& $ilBench;
// initialisation
$this->init();
// this information should go to xml files one day
$this->stored_trees = array
("ilrepositorygui", "ilpersonaldesktopgui",
"illmpresentationgui", "illmeditorgui",
"iladministrationgui");
}

+ Here is the call graph for this function:

ilCtrl::init ( )

initialisation

Definition at line 76 of file class.ilCtrl.php.

References forwards().

Referenced by ilCtrl(), and initBaseClass().

{
$this->transit = array();
$this->forward = array(); // forward array
$this->forwards = array(); // forward array
$this->parent = array(); // parent array (reverse forward)
$this->save_parameter = array(); // save parameter array
$this->parameter = array(); // save parameter array
$this->return = ""; // return commmands
$this->location = array();
$this->tab = array();
$this->current_node = 0;
$this->module_dir = "";
$this->service_dir = "";
$this->call_node = array();
$this->root_class = "";
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::initBaseClass (   $a_base_class)

initialises new base class

Note: this resets the whole current ilCtrl context completely. You can call setTargetScript() and callBaseClass() after that.

Definition at line 871 of file class.ilCtrl.php.

References $_GET, and init().

{
$_GET["baseClass"] = $a_base_class;
$_GET["cmd"] = "";
$_GET["cmdClass"] = "";
$_GET["cmdNode"] = "";
$this->init();
}

+ Here is the call graph for this function:

ilCtrl::isAsynch ( )

Definition at line 1177 of file class.ilCtrl.php.

References $_GET.

{
if ($_GET["cmdMode"] == "asynch")
{
return true;
}
else
{
return false;
}
}
ilCtrl::lookupClassPath (   $a_class_name)

Get class path that can be used in include statements for a given class name.

Parameters
string$a_class_nameclass name

Definition at line 769 of file class.ilCtrl.php.

References DB_FETCHMODE_ASSOC.

{
global $ilDB;
$a_class_name = strtolower($a_class_name);
$q = "SELECT * FROM ctrl_classfile WHERE class = ".$ilDB->quote($a_class_name);
$class_set = $ilDB->query($q);
$class_rec = $class_set->fetchRow(DB_FETCHMODE_ASSOC);
return $class_rec["file"];
}
ilCtrl::readCallStructure (   $a_class,
  $a_nr = 0,
  $a_parent = 0 
)

reads call structure from db

Definition at line 557 of file class.ilCtrl.php.

References DB_FETCHMODE_ASSOC, and forwards().

Referenced by getCallStructure(), and storeCommonStructures().

{
global $ilDB;
$a_class = strtolower($a_class);
$a_nr++;
// determine call node structure
$this->call_node[$a_nr] = array("class" => $a_class, "parent" => $a_parent);
//echo "<br>nr:$a_nr:class:$a_class:parent:$a_parent:";
$q = "SELECT * FROM ctrl_calls WHERE parent=".
$ilDB->quote(strtolower($a_class)).
" ORDER BY child";
$call_set = $ilDB->query($q);
//$forw = array();
$a_parent = $a_nr;
while($call_rec = $call_set->fetchRow(DB_FETCHMODE_ASSOC))
{
$a_nr = $this->readCallStructure($call_rec["child"], $a_nr, $a_parent);
$forw[] = $call_rec["child"];
}
// determin forward and parent array
$this->forwards($a_class, $forw);
//echo "<br>forwards:".$a_class."<br>"; var_dump($forw);
// determine root class
$this->root_class = $a_class;
return $a_nr;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::redirect ( $a_gui_obj,
  $a_cmd = "",
  $a_anchor = "" 
)

Definition at line 1142 of file class.ilCtrl.php.

References $ilBench, and getLinkTargetByClass().

Referenced by getCallStructure(), redirectByClass(), and returnToParent().

{
global $ilBench;
//echo "<br>class:".get_class($a_gui_obj).":";
$script = $this->getLinkTargetByClass(strtolower(get_class($a_gui_obj)), $a_cmd);
if (is_object($ilBench))
{
$ilBench->save();
}
if ($a_anchor != "")
{
$script = $script."#".$a_anchor;
}
ilUtil::redirect($script);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::redirectByClass (   $a_class,
  $a_cmd = "" 
)

redirect to other gui class

Parameters
string$a_classcommand target class
string$a_cmdcommand

Definition at line 1166 of file class.ilCtrl.php.

References getLinkTargetByClass(), and redirect().

{
// $a_class may be an array
//$a_class = strtolower($a_class);
//echo "<br>class:".get_class($a_gui_obj).":";
$script = $this->getLinkTargetByClass($a_class, $a_cmd);
//echo "<br>script:$script:";
ilUtil::redirect($script);
}

+ Here is the call graph for this function:

ilCtrl::returnToParent ( $a_gui_obj,
  $a_anchor = "" 
)

redirects to next parent class that used setReturn

Definition at line 1266 of file class.ilCtrl.php.

References $_GET, ilUtil\appendUrlParameterString(), getParentReturn(), and redirect().

{
$script = $this->getParentReturn($a_gui_obj);
"redirectSource=".strtolower(get_class($a_gui_obj)));
"cmdMode=".$_GET["cmdMode"]);
if ($a_anchor != "")
{
$script = $script."#".$a_anchor;
}
ilUtil::redirect($script);
}

+ Here is the call graph for this function:

ilCtrl::saveParameter ( $a_obj,
  $a_parameter 
)

Set parameters that should be passed in every form and link of a gui class.

All links that relate to the specified gui object class and are build e.g. by using getLinkTarger() or getFormAction() will include this parameter. This is the mechanism to add url parameters to the standard url (which is set by the setTargetScript() method) target everytime.

A typical example is the "ref_id" that should be included in almost every link or form action url. So the constructor of ilRepositoryGUI includes the command:

  $this->ctrl->saveParameter($this, array("ref_id"));
Parameters
object$a_objgui object that will process the parameter
mixed$a_parameterparameter name (string) or array of parameter names

public

Definition at line 642 of file class.ilCtrl.php.

References saveParameterByClass().

{
$this->saveParameterByClass(get_class($a_obj), $a_parameter);
}

+ Here is the call graph for this function:

ilCtrl::saveParameterByClass (   $a_class,
  $a_parameter 
)

Definition at line 647 of file class.ilCtrl.php.

Referenced by saveParameter().

{
if (is_array($a_parameter))
{
foreach($a_parameter as $parameter)
{
$this->save_parameter[strtolower($a_class)][] = $parameter;
}
}
else
{
$this->save_parameter[strtolower($a_class)][] = $a_parameter;
}
}

+ Here is the caller graph for this function:

ilCtrl::searchReturnClass (   $a_class)

get current return class

Definition at line 1316 of file class.ilCtrl.php.

References getNodeIdForTargetClass(), and getPathNew().

Referenced by getParentReturnByClass().

{
//echo "<br>searchReturnClass".$a_class;
$a_class = strtolower($a_class);
$nr = $this->getNodeIdForTargetClass($this->current_node, $a_class);
$path = $this->getPathNew(1, $nr);
//var_dump($path);
for($i = count($path)-2; $i>=0; $i--)
{
//echo "<br>:$i:".$path[$i].":".$this->call_node[$path[$i]]["class"]
// .":".$this->return[$this->call_node[$path[$i]]["class"]].":";
if ($this->return[$this->call_node[$path[$i]]["class"]] != "")
{
return $this->call_node[$path[$i]]["class"];
}
}
return false;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilCtrl::setCmd (   $a_cmd)

set the current command

IMPORTANT NOTE:

please use this function only in exceptional cases it is not intended for setting commands in forms or links! use the corresponding parameters of getFormAction() and getLinkTarget() instead.

Definition at line 942 of file class.ilCtrl.php.

References $_GET.

{
$_GET["cmd"] = $a_cmd;
}
ilCtrl::setCmdClass (   $a_cmd_class)

set the current command class

IMPORTANT NOTE:

please use this function only in exceptional cases it is not intended for setting the command class in forms or links! use the corresponding parameters of getFormAction() and getLinkTarget() instead.

Definition at line 957 of file class.ilCtrl.php.

References $_GET, and getNodeIdForTargetClass().

{
$a_cmd_class = strtolower($a_cmd_class);
$nr = $this->getNodeIdForTargetClass($this->current_node, $a_cmd_class);
$_GET["cmdClass"] = $a_cmd_class;
$_GET["cmdNode"] = $nr;
}

+ Here is the call graph for this function:

ilCtrl::setContext (   $a_obj_id,
  $a_obj_type,
  $a_sub_obj_id = 0,
  $a_sub_obj_type = "" 
)

Set context of current user interface.

Definition at line 255 of file class.ilCtrl.php.

{
$this->context_obj_id = $a_obj_id;
$this->context_obj_type = $a_obj_type;
$this->context_sub_obj_id = $a_sub_obj_id;
$this->context_sub_obj_type = $a_sub_obj_type;
}
ilCtrl::setParameter ( $a_obj,
  $a_parameter,
  $a_value 
)

Set parameters that should be passed a form and link of a gui class.

All links that relate to the specified gui object class and are build e.g. by using getLinkTarger() or getFormAction() will include this parameter. This is the mechanism to add url parameters to the standard url (which is set by the setTargetScript() method) target. The difference to the saveParameter() method is, that setParameter() does not simply forward the url parameter of the last request. You can set a spefific value.

If this parameter is also a "saved parameter" (set by saveParameter() method) the saved value will be overwritten.

The method is usually used in conjunction with a getFormAction() or getLinkTarget() call. E.g.:

    $this->ctrl->setParameter($this, "obj_id", $data_row["obj_id"]);
    $obj_link = $this->ctrl->getLinkTarget($this, "view");
Parameters
object$a_objgui object
string$a_parameterparameter name
string$a_parameterparameter value

public

Definition at line 687 of file class.ilCtrl.php.

{
$this->parameter[strtolower(get_class($a_obj))][$a_parameter] = $a_value;
}
ilCtrl::setParameterByClass (   $a_class,
  $a_parameter,
  $a_value 
)

Same as setParameterByClass, except that a class name is passed.

Parameters
string$a_classgui class name
string$a_parameterparameter name
string$a_parameterparameter value

public

Definition at line 702 of file class.ilCtrl.php.

{
$this->parameter[strtolower($a_class)][$a_parameter] = $a_value;
}
ilCtrl::setReturn ( $a_gui_obj,
  $a_cmd 
)

set return command

Definition at line 1241 of file class.ilCtrl.php.

References getTargetScript(), and getUrlParameters().

{
$script = $this->getTargetScript();
$script = $this->getUrlParameters(strtolower(get_class($a_gui_obj)), $script, $a_cmd);
//echo "<br>setReturn:".get_class($a_gui_obj).":".$script.":<br>";
$this->return[strtolower(get_class($a_gui_obj))] = $script;
}

+ Here is the call graph for this function:

ilCtrl::setReturnByClass (   $a_class,
  $a_cmd 
)

set return command

Definition at line 1252 of file class.ilCtrl.php.

References getTargetScript(), and getUrlParameters().

{
// may not be an array!
$a_class = strtolower($a_class);
$script = $this->getTargetScript();
$script = $this->getUrlParameters($a_class, $script, $a_cmd);
//echo "<br>setReturn:".get_class($a_gui_obj).":".$script.":<br>";
$this->return[strtolower($a_class)] = $script;
}

+ Here is the call graph for this function:

ilCtrl::setTargetScript (   $a_target_script)

set target script name

Parameters
string$a_target_scripttarget script name

Definition at line 848 of file class.ilCtrl.php.

{
$this->target_script = $a_target_script;
}
ilCtrl::storeCommonStructures ( )

stores often used common call structures (called from db_update script!!!)

Definition at line 532 of file class.ilCtrl.php.

References readCallStructure().

{
global $ilDB;
$q = "DELETE FROM ctrl_structure";
$ilDB->query($q);
foreach ($this->stored_trees as $root_gui_class)
{
$this->call_node = array();
$this->forward = array();
$this->parent = array();
$this->readCallStructure($root_gui_class);
$q = "INSERT INTO ctrl_structure (root_class, call_node, forward, parent) VALUES (".
$ilDB->quote($root_gui_class).",".
$ilDB->quote(serialize($this->call_node)).",".
$ilDB->quote(serialize($this->forward)).",".
$ilDB->quote(serialize($this->parent)).")";
$ilDB->query($q);
}
}

+ Here is the call graph for this function:

ilCtrl::verifyToken ( )

Verify Token.

Definition at line 1070 of file class.ilCtrl.php.

References $_GET, and $_SESSION.

Referenced by getCmd().

{
global $ilDB, $ilUser;
if (is_object($ilUser) && is_object($ilDB) && $ilUser->getId() > 0 &&
$ilUser->getId() != ANONYMOUS_USER_ID)
{
if ($_GET["rtoken"] == "")
{
echo "ilCtrl::No Request Token Given!"; // for debugging, maybe changed later
return false;
}
$set = $ilDB->query("SELECT * FROM il_request_token WHERE ".
" user_id = ".$ilDB->quote($ilUser->getId())." AND ".
" token = ".$ilDB->quote($_GET[self::IL_RTOKEN_NAME]));
if ($set->numRows() > 0)
{
// remove used token
/*
$ilDB->query("DELETE FROM il_request_token WHERE ".
" user_id = ".$ilDB->quote($ilUser->getId())." AND ".
" token = ".$ilDB->quote($_GET[self::IL_RTOKEN_NAME]));
*/
// remove tokens from older sessions
$ilDB->query("DELETE FROM il_request_token WHERE ".
" user_id = ".$ilDB->quote($ilUser->getId())." AND ".
" session != ".$ilDB->quote(session_id()));
return true;
}
else
{
return false;
}
if ($_SESSION["rtokens"][$_GET[self::IL_RTOKEN_NAME]] != "")
{
// remove used token
unset($_SESSION["rtokens"][$_GET[self::IL_RTOKEN_NAME]]);
// remove old tokens
if (count($_SESSION["rtokens"]) > 100)
{
$to_remove = array();
$sec = 7200; // two hours
foreach($_SESSION["rtokens"] as $tok => $time)
{
if (time() - $time > $sec)
{
$to_remove[] = $tok;
}
}
foreach($to_remove as $tok)
{
unset($_SESSION["rtokens"][$tok]);
}
}
return true;
}
return false;
}
else
{
return true; // do not verify, if user or db object is missing
}
return false;
}

+ Here is the caller graph for this function:

Field Documentation

ilCtrl::$call_hist = array()

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

Referenced by getCallHistory().

ilCtrl::$debug = array()

Definition at line 41 of file class.ilCtrl.php.

Referenced by getDebug().

ilCtrl::$forward

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

ilCtrl::$parent

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

ilCtrl::$return

Definition at line 39 of file class.ilCtrl.php.

ilCtrl::$save_parameter

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

ilCtrl::$target_script

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

Referenced by getTargetScript().


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