/** * Determine status * * @param integer object id * @param integer user id * @param object object (optional depends on object type) * @return integer status */ function determineStatus($a_obj_id, $a_user_id, $a_obj = null) { global $ilObjDataCache, $ilDB, $ilLog; include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php"; $scorm_status = ilSCORM2004Tracking::_getProgressInfoOfUser($a_obj_id, $a_user_id); $status = LP_STATUS_NOT_ATTEMPTED_NUM; switch ($scorm_status) { case "in_progress": $status = LP_STATUS_IN_PROGRESS_NUM; break; case "completed": $status = LP_STATUS_COMPLETED_NUM; break; case "failed": $status = LP_STATUS_FAILED_NUM; break; } return $status; }
function getStatus($a_packageId, $a_user_id, $auto_last_visited, $scormType = "1.2") { global $ilDB; include_once './Services/Tracking/classes/class.ilLPStatus.php'; $oldStatus = ilLPStatus::_lookupStatus($a_packageId, $a_user_id); $status['saved_global_status'] = (int) $oldStatus; include_once './Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance($a_packageId); $status['lp_mode'] = $olp->getCurrentMode(); $collection = $olp->getCollectionInstance(); if ($collection) { $status['scos'] = $collection->getItems(); } else { $status['scos'] = array(); } $status['hash'] = ilObjSCORMInitData::setHash($a_packageId, $a_user_id); $status['p'] = $a_user_id; $status['last_visited'] = null; $status['total_time_sec'] = 0; $val_set = $ilDB->queryF('SELECT last_visited, sco_total_time_sec, total_time_sec FROM sahs_user WHERE obj_id = %s AND user_id = %s', array('integer', 'integer'), array($a_packageId, $a_user_id)); $val_rec = $ilDB->fetchAssoc($val_set); if ($auto_last_visited) { $status['last_visited'] = $val_rec["last_visited"]; } if ($val_rec["total_time_sec"] == null) { if ($val_rec["sco_total_time_sec"] == null) { //fall back for old ILIAS-Versions if ($scormType == "2004") { include_once './Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php'; $status['total_time_sec'] = (int) ilSCORM2004Tracking::getSumTotalTimeSecondsFromScos($a_packageId, $a_user_id, true); } } else { $status['total_time_sec'] = (int) $val_rec["sco_total_time_sec"]; } } else { $status['total_time_sec'] = (int) $val_rec["total_time_sec"]; } return $status; }
function refreshStatus($a_obj_id) { parent::refreshStatus($a_obj_id); // this is restricted to SCOs in the current collection include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; $in_progress = ilLPStatusWrapper::_getInProgress($a_obj_id); $completed = ilLPStatusWrapper::_getCompleted($a_obj_id); $failed = ilLPStatusWrapper::_getFailed($a_obj_id); $all_active_users = array_unique(array_merge($in_progress, $completed, $failed)); // get all tracked users regardless of SCOs include_once './Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php'; $subtype = ilObjSAHSLearningModule::_lookupSubType($a_obj_id); if ($subtype != "scorm2004") { include_once "./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMTracking.php"; $all_tracked_users = ilObjSCORMTracking::_getTrackedUsers($a_obj_id); } else { include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php"; $all_tracked_users = ilSCORM2004Tracking::_getTrackedUsers($a_obj_id); } $not_attempted_users = array_diff($all_tracked_users, $all_active_users); unset($all_tracked_users); unset($all_active_users); // reset all users which have no data for the current SCOs if ($not_attempted_users) { foreach ($not_attempted_users as $usr_id) { // this will update any (parent) collections if necessary ilLPStatus::writeStatus($a_obj_id, $usr_id, self::LP_STATUS_NOT_ATTEMPTED_NUM, 0); } } }
public function scormPlayerUnload() { global $ilUser; $data = json_decode(is_string($data) ? $data : file_get_contents('php://input')); if ($data && is_string($data) && $data != "") { $this->set_last_visited($this->packageId, $this->userId, $data); } include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php"; ilSCORM2004Tracking::_syncReadEvent($this->packageId, $this->userId, "sahs", $this->ref_id); header('Content-Type: text/plain; charset=UTF-8'); print ""; }
public function syncGlobalStatus($userId, $packageId, $data, $new_global_status, $time_from_lms) { global $ilDB, $ilLog; $saved_global_status = $data->saved_global_status; $ilLog->write("saved_global_status=" . $saved_global_status); //update percentage_completed, sco_total_time_sec,status in sahs_user $totalTime = (int) $data->totalTimeCentisec; $totalTime = round($totalTime / 100); $ilDB->queryF('UPDATE sahs_user SET sco_total_time_sec=%s, status=%s, percentage_completed=%s WHERE obj_id = %s AND user_id = %s', array('integer', 'integer', 'integer', 'integer', 'integer'), array($totalTime, $new_global_status, $data->percentageCompleted, $packageId, $userId)); self::ensureObjectDataCacheExistence(); global $ilObjDataCache; // update learning progress if ($new_global_status != null) { //could only happen when synchronising from SCORM Offline Player include_once "./Services/Tracking/classes/class.ilObjUserTracking.php"; include_once "./Services/Tracking/classes/class.ilLPStatus.php"; ilLPStatus::writeStatus($packageId, $userId, $new_global_status, $data->percentageCompleted); // here put code for soap to MaxCMS e.g. when if($saved_global_status != $new_global_status) } // sync access number and time in read event table if ($time_from_lms == false) { include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php"; ilSCORM2004Tracking::_syncReadEvent($packageId, $userId, "sahs", (int) $_GET['ref_id'], $time_from_lms); } //end sync access number and time in read event table return true; }