/** * 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/Tracking/classes/class.ilLPObjSettings.php'; if (ilLPObjSettings::_lookupMode(ilObject::_lookupObjId($a_ref_id)) == LP_MODE_DEACTIVATED) { return false; } if (!$ilAccess->checkAccess('read', '', $a_ref_id)) { return false; } if ($a_allow_only_read) { return true; } return false; }
/** * Init property form * * @return ilPropertyFormGUI $form */ protected function initFormSettings() { include_once './Services/Form/classes/class.ilPropertyFormGUI.php'; $form = new ilPropertyFormGUI(); $form->setTitle($this->lng->txt('tracking_settings')); $form->setFormAction($this->ctrl->getFormAction($this)); // Mode $mod = new ilRadioGroupInputGUI($this->lng->txt('trac_mode'), 'modus'); $mod->setRequired(true); $mod->setValue($this->obj_lp->getCurrentMode()); $form->addItem($mod); foreach ($this->obj_lp->getValidModes() as $mode_key) { $opt = new ilRadioOption($this->obj_lp->getModeText($mode_key), $mode_key, $this->obj_lp->getModeInfoText($mode_key)); $opt->setValue($mode_key); $mod->addOption($opt); // :TODO: Subitem for visits ?! if ($mode_key == ilLPObjSettings::LP_MODE_VISITS) { $vis = new ilNumberInputGUI($this->lng->txt('trac_visits'), 'visits'); $vis->setSize(3); $vis->setMaxLength(4); $vis->setInfo(sprintf($this->lng->txt('trac_visits_info'), ilObjUserTracking::_getValidTimeSpan())); $vis->setRequired(true); $vis->setValue($this->obj_settings->getVisits()); $opt->addSubItem($vis); } } $form->addCommandButton('saveSettings', $this->lng->txt('save')); return $form; }
/** * 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" => ...) */ 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; } } } }
/** * Get all completed tests */ protected function getItems() { global $ilUser, $tree; $data = array(); include_once "Services/Certificate/classes/class.ilCertificate.php"; if (ilCertificate::isActive()) { $obj_ids = array(); $root = $tree->getNodeData($tree->getRootId()); foreach ($tree->getSubTree($root, true, "sahs") as $node) { $obj_ids[] = $node["obj_id"]; } if ($obj_ids) { include_once "./Services/Tracking/classes/class.ilObjUserTracking.php"; include_once "./Services/Tracking/classes/class.ilLPStatus.php"; include_once "./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php"; include_once "./Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php"; include_once "./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php"; include_once "./Modules/ScormAicc/classes/class.ilSCORMCertificateAdapter.php"; $lp_active = ilObjUserTracking::_enabledLearningProgress(); foreach (ilCertificate::areObjectsActive($obj_ids) as $obj_id => $active) { if ($active) { $type = ilObjSAHSLearningModule::_lookupSubType($obj_id); if ($type == "scorm") { $lm = new ilObjSCORMLearningModule($obj_id, false); } else { $lm = new ilObjSCORM2004LearningModule($obj_id, false); } $adapter = new ilSCORMCertificateAdapter($lm); if (ilCertificate::_isComplete($adapter)) { $lpdata = $completed = false; if ($lp_active) { $completed = ilLPStatus::_hasUserCompleted($obj_id, $ilUser->getId()); $lpdata = true; } if (!$lpdata) { switch ($type) { case "scorm": $completed = ilObjSCORMLearningModule::_getCourseCompletionForUser($obj_id, $ilUser->getId()); break; case "scorm2004": $completed = ilObjSCORM2004LearningModule::_getCourseCompletionForUser($obj_id, $ilUser->getId()); break; } } $data[] = array("id" => $obj_id, "title" => ilObject::_lookupTitle($obj_id), "passed" => (bool) $completed); } } } } } $this->setData($data); }
/** * Init property form * * @return ilPropertyFormGUI $form */ protected function initFormSettings() { include_once './Services/Form/classes/class.ilPropertyFormGUI.php'; $form = new ilPropertyFormGUI(); $form->setTitle($this->lng->txt('tracking_settings')); $form->setFormAction($this->ctrl->getFormAction($this)); // Mode $mod = new ilRadioGroupInputGUI($this->lng->txt('trac_mode'), 'modus'); $mod->setRequired(true); $mod->setValue($this->obj_settings->getMode()); $form->addItem($mod); foreach ($this->obj_settings->getValidModes() as $mode_key => $mode_name) { $opt = new ilRadioOption($mode_name, $mode_key, ilLPObjSettings::_mode2InfoText($mode_key)); $opt->setValue($mode_key); $mod->addOption($opt); // Subitem for vistits if ($mode_key == LP_MODE_VISITS) { $vis = new ilNumberInputGUI($this->lng->txt('trac_visits'), 'visits'); $vis->setSize(3); $vis->setMaxLength(4); $vis->setInfo(sprintf($this->lng->txt('trac_visits_info'), ilObjUserTracking::_getValidTimeSpan())); $vis->setRequired(true); $vis->setValue($this->obj_settings->getVisits()); $opt->addSubItem($vis); } } /* // Info Active $act = new ilCustomInputGUI($this->lng->txt('trac_activated'), ''); $img = new ilTemplate('tpl.obj_settings_img_row.html',true,true,'Services/Tracking'); $img->setVariable("IMG_SRC", $activated = ilObjUserTracking::_enabledLearningProgress() ? ilUtil::getImagePath('icon_ok.png') : ilUtil::getImagePath('icon_not_ok.png') ); $act->setHTML($img->get()); $form->addItem($act); // Info Anonymized $ano = new ilCustomInputGUI($this->lng->txt('trac_anonymized'), ''); $img = new ilTemplate('tpl.obj_settings_img_row.html',true,true,'Services/Tracking'); $img->setVariable("IMG_SRC", $anonymized = !ilObjUserTracking::_enabledUserRelatedData() ? ilUtil::getImagePath('icon_ok.png') : ilUtil::getImagePath('icon_not_ok.png') ); $ano->setHTML($img->get()); $form->addItem($ano); */ $form->addCommandButton('saveSettings', $this->lng->txt('save')); return $form; }
/** * Get selectable columns * * @param * @return */ function getSelectableColumns() { global $lng; // default fields $cols = array(); 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); } $cols["percentage"] = array("txt" => $lng->txt("trac_percentage"), "default" => true); $cols["status"] = array("txt" => $lng->txt("trac_status"), "default" => true); $cols["mark"] = array("txt" => $lng->txt("trac_mark"), "default" => true); $cols["u_comment"] = array("txt" => $lng->txt("trac_comment"), "default" => false); return $cols; }
function getItems() { $this->determineOffsetAndOrder(); include_once "./Services/User/classes/class.ilUserQuery.php"; $usr_data = ilUserQuery::getUserListData(ilUtil::stripSlashes($this->getOrderField()), ilUtil::stripSlashes($this->getOrderDirection()), ilUtil::stripSlashes($this->getOffset()), ilUtil::stripSlashes($this->getLimit()), null, null, null, null, null, null, null, null, array("online_time"), null, null); if (count($usr_data["set"]) == 0 && $this->getOffset() > 0) { $this->resetOffset(); $usr_data = ilUserQuery::getUserListData(ilUtil::stripSlashes($this->getOrderField()), ilUtil::stripSlashes($this->getOrderDirection()), ilUtil::stripSlashes($this->getOffset()), ilUtil::stripSlashes($this->getLimit()), null, null, null, null, null, null, null, null, array("online_time"), null, null); } $this->setMaxCount($usr_data["cnt"]); $this->setData($usr_data["set"]); include_once 'Services/Tracking/classes/class.ilObjUserTracking.php'; $this->lp_active = ilObjUserTracking::_enabledLearningProgress(); }
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"); }
/** Anzeige der Stats-Auswahlm�glichkeiten */ function show() { global $tpl, $lng, $ilias, $ilDB; $q = "SELECT obj_id, type,title FROM object_data WHERE type ='lm' and obj_id=" . $ilDB->quote($this->obj_id, 'integer'); $result = $ilias->db->query($q); while ($row = $result->fetchRow()) { $Lehrmodulanz++; $LehrmodulID[$Lehrmodulanz] = $row[0]; $rLehrmodulID[$row[0]] = $Lehrmodulanz; $LehrmodulName[$Lehrmodulanz] = $row[2]; } $_SESSION["il_track_rlm_id"] = $rLehrmodulID; $_SESSION["il_track_lm_name"] = $LehrmodulName; $q = "SELECT obj_id,title,type,lm_id FROM lm_data WHERE type='pg'"; $result = $ilias->db->query($q); while ($row = $result->fetchRow()) { $LMSeitenanz[$rLehrmodulID[$row[3]]]++; } $year = range(2004, date("Y")); $month = range(1, 12); $day = range(1, 31); $tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.lm_statistics_settings.html", "Services/Tracking"); // $tpl->setVariable("SEARCH_ACTION", ".php?ref_id=".$_GET["ref_id"]."&cmd=gateway"); $tpl->setVariable("SEARCH_ACTION", $this->ctrl->getLinkTargetByClass('illmstatisticsgui', '')); $tpl->setVariable("TXT_TRACKING_DATA", $lng->txt("tracking_data")); $tpl->setVariable("TXT_TIME_SEGMENT", $lng->txt("time_segment")); $tpl->setVariable("TXT_STATISTIC", $lng->txt("statistic")); $tpl->setVariable("TXT_STATISTIC_H", $lng->txt("stats_pages_statisics")); $tpl->setVariable("TXT_STATISTIC_D", $lng->txt("stats_chapter_statisics")); $tpl->setVariable("TXT_STATISTIC_O", $lng->txt("stats_sessions_statisics")); $tpl->setVariable("TXT_STATISTIC_U", $lng->txt("stats_navigation")); $tpl->setVariable("TXT_USER_LANGUAGE", $lng->txt("user_language")); $tpl->setVariable("TXT_LM", $lng->txt("lm")); $tpl->setVariable("TXT_SHOW_TR_DATA", $lng->txt("query_data")); $tpl->setVariable("TXT_SHOW_TR_DATA2", $lng->txt("stats_new_selection")); $tpl->setVariable("TXT_TRACKED_OBJECTS", $lng->txt("tracked_objects")); $tpl->setVariable("TXT_TRACKED_USER", $lng->txt("stats_tracked_user")); $tpl->setVariable("TXT_ALLE", $lng->txt("stats_all")); $tpl->setVariable("TXT_AUSWAHL", $lng->txt("stats_choice")); if ($_SESSION["il_track_yearf"] == "") { $_SESSION["il_track_yearf"] = Date("Y"); $_SESSION["il_track_yeart"] = Date("Y"); $_SESSION["il_track_monthf"] = "1"; $_SESSION["il_track_montht"] = Date("n"); $_SESSION["il_track_dayf"] = "1"; $_SESSION["il_track_dayt"] = Date("j"); } if ($_SESSION["il_track_stat"] == "") { $_SESSION["il_track_stat"] = 'h'; } $languages = $lng->getInstalledLanguages(); $tpl->setCurrentBlock("lm_selection"); $_SESSION["il_track_lm"] = $this->obj_id; $tpl->setVariable("LM_ID", $LehrmodulID[1]); $tpl->setVariable("LM_DESC", substr($LehrmodulName[1], 0, 40) . " (S:" . $LMSeitenanz[1] . ")"); $tpl->parseCurrentBlock(); if ($_SESSION["il_track_stat2"] == "choice") { $tpl->setVariable("CHC_CHK", " checked=\"1\" "); } else { $tpl->setVariable("ALL_CHK", " checked=\"1\" "); } $user_IDs = $_SESSION["userSelected_stat"]; $tpl->setCurrentBlock("user_selection"); if (count($user_IDs) > 0) { foreach ($_SESSION["userSelected_stat"] as $result_id) { $tpl->setVariable("USER1", $result_id); $tpl->setVariable("USER2", $result_id); } } else { $tpl->setCurrentBlock("user_selection"); $tpl->setVariable("USER1", "Alle"); $tpl->setVariable("USER2", "Alle"); } include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (!ilObjUserTracking::_enabledUserRelatedData()) { $tpl->setVariable("DISABLED", "disabled"); $tpl->setVariable("ALL_CHK", " checked=\"1\" "); $tpl->setVariable("CHC_CHK", ""); } else { $tpl->setVariable("INFO1", $lng->txt(stats_current) . ": " . count($_SESSION["userSelected_stat"]) . " " . $lng->txt("stats_user_selected")); } $tpl->parseCurrentBlock(); //Datum von: foreach ($year as $key) { $tpl->setCurrentBlock("fromyear_selection"); $tpl->setVariable("YEARFR", $key); $tpl->setVariable("YEARF", $key); if ($_SESSION["il_track_yearf"] == $key) { $tpl->setVariable("YEARF_SEL", " selected=\"1\" "); } $tpl->parseCurrentBlock(); } foreach ($month as $key) { $tpl->setCurrentBlock("frommonth_selection"); $tpl->setVariable("MONTHFR", $key); $tpl->setVariable("MONTHF", $key); if ($_SESSION["il_track_monthf"] == $key) { $tpl->setVariable("MONTHF_SEL", " selected=\"1\" "); } $tpl->parseCurrentBlock(); } foreach ($day as $key) { $tpl->setCurrentBlock("fromday_selection"); $tpl->setVariable("DAYFR", $key); $tpl->setVariable("DAYF", $key); if ($_SESSION["il_track_dayf"] == $key) { $tpl->setVariable("DAYF_SEL", " selected=\"1\" "); } $tpl->parseCurrentBlock(); } //Datum nach: foreach ($day as $key) { $tpl->setCurrentBlock("today_selection"); $tpl->setVariable("DAYTO", $key); $tpl->setVariable("DAYT", $key); if ($_SESSION["il_track_dayt"] == $key) { $tpl->setVariable("DAYT_SEL", " selected=\"1\" "); } $tpl->parseCurrentBlock(); } foreach ($month as $key) { $tpl->setCurrentBlock("tomonth_selection"); $tpl->setVariable("MONTHTO", $key); $tpl->setVariable("MONTHT", $key); if ($_SESSION["il_track_montht"] == $key) { $tpl->setVariable("MONTHT_SEL", " selected=\"1\" "); } $tpl->parseCurrentBlock(); } foreach ($year as $key) { $tpl->setCurrentBlock("toyear_selection"); $tpl->setVariable("YEARTO", $key); $tpl->setVariable("YEART", $key); if ($_SESSION["il_track_yeart"] == $key) { $tpl->setVariable("YEART_SEL", " selected=\"1\" "); } $tpl->parseCurrentBlock(); } // language selection $tpl->setCurrentBlock("language_selection"); $tpl->setVariable("LANG", $lng->txt("any_language")); $tpl->setVariable("LANGSHORT", "0"); $tpl->parseCurrentBlock(); $lng->loadLanguageModule("meta"); foreach ($languages as $lang_key) { $tpl->setCurrentBlock("language_selection"); $tpl->setVariable("LANG", $lng->txt("meta_l_" . $lang_key)); $tpl->setVariable("LANGSHORT", $lang_key); if ($_SESSION["il_track_language"] == $lang_key) { $tpl->setVariable("LANG_SEL", " selected=\"1\" "); } $tpl->parseCurrentBlock(); } // statistic type if ($_SESSION["il_track_stat"] == "d") { $tpl->setVariable("D_CHK", " checked=\"1\" "); } elseif ($_SESSION["il_track_stat"] == "h") { $tpl->setVariable("H_CHK", " checked=\"1\" "); } elseif ($_SESSION["il_track_stat"] == "o") { $tpl->setVariable("O_CHK", " checked=\"1\" "); } elseif ($_SESSION["il_track_stat"] == "u") { $tpl->setVariable("U_CHK", " checked=\"1\" "); } }
/** * Checks whether a certificate exists for the active user or not * @param int obj_id Object ID of the SCORM Learning Module * @param int usr_id Object ID of the user. If not given, the active user will be taken * @return true/false */ public static function _lookupUserCertificate($obj_id, $usr_id = 0) { global $ilUser; $uid = $usr_id ? $usr_id : $ilUser->getId(); $completed = false; // check for certificates include_once "./Services/Certificate/classes/class.ilCertificate.php"; if (ilCertificate::isActive() && ilCertificate::isObjectActive($obj_id)) { $lpdata = false; include_once "./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php"; $type = ilObjSAHSLearningModule::_lookupSubType($obj_id); include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_enabledLearningProgress()) { include_once "./Services/Tracking/classes/class.ilLPStatus.php"; $completed = ilLPStatus::_hasUserCompleted($obj_id, $uid); $lpdata = true; } switch ($type) { case "scorm": if (!$lpdata) { include_once "./Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php"; $completed = ilObjSCORMLearningModule::_getCourseCompletionForUser($obj_id, $uid); } break; case "scorm2004": if (!$lpdata) { include_once "./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php"; $completed = ilObjSCORM2004LearningModule::_getCourseCompletionForUser($obj_id, $uid); } break; default: break; } } return $completed; }
public function getSCORMCompletionStatus($sid, $a_usr_id, $a_ref_id) { $this->initAuth($sid); $this->initIlias(); if (!$this->__checkSession($sid)) { return $this->__raiseError($this->__getMessage(), $this->__getMessageCode()); } if (!strlen($a_ref_id)) { return $this->__raiseError('No ref_id given. Aborting!', 'Client'); } include_once 'include/inc.header.php'; // get obj_id if (!($obj_id = ilObject::_lookupObjectId($a_ref_id))) { return $this->__raiseError('No scorm module found for id: ' . $a_ref_id, 'Client'); } include_once 'Services/Tracking/classes/class.ilLPStatus.php'; include_once 'Services/Tracking/classes/class.ilObjUserTracking.php'; if (!ilObjUserTracking::_enabledLearningProgress()) { return $this->__raiseError('Learning progress not enabled in this installation. Aborting!', 'Server'); } $status = ilLPStatus::_lookupStatus($obj_id, $a_usr_id); if ($status == ilLPStatus::LP_STATUS_COMPLETED_NUM) { return 'completed'; } else { if ($status == ilLPStatus::LP_STATUS_FAILED_NUM) { return 'failed'; } else { if ($status == ilLPStatus::LP_STATUS_IN_PROGRESS_NUM) { return 'in_progress'; } else { return 'not_attempted'; } } } }
function __setSubTabs($a_active) { global $rbacsystem, $ilObjDataCache; switch ($this->getMode()) { case self::LP_CONTEXT_PERSONAL_DESKTOP: include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_hasLearningProgressLearner() && ilObjUserTracking::_enabledUserRelatedData()) { $this->tabs_gui->addTarget('trac_progress', $this->ctrl->getLinkTargetByClass('illplistofprogressgui', ''), "", "", "", $a_active == self::LP_ACTIVE_PROGRESS); } if (ilObjUserTracking::_hasLearningProgressOtherUsers()) { $this->tabs_gui->addTarget('trac_objects', $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", ''), "", "", "", $a_active == self::LP_ACTIVE_OBJECTS); } break; case self::LP_CONTEXT_REPOSITORY: // #12771 - do not show status if learning progress is deactivated include_once './Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance($this->obj_id); if ($olp->isActive()) { $has_read = $rbacsystem->checkAccess('read_learning_progress', $this->getRefId()); if ($this->isAnonymized() || !$has_read) { $this->ctrl->setParameterByClass('illplistofprogressgui', 'user_id', $this->getUserId()); $this->tabs_gui->addSubTabTarget('trac_progress', $this->ctrl->getLinkTargetByClass('illplistofprogressgui', ''), "", "", "", $a_active == self::LP_ACTIVE_PROGRESS); } else { // Check if it is a course $sub_tab = $ilObjDataCache->lookupType($ilObjDataCache->lookupObjId($this->getRefId())) == 'crs' ? 'trac_crs_objects' : 'trac_objects'; $this->tabs_gui->addSubTabTarget($sub_tab, $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", ''), "", "", "", $a_active == self::LP_ACTIVE_OBJECTS); } if ($has_read) { if (!$this->isAnonymized() && !in_array($this->obj_type, array('tst', 'htlm', 'exc', 'sess')) && !$olp instanceof ilPluginLP) { $this->tabs_gui->addSubTabTarget("trac_matrix", $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", 'showUserObjectMatrix'), "", "", "", $a_active == self::LP_ACTIVE_MATRIX); } $this->tabs_gui->addSubTabTarget("trac_summary", $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", 'showObjectSummary'), "", "", "", $a_active == self::LP_ACTIVE_SUMMARY); } } if (!$olp instanceof ilPluginLP && $rbacsystem->checkAccess('edit_learning_progress', $this->getRefId())) { $this->tabs_gui->addSubTabTarget('trac_settings', $this->ctrl->getLinkTargetByClass('illplistofsettingsgui', ''), "", "", "", $a_active == self::LP_ACTIVE_SETTINGS); } break; case self::LP_CONTEXT_ADMINISTRATION: /* $this->tabs_gui->addSubTabTarget('trac_progress', $this->ctrl->getLinkTargetByClass('illplistofprogressgui',''), "","","",$a_active == self::LP_ACTIVE_PROGRESS); */ $this->tabs_gui->addSubTabTarget('trac_objects', $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", ''), "", "", "", $a_active == self::LP_ACTIVE_OBJECTS); break; case self::LP_CONTEXT_USER_FOLDER: case self::LP_CONTEXT_ORG_UNIT: // No tabs default class is lpprogressgui break; default: die('No valid mode given'); break; } return true; }
protected function initAttendanceList() { include_once './Modules/Course/classes/class.ilCourseParticipants.php'; $members_obj = ilCourseParticipants::_getInstanceByObjId($this->object->getId()); include_once './Modules/Course/classes/class.ilCourseWaitingList.php'; $waiting_list = new ilCourseWaitingList($this->object->getId()); include_once 'Services/Membership/classes/class.ilAttendanceList.php'; $list = new ilAttendanceList($this, $members_obj, $waiting_list); $list->setId('crsmemlst'); $list->setTitle($this->lng->txt('crs_members_print_title'), $this->lng->txt('obj_crs') . ': ' . $this->object->getTitle()); include_once './Services/Tracking/classes/class.ilObjUserTracking.php'; $this->show_tracking = (ilObjUserTracking::_enabledLearningProgress() and ilObjUserTracking::_enabledUserRelatedData()); if ($this->show_tracking) { include_once './Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance($this->object->getId()); $this->show_tracking = $olp->isActive(); } if ($this->show_tracking) { $list->addPreset('progress', $this->lng->txt('learning_progress'), true); } include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php'; $privacy = ilPrivacySettings::_getInstance(); if ($privacy->enabledCourseAccessTimes()) { $list->addPreset('access', $this->lng->txt('last_access'), true); } $list->addPreset('status', $this->lng->txt('crs_status'), true); $list->addPreset('passed', $this->lng->txt('crs_passed'), true); return $list; }
function __getNextClass() { global $ilAccess, $ilUser; // #9857 if (!ilObjUserTracking::_enabledLearningProgress()) { return; } if (strlen($next_class = $this->ctrl->getNextClass())) { if ($this->getMode() == self::LP_CONTEXT_PERSONAL_DESKTOP) { $_SESSION['il_lp_history'] = $next_class; } return $next_class; } switch ($this->getMode()) { case self::LP_CONTEXT_ADMINISTRATION: return 'illplistofobjectsgui'; case self::LP_CONTEXT_REPOSITORY: $cmd = $this->ctrl->getCmd(); if (in_array($cmd, array("editmanual", "updatemanual", "showtlt"))) { return ""; } // #12771 include_once './Services/Object/classes/class.ilObjectLP.php'; $olp = ilObjectLP::getInstance(ilObject::_lookupObjId($this->getRefId())); if (!$olp->isActive()) { if (!$olp instanceof ilPluginLP && $ilAccess->checkAccess('edit_learning_progress', '', $this->getRefId())) { return 'illplistofsettingsgui'; } else { return ''; } } if (!$this->anonymized && $ilAccess->checkAccess('read_learning_progress', '', $this->getRefId())) { return 'illplistofobjectsgui'; } if ($ilAccess->checkAccess('edit_learning_progress', '', $this->getRefId())) { return 'illplistofsettingsgui'; } return 'illplistofprogressgui'; case self::LP_CONTEXT_PERSONAL_DESKTOP: include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; $has_edit = ilObjUserTracking::_hasLearningProgressOtherUsers(); $has_personal = ilObjUserTracking::_hasLearningProgressLearner(); if ($has_edit || $has_personal) { // default (#10928) $tgt = null; if ($has_personal) { $tgt = 'illplistofprogressgui'; } else { if ($has_edit) { $tgt = 'illplistofobjectsgui'; } } // validate session switch ($_SESSION['il_lp_history']) { case 'illplistofobjectsgui': if (!$has_edit) { $_SESSION['il_lp_history'] = null; } break; case 'illplistofprogressgui': if (!$has_personal) { $_SESSION['il_lp_history'] = null; } break; } if ($_SESSION['il_lp_history']) { return $_SESSION['il_lp_history']; } else { if ($tgt) { return $tgt; } } } // should not happen ilUtil::redirect("ilias.php?baseClass=ilPersonalDesktopGUI"); case self::LP_CONTEXT_USER_FOLDER: case self::LP_CONTEXT_ORG_UNIT: if (ilObjUserTracking::_enabledUserRelatedData()) { return 'illplistofprogressgui'; } break; } }
/** * GetDropDownHTML * * @param * @return */ function renderDropDown($a_tpl, $a_id) { global $lng, $ilSetting, $rbacsystem; $id = strtolower($a_id); $id_up = strtoupper($a_id); $a_tpl->setCurrentBlock("entry_" . $id); include_once "./Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php"; $selection = new ilAdvancedSelectionListGUI(); if ($this->active == $a_id || $this->active == "" && $a_id == "repository") { $selection->setSelectionHeaderClass("MMActive"); $a_tpl->setVariable("SEL", '<span class="ilAccHidden">(' . $lng->txt("stat_selected") . ')</span>'); } else { $selection->setSelectionHeaderClass("MMInactive"); } $selection->setSelectionHeaderSpanClass("MMSpan"); $selection->setHeaderIcon(ilAdvancedSelectionListGUI::ICON_ARROW); $selection->setItemLinkClass("small"); $selection->setUseImages(false); switch ($id) { // desktop drop down case "desktop": $selection->setListTitle($lng->txt("personal_desktop")); $selection->setId("dd_pd"); // overview $selection->addItem($lng->txt("overview"), "", "ilias.php?baseClass=ilPersonalDesktopGUI", "", "", "_top"); if (!$ilSetting->get("disable_personal_workspace")) { // workspace $selection->addItem($lng->txt("personal_workspace"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToWorkspace", "", "", "_top"); } // profile $selection->addItem($lng->txt("personal_profile"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToProfile", "", "", "_top"); // skills $skmg_set = new ilSetting("skmg"); if ($skmg_set->get("enable_skmg")) { $selection->addItem($lng->txt("skills"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToSkills", "", "", "_top"); } // portfolio if ($ilSetting->get('user_portfolios')) { $selection->addItem($lng->txt("portfolio"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToPortfolio", "", "", "_top"); } // news if ($ilSetting->get("block_activated_news")) { $selection->addItem($lng->txt("news"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToNews", "", "", "_top"); } // Learning Progress include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_enabledLearningProgress()) { //$ilTabs->addTarget("learning_progress", $this->ctrl->getLinkTargetByClass("ilLearningProgressGUI")); $selection->addItem($lng->txt("learning_progress"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToLP", "", "", "_top"); } // calendar include_once './Services/Calendar/classes/class.ilCalendarSettings.php'; $settings = ilCalendarSettings::_getInstance(); if ($settings->isEnabled()) { $selection->addItem($lng->txt("calendar"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToCalendar", "", "", "_top"); } // mail if ($this->mail) { $selection->addItem($lng->txt('mail'), '', 'ilias.php?baseClass=ilMailGUI', '', '', '_top'); } // contacts if (!$this->ilias->getSetting('disable_contacts') && ($this->ilias->getSetting('disable_contacts_require_mail') || $rbacsystem->checkAccess('internal_mail', ilMailGlobalServices::getMailObjectRefId()))) { $selection->addItem($lng->txt('mail_addressbook'), '', 'ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToContacts', '', '', '_top'); } // private notes if (!$this->ilias->getSetting("disable_notes")) { $selection->addItem($lng->txt("notes_and_comments"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToNotes", "", "", "_top"); } // bookmarks if (!$this->ilias->getSetting("disable_bookmarks")) { $selection->addItem($lng->txt("bookmarks"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToBookmarks", "", "", "_top"); } // settings $selection->addItem($lng->txt("personal_settings"), "", "ilias.php?baseClass=ilPersonalDesktopGUI&cmd=jumpToSettings", "", "", "_top"); break; // shop // shop case 'shop': $selection->setListTitle($lng->txt("shop")); $selection->setId("dd_shp"); $selection->addItem($lng->txt("shop"), "", "ilias.php?baseClass=ilShopController&cmd=firstpage", "", "", "_top"); break; // administration // administration case "administration": $selection->setListTitle($lng->txt("administration")); $selection->setId("dd_adm"); $selection->setAsynch(true); $selection->setAsynchUrl("ilias.php?baseClass=ilAdministrationGUI&cmd=getDropDown&cmdMode=asynch"); //$this->renderEntry($a_tpl, "administration", // $lng->txt("administration"), // $this->getScriptTarget("ilias.php?baseClass=ilAdministrationGUI"), // $this->target); break; } // $selection->setTriggerEvent("mouseover"); // $selection->setAutoHide(true); // bs-patch start global $ilUser; $a_tpl->setVariable("TXT_ADMINISTRATION", $lng->txt("administration")); $a_tpl->parseCurrentBlock(); return; // bs-patch end $html = $selection->getHTML(); $a_tpl->setVariable($id_up . "_DROP_DOWN", $html); $a_tpl->parseCurrentBlock(); }
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; }
/** * sync course status from lp * * as lp data is not deleted on course exit new members may already have lp completed * * @param int $a_member_id */ public function checkLPStatusSync($a_member_id) { // #11113 include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_enabledLearningProgress() && $this->getStatusDetermination() == ilObjCourse::STATUS_DETERMINATION_LP) { include_once "Services/Tracking/classes/class.ilLPStatus.php"; $lp_status = ilLPStatus::_lookupStatus($this->getId(), $a_member_id); if ($lp_status == LP_STATUS_COMPLETED_NUM) { $this->getMembersObject()->updatePassed($a_member_id, true, -1); } } }
/** * Init filter */ function initFilter() { global $lng, $ilSetting; if ($this->is_root) { return parent::initFilter(true, false); } // show only if extended data was activated in lp settings include_once 'Services/Tracking/classes/class.ilObjUserTracking.php'; $tracking = new ilObjUserTracking(); $item = $this->addFilterItemByMetaType("user_total", ilTable2GUI::FILTER_NUMBER_RANGE, true, "∑ " . $lng->txt("users")); $this->filter["user_total"] = $item->getValue(); if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_READ_COUNT)) { $item = $this->addFilterItemByMetaType("read_count", ilTable2GUI::FILTER_NUMBER_RANGE, true, "∑ " . $lng->txt("trac_read_count")); $this->filter["read_count"] = $item->getValue(); } if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_SPENT_SECONDS)) { $item = $this->addFilterItemByMetaType("spent_seconds", ilTable2GUI::FILTER_DURATION_RANGE, true, "Ø " . $lng->txt("trac_spent_seconds") . " / " . $lng->txt("user")); $this->filter["spent_seconds"]["from"] = $item->getCombinationItem("from")->getValueInSeconds(); $this->filter["spent_seconds"]["to"] = $item->getCombinationItem("to")->getValueInSeconds(); } $item = $this->addFilterItemByMetaType("percentage", ilTable2GUI::FILTER_NUMBER_RANGE, true, "Ø " . $lng->txt("trac_percentage") . " / " . $lng->txt("user")); $this->filter["percentage"] = $item->getValue(); // do not show status if learning progress is deactivated if ($this->olp->isActive()) { include_once "Services/Tracking/classes/class.ilLPStatus.php"; $item = $this->addFilterItemByMetaType("status", ilTable2GUI::FILTER_SELECT, true); $item->setOptions(array("" => $lng->txt("trac_all"), ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM + 1 => $lng->txt(ilLPStatus::LP_STATUS_NOT_ATTEMPTED), ilLPStatus::LP_STATUS_IN_PROGRESS_NUM + 1 => $lng->txt(ilLPStatus::LP_STATUS_IN_PROGRESS), ilLPStatus::LP_STATUS_COMPLETED_NUM + 1 => $lng->txt(ilLPStatus::LP_STATUS_COMPLETED), ilLPStatus::LP_STATUS_FAILED_NUM + 1 => $lng->txt(ilLPStatus::LP_STATUS_FAILED))); $this->filter["status"] = $item->getValue(); if ($this->filter["status"]) { $this->filter["status"]--; } $item = $this->addFilterItemByMetaType("trac_status_changed", ilTable2GUI::FILTER_DATE_RANGE, true); $this->filter["status_changed"] = $item->getDate(); } if (ilObject::_lookupType($this->obj_id) != "lm") { $item = $this->addFilterItemByMetaType("mark", ilTable2GUI::FILTER_TEXT, true, $lng->txt("trac_mark")); $this->filter["mark"] = $item->getValue(); } if ($ilSetting->get("usr_settings_course_export_gender")) { $item = $this->addFilterItemByMetaType("gender", ilTable2GUI::FILTER_SELECT, true); $item->setOptions(array("" => $lng->txt("trac_all"), "m" => $lng->txt("gender_m"), "f" => $lng->txt("gender_f"))); $this->filter["gender"] = $item->getValue(); } if ($ilSetting->get("usr_settings_course_export_city")) { $item = $this->addFilterItemByMetaType("city", ilTable2GUI::FILTER_TEXT, true); $this->filter["city"] = $item->getValue(); } if ($ilSetting->get("usr_settings_course_export_country")) { $item = $this->addFilterItemByMetaType("country", ilTable2GUI::FILTER_TEXT, true); $this->filter["country"] = $item->getValue(); } if ($ilSetting->get("usr_settings_course_export_sel_country")) { $item = $this->addFilterItemByMetaType("sel_country", ilTable2GUI::FILTER_SELECT, true); $item->setOptions(array("" => $lng->txt("trac_all")) + $this->getSelCountryCodes()); $this->filter["sel_country"] = $item->getValue(); } $item = $this->addFilterItemByMetaType("language", ilTable2GUI::FILTER_LANGUAGE, true); $this->filter["language"] = $item->getValue(); if ($tracking->hasExtendedData(ilObjUserTracking::EXTENDED_DATA_LAST_ACCESS)) { $item = $this->addFilterItemByMetaType("trac_first_access", ilTable2GUI::FILTER_DATETIME_RANGE, true); $this->filter["first_access"] = $item->getDate(); $item = $this->addFilterItemByMetaType("trac_last_access", ilTable2GUI::FILTER_DATETIME_RANGE, true); $this->filter["last_access"] = $item->getDate(); } $item = $this->addFilterItemByMetaType("registration_filter", ilTable2GUI::FILTER_DATE_RANGE, true); $this->filter["registration"] = $item->getDate(); }
function __setSubTabs($a_active) { global $rbacsystem, $ilObjDataCache, $lng, $ilUser; switch ($this->getMode()) { case LP_MODE_PERSONAL_DESKTOP: include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_hasLearningProgressLearner() && ilObjUserTracking::_enabledUserRelatedData()) { $this->tabs_gui->addTarget('trac_progress', $this->ctrl->getLinkTargetByClass('illplistofprogressgui', ''), "", "", "", $a_active == LP_ACTIVE_PROGRESS); } if (ilObjUserTracking::_hasLearningProgressOtherUsers()) { $this->tabs_gui->addTarget('trac_objects', $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", ''), "", "", "", $a_active == LP_ACTIVE_OBJECTS); } break; case LP_MODE_REPOSITORY: if ($rbacsystem->checkAccess('edit_learning_progress', $this->getRefId())) { if ($this->isAnonymized() || $this->isObjectAnonymized()) { $this->ctrl->setParameterByClass('illplistofprogressgui', 'user_id', $this->getUserId()); $this->tabs_gui->addSubTabTarget('trac_progress', $this->ctrl->getLinkTargetByClass('illplistofprogressgui', ''), "", "", "", $a_active == LP_ACTIVE_PROGRESS); } else { // Check if it is a course $sub_tab = $ilObjDataCache->lookupType($ilObjDataCache->lookupObjId($this->getRefId())) == 'crs' ? 'trac_crs_objects' : 'trac_objects'; $this->tabs_gui->addSubTabTarget($sub_tab, $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", ''), "", "", "", $a_active == LP_ACTIVE_OBJECTS); } if ($this->statistics_activated) { $this->tabs_gui->addSubTabTarget('trac_lm_statistics', $this->ctrl->getLinkTargetByClass('illmstatisticsgui', ''), "", "", "", $a_active == LP_ACTIVE_LM_STATISTICS); } if (!$this->isAnonymized() && !in_array($this->obj_type, array('tst', 'lm', 'htlm', 'exc'))) { // do not show status if learning progress is deactivated // matrix only consists of status... $mode = ilLPObjSettings::_lookupMode($this->obj_id); if ($mode != LP_MODE_DEACTIVATED && $mode != LP_MODE_LP_MODE_UNDEFINED) { $this->tabs_gui->addSubTabTarget("trac_matrix", $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", 'showUserObjectMatrix'), "", "", "", $a_active == LP_ACTIVE_MATRIX); } } $this->tabs_gui->addSubTabTarget("trac_summary", $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", 'showObjectSummary'), "", "", "", $a_active == LP_ACTIVE_SUMMARY); $this->tabs_gui->addSubTabTarget('trac_settings', $this->ctrl->getLinkTargetByClass('illplistofsettingsgui', ''), "", "", "", $a_active == LP_ACTIVE_SETTINGS); } break; case LP_MODE_ADMINISTRATION: /* $this->tabs_gui->addSubTabTarget('trac_progress', $this->ctrl->getLinkTargetByClass('illplistofprogressgui',''), "","","",$a_active == LP_ACTIVE_PROGRESS); */ $this->tabs_gui->addSubTabTarget('trac_objects', $this->ctrl->getLinkTargetByClass("illplistofobjectsgui", ''), "", "", "", $a_active == LP_ACTIVE_OBJECTS); break; case LP_MODE_USER_FOLDER: // No tabs default class is lpprogressgui break; default: die('No valid mode given'); break; } return true; }
/** * Constructor * * @access public * @param * @return */ public function __construct($a_parent_obj, $a_type = 'admin', $show_content = true, $a_show_learning_progress = false, $a_show_timings = false, $a_show_edit_link = true, $a_role_id = 0, $a_show_lp_status_sync = false) { global $lng, $ilCtrl; $this->show_learning_progress = $a_show_learning_progress; $this->show_timings = $a_show_timings; $this->show_edit_link = $a_show_edit_link; $this->show_lp_status_sync = $a_show_lp_status_sync; // #13208 include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (!ilObjUserTracking::_enabledLearningProgress()) { $this->show_lp_status_sync = false; } $this->lng = $lng; $this->lng->loadLanguageModule('crs'); $this->lng->loadLanguageModule('trac'); $this->ctrl = $ilCtrl; $this->type = $a_type; $this->setRoleId($a_role_id); include_once './Services/PrivacySecurity/classes/class.ilPrivacySettings.php'; $this->privacy = ilPrivacySettings::_getInstance(); // required before constructor for columns $this->setId('crs_' . $a_type . '_' . $a_role_id . '_' . $a_parent_obj->object->getId()); parent::__construct($a_parent_obj, 'members'); $this->initSettings(); $this->setFormName('participants'); $this->addColumn('', 'f', "1"); $this->addColumn($this->lng->txt('name'), 'lastname', '20%'); $all_cols = $this->getSelectableColumns(); foreach ($this->getSelectedColumns() as $col) { $this->addColumn($all_cols[$col]['txt'], $col); } if ($this->show_learning_progress) { $this->addColumn($this->lng->txt('learning_progress'), 'progress'); } if ($this->privacy->enabledCourseAccessTimes()) { $this->addColumn($this->lng->txt('last_access'), 'access_ut', '16em'); } $this->addColumn($this->lng->txt('crs_member_passed'), 'passed'); if ($this->show_lp_status_sync) { $this->addColumn($this->lng->txt('crs_member_passed_status_changed'), 'passed_info'); } if ($this->type == 'admin') { $this->setSelectAllCheckbox('admins'); $this->addColumn($this->lng->txt('crs_notification_list_title'), 'notification'); $this->addCommandButton('updateAdminStatus', $this->lng->txt('save')); } elseif ($this->type == 'tutor') { $this->setSelectAllCheckbox('tutors'); $this->addColumn($this->lng->txt('crs_notification_list_title'), 'notification'); $this->addCommandButton('updateTutorStatus', $this->lng->txt('save')); } elseif ($this->type == 'member') { $this->setSelectAllCheckbox('members'); $this->addColumn($this->lng->txt('crs_blocked'), 'blocked'); $this->addCommandButton('updateMemberStatus', $this->lng->txt('save')); } else { $this->setSelectAllCheckbox('roles'); $this->addColumn($this->lng->txt('crs_blocked'), 'blocked'); $this->addCommandButton('updateRoleStatus', $this->lng->txt('save')); } $this->addColumn($this->lng->txt(''), 'optional'); $this->setRowTemplate("tpl.show_participants_row.html", "Modules/Course"); if ($show_content) { $this->setDefaultOrderField('lastname'); $this->enable('sort'); $this->enable('header'); $this->enable('numinfo'); $this->enable('select_all'); } else { $this->disable('content'); $this->disable('header'); $this->disable('footer'); $this->disable('numinfo'); $this->disable('select_all'); } $this->setEnableNumInfo(true); $this->setExternalSegmentation(true); $this->getItems(); $this->setTopCommands(true); $this->setEnableHeader(true); $this->setEnableTitle(true); $this->initFilter(); $this->setShowRowsSelector(true); include_once "Services/Certificate/classes/class.ilCertificate.php"; $this->enable_certificates = ilCertificate::isActive(); if ($this->enable_certificates) { $this->enable_certificates = ilCertificate::isObjectActive($a_parent_obj->object->getId()); } if ($this->enable_certificates) { $lng->loadLanguageModule('certificate'); } }
protected function getCoursesOfUser($a_user_id) { global $tree; // see ilPDSelectedItemsBlockGUI include_once 'Modules/Course/classes/class.ilObjCourseAccess.php'; include_once 'Services/Membership/classes/class.ilParticipants.php'; $items = ilParticipants::_getMembershipByType($a_user_id, 'crs'); $references = $lp_obj_refs = array(); foreach ($items as $obj_id) { $ref_id = ilObject::_getAllReferences($obj_id); if (is_array($ref_id) && count($ref_id)) { $ref_id = array_pop($ref_id); if (!$tree->isDeleted($ref_id)) { $visible = false; $active = ilObjCourseAccess::_isActivated($obj_id, $visible, false); if ($active && $visible) { $references[$ref_id] = array('ref_id' => $ref_id, 'obj_id' => $obj_id, 'title' => ilObject::_lookupTitle($obj_id)); $lp_obj_refs[$obj_id] = $ref_id; } } } } // get lp data for valid courses if (sizeof($lp_obj_refs)) { // lp must be active, personal and not anonymized include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_enabledLearningProgress() && ilObjUserTracking::_enabledUserRelatedData() && ilObjUserTracking::_hasLearningProgressLearner()) { // see ilLPProgressTableGUI include_once "Services/Tracking/classes/class.ilTrQuery.php"; include_once "Services/Tracking/classes/class.ilLPStatusFactory.php"; $lp_data = ilTrQuery::getObjectsStatusForUser($a_user_id, $lp_obj_refs); foreach ($lp_data as $item) { $ref_id = $item["ref_ids"]; $references[$ref_id]["lp_status"] = $item["status"]; // add objectives if ($item["u_mode"] == ilLPObjSettings::LP_MODE_OBJECTIVES) { // we need the collection for the correct order include_once "Services/Tracking/classes/collection/class.ilLPCollectionOfObjectives.php"; $coll_objtv = new ilLPCollectionOfObjectives($item["obj_id"], $item["u_mode"]); $coll_objtv = $coll_objtv->getItems(); if ($coll_objtv) { // #13373 $lo_results = $this->parseLOUserResults($item["obj_id"], $a_user_id); $tmp = array(); include_once "Modules/Course/classes/class.ilCourseObjective.php"; foreach ($coll_objtv as $objective_id) { $tmp[$objective_id] = array("id" => $objective_id, "title" => ilCourseObjective::lookupObjectiveTitle($objective_id)); if (array_key_exists($objective_id, $lo_results)) { $lo_result = $lo_results[$objective_id]; $tmp[$objective_id]["result_perc"] = $lo_result["result_perc"]; $tmp[$objective_id]["limit_perc"] = $lo_result["limit_perc"]; $tmp[$objective_id]["status"] = $lo_result["status"]; $tmp[$objective_id]["type"] = $lo_result["type"]; } } // order foreach ($coll_objtv as $objtv_id) { $references[$ref_id]["objectives"][] = $tmp[$objtv_id]; } } } } } } $references = ilUtil::sortArray($references, "title", "ASC"); return $references; }
function fillRow($set) { global $ilUser, $Access, $lng, $ilAccess; $this->tpl->setVariable("FIRST_NAME", $set["first_name"]); $this->tpl->setVariable("LAST_NAME", $set["last_name"]); if ($this->recursive) { $orgUnitsTitles = array_values(ilObjOrgUnitTree::_getInstance()->getTitles($set['org_units'])); $this->tpl->setVariable("ORG_UNITS", implode(', ', $orgUnitsTitles)); } $this->ctrl->setParameterByClass("illearningprogressgui", "obj_id", $set["user_id"]); $this->ctrl->setParameterByClass("ilobjorgunitgui", "obj_id", $set["user_id"]); $selection = new ilAdvancedSelectionListGUI(); $selection->setListTitle($lng->txt("Actions")); $selection->setId("selection_list_user_lp_" . $set["user_id"]); if ($ilAccess->checkAccess("view_learning_progress", "", $_GET["ref_id"]) and ilObjUserTracking::_enabledLearningProgress() and ilObjUserTracking::_enabledUserRelatedData()) { $selection->addItem($lng->txt("show_learning_progress"), "show_learning_progress", $this->ctrl->getLinkTargetByClass(array("ilAdministrationGUI", "ilObjOrgUnitGUI", "ilLearningProgressGUI"), "")); } if ($ilAccess->checkAccess("write", "", $_GET["ref_id"]) && !$this->recursive) { if ($this->staff == "employee") { $this->addEmployeeActions($selection); } if ($this->staff == "superior") { $this->addSuperiorActions($selection); } } $this->tpl->setVariable("ACTIONS", $selection->getHTML()); }
/** * set settings for learning progress determination per default at upload */ function setLearningProgressSettingsAtUpload() { global $ilSetting; //condition 1 if ($ilSetting->get('scorm_lp_auto_activate', 0)) { return; } //condition 2 include_once "./Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_enabledLearningProgress() == false) { return; } //set Learning Progress to Automatic by Collection of SCORM Items include_once "./Services/Tracking/classes/class.ilLPObjSettings.php"; $lm_set = new ilLPObjSettings($this->getId()); $lm_set->setMode(ilLPObjSettings::LP_MODE_SCORM); $lm_set->insert(); //select all SCOs as relevant for Learning Progress include_once "Services/Tracking/classes/collection/class.ilLPCollectionOfSCOs.php"; $collection = new ilLPCollectionOfSCOs($this->getId(), ilLPObjSettings::LP_MODE_SCORM); $scos = array(); foreach ($collection->getPossibleItems() as $sco_id => $item) { $scos[] = $sco_id; } $collection->activateEntries($scos); }
/** * deletes a user * @access public * @param integer user_id */ function delete() { global $rbacadmin, $ilDB; // deassign from ldap groups include_once 'Services/LDAP/classes/class.ilLDAPRoleGroupMapping.php'; $mapping = ilLDAPRoleGroupMapping::_getInstance(); $mapping->deleteUser($this->getId()); // remove mailbox / update sent mails include_once "Services/Mail/classes/class.ilMailbox.php"; $mailbox = new ilMailbox($this->getId()); $mailbox->delete(); $mailbox->updateMailsOfDeletedUser($this->getLogin()); // delete feed blocks on personal desktop include_once "./Services/Block/classes/class.ilCustomBlock.php"; $costum_block = new ilCustomBlock(); $costum_block->setContextObjId($this->getId()); $costum_block->setContextObjType("user"); $c_blocks = $costum_block->queryBlocksForContext(); include_once "./Services/Feeds/classes/class.ilPDExternalFeedBlock.php"; foreach ($c_blocks as $c_block) { if ($c_block["type"] == "pdfeed") { $fb = new ilPDExternalFeedBlock($c_block["id"]); $fb->delete(); } } // delete block settings include_once "./Services/Block/classes/class.ilBlockSetting.php"; ilBlockSetting::_deleteSettingsOfUser($this->getId()); // delete user_account $ilDB->manipulateF("DELETE FROM usr_data WHERE usr_id = %s", array("integer"), array($this->getId())); // delete user_prefs ilObjUser::_deleteAllPref($this->getId()); // delete user_session include_once "./Services/Authentication/classes/class.ilSession.php"; ilSession::_destroyByUserId($this->getId()); // remove user from rbac $rbacadmin->removeUser($this->getId()); // remove bookmarks // TODO: move this to class.ilBookmarkFolder $q = "DELETE FROM bookmark_tree WHERE tree = " . $ilDB->quote($this->getId(), "integer"); $ilDB->manipulate($q); $q = "DELETE FROM bookmark_data WHERE user_id = " . $ilDB->quote($this->getId(), "integer"); $ilDB->manipulate($q); // DELETE FORUM ENTRIES (not complete in the moment) include_once './Modules/Forum/classes/class.ilObjForum.php'; ilObjForum::_deleteUser($this->getId()); // Delete link check notify entries include_once './Services/LinkChecker/classes/class.ilLinkCheckNotify.php'; ilLinkCheckNotify::_deleteUser($this->getId()); // Delete crs entries include_once './Modules/Course/classes/class.ilObjCourse.php'; ilObjCourse::_deleteUser($this->getId()); // Delete user tracking include_once './Services/Tracking/classes/class.ilObjUserTracking.php'; ilObjUserTracking::_deleteUser($this->getId()); include_once 'Modules/Session/classes/class.ilEventParticipants.php'; ilEventParticipants::_deleteByUser($this->getId()); // Delete Tracking data SCORM 2004 RTE include_once 'Modules/Scorm2004/classes/ilSCORM13Package.php'; ilSCORM13Package::_removeTrackingDataForUser($this->getId()); // Delete Tracking data SCORM 1.2 RTE include_once 'Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php'; ilObjSCORMLearningModule::_removeTrackingDataForUser($this->getId()); // remove all notifications include_once "./Services/Notification/classes/class.ilNotification.php"; ilNotification::removeForUser($this->getId()); // remove portfolios include_once "./Modules/Portfolio/classes/class.ilObjPortfolio.php"; ilObjPortfolio::deleteUserPortfolios($this->getId()); // remove workspace include_once "./Services/PersonalWorkspace/classes/class.ilWorkspaceTree.php"; $tree = new ilWorkspaceTree($this->getId()); $tree->cascadingDelete(); // remove disk quota entries include_once "./Services/DiskQuota/classes/class.ilDiskQuotaHandler.php"; ilDiskQuotaHandler::deleteByOwner($this->getId()); // Delete user defined field entries $this->deleteUserDefinedFieldEntries(); // Delete clipboard entries $this->clipboardDeleteAll(); // Reset owner $this->resetOwner(); // Trigger deleteUser Event global $ilAppEventHandler; $ilAppEventHandler->raise('Services/User', 'deleteUser', array('usr_id' => $this->getId())); // delete object data parent::delete(); return true; }
/** * get mode info text * * @access public * @static * * @param int $mode */ public static function _mode2InfoText($a_mode) { global $lng; switch ($a_mode) { case LP_MODE_DEACTIVATED: return $lng->txt('trac_mode_deactivated_info_new'); case LP_MODE_TLT: return sprintf($lng->txt('trac_mode_tlt_info'), ilObjUserTracking::_getValidTimeSpan()); case LP_MODE_VISITS: return $lng->txt('trac_mode_visits_info'); case LP_MODE_MANUAL: return $lng->txt('trac_mode_manual_info'); case LP_MODE_MANUAL_BY_TUTOR: return $lng->txt('trac_mode_manual_by_tutor_info'); case LP_MODE_OBJECTIVES: return $lng->txt('trac_mode_objectives_info'); case LP_MODE_COLLECTION: return $lng->txt('trac_mode_collection_info'); case LP_MODE_SCORM: return $lng->txt('trac_mode_scorm_info'); case LP_MODE_TEST_FINISHED: return $lng->txt('trac_mode_test_finished_info'); case LP_MODE_TEST_PASSED: return $lng->txt('trac_mode_test_passed_info'); case LP_MODE_EXERCISE_RETURNED: return $lng->txt('trac_mode_exercise_returned_info'); case LP_MODE_SCORM_PACKAGE: return $lng->txt('trac_mode_scorm_package_info'); case LP_MODE_EVENT: return $lng->txt('trac_mode_event_info'); } }
function learningProgressObject() { global $rbacsystem, $tpl; // deprecated JF 27 May 2013 exit; if (!$rbacsystem->checkAccess("read", $this->object->getRefId()) || !ilObjUserTracking::_enabledLearningProgress() || !ilObjUserTracking::_enabledUserRelatedData()) { $this->ilias->raiseError($this->lng->txt("permission_denied"), $this->ilias->error_obj->MESSAGE); } include_once "Services/User/classes/class.ilUserLPTableGUI.php"; $tbl = new ilUserLPTableGUI($this, "learningProgress", $this->object->getRefId()); $tpl->setContent($tbl->getHTML()); }
protected function trackChapterAccess() { global $ilDB, $ilUser; // get last accessed page $set = $ilDB->query("SELECT * FROM lo_access WHERE " . "usr_id = " . $ilDB->quote($ilUser->getId(), "integer") . " AND " . "lm_id = " . $ilDB->quote($this->lm->getRefId(), "integer")); $res = $ilDB->fetchAssoc($set); if ($res["obj_id"]) { include_once 'Services/Tracking/classes/class.ilObjUserTracking.php'; $valid_timespan = ilObjUserTracking::_getValidTimeSpan(); $pg_ts = new ilDateTime($res["timestamp"], IL_CAL_DATETIME); $pg_ts = $pg_ts->get(IL_CAL_UNIX); $pg_id = $res["obj_id"]; if (!$this->lm_tree->isInTree($pg_id)) { return; } $now = time(); $time_diff = $read_diff = 0; // spent_seconds or read_count ? if ($now - $pg_ts <= $valid_timespan) { $time_diff = $now - $pg_ts; } else { $read_diff = 1; } // find parent chapter(s) for that page $parent_st_ids = array(); foreach ($this->lm_tree->getPathFull($pg_id) as $item) { if ($item["type"] == "st") { $parent_st_ids[] = $item["obj_id"]; } } if ($parent_st_ids && ($time_diff || $read_diff)) { // get existing chapter entries $ex_st = array(); $set = $ilDB->query("SELECT obj_id FROM lm_read_event" . " WHERE " . $ilDB->in("obj_id", $parent_st_ids, "", "integer") . " AND usr_id = " . $ilDB->quote($ilUser->getId(), "integer")); while ($row = $ilDB->fetchAssoc($set)) { $ex_st[] = $row["obj_id"]; } // add missing chapter entries $missing_st = array_diff($parent_st_ids, $ex_st); if (sizeof($missing_st)) { foreach ($missing_st as $st_id) { $fields = array("obj_id" => array("integer", $st_id), "usr_id" => array("integer", $ilUser->getId())); $ilDB->insert("lm_read_event", $fields); } } // update all parent chapters $ilDB->manipulate("UPDATE lm_read_event SET" . " read_count = read_count + " . $ilDB->quote($read_diff, "integer") . " , spent_seconds = spent_seconds + " . $ilDB->quote($time_diff, "integer") . " , last_access = " . $ilDB->quote($now, "integer") . " WHERE " . $ilDB->in("obj_id", $parent_st_ids, "", "integer") . " AND usr_id = " . $ilDB->quote($ilUser->getId(), "integer")); } } }
/** * sync course status from lp * * as lp data is not deleted on course exit new members may already have lp completed * * @param int $a_member_id */ public function checkLPStatusSync($a_member_id) { // #11113 include_once "Services/Tracking/classes/class.ilObjUserTracking.php"; if (ilObjUserTracking::_enabledLearningProgress() && $this->getStatusDetermination() == ilObjCourse::STATUS_DETERMINATION_LP) { include_once "Services/Tracking/classes/class.ilLPStatus.php"; // #13811 - we need to suppress creation if status entry $has_completed = ilLPStatus::_lookupStatus($this->getId(), $a_member_id, false) == ilLPStatus::LP_STATUS_COMPLETED_NUM; $this->getMembersObject()->updatePassed($a_member_id, $has_completed, false, true); } }
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); }