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); } } } }