Ejemplo n.º 1
0
 public function getCurrentMode()
 {
     if ($this->checkSCORMPreconditions()) {
         return ilLPObjSettings::LP_MODE_SCORM;
     }
     return parent::getCurrentMode();
 }
 /**
  * Handle an event in a listener.
  *
  * @param	string	$a_component	component, e.g. "Modules/Forum" or "Services/User"
  * @param	string	$a_event		event e.g. "createUser", "updateUser", "deleteUser", ...
  * @param	array	$a_parameter	parameter array (assoc), array("name" => ..., "phone_office" => ...)
  */
 public static function handleEvent($a_component, $a_event, $a_params)
 {
     $obj_id = $a_params['obj_id'];
     switch ($a_component) {
         case 'Services/Object':
             switch ($a_event) {
                 case 'toTrash':
                     include_once './Services/Object/classes/class.ilObjectLP.php';
                     $olp = ilObjectLP::getInstance($obj_id);
                     $olp->handleToTrash();
                     break;
                 case 'delete':
                     include_once './Services/Object/classes/class.ilObjectLP.php';
                     $olp = ilObjectLP::getInstance($obj_id);
                     $olp->handleDelete();
                     break;
             }
             break;
         case 'Services/Tree':
             switch ($a_event) {
                 case 'moveTree':
                     if ($a_params['tree'] == 'tree') {
                         include_once './Services/Object/classes/class.ilObjectLP.php';
                         ilObjectLP::handleMove($a_params['source_id']);
                     }
                     break;
             }
             break;
     }
     return true;
 }
Ejemplo n.º 3
0
 function _showWarning($a_ref_id, $a_usr_id)
 {
     global $ilObjDataCache;
     $obj_id = $ilObjDataCache->lookupObjId($a_ref_id);
     // if completed no warning
     include_once './Services/Tracking/classes/class.ilLPStatus.php';
     if (ilLPStatus::_hasUserCompleted($obj_id, $a_usr_id)) {
         return false;
     }
     // if editing time reached => show warning
     $timings =& ilTimingCache::_getTimings($a_ref_id);
     if ($timings['item']['timing_type'] == ilObjectActivation::TIMINGS_PRESETTING) {
         if ($timings['item']['changeable'] and $timings['user'][$a_usr_id]['end']) {
             $end = $timings['user'][$a_usr_id]['end'];
         } else {
             $end = $timings['item']['suggestion_end'];
         }
         if ($end < time()) {
             return true;
         }
     }
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($obj_id);
     $collection = $olp->getCollectionInstance();
     if ($collection instanceof ilLPCollectionOfRepositoryObjects) {
         foreach ($collection->getItems() as $item) {
             if (ilTimingCache::_showWarning($item, $a_usr_id)) {
                 return true;
             }
         }
     }
     // Really ???
     return false;
 }
 /**
  * check access to learning progress
  * 
  * @param int $a_ref_id reference ifd of object
  * @param bool $a_allow_only_read read access is sufficient (see courses/groups)
  * @return
  * @static
  */
 public static function checkAccess($a_ref_id, $a_allow_only_read = true)
 {
     global $ilUser, $ilAccess;
     if ($ilUser->getId() == ANONYMOUS_USER_ID) {
         return false;
     }
     include_once "Services/Tracking/classes/class.ilObjUserTracking.php";
     if (!ilObjUserTracking::_enabledLearningProgress()) {
         return false;
     }
     if ($ilAccess->checkAccess('edit_learning_progress', '', $a_ref_id)) {
         return true;
     }
     if (!ilObjUserTracking::_hasLearningProgressLearner()) {
         return false;
     }
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance(ilObject::_lookupObjId($a_ref_id));
     if (!$olp->isActive()) {
         return false;
     }
     if (!$ilAccess->checkAccess('read', '', $a_ref_id)) {
         return false;
     }
     if ($a_allow_only_read) {
         return true;
     }
     return false;
 }
 /**
  * Handle an event in a listener.
  *
  * @param	string	$a_component	component, e.g. "Modules/Forum" or "Services/User"
  * @param	string	$a_event		event e.g. "createUser", "updateUser", "deleteUser", ...
  * @param	array	$a_parameter	parameter array (assoc), array("name" => ..., "phone_office" => ...)
  */
 public static function handleEvent($a_component, $a_event, $a_params)
 {
     $obj_id = $a_params['obj_id'];
     switch ($a_component) {
         case 'Services/Object':
             switch ($a_event) {
                 case 'toTrash':
                     include_once './Services/Object/classes/class.ilObjectLP.php';
                     $olp = ilObjectLP::getInstance($obj_id);
                     $olp->handleToTrash();
                     break;
                 case 'delete':
                     // ilRepUtil will raise "delete" even if only reference was deleted!
                     $all_ref = ilObject::_getAllReferences($obj_id);
                     if (!sizeof($all_ref)) {
                         include_once './Services/Object/classes/class.ilObjectLP.php';
                         $olp = ilObjectLP::getInstance($obj_id);
                         $olp->handleDelete();
                     }
                     break;
             }
             break;
         case 'Services/Tree':
             switch ($a_event) {
                 case 'moveTree':
                     if ($a_params['tree'] == 'tree') {
                         include_once './Services/Object/classes/class.ilObjectLP.php';
                         ilObjectLP::handleMove($a_params['source_id']);
                     }
                     break;
             }
             break;
     }
     return true;
 }
 function __construct($a_mode, $a_ref_id)
 {
     parent::__construct($a_mode, $a_ref_id);
     $this->obj_settings = new ilLPObjSettings($this->getObjId());
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $this->obj_lp = ilObjectLP::getInstance($this->getObjId());
 }
Ejemplo n.º 7
0
 public function getCurrentMode()
 {
     if ($this->checkObjectives()) {
         return ilLPObjSettings::LP_MODE_OBJECTIVES;
     }
     return parent::getCurrentMode();
 }
 /**
  * Handle an event in a listener.
  *
  * @param	string	$a_component	component, e.g. "Modules/Forum" or "Services/User"
  * @param	string	$a_event		event e.g. "createUser", "updateUser", "deleteUser", ...
  * @param	array	$a_parameter	parameter array (assoc), array("name" => ..., "phone_office" => ...)
  */
 static function handleEvent($a_component, $a_event, $a_parameter)
 {
     global $ilUser;
     if ($a_component == "Services/Tracking" && $a_event == "updateStatus") {
         // #13905
         include_once "Services/Tracking/classes/class.ilObjUserTracking.php";
         if (!ilObjUserTracking::_enabledLearningProgress()) {
             return;
         }
         $obj_id = $a_parameter["obj_id"];
         $user_id = $a_parameter["usr_id"];
         $status = $a_parameter["status"];
         if ($obj_id && $user_id) {
             if (ilObject::_lookupType($obj_id) != "crs") {
                 return;
             }
             // determine couse setting only once
             if (!isset(self::$course_mode[$obj_id])) {
                 include_once "./Modules/Course/classes/class.ilObjCourse.php";
                 $crs = new ilObjCourse($obj_id, false);
                 if ($crs->getStatusDetermination() == ilObjCourse::STATUS_DETERMINATION_LP) {
                     include_once './Services/Object/classes/class.ilObjectLP.php';
                     $olp = ilObjectLP::getInstance($obj_id);
                     $mode = $olp->getCurrentMode();
                 } else {
                     $mode = false;
                 }
                 self::$course_mode[$obj_id] = $mode;
             }
             $is_completed = $status == ilLPStatus::LP_STATUS_COMPLETED_NUM;
             // we are NOT using the members object because of performance issues
             switch (self::$course_mode[$obj_id]) {
                 case ilLPObjSettings::LP_MODE_MANUAL_BY_TUTOR:
                     // #11600
                     include_once "Modules/Course/classes/class.ilCourseParticipants.php";
                     ilCourseParticipants::_updatePassed($obj_id, $user_id, $is_completed, true);
                     break;
                 case ilLPObjSettings::LP_MODE_COLLECTION:
                 case ilLPObjSettings::LP_MODE_OBJECTIVES:
                     // overwrites course passed status if it was set automatically (full sync)
                     // or toggle manually set passed status to completed (1-way-sync)
                     $do_update = $is_completed;
                     include_once "Modules/Course/classes/class.ilCourseParticipants.php";
                     if (!$do_update) {
                         $part = new ilCourseParticipants($obj_id);
                         $passed = $part->getPassedInfo($user_id);
                         if (!is_array($passed) || $passed["user_id"] == -1) {
                             $do_update = true;
                         }
                     }
                     if ($do_update) {
                         ilCourseParticipants::_updatePassed($obj_id, $user_id, $is_completed);
                     }
                     break;
             }
         }
     }
 }
Ejemplo n.º 9
0
 function ilLPObjSettings($a_obj_id)
 {
     global $ilObjDataCache, $ilDB;
     $this->db = $ilDB;
     $this->obj_id = $a_obj_id;
     if (!$this->__read()) {
         $this->obj_type = $ilObjDataCache->lookupType($this->obj_id);
         include_once "Services/Object/classes/class.ilObjectLP.php";
         $olp = ilObjectLP::getInstance($this->obj_id);
         $this->obj_mode = $olp->getDefaultMode();
     }
 }
Ejemplo n.º 10
0
 function il2sop()
 {
     global $ilUser, $ilias;
     $this->setOfflineMode("il2sop");
     header('Content-Type: text/javascript; charset=UTF-8');
     include_once "./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php";
     $ob = new ilObjSAHSLearningModule($this->id);
     $module_version = $ob->getModuleVersion();
     $sahs_user = $this->il2sopSahsUser();
     $support_mail = "";
     //TODO
     $scorm_version = "1.2";
     if ($this->type == "scorm2004") {
         $scorm_version = "2004";
     }
     $tree = "";
     $learning_progress_enabled = 1;
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($this->obj_id);
     if ($olp->getCurrentMode() == 0) {
         $learning_progress_enabled = 0;
     }
     $certificate_enabled = 0;
     $adlact_data = null;
     $ilias_version = $ilias->getSetting("ilias_version");
     if ($this->type == 'scorm2004') {
         include_once "./Modules/Scorm2004/classes/ilSCORM13Player.php";
         $ob2004 = new ilSCORM13Player();
         $init_data = $ob2004->getConfigForPlayer();
         $resources = json_decode($ob2004->getCPDataInit());
         $cmi = $ob2004->getCMIData($ilUser->getID(), $this->obj_id);
         $max_attempt = $ob2004->get_max_attempts();
         $adlact_data = json_decode($ob2004->getADLActDataInit());
         //$globalobj_data = $ob2004->readGObjectiveInit();
     } else {
         include_once "./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMInitData.php";
         $slm_obj =& new ilObjSCORMLearningModule($_GET["ref_id"]);
         $init_data = ilObjSCORMInitData::getIliasScormVars($slm_obj);
         $resources = json_decode(ilObjSCORMInitData::getIliasScormResources($this->obj_id));
         $tree = json_decode(ilObjSCORMInitData::getIliasScormTree($this->obj_id));
         $cmi = json_decode(ilObjSCORMInitData::getIliasScormData($this->obj_id));
         $max_attempt = ilObjSCORMInitData::get_max_attempts($this->obj_id);
     }
     if ($max_attempt == null) {
         $max_attempt = 0;
     }
     $result = array('client_data' => array($support_mail), 'user_data' => $this->il2sopUserData(), 'lm' => array(ilObject::_lookupTitle($this->obj_id), ilObject::_lookupDescription($this->obj_id), $scorm_version, 1, $init_data, $resources, $tree, $module_version, "", $learning_progress_enabled, $certificate_enabled, $max_attempt, $adlact_data, $ilias_version), 'sahs_user' => $sahs_user, 'cmi' => $cmi);
     print json_encode($result);
 }
Ejemplo n.º 11
0
 function markedLearningStatusForExportSelected($a_scos)
 {
     global $lng;
     include_once 'Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($this->getObjId());
     $collection = $olp->getCollectionInstance();
     foreach ($a_scos as $sco_id => $value) {
         if ($collection && $collection->isAssignedEntry($sco_id)) {
             $a_scos[$sco_id] = $lng->txt('yes');
         } else {
             $a_scos[$sco_id] = $lng->txt('no');
         }
     }
     return $a_scos;
 }
 function _getStatusInfo($a_obj_id, $a_include_tlt_data = false)
 {
     global $ilDB;
     $status_info = array();
     include_once "Services/Object/classes/class.ilObjectLP.php";
     $olp = ilObjectLP::getInstance($a_obj_id);
     $collection = $olp->getCollectionInstance();
     if ($collection) {
         $status_info["items"] = $collection->getItems($a_obj_id);
         include_once './Services/MetaData/classes/class.ilMDEducational.php';
         foreach ($status_info["items"] as $item_id) {
             $status_info["in_progress"][$item_id] = array();
             $status_info["completed"][$item_id] = array();
             $status_info["tlt"][$item_id] = ilMDEducational::_getTypicalLearningTimeSeconds($a_obj_id, $item_id);
         }
         $ref_ids = ilObject::_getAllReferences($a_obj_id);
         $ref_id = end($ref_ids);
         $possible_items = $collection->getPossibleItems($ref_id);
         $chapter_ids = array_intersect(array_keys($possible_items), $status_info["items"]);
         // fix order (adapt from possible items)
         $status_info["items"] = $chapter_ids;
         if ($chapter_ids) {
             foreach ($chapter_ids as $item_id) {
                 $status_info["item_titles"][$item_id] = $possible_items[$item_id]["title"];
             }
             $set = $ilDB->query("SELECT obj_id,usr_id,spent_seconds" . " FROM lm_read_event" . " WHERE " . $ilDB->in("obj_id", $chapter_ids, "", "integer"));
             while ($row = $ilDB->fetchAssoc($set)) {
                 if ($row["spent_seconds"] < $status_info["tlt"][$row["obj_id"]]) {
                     $status_info["in_progress"][$row["obj_id"]][] = $row["usr_id"];
                 } else {
                     $status_info["completed"][$row["obj_id"]][] = $row["usr_id"];
                 }
                 if ($a_include_tlt_data) {
                     $status_info["tlt_users"][$row["obj_id"]][$row["usr_id"]] = $row["spent_seconds"];
                 }
             }
         }
     }
     if (!$a_include_tlt_data) {
         unset($status_info["tlt"]);
     }
     return $status_info;
 }
 protected function gatherCourseLPData()
 {
     global $tree, $ilDB;
     $count = 0;
     // process all courses
     $all_courses = array_keys(ilObject::_getObjectsByType("crs"));
     if ($all_courses) {
         // gather objects in trash
         $trashed_objects = $tree->getSavedNodeObjIds($all_courses);
         include_once 'Services/Object/classes/class.ilObjectLP.php';
         include_once "Modules/Course/classes/class.ilCourseParticipants.php";
         include_once "Services/Tracking/classes/class.ilLPStatusWrapper.php";
         foreach ($all_courses as $crs_id) {
             // trashed objects will not change
             if (!in_array($crs_id, $trashed_objects)) {
                 // only if LP is active
                 $olp = ilObjectLP::getInstance($crs_id);
                 if (!$olp->isActive()) {
                     continue;
                 }
                 // only save once per day
                 $ilDB->manipulate("DELETE FROM obj_lp_stat WHERE" . " obj_id = " . $ilDB->quote($crs_id, "integer") . " AND fulldate = " . $ilDB->quote(date("Ymd", $this->date), "integer"));
                 $members = new ilCourseParticipants($crs_id);
                 $members = $members->getMembers();
                 $in_progress = count(ilLPStatusWrapper::_lookupInProgressForObject($crs_id, $members));
                 $completed = count(ilLPStatusWrapper::_lookupCompletedForObject($crs_id, $members));
                 $failed = count(ilLPStatusWrapper::_lookupFailedForObject($crs_id, $members));
                 // calculate with other values - there is not direct method
                 $not_attempted = count($members) - $in_progress - $completed - $failed;
                 $set = array("type" => array("text", "crs"), "obj_id" => array("integer", $crs_id), "yyyy" => array("integer", date("Y", $this->date)), "mm" => array("integer", date("m", $this->date)), "dd" => array("integer", date("d", $this->date)), "fulldate" => array("integer", date("Ymd", $this->date)), "mem_cnt" => array("integer", count($members)), "in_progress" => array("integer", $in_progress), "completed" => array("integer", $completed), "failed" => array("integer", $failed), "not_attempted" => array("integer", $not_attempted));
                 $ilDB->insert("obj_lp_stat", $set);
                 $count++;
             }
         }
     }
     return $count;
 }
 /**
  * Constructor
  */
 function __construct($a_parent_obj, $a_parent_cmd, $a_ref_id, $a_print_mode = false)
 {
     global $ilCtrl, $lng, $ilAccess, $lng;
     $this->setId("trsmy");
     $this->ref_id = $a_ref_id;
     $this->obj_id = ilObject::_lookupObjId($a_ref_id);
     $this->is_root = $a_ref_id == ROOT_FOLDER_ID;
     if (!$this->is_root) {
         include_once './Services/Object/classes/class.ilObjectLP.php';
         $this->olp = ilObjectLP::getInstance($this->obj_id);
     }
     parent::__construct($a_parent_obj, $a_parent_cmd);
     if ($a_print_mode) {
         $this->setPrintMode(true);
     }
     $this->parseTitle($this->obj_id, "trac_summary");
     $this->setLimit(9999);
     $this->setShowTemplates(true);
     $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
     $this->addColumn($this->lng->txt("title"), "title");
     $this->setDefaultOrderField("title");
     $labels = $this->getSelectableColumns();
     foreach ($this->getSelectedColumns() as $c) {
         $this->addColumn($labels[$c]["txt"], $c);
     }
     if ($this->is_root) {
         $this->addColumn($this->lng->txt("path"));
         $this->addColumn($this->lng->txt("action"));
     }
     $this->initFilter();
     // $this->setExternalSorting(true);
     $this->setEnableHeader(true);
     $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
     $this->setRowTemplate("tpl.trac_summary_row.html", "Services/Tracking");
     $this->getItems($a_parent_obj->getObjId(), $a_ref_id);
 }
 protected function parseTableGUIItem($a_id, array $a_item)
 {
     $table_item = $a_item;
     $table_item['id'] = $a_id;
     $table_item['status'] = $this->isAssignedEntry($a_id);
     $olp = ilObjectLP::getInstance($a_item['obj_id']);
     $table_item['mode_id'] = $olp->getCurrentMode();
     $table_item['mode'] = $olp->getModeText($table_item['mode_id']);
     $table_item['anonymized'] = $olp->isAnonymized();
     return $table_item;
 }
Ejemplo n.º 16
0
 public function removeTestResults(ilTestParticipantData $participantData)
 {
     if (count($participantData->getAnonymousActiveIds())) {
         $this->removeTestResultsByActiveIds($participantData->getAnonymousActiveIds());
     }
     if (count($participantData->getUserIds())) {
         /* @var ilTestLP $testLP */
         require_once 'Services/Object/classes/class.ilObjectLP.php';
         $testLP = ilObjectLP::getInstance($this->getId());
         $testLP->resetLPDataForUserIds($participantData->getUserIds(), false);
     }
     if (count($participantData->getActiveIds())) {
         $this->removeTestActives($participantData->getActiveIds());
     }
 }
Ejemplo n.º 17
0
 function getStatus($a_packageId, $a_user_id, $auto_last_visited, $scormType = "1.2")
 {
     global $ilDB;
     include_once './Services/Tracking/classes/class.ilLPStatus.php';
     $oldStatus = ilLPStatus::_lookupStatus($a_packageId, $a_user_id);
     $status['saved_global_status'] = (int) $oldStatus;
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($a_packageId);
     $status['lp_mode'] = $olp->getCurrentMode();
     $collection = $olp->getCollectionInstance();
     if ($collection) {
         $status['scos'] = $collection->getItems();
     } else {
         $status['scos'] = array();
     }
     $status['hash'] = ilObjSCORMInitData::setHash($a_packageId, $a_user_id);
     $status['p'] = $a_user_id;
     $status['last_visited'] = null;
     $status['total_time_sec'] = 0;
     $val_set = $ilDB->queryF('SELECT last_visited, sco_total_time_sec, total_time_sec FROM sahs_user WHERE obj_id = %s AND user_id = %s', array('integer', 'integer'), array($a_packageId, $a_user_id));
     $val_rec = $ilDB->fetchAssoc($val_set);
     if ($auto_last_visited) {
         $status['last_visited'] = $val_rec["last_visited"];
     }
     if ($val_rec["total_time_sec"] == null) {
         if ($val_rec["sco_total_time_sec"] == null) {
             //fall back for old ILIAS-Versions
             if ($scormType == "2004") {
                 include_once './Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php';
                 $status['total_time_sec'] = (int) ilSCORM2004Tracking::getSumTotalTimeSecondsFromScos($a_packageId, $a_user_id, true);
             }
         } else {
             $status['total_time_sec'] = (int) $val_rec["sco_total_time_sec"];
         }
     } else {
         $status['total_time_sec'] = (int) $val_rec["total_time_sec"];
     }
     return $status;
 }
 function __initDetails($a_details_id)
 {
     global $ilObjDataCache;
     if (!$a_details_id) {
         $a_details_id = $this->getRefId();
     }
     if ($a_details_id) {
         $_GET['details_id'] = $a_details_id;
         $this->details_id = $a_details_id;
         $this->details_obj_id = $ilObjDataCache->lookupObjId($this->details_id);
         $this->details_type = $ilObjDataCache->lookupType($this->details_obj_id);
         include_once 'Services/Object/classes/class.ilObjectLP.php';
         $olp = ilObjectLP::getInstance($this->details_obj_id);
         $this->details_mode = $olp->getCurrentMode();
     }
 }
    function importSuccess($a_file)
    {
        global $ilDB, $ilUser;
        include_once "./Services/Tracking/classes/class.ilLPStatus.php";
        $scos = array();
        //get all SCO's of this object ONLY RELEVANT!
        include_once './Services/Object/classes/class.ilObjectLP.php';
        $olp = ilObjectLP::getInstance($this->getId());
        $collection = $olp->getCollectionInstance();
        if ($collection) {
            $scos = $collection->getItems();
        }
        $fhandle = fopen($a_file, "r");
        $obj_id = $this->getID();
        $fields = fgetcsv($fhandle, pow(2, 16), ';');
        // $users = array();
        while (($csv_rows = fgetcsv($fhandle, pow(2, 16), ";")) !== FALSE) {
            $data = array_combine($fields, $csv_rows);
            //no check the format - sufficient to import users
            if ($data["Login"]) {
                $user_id = $this->get_user_id($data["Login"]);
            }
            if ($data["login"]) {
                $user_id = $this->get_user_id($data["login"]);
            }
            //add mail in future
            if ($data["user"] && is_int($data["user"])) {
                $user_id = $data["user"];
            }
            if ($user_id > 0) {
                $last_access = ilUtil::now();
                if ($data['Date']) {
                    $date_ex = explode('.', $data['Date']);
                    $last_access = implode('-', array($date_ex[2], $date_ex[1], $date_ex[0]));
                }
                if ($data['LastAccess']) {
                    $last_access = $data['LastAccess'];
                }
                $status = ilLPStatus::LP_STATUS_COMPLETED_NUM;
                // $users[] = $user_id;
                if ($data["Status"]) {
                    if (is_int($data["Status"])) {
                        $status = $data["Status"];
                    } else {
                        if ($data["Status"] == ilLPStatus::LP_STATUS_NOT_ATTEMPTED) {
                            $status = ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM;
                        } else {
                            if ($data["Status"] == ilLPStatus::LP_STATUS_IN_PROGRESS) {
                                $status = ilLPStatus::LP_STATUS_IN_PROGRESS_NUM;
                            } else {
                                if ($data["Status"] == ilLPStatus::LP_STATUS_FAILED) {
                                    $status = ilLPStatus::LP_STATUS_FAILED_NUM;
                                }
                            }
                        }
                    }
                }
                $attempts = null;
                if ($data["Attempts"]) {
                    $attempts = $data["Attempts"];
                }
                $percentage_completed = 0;
                if ($status == ilLPStatus::LP_STATUS_COMPLETED_NUM) {
                    $percentage_completed = 100;
                }
                if ($data['percentageCompletedSCOs']) {
                    $percentage_completed = $data['percentageCompletedSCOs'];
                }
                $sco_total_time_sec = null;
                if ($data['SumTotal_timeSeconds']) {
                    $sco_total_time_sec = $data['SumTotal_timeSeconds'];
                }
                $this->importSuccessForSahsUser($user_id, $last_access, $status, $attempts, $percentage_completed, $sco_total_time_sec);
                if ($status == ilLPStatus::LP_STATUS_COMPLETED_NUM) {
                    foreach ($scos as $sco_id) {
                        $statement = $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_id, $sco_id, 'cmi.core.lesson_status', $obj_id));
                        if ($ilDB->numRows($statement) > 0) {
                            $ilDB->update('scorm_tracking', array('rvalue' => array('clob', 'completed'), 'c_timestamp' => array('timestamp', $last_access)), array('user_id' => array('integer', $user_id), 'sco_id' => array('integer', $sco_id), 'lvalue' => array('text', 'cmi.core.lesson_status'), 'obj_id' => array('integer', $obj_id)));
                        } else {
                            $ilDB->insert('scorm_tracking', array('obj_id' => array('integer', $obj_id), 'user_id' => array('integer', $user_id), 'sco_id' => array('integer', $sco_id), 'lvalue' => array('text', 'cmi.core.lesson_status'), 'rvalue' => array('clob', 'completed'), 'c_timestamp' => array('timestamp', $last_access)));
                        }
                    }
                }
            } else {
                //echo "Warning! User $csv_rows[0] does not exist in ILIAS. Data for this user was skipped.\n";
            }
        }
        include_once "./Services/Tracking/classes/class.ilLPStatusWrapper.php";
        ilLPStatusWrapper::_refreshStatus($this->getId());
        //		<4.2.6: foreach ($users as $user_id) {ilLPStatusWrapper::_updateStatus($obj_id, $user_id);}
        return 0;
    }
Ejemplo n.º 20
0
 /**
  * Deletes the selected user data for the test object
  *
  * Deletes the selected user data for the test object
  *
  * @access    public
  */
 function confirmDeleteSelectedUserDataObject()
 {
     global $ilDB, $lng;
     require_once 'Modules/Test/classes/class.ilTestParticipantData.php';
     $participantData = new ilTestParticipantData($ilDB, $lng);
     if ($this->object->getFixedParticipants()) {
         $participantData->setUserIds($_POST["chbUser"]);
     } else {
         $participantData->setActiveIds($_POST["chbUser"]);
     }
     $participantData->load($this->object->getTestId());
     /* @var ilTestLP $testLP */
     require_once 'Services/Object/classes/class.ilObjectLP.php';
     $testLP = ilObjectLP::getInstance($this->object->getId());
     $testLP->resetLPDataForUserIds($participantData->getUserIds(), false);
     $this->object->removeTestActives($participantData->getActiveIds());
     #$this->object->removeSelectedTestResults($active_ids);
     // Update lp status
     #include_once './Services/Tracking/classes/class.ilLPStatusWrapper.php';
     #ilLPStatusWrapper::_refreshStatus($this->object->getId());
     ilUtil::sendSuccess($this->lng->txt("tst_selected_user_data_deleted"), true);
     $this->ctrl->redirect($this, "participants");
 }
Ejemplo n.º 21
0
 /**
  * Determine status
  *
  * @param	integer		object id
  * @param	integer		user id
  * @param	object		object (optional depends on object type)
  * @return	integer		status
  */
 function determineStatus($a_obj_id, $a_user_id, $a_obj = null)
 {
     global $ilObjDataCache;
     $status['completed'] = true;
     $status['failed'] = false;
     $status['in_progress'] = false;
     switch ($ilObjDataCache->lookupType($a_obj_id)) {
         case "crs":
         case "fold":
         case "grp":
             include_once "./Services/Tracking/classes/class.ilChangeEvent.php";
             if (ilChangeEvent::hasAccessed($a_obj_id, $a_user_id)) {
                 $status['in_progress'] = true;
             }
             include_once './Services/Object/classes/class.ilObjectLP.php';
             $olp = ilObjectLP::getInstance($a_obj_id);
             $collection = $olp->getCollectionInstance();
             if ($collection) {
                 $grouped_items = $collection->getGroupedItemsForLPStatus();
             }
             if (!sizeof($grouped_items)) {
                 // #11513 - empty collections cannot be completed
                 $status['completed'] = false;
             } else {
                 foreach ($grouped_items as $grouping_id => $grouping) {
                     $isGrouping = $grouping_id ? true : false;
                     $status = self::determineGroupingStatus($status, $grouping, $a_user_id, $isGrouping);
                 }
             }
             if ($status['completed']) {
                 return self::LP_STATUS_COMPLETED_NUM;
             }
             if ($status['failed']) {
                 return self::LP_STATUS_FAILED_NUM;
             }
             if ($status['in_progress']) {
                 return self::LP_STATUS_IN_PROGRESS_NUM;
             }
             break;
     }
     return self::LP_STATUS_NOT_ATTEMPTED_NUM;
 }
Ejemplo n.º 22
0
 protected function checkLPIcon($a_id)
 {
     global $ilUser;
     // do it once for all chapters
     if ($this->lp_cache[$this->lm_obj->getId()] === null) {
         $this->lp_cache[$this->lm_obj->getId()] = false;
         include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
         if (ilLearningProgressAccess::checkAccess($this->lm_obj->getRefId())) {
             $info = null;
             include_once './Services/Object/classes/class.ilObjectLP.php';
             $olp = ilObjectLP::getInstance($this->lm_obj->getId());
             if ($olp->getCurrentMode() == ilLPObjSettings::LP_MODE_COLLECTION_MANUAL || $olp->getCurrentMode() == ilLPObjSettings::LP_MODE_COLLECTION_TLT) {
                 include_once "Services/Tracking/classes/class.ilLPStatusFactory.php";
                 $class = ilLPStatusFactory::_getClassById($this->lm_obj->getId(), $olp->getCurrentMode());
                 $info = $class::_getStatusInfo($this->lm_obj->getId());
             }
             // parse collection items
             if (is_array($info["items"])) {
                 foreach ($info["items"] as $item_id) {
                     $status = ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM;
                     if (is_array($info["in_progress"][$item_id]) && in_array($ilUser->getId(), $info["in_progress"][$item_id])) {
                         $status = ilLPStatus::LP_STATUS_IN_PROGRESS_NUM;
                     } else {
                         if (is_array($info["completed"][$item_id]) && in_array($ilUser->getId(), $info["completed"][$item_id])) {
                             $status = ilLPStatus::LP_STATUS_COMPLETED_NUM;
                         }
                     }
                     $this->lp_cache[$this->lm_obj->getId()][$item_id] = $status;
                 }
             }
         }
         include_once './Services/Tracking/classes/class.ilLearningProgressBaseGUI.php';
     }
     if (is_array($this->lp_cache[$this->lm_obj->getId()]) && isset($this->lp_cache[$this->lm_obj->getId()][$a_id])) {
         return ilLearningProgressBaseGUI::_getImagePathForStatus($this->lp_cache[$this->lm_obj->getId()][$a_id]);
     }
 }
Ejemplo n.º 23
0
 public static function preloadListGUIData($a_obj_ids)
 {
     global $ilDB, $ilUser, $lng;
     $res = array();
     include_once "Services/Tracking/classes/class.ilObjUserTracking.php";
     if ($ilUser->getId() != ANONYMOUS_USER_ID && ilObjUserTracking::_enabledLearningProgress() && ilObjUserTracking::_hasLearningProgressLearner() && ilObjUserTracking::_hasLearningProgressListGUI()) {
         include_once "Services/Object/classes/class.ilObjectLP.php";
         // validate objects
         $valid = array();
         $existing = ilLPObjSettings::_lookupDBModeForObjects($a_obj_ids);
         foreach ($existing as $obj_id => $obj_mode) {
             if ($obj_mode != ilLPObjSettings::LP_MODE_DEACTIVATED) {
                 $valid[$obj_id] = $obj_id;
             }
         }
         if (sizeof($existing) != sizeof($a_obj_ids)) {
             // missing objects (default mode)
             foreach (array_diff($a_obj_ids, $existing) as $obj_id) {
                 $olp = ilObjectLP::getInstance($obj_id);
                 $mode = $olp->getCurrentMode();
                 if ($mode == ilLPObjSettings::LP_MODE_DEACTIVATED) {
                     // #11141
                     unset($valid[$obj_id]);
                 } else {
                     if ($mode != ilLPObjSettings::LP_MODE_UNDEFINED) {
                         $valid[$obj_id] = $obj_id;
                     }
                 }
             }
             unset($existing);
         }
         $valid = array_values($valid);
         // get user lp data
         $sql = "SELECT status, status_dirty, obj_id FROM ut_lp_marks" . " WHERE " . $ilDB->in("obj_id", $valid, "", "integer") . " AND usr_id = " . $ilDB->quote($ilUser->getId(), "integer");
         $set = $ilDB->query($sql);
         while ($row = $ilDB->fetchAssoc($set)) {
             if (!$row["status_dirty"]) {
                 $res[$row["obj_id"]] = $row["status"];
             } else {
                 $res[$row["obj_id"]] = self::_lookupStatus($row["obj_id"], $ilUser->getId());
             }
         }
         // process missing user entries (same as dirty entries, see above)
         foreach ($valid as $obj_id) {
             if (!isset($res[$obj_id])) {
                 $res[$obj_id] = self::_lookupStatus($obj_id, $ilUser->getId());
                 if ($res[$obj_id] === null) {
                     $res[$obj_id] = self::LP_STATUS_NOT_ATTEMPTED_NUM;
                 }
             }
         }
         // value to icon
         $lng->loadLanguageModule("trac");
         include_once "./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php";
         foreach ($res as $obj_id => $status) {
             $path = ilLearningProgressBaseGUI::_getImagePathForStatus($status);
             $text = ilLearningProgressBaseGUI::_getStatusText($status);
             $res[$obj_id] = ilUtil::img($path, $text);
         }
     }
     self::$list_gui_cache = $res;
 }
 function _getInstance($a_obj_id, $a_mode = NULL)
 {
     if ($a_mode === NULL) {
         include_once 'Services/Object/classes/class.ilObjectLP.php';
         $olp = ilObjectLP::getInstance($a_obj_id);
         $a_mode = $olp->getCurrentMode();
     }
     switch ($a_mode) {
         case ilLPObjSettings::LP_MODE_VISITS:
             include_once self::PATH . 'class.ilLPStatusVisits.php';
             return new ilLPStatusVisits($a_obj_id);
         case ilLPObjSettings::LP_MODE_COLLECTION:
             include_once self::PATH . 'class.ilLPStatusCollection.php';
             return new ilLPStatusCollection($a_obj_id);
         case ilLPObjSettings::LP_MODE_TLT:
             include_once self::PATH . 'class.ilLPStatusTypicalLearningTime.php';
             return new ilLPStatusTypicalLearningTime($a_obj_id);
         case ilLPObjSettings::LP_MODE_SCORM:
             include_once self::PATH . 'class.ilLPStatusSCORM.php';
             return new ilLPStatusSCORM($a_obj_id);
         case ilLPObjSettings::LP_MODE_TEST_FINISHED:
             include_once self::PATH . 'class.ilLPStatusTestFinished.php';
             return new ilLPStatusTestFinished($a_obj_id);
         case ilLPObjSettings::LP_MODE_TEST_PASSED:
             include_once self::PATH . 'class.ilLPStatusTestPassed.php';
             return new ilLPStatusTestPassed($a_obj_id);
         case ilLPObjSettings::LP_MODE_MANUAL:
             include_once self::PATH . 'class.ilLPStatusManual.php';
             return new ilLPStatusManual($a_obj_id);
         case ilLPObjSettings::LP_MODE_MANUAL_BY_TUTOR:
             include_once self::PATH . 'class.ilLPStatusManualByTutor.php';
             return new ilLPStatusManualByTutor($a_obj_id);
         case ilLPObjSettings::LP_MODE_EXERCISE_RETURNED:
             include_once self::PATH . 'class.ilLPStatusExerciseReturned.php';
             return new ilLPStatusExerciseReturned($a_obj_id);
         case ilLPObjSettings::LP_MODE_OBJECTIVES:
             include_once self::PATH . 'class.ilLPStatusObjectives.php';
             return new ilLPStatusObjectives($a_obj_id);
         case ilLPObjSettings::LP_MODE_SCORM_PACKAGE:
             include_once self::PATH . 'class.ilLPStatusSCORMPackage.php';
             return new ilLPStatusSCORMPackage($a_obj_id);
         case ilLPObjSettings::LP_MODE_EVENT:
             include_once self::PATH . 'class.ilLPStatusEvent.php';
             return new ilLPStatusEvent($a_obj_id);
         case ilLPObjSettings::LP_MODE_PLUGIN:
             include_once self::PATH . 'class.ilLPStatusPlugin.php';
             return new ilLPStatusPlugin($a_obj_id);
         case ilLPObjSettings::LP_MODE_COLLECTION_TLT:
             include_once self::PATH . 'class.ilLPStatusCollectionTLT.php';
             return new ilLPStatusCollectionTLT($a_obj_id);
         case ilLPObjSettings::LP_MODE_COLLECTION_MANUAL:
             include_once self::PATH . 'class.ilLPStatusCollectionManual.php';
             return new ilLPStatusCollectionManual($a_obj_id);
         case ilLPObjSettings::LP_MODE_QUESTIONS:
             include_once self::PATH . 'class.ilLPStatusQuestions.php';
             return new ilLPStatusQuestions($a_obj_id);
         case ilLPObjSettings::LP_MODE_DEACTIVATED:
             include_once 'Services/Tracking/classes/class.ilLPStatus.php';
             return new ilLPStatus($a_obj_id);
             // START PATCH RUBRIC CPKN 2015
         // START PATCH RUBRIC CPKN 2015
         case ilLPObjSettings::LP_MODE_RUBRIC:
             include_once self::PATH . 'class.ilLPStatusRubric.php';
             return new ilLPStatusRubric($a_obj_id);
             // END PATCH RUBRIC CPKN 2015
         // END PATCH RUBRIC CPKN 2015
         case ilLPObjSettings::LP_MODE_UNDEFINED:
             include_once 'Services/Object/classes/class.ilObjectLP.php';
             $olp = ilObjectLP::getInstance($a_obj_id);
             $mode = $olp->getCurrentMode();
             if ($mode != ilLPObjSettings::LP_MODE_UNDEFINED) {
                 return self::_getInstance($a_obj_id, $mode);
             }
             // fallthrough
         // fallthrough
         default:
             echo "ilLPStatusFactory: unknown type " . $a_mode;
             exit;
     }
 }
Ejemplo n.º 25
0
 /**
  * Get ilObjectPlugin for object id
  * 
  * @param int $a_obj_id
  * @return ilObjectPlugin
  */
 protected static function initPluginObj($a_obj_id)
 {
     include_once "Services/Object/classes/class.ilObjectLP.php";
     $olp = ilObjectLP::getInstance($a_obj_id);
     return $olp->getPluginInstance();
 }
Ejemplo n.º 26
0
 /**
  * Determine percentage
  *
  * @param	integer		object id
  * @param	integer		user id
  * @param	object		object (optional depends on object type)
  * @return	integer		percentage
  */
 function determinePercentage($a_obj_id, $a_user_id, $a_obj = null)
 {
     // Which sco's determine the status
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($a_obj_id);
     $collection = $olp->getCollectionInstance();
     if ($collection) {
         $scos = $collection->getItems();
         $reqscos = count($scos);
         include_once './Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php';
         $subtype = ilObjSAHSLearningModule::_lookupSubType($a_obj_id);
         if ($subtype != "scorm2004") {
             include_once "./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMTracking.php";
             $compl = ilObjSCORMTracking::_countCompleted($scos, $a_obj_id, $a_user_id);
         } else {
             include_once "./Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php";
             $compl = ilSCORM2004Tracking::_countCompleted($scos, $a_obj_id, $a_user_id, true);
         }
     }
     if ($reqscos > 0) {
         $per = min(100, 100 / $reqscos * $compl);
     } else {
         $per = 100;
     }
     return $per;
 }
 /**
  * get lm menu html
  */
 function setilLMMenu($a_offline = false, $a_export_format = "", $a_active = "content", $a_use_global_tabs = false, $a_as_subtabs = false, $a_cur_page = 0)
 {
     global $ilCtrl, $ilUser, $ilAccess, $ilTabs, $rbacsystem, $ilPluginAdmin;
     if ($a_as_subtabs) {
         $addcmd = "addSubTabTarget";
         $getcmd = "getSubTabHTML";
     } else {
         $addcmd = "addTarget";
         $getcmd = "getHTML";
     }
     $active[$a_active] = true;
     if (!$this->object->isActiveLMMenu()) {
         return "";
     }
     if ($a_use_global_tabs) {
         $tabs_gui = $ilTabs;
     } else {
         $tabs_gui = new ilTabsGUI();
     }
     // Determine whether the view of a learning resource should
     // be shown in the frameset of ilias, or in a separate window.
     //$showViewInFrameset = $this->ilias->ini->readVariable("layout","view_target") == "frame";
     $showViewInFrameset = true;
     if ($showViewInFrameset && !$a_offline) {
         $buttonTarget = ilFrameTargetInfo::_getFrame("MainContent");
     } else {
         $buttonTarget = "_top";
     }
     if ($a_export_format == "scorm") {
         $buttonTarget = "";
     }
     include_once "./Services/Payment/classes/class.ilPaymentObject.php";
     $requires_purchase_to_access = ilPaymentObject::_requiresPurchaseToAccess((int) $_GET['ref_id']);
     // content
     if (!$a_offline && $ilAccess->checkAccess("read", "", $_GET["ref_id"])) {
         $ilCtrl->setParameterByClass("illmpresentationgui", "obj_id", $_GET["obj_id"]);
         $tabs_gui->{$addcmd}("content", $ilCtrl->getLinkTargetByClass("illmpresentationgui", "layout"), "", "", $buttonTarget, $active["content"]);
     }
     // table of contents
     if (!$requires_purchase_to_access && $this->object->isActiveTOC() && $ilAccess->checkAccess("read", "", $_GET["ref_id"])) {
         if (!$a_offline) {
             $ilCtrl->setParameterByClass("illmpresentationgui", "obj_id", $_GET["obj_id"]);
             $link = $ilCtrl->getLinkTargetByClass("illmpresentationgui", "showTableOfContents");
         } else {
             $link = "./table_of_contents.html";
         }
         $tabs_gui->{$addcmd}("cont_toc", $link, "", "", $buttonTarget, $active["toc"]);
     }
     // print view
     if (!$requires_purchase_to_access && $this->object->isActivePrintView() && $ilAccess->checkAccess("read", "", $_GET["ref_id"])) {
         if (!$a_offline) {
             $ilCtrl->setParameterByClass("illmpresentationgui", "obj_id", $_GET["obj_id"]);
             $link = $ilCtrl->getLinkTargetByClass("illmpresentationgui", "showPrintViewSelection");
             $tabs_gui->{$addcmd}("cont_print_view", $link, "", "", $buttonTarget, $active["print"]);
         }
     }
     // download
     if (!$requires_purchase_to_access && $ilUser->getId() == ANONYMOUS_USER_ID) {
         $is_public = $this->object->isActiveDownloadsPublic();
     } else {
         if (!$requires_purchase_to_access) {
             $is_public = true;
         }
     }
     if (!$requires_purchase_to_access && $this->object->isActiveDownloads() && !$a_offline && $is_public && $ilAccess->checkAccess("read", "", $_GET["ref_id"])) {
         $ilCtrl->setParameterByClass("illmpresentationgui", "obj_id", $_GET["obj_id"]);
         $link = $ilCtrl->getLinkTargetByClass("illmpresentationgui", "showDownloadList");
         $tabs_gui->{$addcmd}("download", $link, "", "", $buttonTarget, $active["download"]);
     }
     // info button
     if ($a_export_format != "scorm" && !$a_offline) {
         if (!$a_offline) {
             $ilCtrl->setParameterByClass("illmpresentationgui", "obj_id", $_GET["obj_id"]);
             $link = $this->ctrl->getLinkTargetByClass(array("illmpresentationgui", "ilinfoscreengui"), "showSummary");
         } else {
             $link = "./info.html";
         }
         $tabs_gui->{$addcmd}($requires_purchase_to_access ? 'buy' : 'info_short', $link, "", "", $buttonTarget, $active["info"]);
     }
     include_once './Services/Tracking/classes/class.ilLearningProgressAccess.php';
     if (ilLearningProgressAccess::checkAccess($_GET["ref_id"])) {
         include_once './Services/Object/classes/class.ilObjectLP.php';
         $olp = ilObjectLP::getInstance($this->object->getId());
         if ($olp->getCurrentMode() == ilLPObjSettings::LP_MODE_COLLECTION_MANUAL) {
             $tabs_gui->{$addcmd}("learning_progress", $this->ctrl->getLinkTargetByClass(array("illmpresentationgui", "illearningprogressgui"), "editmanual"), "", "", $buttonTarget, $active["learning_progress"]);
         } else {
             if ($olp->getCurrentMode() == ilLPObjSettings::LP_MODE_COLLECTION_TLT) {
                 $tabs_gui->{$addcmd}("learning_progress", $this->ctrl->getLinkTargetByClass(array("illmpresentationgui", "illearningprogressgui"), "showtlt"), "", "", $buttonTarget, $active["learning_progress"]);
             }
         }
     }
     // edit learning module
     if (!$a_offline && $a_cur_page > 0) {
         if ($rbacsystem->checkAccess("write", $_GET["ref_id"])) {
             //$page_id = $this->getCurrentPageId();
             $page_id = $a_cur_page;
             $tabs_gui->{$addcmd}("edit_page", ILIAS_HTTP_PATH . "/ilias.php?baseClass=ilLMEditorGUI&ref_id=" . $_GET["ref_id"] . "&obj_id=" . $page_id . "&to_page=1", "", "", $buttonTarget, $active["edit_page"]);
         }
     }
     if (!$requires_purchase_to_access) {
         // get user defined menu entries
         $this->__initLMMenuEditor();
         $entries = $this->lmme_obj->getMenuEntries(true);
         if (count($entries) > 0 && $ilAccess->checkAccess("read", "", $_GET["ref_id"])) {
             foreach ($entries as $entry) {
                 // build goto-link for internal resources
                 if ($entry["type"] == "intern") {
                     $entry["link"] = ILIAS_HTTP_PATH . "/goto.php?target=" . $entry["link"];
                 }
                 // add http:// prefix if not exist
                 if (!strstr($entry["link"], '://') && !strstr($entry["link"], 'mailto:')) {
                     $entry["link"] = "http://" . $entry["link"];
                 }
                 if (!strstr($entry["link"], 'mailto:')) {
                     $entry["link"] = ilUtil::appendUrlParameterString($entry["link"], "ref_id=" . $this->ref_id . "&structure_id=" . $this->obj_id);
                 }
                 $tabs_gui->{$addcmd}($entry["title"], $entry["link"], "", "", "_blank", "", true);
             }
         }
     }
     // user interface hook [uihk]
     $pl_names = $ilPluginAdmin->getActivePluginsForSlot(IL_COMP_SERVICE, "UIComponent", "uihk");
     $plugin_html = false;
     foreach ($pl_names as $pl) {
         $ui_plugin = ilPluginAdmin::getPluginObject(IL_COMP_SERVICE, "UIComponent", "uihk", $pl);
         $gui_class = $ui_plugin->getUIClassInstance();
         $resp = $gui_class->modifyGUI("Modules/LearningModule", "lm_menu_tabs", array("lm_menu_tabs" => $tabs_gui));
     }
     return $tabs_gui->{$getcmd}();
 }
Ejemplo n.º 28
0
 function showLearningProgress($a_tpl)
 {
     global $ilUser, $rbacsystem;
     if (!$rbacsystem->checkAccess('read', $this->gui_object->object->getRefId())) {
         return false;
     }
     if ($ilUser->getId() == ANONYMOUS_USER_ID) {
         return false;
     }
     include_once "Services/Tracking/classes/class.ilObjUserTracking.php";
     if (!ilObjUserTracking::_enabledLearningProgress() and $ilUser->getId() != ANONYMOUS_USER_ID) {
         return false;
     }
     include_once './Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($this->gui_object->object->getId());
     if ($olp->getCurrentMode() != ilLPObjSettings::LP_MODE_MANUAL) {
         return false;
     }
     include_once 'Services/Tracking/classes/class.ilLPMarks.php';
     $this->lng->loadLanguageModule('trac');
     // section header
     //		$a_tpl->setCurrentBlock("header_row");
     $a_tpl->setVariable("TXT_SECTION", $this->lng->txt('learning_progress'));
     $a_tpl->parseCurrentBlock();
     // $a_tpl->touchBlock("row");
     // status
     $i_tpl = new ilTemplate("tpl.lp_edit_manual_info_page.html", true, true, "Services/Tracking");
     $i_tpl->setVariable("INFO_EDITED", $this->lng->txt("trac_info_edited"));
     $i_tpl->setVariable("SELECT_STATUS", ilUtil::formSelect((int) ilLPMarks::_hasCompleted($ilUser->getId(), $this->gui_object->object->getId()), 'lp_edit', array(0 => $this->lng->txt('trac_not_completed'), 1 => $this->lng->txt('trac_completed')), false, true));
     $i_tpl->setVariable("TXT_SAVE", $this->lng->txt("save"));
     $a_tpl->setCurrentBlock("pv");
     $a_tpl->setVariable("TXT_PROPERTY_VALUE", $i_tpl->get());
     $a_tpl->parseCurrentBlock();
     $a_tpl->setCurrentBlock("property_row");
     $a_tpl->setVariable("TXT_PROPERTY", $this->lng->txt('trac_status'));
     $a_tpl->parseCurrentBlock();
     // $a_tpl->touchBlock("row");
     // More infos for lm's
     if ($this->gui_object->object->getType() == 'lm' || $this->gui_object->object->getType() == 'htlm') {
         $a_tpl->setCurrentBlock("pv");
         include_once 'Services/Tracking/classes/class.ilLearningProgress.php';
         $progress = ilLearningProgress::_getProgress($ilUser->getId(), $this->gui_object->object->getId());
         if ($progress['access_time']) {
             $a_tpl->setVariable("TXT_PROPERTY_VALUE", ilDatePresentation::formatDate(new ilDateTime($progress['access_time'], IL_CAL_DATETIME)));
         } else {
             $a_tpl->setVariable("TXT_PROPERTY_VALUE", $this->lng->txt('trac_not_accessed'));
         }
         $a_tpl->parseCurrentBlock();
         $a_tpl->setCurrentBlock("property_row");
         $a_tpl->setVariable("TXT_PROPERTY", $this->lng->txt('trac_last_access'));
         $a_tpl->parseCurrentBlock();
         // $a_tpl->touchBlock("row");
         // tags of all users
         $a_tpl->setCurrentBlock("pv");
         $a_tpl->setVariable("TXT_PROPERTY_VALUE", (int) $progress['visits']);
         $a_tpl->parseCurrentBlock();
         $a_tpl->setCurrentBlock("property_row");
         $a_tpl->setVariable("TXT_PROPERTY", $this->lng->txt('trac_visits'));
         $a_tpl->parseCurrentBlock();
         // $a_tpl->touchBlock("row");
         if ($this->gui_object->object->getType() == 'lm') {
             // tags of all users
             $a_tpl->setCurrentBlock("pv");
             $a_tpl->setVariable("TXT_PROPERTY_VALUE", ilFormat::_secondsToString($progress['spent_seconds']));
             $a_tpl->parseCurrentBlock();
             $a_tpl->setCurrentBlock("property_row");
             $a_tpl->setVariable("TXT_PROPERTY", $this->lng->txt('trac_spent_time'));
             $a_tpl->parseCurrentBlock();
             // $a_tpl->touchBlock("row");
         }
     }
     // #10493
     $a_tpl->touchBlock("row");
 }
 protected function initEditUserForm($a_user_id, $a_obj_id, $a_cancel = null)
 {
     global $lng, $ilCtrl;
     include_once 'Services/Object/classes/class.ilObjectLP.php';
     $olp = ilObjectLP::getInstance($a_obj_id);
     $lp_mode = $olp->getCurrentMode();
     include_once './Services/Form/classes/class.ilPropertyFormGUI.php';
     $form = new ilPropertyFormGUI();
     $form->setFormAction($ilCtrl->getFormAction($this, "updateUser"));
     $form->setTitle($lng->txt("edit") . ": " . ilObject::_lookupTitle($a_obj_id));
     $form->setDescription($lng->txt('trac_mode') . ": " . $olp->getModeText($lp_mode));
     include_once "Services/User/classes/class.ilUserUtil.php";
     $user = new ilNonEditableValueGUI($lng->txt("user"), null, true);
     $user->setValue(ilUserUtil::getNamePresentation($a_user_id, true));
     $form->addItem($user);
     include_once 'Services/Tracking/classes/class.ilLPMarks.php';
     $marks = new ilLPMarks($a_obj_id, $a_user_id);
     $type = ilObject::_lookupType($a_obj_id);
     if ($type != 'lm') {
         $mark = new ilTextInputGUI($lng->txt("trac_mark"), "mark");
         $mark->setValue($marks->getMark());
         $mark->setMaxLength(32);
         $form->addItem($mark);
     }
     $comm = new ilTextInputGUI($lng->txt("trac_comment"), "comment");
     $comm->setValue($marks->getComment());
     $form->addItem($comm);
     if ($lp_mode == ilLPObjSettings::LP_MODE_MANUAL || $lp_mode == ilLPObjSettings::LP_MODE_MANUAL_BY_TUTOR) {
         include_once "./Services/Tracking/classes/class.ilLPStatus.php";
         $completed = ilLPStatus::_lookupStatus($a_obj_id, $a_user_id);
         $status = new ilCheckboxInputGUI($lng->txt('trac_completed'), "completed");
         $status->setChecked($completed == ilLPStatus::LP_STATUS_COMPLETED_NUM);
         $form->addItem($status);
     }
     $form->addCommandButton("updateUser", $lng->txt('save'));
     if ($a_cancel) {
         $form->addCommandButton($a_cancel, $lng->txt('cancel'));
     }
     return $form;
 }
Ejemplo n.º 30
0
 protected function getSelectableUserColumns($a_in_course = false, $a_in_group = false)
 {
     global $lng, $ilSetting;
     $cols = $privacy_fields = array();
     include_once "./Services/User/classes/class.ilUserProfile.php";
     $up = new ilUserProfile();
     $up->skipGroup("preferences");
     $up->skipGroup("settings");
     $up->skipGroup("interests");
     $ufs = $up->getStandardFields();
     // default fields
     $cols["login"] = array("txt" => $lng->txt("login"), "default" => true);
     if (!$this->anonymized) {
         $cols["firstname"] = array("txt" => $lng->txt("firstname"), "default" => true);
         $cols["lastname"] = array("txt" => $lng->txt("lastname"), "default" => true);
     }
     // show only if extended data was activated in lp settings
     include_once 'Services/Tracking/classes/class.ilObjUserTracking.php';
     $tracking = new ilObjUserTracking();
     if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS)) {
         $cols["first_access"] = array("txt" => $lng->txt("trac_first_access"), "default" => true);
         $cols["last_access"] = array("txt" => $lng->txt("trac_last_access"), "default" => true);
     }
     if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_READ_COUNT)) {
         $cols["read_count"] = array("txt" => $lng->txt("trac_read_count"), "default" => true);
     }
     if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_SPENT_SECONDS)) {
         $cols["spent_seconds"] = array("txt" => $lng->txt("trac_spent_seconds"), "default" => true);
     }
     if ($this->isPercentageAvailable($this->obj_id)) {
         $cols["percentage"] = array("txt" => $lng->txt("trac_percentage"), "default" => true);
     }
     // do not show status if learning progress is deactivated
     $olp = ilObjectLP::getInstance($this->obj_id);
     if ($olp->isActive()) {
         $cols["status"] = array("txt" => $lng->txt("trac_status"), "default" => true);
         $cols['status_changed'] = array('txt' => $lng->txt('trac_status_changed'), 'default' => false);
     }
     if ($this->type != "lm") {
         $cols["mark"] = array("txt" => $lng->txt("trac_mark"), "default" => true);
     }
     $cols["u_comment"] = array("txt" => $lng->txt("trac_comment"), "default" => false);
     $cols["create_date"] = array("txt" => $lng->txt("create_date"), "default" => false);
     $cols["language"] = array("txt" => $lng->txt("language"), "default" => false);
     // add user data only if object is [part of] course
     if (!$this->anonymized && ($a_in_course || $a_in_group)) {
         // only show if export permission is granted
         include_once 'Services/PrivacySecurity/classes/class.ilPrivacySettings.php';
         if (ilPrivacySettings::_getInstance()->checkExportAccess($this->ref_id)) {
             // other user profile fields
             foreach ($ufs as $f => $fd) {
                 if (!isset($cols[$f]) && $f != "username" && !$fd["lists_hide"]) {
                     if ($a_in_course && !($fd["course_export_fix_value"] || $ilSetting->get("usr_settings_course_export_" . $f))) {
                         continue;
                     }
                     if ($a_in_group && !($fd["group_export_fix_value"] || $ilSetting->get("usr_settings_group_export_" . $f))) {
                         continue;
                     }
                     $cols[$f] = array("txt" => $lng->txt($f), "default" => false);
                     $privacy_fields[] = $f;
                 }
             }
             // additional defined user data fields
             include_once './Services/User/classes/class.ilUserDefinedFields.php';
             $user_defined_fields = ilUserDefinedFields::_getInstance();
             if ($a_in_course) {
                 $user_defined_fields = $user_defined_fields->getCourseExportableFields();
             } else {
                 $user_defined_fields = $user_defined_fields->getGroupExportableFields();
             }
             foreach ($user_defined_fields as $definition) {
                 if ($definition["field_type"] != UDF_TYPE_WYSIWYG) {
                     $f = "udf_" . $definition["field_id"];
                     $cols[$f] = array("txt" => $definition["field_name"], "default" => false);
                     $privacy_fields[] = $f;
                 }
             }
         }
     }
     return array($cols, $privacy_fields);
 }