/** * Build summary item rows for given object and filter(s * * @param int $a_object_id * @param int $a_ref_id */ function getItems($a_object_id, $a_ref_id) { global $lng; include_once "./Services/Tracking/classes/class.ilTrQuery.php"; $preselected_obj_ids = $filter = NULL; if ($this->is_root) { // using search to get all relevant objects // #8498/#8499: restrict to objects with at least "edit_learning_progress" access $preselected_obj_ids = $this->searchObjects($this->getCurrentFilter(true), "edit_learning_progress"); } else { // using summary filters $filter = $this->getCurrentFilter(); } $data = ilTrQuery::getObjectsSummaryForObject($a_object_id, $a_ref_id, ilUtil::stripSlashes($this->getOrderField()), ilUtil::stripSlashes($this->getOrderDirection()), ilUtil::stripSlashes($this->getOffset()), ilUtil::stripSlashes($this->getLimit()), $filter, $this->getSelectedColumns(), $preselected_obj_ids); // build status to image map include_once "./Services/Tracking/classes/class.ilLearningProgressBaseGUI.php"; include_once "./Services/Tracking/classes/class.ilLPStatus.php"; $valid_status = array(ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM, ilLPStatus::LP_STATUS_IN_PROGRESS_NUM, ilLPStatus::LP_STATUS_COMPLETED_NUM, ilLPStatus::LP_STATUS_FAILED_NUM); $status_map = array(); foreach ($valid_status as $status) { $path = ilLearningProgressBaseGUI::_getImagePathForStatus($status); $text = ilLearningProgressBaseGUI::_getStatusText($status); $status_map[$status] = ilUtil::img($path, $text); } // language map $lng->loadLanguageModule("meta"); $languages = array(); foreach ($lng->getInstalledLanguages() as $lang_key) { $languages[$lang_key] = $lng->txt("meta_l_" . $lang_key); } $rows = array(); foreach ($data["set"] as $idx => $result) { // sessions have no title if ($result["title"] == "" && $result["type"] == "sess") { include_once "Modules/Session/classes/class.ilObjSession.php"; $sess = new ilObjSession($result["obj_id"], false); $data["set"][$idx]["title"] = $sess->getFirstAppointment()->appointmentToString(); } $data["set"][$idx]["offline"] = ilLearningProgressBaseGUI::isObjectOffline($result["obj_id"], $result["type"]); // percentages $users_no = $result["user_total"]; $data["set"][$idx]["country"] = $this->getItemsPercentages($result["country"], $users_no); $data["set"][$idx]["gender"] = $this->getItemsPercentages($result["gender"], $users_no, array("m" => $lng->txt("gender_m"), "f" => $lng->txt("gender_f"))); $data["set"][$idx]["city"] = $this->getItemsPercentages($result["city"], $users_no); $data["set"][$idx]["sel_country"] = $this->getItemsPercentages($result["sel_country"], $users_no, $this->getSelCountryCodes()); $data["set"][$idx]["mark"] = $this->getItemsPercentages($result["mark"], $users_no); $data["set"][$idx]["language"] = $this->getItemsPercentages($result["language"], $users_no, $languages); // if we encounter any invalid status codes, e.g. null, map them to not attempted instead foreach ($result["status"] as $status_code => $status_counter) { // null is cast to "" if ($status_code === "" || !in_array($status_code, $valid_status)) { $result["status"][ilLPStatus::LP_STATUS_NOT_ATTEMPTED_NUM] += $status_counter; unset($result["status"][$status_code]); } } $data["set"][$idx]["status"] = $this->getItemsPercentagesStatus($result["status"], $users_no, $status_map); if (!$this->isPercentageAvailable($result["obj_id"])) { $data["set"][$idx]["percentage_avg"] = NULL; } } $this->setMaxCount($data["cnt"]); $this->setData($data["set"]); }