ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilLMTracker Class Reference

Track access to ILIAS learning modules. More...

+ Collaboration diagram for ilLMTracker:

Public Member Functions

 trackAccess ($a_page_id)
 Track access to lm page.
 trackLastPageAccess ($usr_id, $lm_id, $obj_id)
 Track last accessed page for a learning module.
 setCurrentPage ($a_val)
 Set current page.
 getCurrentPage ()
 Get current page.
 getAllQuestionsCorrect ()
 Have all questoins been answered correctly (and questions exist)?
 getIconForLMObject ($a_node, $a_highlighted_node=0)
 Get icon for lm object.
 hasPredIncorrectAnswers ($a_obj_id, $a_ignore_unlock=false)
 Has predecessing incorrect answers.
 getBlockedUsersInformation ()
 Get blocked users information.

Static Public Member Functions

static getInstance ($a_ref_id, $a_user_id=0)
 Get instance.
static getInstanceByObjId ($a_obj_id, $a_user_id=0)
 Get instance.
static _isNodeVisible ($a_node)
 Is node visible for the learner.

Data Fields

const NOT_ATTEMPTED = 0
const IN_PROGRESS = 1
const COMPLETED = 2
const FAILED = 3
const CURRENT = 99

Static Public Attributes

static $instances = array()
static $instancesbyobj = array()

Protected Member Functions

 trackPageAndChapterAccess ($a_page_id)
 Track page and chapter access.
 loadLMTrackingData ()
 Load LM tracking data.
 determineProgressStatus ($a_obj_id, &$a_has_pred_incorrect_answers, $a_has_pred_incorrect_not_unlocked_answers)
 Determine progress status of nodes.

Protected Attributes

 $lm_ref_id
 $lm_obj_id
 $lm_tree
 $lm_obj_ids = array()
 $tree_arr = array()
 $re_arr = array()
 $loaded_for_node = false
 $dirty = false
 $page_questions = array()
 $all_questions = array()
 $answer_status = array()
 $has_incorrect_answers = false
 $current_page_id = 0

Private Member Functions

 __construct ($a_id, $a_by_obj_id=false, $a_user_id)
 Constructor.

Detailed Description

Track access to ILIAS learning modules.

Author
Alex Killing alex..nosp@m.kill.nosp@m.ing@g.nosp@m.mx.d.nosp@m.e
Version
$Id$

Definition at line 12 of file class.ilLMTracker.php.

Constructor & Destructor Documentation

ilLMTracker::__construct (   $a_id,
  $a_by_obj_id = false,
  $a_user_id 
)
private

Constructor.

Parameters
ilObjLearningModule$a_lmlearning module

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

References ilObject\_lookupObjId(), and getInstance().

{
$this->user_id = $a_user_id;
if ($a_by_obj_id)
{
$this->lm_ref_id = 0;
$this->lm_obj_id = $a_id;
}
else
{
$this->lm_ref_id = $a_id;
$this->lm_obj_id = ilObject::_lookupObjId($a_id);
}
include_once("./Modules/LearningModule/classes/class.ilLMTree.php");
$this->lm_tree = ilLMTree::getInstance($this->lm_obj_id);
}

+ Here is the call graph for this function:

Member Function Documentation

static ilLMTracker::_isNodeVisible (   $a_node)
static

Is node visible for the learner.

Parameters
mixed$a_nodenode object/array
Returns
boolean node visible true/false

Definition at line 651 of file class.ilLMTracker.php.

References $lm_set, ilPageObject\_lookupActivationData(), ilPageObject\_lookupActive(), and ilUtil\now().

Referenced by ilLMTOCExplorerGUI\isNodeVisible().

{
include_once("./Services/COPage/classes/class.ilPageObject.php");
if ($a_node["type"] != "pg")
{
return true;
}
$lm_set = new ilSetting("lm");
$active = ilPageObject::_lookupActive($a_node["child"], "lm",
$lm_set->get("time_scheduled_page_activation"));
if(!$active)
{
$act_data = ilPageObject::_lookupActivationData((int) $a_node["child"], "lm");
if ($act_data["show_activation_info"] &&
(ilUtil::now() < $act_data["activation_start"]))
{
return true;
}
else
{
return false;
}
}
else
{
return true;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilLMTracker::determineProgressStatus (   $a_obj_id,
$a_has_pred_incorrect_answers,
  $a_has_pred_incorrect_not_unlocked_answers 
)
protected

Determine progress status of nodes.

Parameters
int$a_obj_idlm object id
Returns
int status

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

References COMPLETED, CURRENT, FAILED, getCurrentPage(), IN_PROGRESS, NOT_ATTEMPTED, and ilUtil\sortArray().

Referenced by loadLMTrackingData().

{
if (isset($this->tree_arr["nodes"][$a_obj_id]))
{
$this->tree_arr["nodes"][$a_obj_id]["has_pred_incorrect_answers"] = $a_has_pred_incorrect_answers;
$this->tree_arr["nodes"][$a_obj_id]["has_pred_incorrect_not_unlocked_answers"] = $a_has_pred_incorrect_not_unlocked_answers;
if (is_array($this->tree_arr["childs"][$a_obj_id]))
{
// sort childs in correct order
$this->tree_arr["childs"][$a_obj_id] = ilUtil::sortArray($this->tree_arr["childs"][$a_obj_id], "lft", "asc", true);
$cnt_completed = 0;
foreach ($this->tree_arr["childs"][$a_obj_id] as $c)
{
// if child is not activated/displayed count child as implicitly completed
// rationale: everything that is visible for the learner determines the status
// see also bug #14642
if (!self::_isNodeVisible($c))
{
$cnt_completed++;
continue;
}
$c_stat = $this->determineProgressStatus($c["child"], $a_has_pred_incorrect_answers,
$a_has_pred_incorrect_not_unlocked_answers);
if ($status != ilLMTracker::FAILED)
{
if ($c_stat == ilLMTracker::FAILED)
{
}
else if ($c_stat == ilLMTracker::IN_PROGRESS)
{
}
else if ($c_stat == ilLMTracker::COMPLETED || $c_stat == ilLMTracker::CURRENT)
{
$cnt_completed++;
}
}
// if an item is failed or in progress or (not attempted and contains questions)
// the next item has predecessing incorrect answers
if ($c_stat == ilLMTracker::FAILED || $c_stat == ilLMTracker::IN_PROGRESS ||
($c_stat == ilLMTracker::NOT_ATTEMPTED && is_array($this->page_questions[$c["child"]]) && count($this->page_questions[$c["child"]]) > 0))
{
$a_has_pred_incorrect_answers = true;
if (!$this->tree_arr["nodes"][$c["child"]]["unlocked"])
{
$a_has_pred_incorrect_not_unlocked_answers = true;
}
}
}
if ($cnt_completed == count($this->tree_arr["childs"][$a_obj_id]))
{
}
}
else if ($this->tree_arr["nodes"][$a_obj_id]["type"] == "pg")
{
// check read event data
if (isset($this->re_arr[$a_obj_id]) && $this->re_arr[$a_obj_id]["read_count"] > 0)
{
}
else if ($a_obj_id == $this->getCurrentPage())
{
}
$unlocked = false;
if (is_array($this->page_questions[$a_obj_id]))
{
// check questions, if one is failed -> failed
$unlocked = true;
foreach ($this->page_questions[$a_obj_id] as $q_id)
{
if (is_array($this->answer_status[$q_id])
&& $this->answer_status[$q_id]["try"] > 0
&& !$this->answer_status[$q_id]["passed"])
{
if (!$this->answer_status[$q_id]["unlocked"])
{
$unlocked = false;
}
}
}
// check questions, if one is not answered -> in progress
if ($status != ilLMTracker::FAILED)
{
foreach ($this->page_questions[$a_obj_id] as $q_id)
{
if (!is_array($this->answer_status[$q_id])
|| $this->answer_status[$q_id]["try"] == 0)
{
{
}
}
}
$unlocked = false;
}
}
$this->tree_arr["nodes"][$a_obj_id]["unlocked"] = $unlocked;
$this->tree_arr["nodes"][$a_obj_id]["has_pred_incorrect_answers"] = $a_has_pred_incorrect_answers;
$this->tree_arr["nodes"][$a_obj_id]["has_pred_incorrect_not_unlocked_answers"] = $a_has_pred_incorrect_not_unlocked_answers;
}
}
else // free pages (currently not called, since only walking through tree structure)
{
}
$this->tree_arr["nodes"][$a_obj_id]["status"] = $status;
return $status;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilLMTracker::getAllQuestionsCorrect ( )

Have all questoins been answered correctly (and questions exist)?

Returns
bool true, if learning module contains any question and all questions (in the chapter structure) have been answered correctly

Definition at line 391 of file class.ilLMTracker.php.

References loadLMTrackingData().

{
if (count($this->all_questions) > 0 && !$this->has_incorrect_answers)
{
return true;
}
return false;
}

+ Here is the call graph for this function:

ilLMTracker::getBlockedUsersInformation ( )

Get blocked users information.

Parameters
@return

Definition at line 597 of file class.ilLMTracker.php.

References $ilDB, $ilUser, $lng, ilObjUser\_lookupName(), ilLMObject\_lookupTitle(), ilPageQuestionProcessor\getAnswerStatus(), and ilLMPageObject\queryQuestionsOfLearningModule().

{
global $ilDB, $lng, $ilPluginAdmin, $ilUser;
$blocked_users = array();
// load question/pages information
$this->page_questions = array();
$this->all_questions = array();
$page_for_question = array();
include_once("./Modules/LearningModule/classes/class.ilLMPageObject.php");
$q = ilLMPageObject::queryQuestionsOfLearningModule($this->lm_obj_id, "", "", 0, 0);
foreach ($q["set"] as $quest)
{
$this->page_questions[$quest["page_id"]][] = $quest["question_id"];
$this->all_questions[] = $quest["question_id"];
$page_for_question[$quest["question_id"]] = $quest["page_id"];
}
// get question information
include_once("./Modules/TestQuestionPool/classes/class.ilAssQuestionList.php");
$qlist = new ilAssQuestionList($ilDB, $lng, $ilPluginAdmin, 0);
$qlist->addFieldFilter("question_id", $this->all_questions);
$qlist->load();
$qdata = $qlist->getQuestionDataArray();
// load question answer information
include_once("./Services/COPage/classes/class.ilPageQuestionProcessor.php");
$this->answer_status = ilPageQuestionProcessor::getAnswerStatus($this->all_questions);
include_once("./Modules/LearningModule/classes/class.ilLMPageObject.php");
foreach ($this->answer_status as $as)
{
if ($as["try"] >= $qdata[$as["qst_id"]]["nr_of_tries"] && $qdata[$as["qst_id"]]["nr_of_tries"] > 0 && !$as["passed"])
{
//var_dump($qdata[$as["qst_id"]]);
$name = ilObjUser::_lookupName($as["user_id"]);
$as["user_name"] = $name["lastname"].", ".$name["firstname"]." [".$name["login"]."]";
$as["question_text"] = $qdata[$as["qst_id"]]["question_text"];
$as["page_id"] = $page_for_question[$as["qst_id"]];
$as["page_title"] = ilLMPageObject::_lookupTitle($as["page_id"]);
$blocked_users[] = $as;
}
}
return $blocked_users;
}

+ Here is the call graph for this function:

ilLMTracker::getCurrentPage ( )

Get current page.

Returns
id current page id

Definition at line 311 of file class.ilLMTracker.php.

References $current_page_id.

Referenced by determineProgressStatus(), and loadLMTrackingData().

+ Here is the caller graph for this function:

ilLMTracker::getIconForLMObject (   $a_node,
  $a_highlighted_node = 0 
)

Get icon for lm object.

Parameters
array$a_nodenode array
int$a_highlighted_nodecurrent node id
Returns
string image path

Definition at line 538 of file class.ilLMTracker.php.

References COMPLETED, FAILED, ilUtil\getImagePath(), IN_PROGRESS, and loadLMTrackingData().

{
if ($a_node["child"] == $a_highlighted_node)
{
return ilUtil::getImagePath('scorm/running.svg');
}
if (isset($this->tree_arr["nodes"][$a_node["child"]]))
{
switch ($this->tree_arr["nodes"][$a_node["child"]]["status"])
{
return ilUtil::getImagePath('scorm/incomplete.svg');
return ilUtil::getImagePath('scorm/failed.svg');
return ilUtil::getImagePath('scorm/completed.svg');
}
}
return ilUtil::getImagePath('scorm/not_attempted.svg');
}

+ Here is the call graph for this function:

static ilLMTracker::getInstance (   $a_ref_id,
  $a_user_id = 0 
)
static

Get instance.

Parameters
@return

Definition at line 71 of file class.ilLMTracker.php.

References $ilUser.

Referenced by __construct(), ilLMBlockedUsersTableGUI\getBlockedUsers(), and ilLMPresentationGUI\getTracker().

{
global $ilUser;
if ($a_user_id == 0)
{
$a_user_id = $ilUser->getId();
}
if (!isset(self::$instances[$a_ref_id][$a_user_id]))
{
self::$instances[$a_ref_id][$a_user_id] = new ilLMTracker($a_ref_id, false, $a_user_id);
}
return self::$instances[$a_ref_id][$a_user_id];
}

+ Here is the caller graph for this function:

static ilLMTracker::getInstanceByObjId (   $a_obj_id,
  $a_user_id = 0 
)
static

Get instance.

Parameters
@return

Definition at line 93 of file class.ilLMTracker.php.

References $ilUser.

Referenced by ilLPStatusQuestions\_getCompleted(), and ilLPStatusQuestions\determineStatus().

{
global $ilUser;
if ($a_user_id == 0)
{
$a_user_id = $ilUser->getId();
}
if (!isset(self::$instancesbyobj[$a_obj_id][$a_user_id]))
{
self::$instancesbyobj[$a_obj_id][$a_user_id] = new ilLMTracker($a_obj_id, true, $a_user_id);
}
return self::$instancesbyobj[$a_obj_id][$a_user_id];
}

+ Here is the caller graph for this function:

ilLMTracker::hasPredIncorrectAnswers (   $a_obj_id,
  $a_ignore_unlock = false 
)

Has predecessing incorrect answers.

Parameters
int$a_obj_id
Returns
bool true if incorrect/unsanswered questions exist in predecessing pages

Definition at line 568 of file class.ilLMTracker.php.

References $ret, and loadLMTrackingData().

{
$ret = false;
if (is_array($this->tree_arr["nodes"][$a_obj_id]))
{
if ($a_ignore_unlock)
{
$ret = $this->tree_arr["nodes"][$a_obj_id]["has_pred_incorrect_answers"];
}
else
{
$ret = $this->tree_arr["nodes"][$a_obj_id]["has_pred_incorrect_not_unlocked_answers"];
}
}
return $ret;
}

+ Here is the call graph for this function:

ilLMTracker::loadLMTrackingData ( )
protected

Load LM tracking data.

Loaded when needed.

Parameters
@return

Definition at line 322 of file class.ilLMTracker.php.

References $ilDB, ilLMObject\_getAllLMObjectsOfLM(), determineProgressStatus(), ilPageQuestionProcessor\getAnswerStatus(), getCurrentPage(), and ilLMPageObject\queryQuestionsOfLearningModule().

Referenced by getAllQuestionsCorrect(), getIconForLMObject(), and hasPredIncorrectAnswers().

{
global $ilDB;
// we must prevent loading tracking data multiple times during a request where possible
// please note that the dirty flag works only to a certain limit
// e.g. if questions are answered the flag is not set (yet)
// or if pages/chapter are added/deleted the flag is not set
if ($this->loaded_for_node === (int) $this->getCurrentPage() && !$this->dirty)
{
return;
}
$this->loaded_for_node = (int) $this->getCurrentPage();
$this->dirty = false;
// load lm tree in array
$this->tree_arr = array();
$nodes = $this->lm_tree->getSubTree($this->lm_tree->getNodeData($this->lm_tree->readRootId()));
foreach ($nodes as $node)
{
$this->tree_arr["childs"][$node["parent"]][] = $node;
$this->tree_arr["parent"][$node["child"]] = $node["parent"];
$this->tree_arr["nodes"][$node["child"]] = $node;
}
// load all lm obj ids of learning module
include_once("./Modules/LearningModule/classes/class.ilLMObject.php");
$this->lm_obj_ids = ilLMObject::_getAllLMObjectsOfLM($this->lm_obj_id);
// load read event data
$this->re_arr = array();
$set = $ilDB->query("SELECT * FROM lm_read_event ".
" WHERE ".$ilDB->in("obj_id", $this->lm_obj_ids, false, "integer").
" AND usr_id = ".$ilDB->quote($this->user_id, "integer"));
while ($rec = $ilDB->fetchAssoc($set))
{
$this->re_arr[$rec["obj_id"]] = $rec;
}
// load question/pages information
$this->page_questions = array();
$this->all_questions = array();
include_once("./Modules/LearningModule/classes/class.ilLMPageObject.php");
$q = ilLMPageObject::queryQuestionsOfLearningModule($this->lm_obj_id, "", "", 0, 0);
foreach ($q["set"] as $quest)
{
$this->page_questions[$quest["page_id"]][] = $quest["question_id"];
$this->all_questions[] = $quest["question_id"];
}
// load question answer information
include_once("./Services/COPage/classes/class.ilPageQuestionProcessor.php");
$this->answer_status = ilPageQuestionProcessor::getAnswerStatus($this->all_questions, $this->user_id);
$this->has_incorrect_answers = false;
$has_pred_incorrect_answers = false;
$has_pred_incorrect_not_unlocked_answers = false;
$this->determineProgressStatus($this->lm_tree->readRootId(), $has_pred_incorrect_answers, $has_pred_incorrect_not_unlocked_answers);
$this->has_incorrect_answers = $has_pred_incorrect_answers;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilLMTracker::setCurrentPage (   $a_val)

Set current page.

Parameters
id$a_valcurrent page id

Definition at line 301 of file class.ilLMTracker.php.

{
$this->current_page_id = $a_val;
}
ilLMTracker::trackAccess (   $a_page_id)

Track access to lm page.

Parameters
int$a_page_idpage id

Definition at line 118 of file class.ilLMTracker.php.

References ilLearningProgress\_tracProgress(), ilLPStatusWrapper\_updateStatus(), trackLastPageAccess(), and trackPageAndChapterAccess().

{
if ($this->lm_ref_id == 0)
{
die("ilLMTracker: No Ref Id given.");
}
// track page and chapter access
$this->trackPageAndChapterAccess($a_page_id);
// track last page access (must be done after calling trackPageAndChapterAccess())
$this->trackLastPageAccess($this->user_id, $this->lm_ref_id, $a_page_id);
// #9483
// general learning module lp tracking
include_once("./Services/Tracking/classes/class.ilLearningProgress.php");
ilLearningProgress::_tracProgress($this->user_id, $this->lm_obj_id,
$this->lm_ref_id, "lm");
// obsolete?
include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
ilLPStatusWrapper::_updateStatus($this->lm_obj_id, $this->user_id);
// mark currently loaded data as dirty to force reload if necessary
$this->dirty = true;
}

+ Here is the call graph for this function:

ilLMTracker::trackLastPageAccess (   $usr_id,
  $lm_id,
  $obj_id 
)

Track last accessed page for a learning module.

Parameters
int$usr_iduser id
int$lm_idlearning module id
int$obj_idpage id

Definition at line 152 of file class.ilLMTracker.php.

References $ilDB.

Referenced by trackAccess().

{
global $ilDB;
// first check if an entry for this user and this lm already exist, when so, delete
$q = "DELETE FROM lo_access ".
"WHERE usr_id = ".$ilDB->quote((int) $usr_id, "integer")." ".
"AND lm_id = ".$ilDB->quote((int) $lm_id, "integer");
$ilDB->manipulate($q);
$title = "";
$q = "INSERT INTO lo_access ".
"(timestamp,usr_id,lm_id,obj_id,lm_title) ".
"VALUES ".
"(".$ilDB->now().",".
$ilDB->quote((int) $usr_id, "integer").",".
$ilDB->quote((int) $lm_id, "integer").",".
$ilDB->quote((int) $obj_id, "integer").",".
$ilDB->quote($title, "text").")";
$ilDB->manipulate($q);
}

+ Here is the caller graph for this function:

ilLMTracker::trackPageAndChapterAccess (   $a_page_id)
protected

Track page and chapter access.

Definition at line 179 of file class.ilLMTracker.php.

References $ilDB, $res, $row, ilObjUserTracking\_getValidTimeSpan(), IL_CAL_DATETIME, and IL_CAL_UNIX.

Referenced by trackAccess().

{
global $ilDB;
$now = time();
//
// 1. Page access: current page
//
$set = $ilDB->query("SELECT obj_id FROM lm_read_event".
" WHERE obj_id = ".$ilDB->quote($a_page_id, "integer").
" AND usr_id = ".$ilDB->quote($this->user_id, "integer"));
if (!$ilDB->fetchAssoc($set))
{
$fields = array(
"obj_id" => array("integer", $a_page_id),
"usr_id" => array("integer", $this->user_id)
);
// $ilDB->insert("lm_read_event", $fields);
$ilDB->replace("lm_read_event", $fields, array()); // #15144
}
// update all parent chapters
$ilDB->manipulate("UPDATE lm_read_event SET".
" read_count = read_count + 1 ".
" , last_access = ".$ilDB->quote($now, "integer").
" WHERE obj_id = ".$ilDB->quote($a_page_id, "integer").
" AND usr_id = ".$ilDB->quote($this->user_id, "integer"));
//
// 2. Chapter access: based on last page accessed
//
// get last accessed page
$set = $ilDB->query("SELECT * FROM lo_access WHERE ".
"usr_id = ".$ilDB->quote($this->user_id, "integer")." AND ".
"lm_id = ".$ilDB->quote($this->lm_ref_id, "integer"));
$res = $ilDB->fetchAssoc($set);
if($res["obj_id"])
{
include_once('Services/Tracking/classes/class.ilObjUserTracking.php');
$pg_ts = new ilDateTime($res["timestamp"], IL_CAL_DATETIME);
$pg_ts = $pg_ts->get(IL_CAL_UNIX);
$pg_id = $res["obj_id"];
if(!$this->lm_tree->isInTree($pg_id))
{
return;
}
$time_diff = $read_diff = 0;
// spent_seconds or read_count ?
if (($now-$pg_ts) <= $valid_timespan)
{
$time_diff = $now-$pg_ts;
}
else
{
$read_diff = 1;
}
// find parent chapter(s) for that page
$parent_st_ids = array();
foreach($this->lm_tree->getPathFull($pg_id) as $item)
{
if($item["type"] == "st")
{
$parent_st_ids[] = $item["obj_id"];
}
}
if($parent_st_ids && ($time_diff || $read_diff))
{
// get existing chapter entries
$ex_st = array();
$set = $ilDB->query("SELECT obj_id FROM lm_read_event".
" WHERE ".$ilDB->in("obj_id", $parent_st_ids, "", "integer").
" AND usr_id = ".$ilDB->quote($this->user_id, "integer"));
while($row = $ilDB->fetchAssoc($set))
{
$ex_st[] = $row["obj_id"];
}
// add missing chapter entries
$missing_st = array_diff($parent_st_ids, $ex_st);
if(sizeof($missing_st))
{
foreach($missing_st as $st_id)
{
$fields = array(
"obj_id" => array("integer", $st_id),
"usr_id" => array("integer", $this->user_id)
);
// $ilDB->insert("lm_read_event", $fields);
$ilDB->replace("lm_read_event", $fields, array()); // #15144
}
}
// update all parent chapters
$ilDB->manipulate("UPDATE lm_read_event SET".
" read_count = read_count + ".$ilDB->quote($read_diff, "integer").
" , spent_seconds = spent_seconds + ".$ilDB->quote($time_diff, "integer").
" , last_access = ".$ilDB->quote($now, "integer").
" WHERE ".$ilDB->in("obj_id", $parent_st_ids, "", "integer").
" AND usr_id = ".$ilDB->quote($this->user_id, "integer"));
}
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Field Documentation

ilLMTracker::$all_questions = array()
protected

Definition at line 29 of file class.ilLMTracker.php.

ilLMTracker::$answer_status = array()
protected

Definition at line 30 of file class.ilLMTracker.php.

ilLMTracker::$current_page_id = 0
protected

Definition at line 32 of file class.ilLMTracker.php.

Referenced by getCurrentPage().

ilLMTracker::$dirty = false
protected

Definition at line 27 of file class.ilLMTracker.php.

ilLMTracker::$has_incorrect_answers = false
protected

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

ilLMTracker::$instances = array()
static

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

ilLMTracker::$instancesbyobj = array()
static

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

ilLMTracker::$lm_obj_id
protected

Definition at line 21 of file class.ilLMTracker.php.

ilLMTracker::$lm_obj_ids = array()
protected

Definition at line 23 of file class.ilLMTracker.php.

ilLMTracker::$lm_ref_id
protected

Definition at line 20 of file class.ilLMTracker.php.

ilLMTracker::$lm_tree
protected

Definition at line 22 of file class.ilLMTracker.php.

ilLMTracker::$loaded_for_node = false
protected

Definition at line 26 of file class.ilLMTracker.php.

ilLMTracker::$page_questions = array()
protected

Definition at line 28 of file class.ilLMTracker.php.

ilLMTracker::$re_arr = array()
protected

Definition at line 25 of file class.ilLMTracker.php.

ilLMTracker::$tree_arr = array()
protected

Definition at line 24 of file class.ilLMTracker.php.

const ilLMTracker::COMPLETED = 2

Definition at line 16 of file class.ilLMTracker.php.

Referenced by determineProgressStatus(), and getIconForLMObject().

const ilLMTracker::CURRENT = 99

Definition at line 18 of file class.ilLMTracker.php.

Referenced by determineProgressStatus().

const ilLMTracker::FAILED = 3

Definition at line 17 of file class.ilLMTracker.php.

Referenced by determineProgressStatus(), and getIconForLMObject().

const ilLMTracker::IN_PROGRESS = 1

Definition at line 15 of file class.ilLMTracker.php.

Referenced by determineProgressStatus(), and getIconForLMObject().

const ilLMTracker::NOT_ATTEMPTED = 0

Definition at line 14 of file class.ilLMTracker.php.

Referenced by determineProgressStatus().


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