/** * update question result of run * @param ilTestSession $session * @param assQuestion $qst */ protected function updateQuestionResult(ilTestSession $session, assQuestion $qst) { foreach ($this->run as $run) { if ($run->questionExists($qst->getId())) { $GLOBALS['ilLog']->write(__METHOD__ . ': reached points are ' . $qst->getReachedPoints($session->getActiveId(), $session->getPass())); $run->setQuestionResult($qst->getId(), $qst->getReachedPoints($session->getActiveId(), $session->getPass())); $run->update(); $res = $run->getResult(); include_once './Modules/Course/classes/Objectives/class.ilLOUserResults.php'; include_once './Modules/Course/classes/Objectives/class.ilLOUtils.php'; $old_result = ilLOUserResults::lookupResult($this->container_id, $this->user_id, $run->getObjectiveId(), $this->getSettings()->getQualifiedTest() == $session->getRefId() ? ilLOUserResults::TYPE_QUALIFIED : ilLOUserResults::TYPE_INITIAL); $ur = new ilLOUserResults($this->container_id, $this->user_id); $ur->saveObjectiveResult($run->getObjectiveId(), $this->getSettings()->getQualifiedTest() == $session->getRefId() ? ilLOUserResults::TYPE_QUALIFIED : ilLOUserResults::TYPE_INITIAL, ilLOUtils::isCompleted($this->container_id, $session->getRefId(), $run->getObjectiveId(), $res['max'], $res['reached'], $old_result['limit_perc']) ? ilLOUserResults::STATUS_COMPLETED : ilLOUserResults::STATUS_FAILED, (int) $res['percentage'], $old_result['limit_perc'], $old_result['tries'], $old_result['is_final']); $GLOBALS['ilLog']->write(__METHOD__ . ': ' . print_r($run->getResult(), true)); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->container_id, $this->user_id); } } return false; }
/** * Confirmed tracking deletion * * @todo alex, 14 Apr.: This does not confirm to our guidelines, please move DB access to application class */ function confirmedDeleteTracking() { global $ilDB, $ilUser; $scos = array(); //get all SCO's of this object $val_set = $ilDB->queryF(' SELECT cp_node_id FROM cp_node WHERE nodename = %s AND cp_node.slm_id = %s', array('text', 'integer'), array('item', $this->object->getId())); while ($val_rec = $ilDB->fetchAssoc($val_set)) { array_push($scos, $val_rec['cp_node_id']); } foreach ($_POST["user"] as $user) { foreach ($scos as $sco) { $ret = $ilDB->manipulateF(' DELETE FROM cmi_node WHERE user_id = %s AND cp_node_id = %s', array('integer', 'integer'), array($user, $sco)); } include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->object->getId(), $user); } $this->ctrl->redirect($this, "showTrackingItems"); }
function __updatePassed($a_user_id, $objective_ids) { global $ilDB; $passed = array(); $query = "SELECT COUNT(t1.crs_id) num,t1.crs_id FROM crs_objectives t1 " . "JOIN crs_objectives t2 WHERE t1.crs_id = t2.crs_id and " . $ilDB->in('t1.objective_id', $objective_ids, false, 'integer') . " " . "GROUP BY t1.crs_id"; $res = $ilDB->query($query); $crs_ids = array(); while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) { $query = "SELECT COUNT(cs.objective_id) num_passed FROM crs_objective_status cs " . "JOIN crs_objectives co ON cs.objective_id = co.objective_id " . "WHERE crs_id = " . $ilDB->quote($row->crs_id, 'integer') . " " . "AND user_id = " . $ilDB->quote($a_user_id, 'integer') . " "; $user_res = $ilDB->query($query); while ($user_row = $user_res->fetchRow(DB_FETCHMODE_OBJECT)) { if ($user_row->num_passed == $row->num) { $passed[] = $row->crs_id; } } $crs_ids[$row->crs_id] = $row->crs_id; } if (count($passed)) { foreach ($passed as $crs_id) { include_once 'Modules/Course/classes/class.ilCourseParticipants.php'; $members = ilCourseParticipants::_getInstanceByObjId($crs_id); $members->updatePassed($a_user_id, true); } } // update tracking status foreach ($crs_ids as $cid) { include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($cid, $a_user_id); } }
/** * Increases attempts by one and saves module_version for this package */ function increase_attemptAndsave_module_version() { global $ilDB, $ilUser; $res = $ilDB->queryF('SELECT package_attempts,count(*) cnt FROM sahs_user WHERE obj_id = %s AND user_id = %s', array('integer', 'integer'), array($this->slm->getId(), $ilUser->getId())); $val_rec = $ilDB->fetchAssoc($res); if ($val_rec["cnt"] == 0) { //offline_mode could be inserted $attempts = 1; $ilDB->manipulateF('INSERT INTO sahs_user (obj_id,user_id,package_attempts,module_version,last_access) VALUES(%s,%s,%s,%s,%s)', array('integer', 'integer', 'integer', 'integer', 'timestamp'), array($this->slm->getId(), $ilUser->getId(), $attempts, $this->slm->getModuleVersion(), date('Y-m-d H:i:s'))); } else { $attempts = $val_rec["package_attempts"]; if ($attempts == null) { $attempts = 0; } $attempts++; $ilDB->manipulateF('UPDATE sahs_user SET package_attempts = %s, module_version = %s, last_access=%s WHERE obj_id = %s AND user_id = %s ', array('integer', 'integer', 'timestamp', 'integer', 'integer'), array($attempts, $this->slm->getModuleVersion(), date('Y-m-d H:i:s'), $this->slm->getId(), $ilUser->getId())); } //only SCORM 1.2, not 2004 include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->slm->getId(), $ilUser->getId()); }
function _unregister($a_usr_id, $a_event_id) { global $ilDB; $query = "SELECT * FROM event_participants " . "WHERE event_id = " . $ilDB->quote($a_event_id, 'integer') . " " . "AND usr_id = " . $ilDB->quote($a_usr_id, 'integer') . " "; $res = $ilDB->query($query); if ($res->numRows()) { $query = "UPDATE event_participants " . "SET registered = 0 " . "WHERE event_id = " . $ilDB->quote($a_event_id, 'integer') . " " . "AND usr_id = " . $ilDB->quote($a_usr_id, 'integer') . " "; $res = $ilDB->manipulate($query); } else { $query = "INSERT INTO event_participants (registered,participated,event_id,usr_id) " . "VALUES( " . "0, " . "0, " . $ilDB->quote($a_event_id, 'integer') . ", " . $ilDB->quote($a_usr_id, 'integer') . " " . ")"; $res = $ilDB->manipulate($query); } // refresh learning progress status after updating participant include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($a_event_id, $a_usr_id); return true; }
function __updateUser($user_id, $obj_id) { $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")); $do_lp = false; // status/completed is optional $status = $form->getItemByPostVar("completed"); if (is_object($status)) { if ($marks->getCompleted() != $form->getInput("completed")) { $marks->setCompleted($form->getInput("completed")); $do_lp = true; } } $marks->update(); // #11600 if ($do_lp) { include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($obj_id, $user_id); } } }
/** * This method is called after an user submitted one or more files. * It should handle the setting "Completion by Submission" and, if enabled, set the status of * the current user. * * @param integer * @param integer * @access protected */ protected function handleSubmission($active_id, $pass, $obligationsAnswered) { global $ilObjDataCache; if ($this->isCompletionBySubmissionEnabled()) { $maxpoints = assQuestion::_getMaximumPoints($this->getId()); if ($this->getUploadedFiles($active_id, $pass)) { $points = $maxpoints; } else { $points = 0; } assQuestion::_setReachedPoints($active_id, $this->getId(), $points, $maxpoints, $pass, 1, $obligationsAnswered); // update learning progress include_once 'Modules/Test/classes/class.ilObjTestAccess.php'; include_once 'Services/Tracking/classes/class.ilLPStatusWrapper.php'; ilLPStatusWrapper::_updateStatus(ilObjTest::_getObjectIDFromActiveID((int) $active_id), ilObjTestAccess::_getParticipantId((int) $active_id)); } }
public function saveManScoringByQuestion() { /** * @var $ilAccess ilAccessHandler */ global $ilAccess, $lng; if (!$ilAccess->checkAccess('write', '', $this->ref_id)) { ilUtil::sendInfo($this->lng->txt('cannot_edit_test'), true); $this->ctrl->redirectByClass('ilobjtestgui', 'infoScreen'); } if (!isset($_POST['scoring']) || !is_array($_POST['scoring'])) { ilUtil::sendFailure($this->lng->txt('tst_save_manscoring_failed_unknown')); $this->showManScoringByQuestionParticipantsTable(); return; } include_once 'Modules/TestQuestionPool/classes/class.assQuestion.php'; include_once 'Modules/Test/classes/class.ilObjTestAccess.php'; include_once 'Services/Tracking/classes/class.ilLPStatusWrapper.php'; $oneExceededMaxPoints = false; $manPointsPost = array(); $skipParticipant = array(); $maxPointsByQuestionId = array(); foreach ($_POST['scoring'] as $pass => $active_ids) { foreach ((array) $active_ids as $active_id => $questions) { // check for existing test result data if (!$this->object->getTestResult($active_id, $pass)) { if (!isset($skipParticipant[$pass])) { $skipParticipant[$pass] = array(); } $skipParticipant[$pass][$active_id] = true; continue; } foreach ((array) $questions as $qst_id => $reached_points) { if (!isset($manPointsPost[$pass])) { $manPointsPost[$pass] = array(); } if (!isset($manPointsPost[$pass][$active_id])) { $manPointsPost[$pass][$active_id] = array(); } $maxPointsByQuestionId[$qst_id] = assQuestion::_getMaximumPoints($qst_id); if ($reached_points > $maxPointsByQuestionId[$qst_id]) { $oneExceededMaxPoints = true; } $manPointsPost[$pass][$active_id][$qst_id] = $reached_points; } } } if ($oneExceededMaxPoints) { ilUtil::sendFailure(sprintf($this->lng->txt('tst_save_manscoring_failed'), $pass + 1)); $this->showManScoringByQuestionParticipantsTable($manPointsPost); return; } $changed_one = false; foreach ($_POST['scoring'] as $pass => $active_ids) { foreach ((array) $active_ids as $active_id => $questions) { $update_participant = false; if ($skipParticipant[$pass][$active_id]) { continue; } foreach ((array) $questions as $qst_id => $reached_points) { $update_participant = assQuestion::_setReachedPoints($active_id, $qst_id, $reached_points, $maxPointsByQuestionId[$qst_id], $pass, 1, $this->object->areObligationsEnabled()); } if ($update_participant) { $changed_one = true; ilLPStatusWrapper::_updateStatus($this->object->getId(), ilObjTestAccess::_getParticipantId($active_id)); } } } if ($changed_one) { if ($this->object->getAnonymity() == 0) { $user_name = $user_name = ilObjUser::_lookupName(ilObjTestAccess::_getParticipantId($active_id)); $name_real_or_anon = $user_name['firstname'] . ' ' . $user_name['lastname']; } else { $name_real_or_anon = $lng->txt('anonymous'); } ilUtil::sendSuccess(sprintf($this->lng->txt('tst_saved_manscoring_successfully'), $pass + 1, $name_real_or_anon), true); require_once './Modules/Test/classes/class.ilTestScoring.php'; $scorer = new ilTestScoring($this->object); $scorer->setPreserveManualScores(true); $scorer->recalculateSolutions(); if ($this->object->getEnableArchiving()) { require_once 'Modules/Test/classes/class.ilTestArchiveService.php'; $archiveService = new ilTestArchiveService($this->object); $archiveService->archivePassesByActives($scorer->getRecalculatedPassesByActives()); } } $this->showManScoringByQuestionParticipantsTable(); }
function __updateUser($user_id, $obj_id) { global $ilUser; include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $marks = new ilLPMarks($obj_id, $user_id); $marks->setMark(ilUtil::stripSlashes($_POST['mark'])); $marks->setComment(ilUtil::stripSlashes($_POST['comment'])); $do_lp = false; if ($marks->getCompleted() != (bool) $_POST['completed']) { $marks->setCompleted((bool) $_POST['completed']); $do_lp = true; } $marks->update(); // #11600 if ($do_lp) { include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($obj_id, $user_id); } }
function deleteTrackingDataOfUsers($a_users) { global $ilDB; include_once "./Modules/Scorm2004/classes/class.ilSCORM2004DeleteData.php"; include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; foreach ($a_users as $user) { ilSCORM2004DeleteData::removeCMIDataForUserAndPackage($user, $this->getId()); ilLPStatusWrapper::_updateStatus($this->getId(), $user); } }
/** * sync course status and lp status * * @param int $a_member_id * @param bool $a_has_passed */ protected function updateLPFromStatus($a_member_id, $a_has_passed) { global $ilUser; include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_enabledLearningProgress() && $this->object->getStatusDetermination() == ilObjCourse::STATUS_DETERMINATION_LP) { include_once './Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance($this->object->getId()); if ($olp->getCurrentMode() == ilLPObjSettings::LP_MODE_MANUAL_BY_TUTOR) { include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $marks = new ilLPMarks($this->object->getId(), $a_member_id); // only if status has changed if ($marks->getCompleted() != $a_has_passed) { $marks->setCompleted($a_has_passed); $marks->update(); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->object->getId(), $a_member_id, null, false, true); } } } }
public final function resetLPDataForUserIds(array $a_user_ids, $a_recursive = true) { if ((bool) $a_recursive && method_exists($this, "getPossibleCollectionItems")) { $subitems = $this->getPossibleCollectionItems(); if (is_array($subitems)) { foreach ($subitems as $sub_ref_id) { $olp = self::getInstance(ilObject::_lookupObjId($sub_ref_id)); $olp->resetLPDataForUserIds($a_user_ids, false); } } } $this->resetCustomLPDataForUserIds($a_user_ids, (bool) $a_recursive); include_once "Services/Tracking/classes/class.ilLPMarks.php"; ilLPMarks::_deleteForUsers($this->obj_id, $a_user_ids); include_once "Services/Tracking/classes/class.ilChangeEvent.php"; ilChangeEvent::_deleteReadEventsForUsers($this->obj_id, $a_user_ids); // update LP status to get collections up-to-date include_once "Services/Tracking/classes/class.ilLPStatusWrapper.php"; foreach ($a_user_ids as $user_id) { ilLPStatusWrapper::_updateStatus($this->obj_id, $user_id); } }
/** * sync course status and lp status * * @param int $a_member_id * @param bool $a_has_passed */ protected function updateLPFromStatus($a_member_id, $a_has_passed) { include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_enabledLearningProgress() && $this->object->getStatusDetermination() == ilObjCourse::STATUS_DETERMINATION_LP) { include_once './Services/Tracking/classes/class.ilLPObjSettings.php'; $lp_settings = new ilLPObjSettings($this->object->getId()); if ($lp_settings->getMode() == LP_MODE_MANUAL_BY_TUTOR) { include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $marks = new ilLPMarks($this->object->getId(), $a_member_id); $marks->setCompleted($a_has_passed); $marks->update(); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->object->getId(), $a_member_id, null, false, true); } } }
/** * Confirmed tracking deletion * */ function confirmedDeleteTracking() { foreach ($_POST["user"] as $user) { include_once "./Modules/Scorm2004/classes/class.ilSCORM2004DeleteData.php"; ilSCORM2004DeleteData::removeCMIDataForUserAndPackage($user, $this->object->getId()); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->object->getId(), $user); } $this->ctrl->redirect($this, "modifyTrackingItems"); }
function deleteTrackingDataOfUsers($a_users) { global $ilDB; include_once "./Services/Tracking/classes/class.ilChangeEvent.php"; include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilChangeEvent::_deleteReadEventsForUsers($this->getId(), $a_users); foreach ($a_users as $user) { $ilDB->manipulateF(' DELETE FROM scorm_tracking WHERE user_id = %s AND obj_id = %s', array('integer', 'integer'), array($user, $this->getID())); $ilDB->manipulateF(' DELETE FROM sahs_user WHERE user_id = %s AND obj_id = %s', array('integer', 'integer'), array($user, $this->getID())); ilLPStatusWrapper::_updateStatus($this->getId(), $user); } }
/** * Track access to lm page * * @param int $a_page_id page id */ function trackAccess($a_page_id) { if ($this->lm_ref_id == 0) { die("ilLMTracker: No Ref Id given."); } // track page and chapter access $this->trackPageAndChapterAccess($a_page_id); // track last page access (must be done after calling trackPageAndChapterAccess()) $this->trackLastPageAccess($this->user_id, $this->lm_ref_id, $a_page_id); // #9483 // general learning module lp tracking include_once "./Services/Tracking/classes/class.ilLearningProgress.php"; ilLearningProgress::_tracProgress($this->user_id, $this->lm_obj_id, $this->lm_ref_id, "lm"); // obsolete? include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->lm_obj_id, $this->user_id); // mark currently loaded data as dirty to force reload if necessary $this->dirty = true; }
/** * save the active module version to scorm_tracking */ function save_module_version() { global $ilDB, $ilUser; $val_set = $ilDB->queryF(' SELECT * FROM scorm_tracking WHERE user_id = %s AND sco_id = %s AND lvalue= %s AND obj_id = %s', array('integer', 'integer', 'text', 'integer'), array($ilUser->getId(), 0, 'module_version', $this->slm->getId())); if ($ilDB->numRows($val_set) > 0) { $ilDB->update('scorm_tracking', array('rvalue' => array('clob', $this->slm->getModuleVersion()), 'c_timestamp' => array('timestamp', ilUtil::now())), array('user_id' => array('integer', $ilUser->getId()), 'sco_id' => array('integer', 0), 'lvalue' => array('text', 'module_version'), 'obj_id' => array('integer', $this->slm->getId()))); } else { $ilDB->insert('scorm_tracking', array('obj_id' => array('integer', $this->slm->getId()), 'user_id' => array('integer', $ilUser->getId()), 'sco_id' => array('integer', 0), 'lvalue' => array('text', 'module_version'), 'rvalue' => array('clob', $this->slm->getModuleVersion()), 'c_timestamp' => array('timestamp', ilUtil::now()))); } include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->slm->getId(), $ilUser->getId()); }
function __updateUser($user_id, $obj_id) { include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $marks = new ilLPMarks($obj_id, $user_id); $marks->setMark(ilUtil::stripSlashes($_POST['mark'])); $marks->setComment(ilUtil::stripSlashes($_POST['comment'])); $marks->setCompleted((bool) $_POST['completed']); $marks->update(); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($obj_id, $user_id); }
function importSuccess($a_file) { global $ilDB, $ilUser; $scos = array(); //get all SCO's of this object $val_set = $ilDB->queryF(' SELECT cp_node.cp_node_id FROM cp_node,cp_resource,cp_item WHERE cp_item.cp_node_id = cp_node.cp_node_id AND cp_item.resourceid = cp_resource.id AND scormtype = %s AND nodename = %s AND cp_node.slm_id = %s GROUP BY cp_node.cp_node_id', array('text', 'text', 'integer'), array('sco', 'item', $this->getId())); while ($val_rec = $ilDB->fetchAssoc($val_set)) { array_push($scos, $val_rec['cp_node_id']); } $fhandle = fopen($a_file, "r"); $obj_id = $this->getID(); $users = array(); $fields = fgetcsv($fhandle, 4096, ';'); while (($csv_rows = fgetcsv($fhandle, 4096, ";")) !== FALSE) { $data = array_combine($fields, $csv_rows); //check the format $statuscheck = 0; if (count($csv_rows) == 6) { $statuscheck = 1; } if ($this->get_user_id($data["Login"]) > 0) { $user_id = $this->get_user_id($data["Login"]); $import = $data["Status"]; if ($import == "") { $import = 1; } //iterate over all SCO's if ($import == 1) { foreach ($scos as $sco) { $sco_id = $sco; $date = $data['Date']; $res = $ilDB->queryF(' SELECT * FROM cmi_node WHERE cp_node_id = %s AND user_id = %s AND completion_status = %s AND success_status = %s AND c_timestamp = %s', array('integer', 'integer', 'text', 'text', 'timestamp'), array($sco_id, $user_id, 'completed', 'passed', $data['Date'])); if (!$ilDB->numRows($res)) { $nextId = $ilDB->nextId('cmi_node'); $val_set = $ilDB->manipulateF(' INSERT INTO cmi_node (cp_node_id,user_id,completion_status,success_status,c_timestamp,cmi_node_id) VALUES(%s,%s,%s,%s,%s,%s)', array('integer', 'integer', 'text', 'text', 'timestamp', 'integer'), array($sco_id, $user_id, 'completed', 'passed', $data['Date'], $nextId)); } } } $users[] = $user_id; } else { //echo "Warning! User $csv_rows[0] does not exist in ILIAS. Data for this user was skipped.\n"; } } // update learning progress foreach ($users as $user_id) { include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->getId(), $user_id); } return 0; }
private function setCMIData($userId, $packageId, $data) { global $ilDB, $ilLog; $result = array(); if (!$data) { return; } $i_check = $data->i_check; $i_set = $data->i_set; $b_node_update = false; $cmi_node_id = null; $a_map_cmi_interaction_id = array(); $tables = array('node', 'comment', 'interaction', 'objective', 'correct_response'); foreach ($tables as $table) { if (!is_array($data->{$table})) { continue; } $ilLog->write("SCORM: setCMIData, table -" . $table . "-"); // now iterate through data rows from input foreach ($data->{$table} as &$row) { $ilLog->write("Checking table: " . $table); switch ($table) { case 'node': //is always first and has only 1 row $res = $ilDB->queryF('SELECT cmi_node_id FROM cmi_node WHERE cp_node_id = %s and user_id = %s', array('integer', 'integer'), array($row[19], $userId)); $rowtmp = $ilDB->fetchAssoc($res); $cmi_node_id = $rowtmp['cmi_node_id']; if ($cmi_node_id != null) { $b_node_update = true; } else { $cmi_node_id = $ilDB->nextId('cmi_node'); $b_node_update = false; } $ilLog->write("setCMIdata with cmi_node_id = " . $cmi_node_id); $a_data = array('accesscount' => array('integer', $row[0]), 'accessduration' => array('text', $row[1]), 'accessed' => array('text', $row[2]), 'activityabsduration' => array('text', $row[3]), 'activityattemptcount' => array('integer', $row[4]), 'activityexpduration' => array('text', $row[5]), 'activityprogstatus' => array('integer', $row[6]), 'attemptabsduration' => array('text', $row[7]), 'attemptcomplamount' => array('float', $row[8]), 'attemptcomplstatus' => array('integer', $row[9]), 'attemptexpduration' => array('text', $row[10]), 'attemptprogstatus' => array('integer', $row[11]), 'audio_captioning' => array('integer', $row[12]), 'audio_level' => array('float', $row[13]), 'availablechildren' => array('text', $row[14]), 'cmi_node_id' => array('integer', $cmi_node_id), 'completion' => array('float', $row[16]), 'completion_status' => array('text', $row[17]), 'completion_threshold' => array('text', $row[18]), 'cp_node_id' => array('integer', $row[19]), 'created' => array('text', $row[20]), 'credit' => array('text', $row[21]), 'delivery_speed' => array('float', $row[22]), 'c_entry' => array('text', $row[23]), 'c_exit' => array('text', $row[24]), 'c_language' => array('text', $row[25]), 'launch_data' => array('clob', $row[26]), 'learner_name' => array('text', $row[27]), 'location' => array('text', $row[28]), 'c_max' => array('float', $row[29]), 'c_min' => array('float', $row[30]), 'c_mode' => array('text', $row[31]), 'modified' => array('text', $row[32]), 'progress_measure' => array('float', $row[33]), 'c_raw' => array('float', $row[34]), 'scaled' => array('float', $row[35]), 'scaled_passing_score' => array('float', $row[36]), 'session_time' => array('text', $row[37]), 'success_status' => array('text', $row[38]), 'suspend_data' => array('clob', $row[39]), 'total_time' => array('text', $row[40]), 'user_id' => array('integer', $userId), 'c_timestamp' => array('timestamp', date('Y-m-d H:i:s')), 'additional_tables' => array('integer', $i_check)); if ($b_node_update == false) { $ilLog->write("Want to insert row: " . count($row)); $ilDB->insert('cmi_node', $a_data); } else { $ilDB->update('cmi_node', $a_data, array('cmi_node_id' => array('integer', $cmi_node_id))); $ilLog->write("updated"); } if ($b_node_update == true) { //remove if ($i_set > 7) { $i_set -= 8; if ($this->slm->getComments()) { $q = 'DELETE FROM cmi_comment WHERE cmi_node_id = %s'; $ilDB->manipulateF($q, array('integer'), array($cmi_node_id)); } } if ($i_set > 3) { $i_set -= 4; if ($this->slm->getInteractions()) { $q = 'DELETE FROM cmi_correct_response WHERE cmi_interaction_id IN ( SELECT cmi_interaction.cmi_interaction_id FROM cmi_interaction WHERE cmi_interaction.cmi_node_id = %s)'; $ilDB->manipulateF($q, array('integer'), array($cmi_node_id)); } } if ($i_set > 1) { $i_set -= 2; if ($this->slm->getInteractions()) { $q = 'DELETE FROM cmi_interaction WHERE cmi_node_id = %s'; $ilDB->manipulateF($q, array('integer'), array($cmi_node_id)); } } if ($i_set > 0) { $i_set = 0; if ($this->slm->getObjectives()) { $q = 'DELETE FROM cmi_objective WHERE cmi_node_id = %s'; $ilDB->manipulateF($q, array('integer'), array($cmi_node_id)); } } //end remove } //to send to client $result[(string) $row[19]] = $cmi_node_id; break; case 'comment': $row[0] = $ilDB->nextId('cmi_comment'); $ilDB->insert('cmi_comment', array('cmi_comment_id' => array('integer', $row[0]), 'cmi_node_id' => array('integer', $cmi_node_id), 'c_comment' => array('clob', $row[2]), 'c_timestamp' => array('text', $row[3]), 'location' => array('text', $row[4]), 'sourceislms' => array('integer', $row[5]))); break; case 'interaction': $cmi_interaction_id = $ilDB->nextId('cmi_interaction'); $a_map_cmi_interaction_id[] = array($row[0], $cmi_interaction_id); $ilDB->insert('cmi_interaction', array('cmi_interaction_id' => array('integer', $cmi_interaction_id), 'cmi_node_id' => array('integer', $cmi_node_id), 'description' => array('clob', $row[2]), 'id' => array('text', $row[3]), 'latency' => array('text', $row[4]), 'learner_response' => array('clob', $row[5]), 'result' => array('text', $row[6]), 'c_timestamp' => array('text', $row[7]), 'c_type' => array('text', $row[8]), 'weighting' => array('float', $row[9]))); break; case 'objective': $row[2] = $ilDB->nextId('cmi_objective'); $cmi_interaction_id = null; if ($row[0] != null) { for ($i = 0; $i < count($a_map_cmi_interaction_id); $i++) { if ($row[0] == $a_map_cmi_interaction_id[$i][0]) { $cmi_interaction_id = $a_map_cmi_interaction_id[$i][1]; } } } $ilDB->insert('cmi_objective', array('cmi_interaction_id' => array('integer', $cmi_interaction_id), 'cmi_node_id' => array('integer', $cmi_node_id), 'cmi_objective_id' => array('integer', $row[2]), 'completion_status' => array('text', $row[3]), 'description' => array('clob', $row[4]), 'id' => array('text', $row[5]), 'c_max' => array('float', $row[6]), 'c_min' => array('float', $row[7]), 'c_raw' => array('float', $row[8]), 'scaled' => array('float', $row[9]), 'progress_measure' => array('float', $row[10]), 'success_status' => array('text', $row[11]), 'scope' => array('text', $row[12]))); break; case 'correct_response': $cmi_interaction_id = null; if ($row[1] !== null) { for ($i = 0; $i < count($a_map_cmi_interaction_id); $i++) { if ($row[1] == $a_map_cmi_interaction_id[$i][0]) { $cmi_interaction_id = $a_map_cmi_interaction_id[$i][1]; } } $row[0] = $ilDB->nextId('cmi_correct_response'); $ilDB->insert('cmi_correct_response', array('cmi_correct_resp_id' => array('integer', $row[0]), 'cmi_interaction_id' => array('integer', $cmi_interaction_id), 'pattern' => array('text', $row[2]))); } break; } } } $changed_seq_utilities = $data->changed_seq_utilities; $ilLog->write("SCORM2004 adl_seq_utilities changed: " . $changed_seq_utilities); if ($changed_seq_utilities == 1) { $this->writeGObjective($data->adl_seq_utilities); } //ATTENTION not at commit - do at unload! // 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); // update learning progress status include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($packageId, $userId); // include_once './Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php'; // $new_global_status = ilSCORM2004Tracking::updateGlobalStatus($userId, $packageId,$completed, $satisfied, $measure); // $ilLog->write("new_global_status=".$new_global_status); // $saved_global_status=$data->saved_global_status; // $ilLog->write("saved_global_status=".$saved_global_status); // $result["new_global_status"]=$new_global_status; // here put code for soap to MaxCMS e.g. when if($saved_global_status != $new_global_status) $result["new_global_status"] = ""; return $result; }
function decreaseAttempts() { global $ilDB, $ilUser; if (!isset($_POST["user"])) { ilUtil::sendInfo($this->lng->txt("no_checkbox"), true); } foreach ($_POST["user"] as $user) { //first check if there is a package_attempts entry //get existing account - sco id is always 0 $val_set = $ilDB->queryF(' SELECT * FROM scorm_tracking WHERE user_id = %s AND sco_id = %s AND lvalue = %s AND obj_id = %s', array('integer', 'integer', 'text', 'integer'), array($user, 0, 'package_attempts', $this->object->getID())); $val_rec = $ilDB->fetchAssoc($val_set); $val_rec["rvalue"] = str_replace("\r\n", "\n", $val_rec["rvalue"]); if ($val_rec["rvalue"] != null && $val_rec["rvalue"] != 0) { $new_rec = $val_rec["rvalue"] - 1; //decrease attempt by 1 if ($res = $ilDB->numRows($val_set) > 0) { $ilDB->update('scorm_tracking', array('rvalue' => array('clob', $new_rec)), array('user_id' => array('integer', $user), 'sco_id' => array('integer', 0), 'obj_id' => array('integer', $this->object->getId()), 'lvalue' => array('text', 'package_attempts'))); } else { $ilDB->insert('scorm_tracking', array('rvalue' => array('clob', $new_rec), 'user_id' => array('integer', $user), 'sco_id' => array('integer', 0), 'obj_id' => array('integer', $this->object->getId()), 'lvalue' => array('text', 'package_attempts'))); } include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->object->getId(), $user); } } //$this->ctrl->saveParameter($this, "cdir"); $this->ctrl->redirect($this, "showTrackingItems"); }
private function saveManScoringParticipantScreen($redirect = true) { global $tpl, $ilCtrl, $lng; $activeId = $this->fetchActiveIdParameter(); $pass = $this->fetchPassParameter($activeId); $questionGuiList = $this->service->getManScoringQuestionGuiList($activeId, $pass); $form = $this->buildManScoringParticipantForm($questionGuiList, $activeId, $pass, false); $form->setValuesByPost(); if (!$form->checkInput()) { ilUtil::sendFailure(sprintf($lng->txt('tst_save_manscoring_failed'), $pass + 1)); return $this->showManScoringParticipantScreen($form); } include_once "./Modules/TestQuestionPool/classes/class.assQuestion.php"; $maxPointsByQuestionId = array(); $maxPointsExceeded = false; foreach ($questionGuiList as $questionId => $questionGui) { $reachedPoints = $form->getItemByPostVar("question__{$questionId}__points")->getValue(); $maxPoints = assQuestion::_getMaximumPoints($questionId); if ($reachedPoints > $maxPoints) { $maxPointsExceeded = true; $form->getItemByPostVar("question__{$questionId}__points")->setAlert(sprintf($lng->txt('tst_manscoring_maxpoints_exceeded_input_alert'), $maxPoints)); } $maxPointsByQuestionId[$questionId] = $maxPoints; } if ($maxPointsExceeded) { ilUtil::sendFailure(sprintf($lng->txt('tst_save_manscoring_failed'), $pass + 1)); return $this->showManScoringParticipantScreen($form); } include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php"; foreach ($questionGuiList as $questionId => $questionGui) { $reachedPoints = $form->getItemByPostVar("question__{$questionId}__points")->getValue(); assQuestion::_setReachedPoints($activeId, $questionId, $reachedPoints, $maxPointsByQuestionId[$questionId], $pass, 1, $this->object->areObligationsEnabled()); $feedback = ilUtil::stripSlashes($form->getItemByPostVar("question__{$questionId}__feedback")->getValue(), false, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment")); $this->object->saveManualFeedback($activeId, $questionId, $pass, $feedback); $notificationData[$questionId] = array('points' => $reachedPoints, 'feedback' => $feedback); } include_once "./Modules/Test/classes/class.ilObjTestAccess.php"; include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->object->getId(), ilObjTestAccess::_getParticipantId($activeId)); $manScoringDone = $form->getItemByPostVar("manscoring_done")->getChecked(); ilTestService::setManScoringDone($activeId, $manScoringDone); $manScoringNotify = $form->getItemByPostVar("manscoring_notify")->getChecked(); if ($manScoringNotify) { require_once 'Modules/Test/classes/notifications/class.ilTestManScoringParticipantNotification.php'; $notification = new ilTestManScoringParticipantNotification($this->object->_getUserIdFromActiveId($activeId), $this->object->getRefId()); $notification->setAdditionalInformation(array('test_title' => $this->object->getTitle(), 'test_pass' => $pass + 1, 'questions_gui_list' => $questionGuiList, 'questions_scoring_data' => $notificationData)); $notification->send(); } require_once './Modules/Test/classes/class.ilTestScoring.php'; $scorer = new ilTestScoring($this->object); $scorer->setPreserveManualScores(true); $scorer->recalculateSolutions(); if ($this->object->getAnonymity() == 0) { $user_name = ilObjUser::_lookupName(ilObjTestAccess::_getParticipantId($activeId)); $name_real_or_anon = $user_name['firstname'] . ' ' . $user_name['lastname']; } else { $name_real_or_anon = $lng->txt('anonymous'); } ilUtil::sendSuccess(sprintf($lng->txt('tst_saved_manscoring_successfully'), $pass + 1, $name_real_or_anon), true); if ($redirect == true) { $ilCtrl->redirect($this, 'showManScoringParticipantScreen'); } else { return; } }
/** * Write returned status * * The returned status is initially 0. If the first file is returned * by a user for any assignment of the exercise, the returned status * is set to 1 and it will stay that way, even if this file is deleted again. * -> learning progress uses this to determine "in progress" status * * @param int exercise id * @param int user id * @param text status */ function _writeReturned($a_obj_id, $a_user_id, $a_status) { global $ilDB; $ilDB->manipulate("UPDATE exc_members SET " . " returned = " . $ilDB->quote($a_status, "text") . " WHERE obj_id = " . $ilDB->quote($a_obj_id, "integer") . " AND usr_id = " . $ilDB->quote($a_user_id, "integer")); include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id); }
/** * Lookup status changed * * @param int $a_obj_id object id * @param int $a_user_id user id */ function _lookupStatusChanged($a_obj_id, $a_user_id) { global $ilDB; $set = $ilDB->query("SELECT status_changed FROM ut_lp_marks WHERE " . " status_dirty = " . $ilDB->quote(0, "integer") . " AND usr_id = " . $ilDB->quote($a_user_id, "integer") . " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")); if ($rec = $ilDB->fetchAssoc($set)) { return $rec["status_changed"]; } else { include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id); $set = $ilDB->query("SELECT status_changed FROM ut_lp_marks WHERE " . " status_dirty = " . $ilDB->quote(0, "integer") . " AND usr_id = " . $ilDB->quote($a_user_id, "integer") . " AND obj_id = " . $ilDB->quote($a_obj_id, "integer")); if ($rec = $ilDB->fetchAssoc($set)) { return $rec["status_changed"]; } } }
function _insertTrackData($a_sahs_id, $a_lval, $a_rval, $a_obj_id) { global $ilDB, $ilUser; $ilDB->insert('scorm_tracking', array('obj_id' => array('integer', $a_obj_id), 'user_id' => array('integer', $ilUser->getId()), 'sco_id' => array('integer', $a_sahs_id), 'lvalue' => array('text', $a_lval), 'rvalue' => array('clob', $a_rval), 'c_timestamp' => array('timestamp', ilUtil::now()))); if ($a_lval == "cmi.core.lesson_status") { include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($a_obj_id, $ilUser->getId()); } }
function saveToDb() { global $ilDB, $ilLog; $submitted = $this->isSubmitted() ? 1 : 0; if ($this->active_id > 0) { $affectedRows = $ilDB->update('tst_active', array('lastindex' => array('integer', $this->getLastSequence()), 'tries' => array('integer', $this->getPass()), 'submitted' => array('integer', $submitted), 'submittimestamp' => array('timestamp', strlen($this->getSubmittedTimestamp()) ? $this->getSubmittedTimestamp() : NULL), 'tstamp' => array('integer', time() - 10), 'taxfilter' => array('text', serialize($this->getQuestionSetFilterSelection()->getTaxonomySelection())), 'answerstatusfilter' => array('text', $this->getQuestionSetFilterSelection()->getAnswerStatusSelection())), array('active_id' => array('integer', $this->getActiveId()))); // update learning progress include_once "./Modules/Test/classes/class.ilObjTestAccess.php"; include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus(ilObjTestAccess::_lookupObjIdForTestId($this->getTestId()), ilObjTestAccess::_getParticipantId($this->getActiveId())); } else { if (!$this->activeIDExists($this->getUserId(), $this->getTestId())) { $anonymous_id = $this->getAnonymousId() ? $this->getAnonymousId() : NULL; $next_id = $ilDB->nextId('tst_active'); $affectedRows = $ilDB->insert('tst_active', array('active_id' => array('integer', $next_id), 'user_fi' => array('integer', $this->getUserId()), 'anonymous_id' => array('text', $anonymous_id), 'test_fi' => array('integer', $this->getTestId()), 'lastindex' => array('integer', $this->getLastSequence()), 'tries' => array('integer', $this->getPass()), 'submitted' => array('integer', $submitted), 'submittimestamp' => array('timestamp', strlen($this->getSubmittedTimestamp()) ? $this->getSubmittedTimestamp() : NULL), 'tstamp' => array('integer', time() - 10), 'taxfilter' => array('text', serialize($this->getQuestionSetFilterSelection()->getTaxonomySelection())), 'answerstatusfilter' => array('text', $this->getQuestionSetFilterSelection()->getAnswerStatusSelection()))); $this->active_id = $next_id; // update learning progress include_once "./Modules/Test/classes/class.ilObjTestAccess.php"; include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus(ilObjTestAccess::_lookupObjIdForTestId($this->getTestId()), $this->getUserId()); } } include_once "./Services/Tracking/classes/class.ilLearningProgress.php"; ilLearningProgress::_tracProgress($this->getUserId(), ilObjTestAccess::_lookupObjIdForTestId($this->getTestId()), $this->getRefId(), 'tst'); }
function saveProgress() { global $ilUser; include_once 'Services/Tracking/classes/class.ilLPMarks.php'; $lp_marks = new ilLPMarks($this->gui_object->object->getId(), $ilUser->getId()); $lp_marks->setCompleted((bool) $_POST['lp_edit']); $lp_marks->update(); require_once 'Services/Tracking/classes/class.ilLPStatusWrapper.php'; ilLPStatusWrapper::_updateStatus($this->gui_object->object->getId(), $ilUser->getId()); $this->lng->loadLanguageModule('trac'); ilUtil::sendSuccess($this->lng->txt('trac_updated_status'), true); $this->ctrl->redirect($this, ""); // #14993 // $this->showSummary(); }
/** * process <ilPage> content tag * * @param object page node * @param integer footer/header page id */ function ilPage(&$a_page_node, $a_page_id = 0) { global $ilUser; if (($ilUser->getId() == ANONYMOUS_USER_ID || $this->needs_to_be_purchased) && $this->lm_gui->object->getPublicAccessMode() == 'selected') { $public = ilLMObject::_isPagePublic($this->getCurrentPageId()); if (!$public) { return $this->showNoPublicAccess($this->getCurrentPageId()); } } if (!ilObjContentObject::_checkPreconditionsOfPage($this->lm->getRefId(), $this->lm->getId(), $this->getCurrentPageId())) { return $this->showPreconditionsOfPage($this->getCurrentPageId()); } require_once "./Modules/LearningModule/classes/class.ilLMPageGUI.php"; require_once "./Modules/LearningModule/classes/class.ilLMPageObject.php"; // page id is e.g. > 0 when footer or header page is processed if ($a_page_id == 0) { $page_id = $this->getCurrentPageId(); //echo ":".$page_id.":"; // highlighting? if ($_GET["srcstring"] != "" && !$this->offlineMode()) { include_once './Services/Search/classes/class.ilUserSearchCache.php'; $cache = ilUserSearchCache::_getInstance($ilUser->getId()); $cache->switchSearchType(ilUserSearchCache::LAST_QUERY); $search_string = $cache->getQuery(); include_once "./Services/UIComponent/TextHighlighter/classes/class.ilTextHighlighterGUI.php"; include_once "./Services/Search/classes/class.ilQueryParser.php"; $p = new ilQueryParser($search_string); $p->parse(); $words = $p->getQuotedWords(); if (is_array($words)) { foreach ($words as $w) { ilTextHighlighterGUI::highlight("ilLMPageContent", $w, $this->tpl); } } $this->fill_on_load_code = true; } } else { $page_id = $a_page_id; } // content style $this->tpl->setCurrentBlock("ContentStyle"); if (!$this->offlineMode()) { $this->tpl->setVariable("LOCATION_CONTENT_STYLESHEET", ilObjStyleSheet::getContentStylePath($this->lm->getStyleSheetId())); } else { $this->tpl->setVariable("LOCATION_CONTENT_STYLESHEET", "content_style/content.css"); } $this->tpl->parseCurrentBlock(); // no active page found in chapter if ($this->chapter_has_no_active_page && ilLMObject::_lookupType($_GET["obj_id"]) == "st") { $mtpl = new ilTemplate("tpl.no_content_message.html", true, true, "Modules/LearningModule"); $mtpl->setVariable("MESSAGE", $this->lng->txt("cont_no_page_in_chapter")); //$mtpl->setVariable("SRC_ICON", ilUtil::getImagePath("icon_st.png", // false, "output", $this->offlineMode())); $mtpl->setVariable("ITEM_TITLE", ilLMObject::_lookupTitle($_GET["obj_id"])); $this->tpl->setVariable("PAGE_CONTENT", $mtpl->get()); return $mtpl->get(); } // current page is deactivated if ($this->deactivated_page) { $mtpl = new ilTemplate("tpl.no_content_message.html", true, true, "Modules/LearningModule"); $m = $this->lng->txt("cont_page_currently_deactivated"); $act_data = ilLMPage::_lookupActivationData((int) $_GET["obj_id"], $this->lm->getType()); if ($act_data["show_activation_info"] && ilUtil::now() < $act_data["activation_start"]) { $m .= "<p>" . sprintf($this->lng->txt("cont_page_activation_on"), ilDatePresentation::formatDate(new ilDateTime($act_data["activation_start"], IL_CAL_DATETIME))) . "</p>"; } $mtpl->setVariable("MESSAGE", $m); //$mtpl->setVariable("SRC_ICON", ilUtil::getImagePath("icon_pg.png", // false, "output", $this->offlineMode())); $mtpl->setVariable("ITEM_TITLE", ilLMObject::_lookupTitle($_GET["obj_id"])); $this->tpl->setVariable("PAGE_CONTENT", $mtpl->get()); return $mtpl->get(); } // no page found if ($page_id == 0) { $cont = $this->lng->txt("cont_no_page"); $this->tpl->setVariable("PAGE_CONTENT", $cont); return $cont; } $page_object_gui = $this->getLMPageGUI($page_id); $this->basicPageGuiInit($page_object_gui); $page_object = $page_object_gui->getPageObject(); $page_object->buildDom(); $page_object->registerOfflineHandler($this); $int_links = $page_object->getInternalLinks(); $page_object_gui->setTemplateOutput(false); // Update personal desktop items $ilUser->setDesktopItemParameters($this->lm->getRefId(), $this->lm->getType(), $page_id); // Update course items include_once './Modules/Course/classes/class.ilCourseLMHistory.php'; ilCourseLMHistory::_updateLastAccess($ilUser->getId(), $this->lm->getRefId(), $page_id); // read link targets $link_xml = $this->getLinkXML($int_links, $this->getLayoutLinkTargets()); $link_xml .= $this->getLinkTargetsXML(); //echo htmlentities($link_xml); // get lm page object $lm_pg_obj = new ilLMPageObject($this->lm, $page_id); $lm_pg_obj->setLMId($this->lm->getId()); //$pg_obj->setParentId($this->lm->getId()); $page_object_gui->setLinkXML($link_xml); // determine target frames for internal links //$pg_frame = $_GET["frame"]; $page_object_gui->setLinkFrame($_GET["frame"]); // page title and tracking (not for header or footer page) if ($page_id == 0 || $page_id != $this->lm->getHeaderPage() && $page_id != $this->lm->getFooterPage()) { $page_object_gui->setPresentationTitle(ilLMPageObject::_getPresentationTitle($lm_pg_obj->getId(), $this->lm->getPageHeader(), $this->lm->isActiveNumbering(), $this->lm_set->get("time_scheduled_page_activation"))); // update learning progress if ($ilUser->getId() != ANONYMOUS_USER_ID) { // #9483 include_once "./Services/Tracking/classes/class.ilLearningProgress.php"; ilLearningProgress::_tracProgress($ilUser->getId(), $this->lm->getId(), $this->lm->getRefId(), $this->lm->getType()); // obsolete? include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($this->lm->getId(), $ilUser->getId()); } } else { $page_object_gui->setEnabledPageFocus(false); $page_object_gui->getPageConfig()->setEnableSelfAssessment(false); } // ADDED FOR CITATION $page_object_gui->setLinkParams("ref_id=" . $this->lm->getRefId()); $page_object_gui->setTemplateTargetVar("PAGE_CONTENT"); $page_object_gui->setSourcecodeDownloadScript($this->getSourcecodeDownloadLink()); // syntax style $this->tpl->setCurrentBlock("SyntaxStyle"); if (!$this->offlineMode()) { $this->tpl->setVariable("LOCATION_SYNTAX_STYLESHEET", ilObjStyleSheet::getSyntaxStylePath()); } else { $this->tpl->setVariable("LOCATION_SYNTAX_STYLESHEET", "syntaxhighlight.css"); } $this->tpl->parseCurrentBlock(); $ret = $page_object_gui->presentation($page_object_gui->getOutputMode()); // process header if ($this->lm->getHeaderPage() > 0 && $page_id != $this->lm->getHeaderPage() && ($page_id == 0 || $page_id != $this->lm->getFooterPage())) { if (ilLMObject::_exists($this->lm->getHeaderPage())) { $head = $this->ilPage($a_page_node, $this->lm->getHeaderPage()); } } // process footer if ($this->lm->getFooterPage() > 0 && $page_id != $this->lm->getFooterPage() && ($page_id == 0 || $page_id != $this->lm->getHeaderPage())) { if (ilLMObject::_exists($this->lm->getFooterPage())) { $foot = $this->ilPage($a_page_node, $this->lm->getFooterPage()); } } $this->tpl->setVariable("PAGE_CONTENT", $head . $ret . $foot); //echo htmlentities("-".$ret."-"); return $head . $ret . $foot; }
/** * Set course status for all members by lp status */ public function syncMembersStatusWithLP() { include_once "Services/Tracking/classes/class.ilLPStatusWrapper.php"; foreach ($this->getMembersObject()->getParticipants() as $user_id) { // #15529 - force raise on sync ilLPStatusWrapper::_updateStatus($this->getId(), $user_id, null, false, false, true); } }
function _setObjectStatus($a_obj_id, $a_user_id, array $a_completed = null) { global $ilDB; $now = time(); if (!$a_completed) { $a_completed = array(); } include_once './Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance($a_obj_id); $collection = $olp->getCollectionInstance(); if ($collection) { $existing = self::_getObjectStatus($a_obj_id, $a_user_id); foreach ($collection->getItems() as $item_id) { if (isset($existing[$item_id])) { // value changed if (!$existing[$item_id][0] && in_array($item_id, $a_completed) || $existing[$item_id][0] && !in_array($item_id, $a_completed)) { $ilDB->manipulate("UPDATE ut_lp_coll_manual SET " . " completed = " . $ilDB->quote(in_array($item_id, $a_completed), "integer") . " , last_change = " . $ilDB->quote($now, "integer") . " WHERE obj_id = " . $ilDB->quote($a_obj_id, "integer") . " AND usr_id = " . $ilDB->quote($a_user_id, "integer") . " AND subitem_id = " . $ilDB->quote($item_id, "integer")); } } else { if (in_array($item_id, $a_completed)) { $ilDB->manipulate("INSERT INTO ut_lp_coll_manual" . "(obj_id,usr_id,subitem_id,completed,last_change)" . " VALUES (" . $ilDB->quote($a_obj_id, "integer") . " , " . $ilDB->quote($a_user_id, "integer") . " , " . $ilDB->quote($item_id, "integer") . " , " . $ilDB->quote(1, "integer") . " , " . $ilDB->quote($now, "integer") . ")"); } } } } include_once "Services/Tracking/classes/class.ilLPStatusWrapper.php"; ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id); }