function getObjectsStatusForUser($a_user_id, array $obj_refs) { global $ilDB; if (sizeof($obj_refs)) { $obj_ids = array_keys($obj_refs); self::refreshObjectsStatus($obj_ids, array($a_user_id)); include_once "Services/Tracking/classes/class.ilLPObjSettings.php"; include_once "Services/Tracking/classes/class.ilLPStatus.php"; // prepare object view modes include_once 'Modules/Course/classes/class.ilObjCourse.php'; $view_modes = array(); $query = "SELECT obj_id, view_mode FROM crs_settings" . " WHERE " . $ilDB->in("obj_id", $obj_ids, false, "integer"); $set = $ilDB->query($query); while ($rec = $ilDB->fetchAssoc($set)) { $view_modes[(int) $rec["obj_id"]] = (int) $rec["view_mode"]; } $sessions = self::getSessionData($a_user_id, $obj_ids); $query = "SELECT object_data.obj_id, title, CASE WHEN status IS NULL THEN " . LP_STATUS_NOT_ATTEMPTED_NUM . " ELSE status END AS status," . " status_changed, percentage, read_count+childs_read_count AS read_count, spent_seconds+childs_spent_seconds AS spent_seconds," . " u_mode, type, visits, mark, u_comment" . " FROM object_data" . " LEFT JOIN ut_lp_settings ON (ut_lp_settings.obj_id = object_data.obj_id)" . " LEFT JOIN read_event ON (read_event.obj_id = object_data.obj_id AND read_event.usr_id = " . $ilDB->quote($a_user_id, "integer") . ")" . " LEFT JOIN ut_lp_marks ON (ut_lp_marks.obj_id = object_data.obj_id AND ut_lp_marks.usr_id = " . $ilDB->quote($a_user_id, "integer") . ")" . " WHERE " . $ilDB->in("object_data.obj_id", $obj_ids, false, "integer") . " ORDER BY title"; $set = $ilDB->query($query); $result = array(); while ($rec = $ilDB->fetchAssoc($set)) { $rec["comment"] = $rec["u_comment"]; unset($rec["u_comment"]); $rec["ref_ids"] = $obj_refs[(int) $rec["obj_id"]]; $rec["status"] = (int) $rec["status"]; $rec["percentage"] = (int) $rec["percentage"]; $rec["read_count"] = (int) $rec["read_count"]; $rec["spent_seconds"] = (int) $rec["spent_seconds"]; $rec["u_mode"] = (int) $rec["u_mode"]; if ($rec["type"] == "sess") { $session = $sessions[$rec["obj_id"]]; $rec["title"] = $session["title"]; // $rec["status"] = (int)$session["status"]; } // lp mode might not match object/course view mode if ($rec["type"] == "crs" && $view_modes[$rec["obj_id"]] == IL_CRS_VIEW_OBJECTIVE) { $rec["u_mode"] = LP_MODE_OBJECTIVES; } else { if (!$rec["u_mode"]) { $rec["u_mode"] = ilLPObjSettings::__getDefaultMode($rec["obj_id"], $rec["type"]); } } // can be default mode if (true) { $result[] = $rec; } } return $result; } }
function &_getInstance($a_obj_id, $a_mode = NULL) { include_once 'Services/Tracking/classes/class.ilLPObjSettings.php'; if ($a_mode === NULL) { $a_mode = ilLPObjSettings::_lookupMode($a_obj_id); } switch ($a_mode) { case LP_MODE_VISITS: include_once 'Services/Tracking/classes/class.ilLPStatusVisits.php'; return new ilLPStatusVisits($a_obj_id); case LP_MODE_COLLECTION: include_once 'Services/Tracking/classes/class.ilLPStatusCollection.php'; return new ilLPStatusCollection($a_obj_id); case LP_MODE_TLT: include_once 'Services/Tracking/classes/class.ilLPStatusTypicalLearningTime.php'; return new ilLPStatusTypicalLearningTime($a_obj_id); case LP_MODE_SCORM: include_once 'Services/Tracking/classes/class.ilLPStatusSCORM.php'; return new ilLPStatusSCORM($a_obj_id); case LP_MODE_TEST_FINISHED: include_once 'Services/Tracking/classes/class.ilLPStatusTestFinished.php'; return new ilLPStatusTestFinished($a_obj_id); case LP_MODE_TEST_PASSED: include_once 'Services/Tracking/classes/class.ilLPStatusTestPassed.php'; return new ilLPStatusTestPassed($a_obj_id); case LP_MODE_MANUAL: include_once 'Services/Tracking/classes/class.ilLPStatusManual.php'; return new ilLPStatusManual($a_obj_id); case LP_MODE_MANUAL_BY_TUTOR: include_once 'Services/Tracking/classes/class.ilLPStatusManualByTutor.php'; return new ilLPStatusManualByTutor($a_obj_id); case LP_MODE_EXERCISE_RETURNED: include_once 'Services/Tracking/classes/class.ilLPStatusExerciseReturned.php'; return new ilLPStatusExerciseReturned($a_obj_id); case LP_MODE_OBJECTIVES: include_once 'Services/Tracking/classes/class.ilLPStatusObjectives.php'; return new ilLPStatusObjectives($a_obj_id); case LP_MODE_EVENT: include_once 'Services/Tracking/classes/class.ilLPStatusEvent.php'; return new ilLPStatusEvent($a_obj_id); case LP_MODE_PLUGIN: include_once 'Services/Tracking/classes/class.ilLPStatusPlugin.php'; return new ilLPStatusEvent($a_obj_id); case LP_MODE_UNDEFINED: $type = ilObject::_lookupType($a_obj_id); $mode = ilLPObjSettings::__getDefaultMode($a_obj_id, $type); if ($mode != LP_MODE_UNDEFINED) { return self::_getInstance($a_obj_id, $mode); } // fallthrough // fallthrough default: echo "ilLPStatusFactory: unknown type " . ilLPObjSettings::_lookupMode($a_obj_id); exit; } }
function _lookupMode($a_obj_id) { global $ilDB, $ilObjDataCache; if (isset(self::$mode_by_obj_id[$a_obj_id])) { return self::$mode_by_obj_id[$a_obj_id]; } if (ilLPObjSettings::_checkObjectives($a_obj_id)) { self::$mode_by_obj_id[$a_obj_id] = LP_MODE_OBJECTIVES; return LP_MODE_OBJECTIVES; } if (ilLPObjSettings::_checkSCORMPreconditions($a_obj_id)) { self::$mode_by_obj_id[$a_obj_id] = LP_MODE_SCORM; return LP_MODE_SCORM; } $query = "SELECT u_mode FROM ut_lp_settings " . "WHERE obj_id = " . $ilDB->quote($a_obj_id, 'integer'); $res = $ilDB->query($query); while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) { self::$mode_by_obj_id[$a_obj_id] = $row->u_mode; return $row->u_mode; } // no db entry exists => return default mode by type $def_mode = ilLPObjSettings::__getDefaultMode($a_obj_id, $ilObjDataCache->lookupType($a_obj_id)); self::$mode_by_obj_id[$a_obj_id] = $def_mode; return $def_mode; }