/**
  * 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;
 }