Esempio n. 1
0
 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);
         }
     }
 }
 /**
  * Prepare For a Regrade of a Rubric
  * @param $obj_id
  * @param $usr_id
  * @return bool
  */
 public static function _prepareForRegrade($obj_id, $usr_id)
 {
     global $ilDB, $ilUser;
     $delete_date = date("Y-m-d H:i:s");
     //try and set deleted on any criteria in rubric_data table where deleted is not null.
     $affected_rows = $ilDB->manipulate("UPDATE rubric_data d INNER JOIN rubric r on d.rubric_id = r.rubric_id SET d.deleted =\r\n                                            " . $ilDB->quote($delete_date, "timestamp") . " WHERE d.deleted IS NULL AND d.usr_id = " . $ilDB->quote($usr_id, "integer") . " AND r.obj_id = " . $ilDB->quote($obj_id, "integer"));
     if ($affected_rows > 0) {
         //there was a mark prior, we should proceed with preparing things for a regrade.
         include_once 'Services/Tracking/classes/class.ilLPMarks.php';
         include_once "./Modules/Exercise/classes/class.ilExAssignment.php";
         include_once "./Services/Tracking/classes/class.ilLPStatus.php";
         //grab everything from ut_lp_marks for the users obj_id and usr_id, that way we can save it for our own use.
         $marks = new ilLPMarks($obj_id, $usr_id);
         $status = ilLPStatus::_lookupStatus($obj_id, $usr_id);
         $completed = $marks->getCompleted();
         $mark = $marks->getMark();
         $comments = $marks->getComment();
         //Save the UT LP marks for this object. We're using Delete Date for the Create Date so we can inner join to the delete up above so we have a
         //record of all marks.
         $id = $ilDB->nextID('rubric_grade_hist');
         $ilDB->manipulateF("INSERT INTO rubric_grade_hist(rubric_history_id,rubric_id,obj_id,usr_id,status,mark,completed,comments,owner,create_date,last_update) VALUES " . " (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", array("integer", "integer", "integer", "integer", "integer", "float", "integer", "text", "integer", "date", "date"), array($id, self::_lookupRubricId($obj_id), $obj_id, $usr_id, $status, $mark, $completed, $comments, $ilUser->getId(), $delete_date, $delete_date));
         //now that a record is saved delete it from marks, status and exercise.
         $marks->_deleteForUsers($obj_id, array($usr_id));
         ilLPStatus::writeStatus($obj_id, $usr_id, ilLPStatus::LP_STATUS_IN_PROGRESS_NUM);
         //Remove from Ex Assignment
         $ass_id = array_shift(ilExAssignment::getAssignmentDataOfExercise($obj_id));
         $assignment = new ilExAssignment($ass_id['id']);
         $assignment->updateMarkOfUser($ass_id['id'], $usr_id, '');
         $assignment->updateStatusOfUser($ass_id['id'], $usr_id, 'notgraded');
         return true;
     } else {
         //there were no marks to begin with OR this was already marked for regrade, so go no further.
         return false;
     }
 }
 public function syncGlobalStatus($userId, $packageId, $data, $new_global_status)
 {
     global $ilDB, $ilLog;
     $saved_global_status = $data->saved_global_status;
     $ilLog->write("saved_global_status=" . $saved_global_status);
     // sync access number and time in read event table
     //include_once("./Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php");
     //ilSCORM2004Tracking::_syncReadEvent($packageId, $userId, "sahs", $a_ref_id);
     // get attempts
     if (!$data->packageAttempts) {
         $val_set = $ilDB->queryF('SELECT package_attempts FROM sahs_user WHERE obj_id = %s AND user_id = %s', array('integer', 'integer'), array($packageId, $userId));
         $val_rec = $ilDB->fetchAssoc($val_set);
         $attempts = $val_rec["package_attempts"];
     } else {
         $attempts = $data->packageAttempts;
     }
     if ($attempts == null) {
         $attempts = "";
     }
     //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, package_attempts=%s WHERE obj_id = %s AND user_id = %s', array('integer', 'integer', 'integer', 'integer', 'integer', 'integer'), array($totalTime, $new_global_status, $data->percentageCompleted, $attempts, $packageId, $userId));
     self::ensureObjectDataCacheExistence();
     global $ilObjDataCache;
     include_once "./Services/Tracking/classes/class.ilChangeEvent.php";
     ilChangeEvent::_recordReadEvent("sahs", (int) $_GET['ref_id'], $packageId, $userId, false, $attempts, $totalTime);
     //end sync access number and time in read event table
     // if($saved_global_status != $new_global_status)
     // {
     // update learning progress
     //			include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
     //			ilLPStatusWrapper::_updateStatus($packageId, $userId);
     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)
     // }
     return true;
 }
 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;
 }
 function __updateUserRubric($user_id, $obj_id, $passing_grade_minimum)
 {
     $form = $this->initEditUserForm($user_id, $obj_id);
     if ($form->checkInput()) {
         include_once 'Services/Tracking/classes/class.ilLPMarks.php';
         $marks = new ilLPMarks($obj_id, $user_id);
         $marks->setMark($form->getInput("mark"));
         $marks->setComment($form->getInput("comment"));
         $marks->setCompleted(1);
         $do_lp = true;
         $marks->update();
         // if assignment, updated exc_mem_ass_status
         $obj_type = ilObject::_lookupType($obj_id);
         if ($obj_type == 'exc') {
             include_once "./Modules/Exercise/classes/class.ilExAssignment.php";
             // do we have an ass id?
             $ass_id = 0;
             if (isset($_GET['ass_id'])) {
                 // yes, came from submission and grades
                 $ass_id = $_GET['ass_id'];
             } else {
                 // no, we need to get it
                 $ass_ids = ilExAssignment::getAssignmentDataOfExercise($obj_id);
                 $ass_id = $ass_ids[0]['id'];
             }
             if ($marks->getMark() >= $passing_grade_minimum) {
                 ilExAssignment::updateStatusOfUser($ass_id, $user_id, 'passed');
             } else {
                 ilExAssignment::updateStatusOfUser($ass_id, $user_id, 'failed');
             }
             ilExAssignment::updateMarkOfUser($ass_id, $user_id, $marks->getMark());
         } else {
             include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php";
             ilLPStatusWrapper::_updateStatus($obj_id, $user_id);
         }
         include_once "./Services/Tracking/classes/class.ilLPStatus.php";
         if ($marks->getMark() >= $passing_grade_minimum) {
             ilLPStatus::writeStatus($obj_id, $user_id, ilLPStatus::LP_STATUS_COMPLETED_NUM, false, true);
         } else {
             ilLPStatus::writeStatus($obj_id, $user_id, ilLPStatus::LP_STATUS_FAILED_NUM, false, true);
         }
     }
 }
 /**
  * Refresh status
  *
  * @param
  * @return
  */
 function refreshStatus($a_obj_id, $a_users = null)
 {
     include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php";
     $not_attempted = ilLPStatusWrapper::_getNotAttempted($a_obj_id);
     foreach ($not_attempted as $user_id) {
         $percentage = $this->determinePercentage($a_obj_id, $user_id);
         ilLPStatus::writeStatus($a_obj_id, $user_id, LP_STATUS_NOT_ATTEMPTED_NUM, $percentage, true);
     }
     $in_progress = ilLPStatusWrapper::_getInProgress($a_obj_id);
     foreach ($in_progress as $user_id) {
         $percentage = $this->determinePercentage($a_obj_id, $user_id);
         ilLPStatus::writeStatus($a_obj_id, $user_id, LP_STATUS_IN_PROGRESS_NUM, $percentage, true);
     }
     $completed = ilLPStatusWrapper::_getCompleted($a_obj_id);
     foreach ($completed as $user_id) {
         $percentage = $this->determinePercentage($a_obj_id, $user_id);
         ilLPStatus::writeStatus($a_obj_id, $user_id, LP_STATUS_COMPLETED_NUM, $percentage, true);
     }
     $failed = ilLPStatusWrapper::_getFailed($a_obj_id);
     foreach ($failed as $user_id) {
         $percentage = $this->determinePercentage($a_obj_id, $user_id);
         ilLPStatus::writeStatus($a_obj_id, $user_id, LP_STATUS_FAILED_NUM, $percentage, true);
     }
     if ($a_users) {
         $missing_users = array_diff($a_users, $not_attempted + $in_progress + $completed + $failed);
         if ($missing_users) {
             foreach ($missing_users as $user_id) {
                 ilLPStatusWrapper::_updateStatus($a_obj_id, $user_id);
             }
         }
     }
 }