コード例 #1
0
 /**
  * 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;
 }
コード例 #2
0
    /**
     * 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");
    }
コード例 #3
0
 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);
     }
 }
コード例 #4
0
 /**
  * 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());
 }
コード例 #5
0
 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;
 }
コード例 #6
0
 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);
         }
     }
 }
コード例 #7
0
 /**
  * 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));
     }
 }
コード例 #8
0
 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();
 }
コード例 #9
0
 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);
     }
 }
コード例 #10
0
 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);
     }
 }
コード例 #11
0
 /**
  * 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);
             }
         }
     }
 }
コード例 #12
0
ファイル: class.ilObjectLP.php プロジェクト: arlendotcn/ilias
 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);
     }
 }
コード例 #13
0
 /**
  * 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);
         }
     }
 }
コード例 #14
0
 /**
  * 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");
 }
コード例 #15
0
    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);
        }
    }
コード例 #16
0
ファイル: class.ilLMTracker.php プロジェクト: bheyser/qplskl
 /**
  * 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;
 }
コード例 #17
0
    /**
     * 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());
    }
コード例 #18
0
 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);
 }
コード例 #19
0
    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;
    }
コード例 #20
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;
    }
コード例 #21
0
    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");
    }
コード例 #22
0
 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;
     }
 }
コード例 #23
0
 /**
  * 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);
 }
コード例 #24
0
 /**
  * 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"];
         }
     }
 }
コード例 #25
0
 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());
     }
 }
コード例 #26
0
 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');
 }
コード例 #27
0
 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();
 }
コード例 #28
0
 /**
  * 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;
 }
コード例 #29
0
 /**
  * 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);
     }
 }
コード例 #30
0
 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);
 }