ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilLPProgressTableGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once("./Services/Tracking/classes/class.ilLPTableBaseGUI.php");
5require_once("./Services/Tracking/classes/class.ilLearningProgressGUI.php");
6
17{
21 public function __construct($a_parent_obj, $a_parent_cmd, $a_user = "", $obj_ids = null, $details = false, $mode = null, $personal_only = false, $a_parent_id = null, $a_parent_ref_id = null, $lp_context = null)
22 {
23 global $DIC;
24
25 $ilCtrl = $DIC['ilCtrl'];
26 $lng = $DIC['lng'];
27 $ilUser = $DIC['ilUser'];
28
29 $this->tracked_user = $a_user;
30 $this->obj_ids = $obj_ids;
31 $this->details = $details;
32 $this->mode = $mode;
33 $this->parent_obj_id = $a_parent_id;
34 $this->lp_context = $lp_context;
35
36 if ($a_parent_id) {
37 // #15042 - needed for export meta
38 $this->obj_id = $this->parent_obj_id;
39 $this->ref_id = $a_parent_ref_id;
40 }
41
42 $this->setId("lpprgtbl");
43
44 parent::__construct($a_parent_obj, $a_parent_cmd);
45
46 $this->setLimit(9999);
47
48 if (!$this->details) {
49 $this->has_object_subitems = true;
50
51 $user = $this->tracked_user;
52 if (!$user) {
53 $user = $ilUser;
54 }
55
56 $this->addColumn("", "", "1", true);
57 $this->addColumn($this->lng->txt("trac_title"), "title", "26%");
58 $this->addColumn($this->lng->txt("status"), "status", "7%");
59 $this->addColumn($this->lng->txt('trac_status_changed'), 'status_changed', '10%');
60 $this->addColumn($this->lng->txt("trac_percentage"), "percentage", "7%");
61 $this->addColumn($this->lng->txt("trac_mark"), "", "5%");
62 $this->addColumn($this->lng->txt("comment"), "", "10%");
63 $this->addColumn($this->lng->txt("trac_mode"), "", "20%");
64 $this->addColumn($this->lng->txt("path"), "", "20%");
65 $this->addColumn($this->lng->txt("actions"), "", "5%");
66
67 $this->setTitle(sprintf($this->lng->txt("trac_learning_progress_of"), $user->getFullName()));
68 $this->initBaseFilter();
69
70 $this->setSelectAllCheckbox("item_id");
71 $this->addMultiCommand("hideSelected", $lng->txt("trac_hide_selected"));
72
73 $this->setShowTemplates(true);
74 } else {
75 include_once './Services/Object/classes/class.ilObjectLP.php';
76 $olp = ilObjectLP::getInstance($this->parent_obj_id);
77 $collection = $olp->getCollectionInstance();
78 $this->has_object_subitems = ($collection instanceof ilLPCollectionOfRepositoryObjects);
79
80 /*
81 if(!$personal_only)
82 {
83 $this->parseTitle($a_parent_obj->details_obj_id, "trac_subitems");
84 }
85 else
86 {
87 $this->parseTitle($a_parent_obj->details_obj_id, "trac_progress");
88 }
89 */
90 $this->setTitle($this->lng->txt("details")); // #15247
91
92 $this->addColumn($this->lng->txt("trac_title"), "title", "31%");
93 $this->addColumn($this->lng->txt("status"), "status", "7%");
94
95 if ($this->mode == ilLPObjSettings::LP_MODE_SCORM) {
96 $this->lng->loadLanguageModule('content');
97 $this->addColumn($this->lng->txt('cont_score'), 'score', '10%');
98 } elseif ($this->has_object_subitems) {
99 $this->addColumn($this->lng->txt('trac_status_changed'), 'status_changed', '10%');
100 $this->addColumn($this->lng->txt("trac_percentage"), "percentage", "7%");
101 $this->addColumn($this->lng->txt("trac_mark"), "", "5%");
102 $this->addColumn($this->lng->txt("comment"), "", "10%");
103 $this->addColumn($this->lng->txt("trac_mode"), "", "20%");
104 $this->addColumn($this->lng->txt("path"), "", "20%");
105 }
106 }
107
108 $this->setEnableHeader(true);
109 $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
110 $this->setRowTemplate("tpl.lp_progress_list_row.html", "Services/Tracking");
111 $this->setEnableHeader(true);
112 $this->setEnableNumInfo(false);
113 $this->setEnableTitle(true);
114 $this->setDefaultOrderField("title");
115 $this->setDefaultOrderDirection("asc");
116
117 if ($this->has_object_subitems) {
118 $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
119 }
120
121 // area selector gets in the way
122 if ($this->tracked_user) {
123 $this->getItems();
124 }
125 }
126
127 public function numericOrdering($a_field)
128 {
129 return ($a_field == "percentage"); // #15041
130 }
131
132 public function getItems()
133 {
134 $obj_ids = $this->obj_ids;
135 if (!$obj_ids && !$this->details) {
136 switch ($this->lp_context) {
138 $obj_ids = $this->searchObjects($this->getCurrentFilter(true), null);
139 break;
140
141 default:
142 $obj_ids = $this->searchObjects($this->getCurrentFilter(true), "read");
143
144 // check for LP relevance
145 include_once "Services/Object/classes/class.ilObjectLP.php";
146 foreach (ilObjectLP::getLPMemberships($this->tracked_user->getId(), $obj_ids, null, true) as $obj_id => $status) {
147 if (!$status) {
148 unset($obj_ids[$obj_id]);
149 }
150 }
151 break;
152 }
153 }
154 if ($obj_ids) {
155 include_once("./Services/Tracking/classes/class.ilTrQuery.php");
156 switch ($this->mode) {
158 $data = ilTrQuery::getSCOsStatusForUser($this->tracked_user->getId(), $this->parent_obj_id, $obj_ids);
159 break;
160
162 $data = ilTrQuery::getObjectivesStatusForUser($this->tracked_user->getId(), $this->parent_obj_id, $obj_ids);
163 break;
164
168 $data = ilTrQuery::getSubItemsStatusForUser($this->tracked_user->getId(), $this->parent_obj_id, $obj_ids);
169 break;
170
171 default:
172 $data = ilTrQuery::getObjectsStatusForUser($this->tracked_user->getId(), $obj_ids);
173 foreach ($data as $idx => $item) {
174 if (!$item["status"] && !$this->filter["status"] && !$this->details) {
175 unset($data[$idx]);
176 } else {
177 $data[$idx]["offline"] = ilLearningProgressBaseGUI::isObjectOffline($item["obj_id"], $item["type"]);
178 }
179 }
180 break;
181 }
182
183 // #15334
184 foreach ($data as $idx => $row) {
185 if (!$this->isPercentageAvailable($row["obj_id"])) {
186 // #17000 - enable proper (numeric) sorting
187 $data[$idx]["percentage"] = -1;
188 }
189 }
190
191 $this->setData($data);
192 }
193 }
194
198 protected function fillRow($a_set)
199 {
200 global $DIC;
201
202 $ilCtrl = $DIC['ilCtrl'];
203
204 if (!$this->details) {
205 $this->tpl->setCurrentBlock("column_checkbox");
206 $this->tpl->setVariable("OBJ_ID", $a_set["obj_id"]);
207 $this->tpl->parseCurrentBlock();
208 }
209
210 $this->tpl->setVariable("ICON_SRC", ilObject::_getIcon("", "tiny", $a_set["type"]));
211 $this->tpl->setVariable("ICON_ALT", $this->lng->txt($a_set["type"]));
212 $this->tpl->setVariable("TITLE_TEXT", $a_set["title"]);
213
214 if ($a_set["offline"]) {
215 $this->tpl->setCurrentBlock("offline");
216 $this->tpl->setVariable("TEXT_STATUS", $this->lng->txt("status"));
217 $this->tpl->setVariable("TEXT_OFFLINE", $this->lng->txt("offline"));
218 $this->tpl->parseCurrentBlock();
219 }
220
222 $this->tpl->setVariable(
223 "STATUS_ICON",
224 $icons->renderIconForStatus((int) $a_set["status"])
225 );
226
227 if ($this->mode == ilLPObjSettings::LP_MODE_SCORM) {
228 $this->tpl->setVariable('SCORE_VAL', $a_set["score"]);
229 } elseif ($this->has_object_subitems) {
230 $this->tpl->setCurrentBlock("status_details");
231
232 $this->tpl->setVariable('STATUS_CHANGED_VAL', ilDatePresentation::formatDate(new ilDateTime($a_set['status_changed'], IL_CAL_DATETIME)));
233
234 $olp = ilObjectLP::getInstance($a_set["obj_id"]);
235 $this->tpl->setVariable("MODE_TEXT", $olp->getModeText($a_set["u_mode"]));
236 $this->tpl->setVariable("MARK_VALUE", $a_set["mark"]);
237 $this->tpl->setVariable("COMMENT_TEXT", $a_set["comment"]);
238
239 if ($a_set["percentage"] < 0) {
240 $this->tpl->setVariable("PERCENTAGE_VALUE", "");
241 } else {
242 $this->tpl->setVariable("PERCENTAGE_VALUE", sprintf("%d%%", $a_set["percentage"]));
243 }
244
245 // path
246 $path = $this->buildPath($a_set["ref_ids"]);
247 if ($path) {
248 $this->tpl->setCurrentBlock("item_path");
249 foreach ($path as $path_item) {
250 $this->tpl->setVariable("PATH_ITEM", $path_item);
251 $this->tpl->parseCurrentBlock();
252 }
253 }
254
255 $this->tpl->parseCurrentBlock();
256 }
257
258 // not for objectives/scos
259 if (!$this->mode) {
260 // tlt warning
261 if ($a_set["status"] != ilLPStatus::LP_STATUS_COMPLETED_NUM && $a_set["ref_ids"]) {
262 $ref_id = $a_set["ref_ids"];
263 $ref_id = array_shift($ref_id);
264 $timing = $this->showTimingsWarning($ref_id, $this->tracked_user->getId());
265 if ($timing) {
266 if ($timing !== true) {
267 $timing = ": " . ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
268 } else {
269 $timing = "";
270 }
271 $this->tpl->setCurrentBlock('warning_img');
272 $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.svg'));
273 $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed') . $timing);
274 $this->tpl->parseCurrentBlock();
275 }
276 }
277
278 // hide / unhide?!
279 if (!$this->details) {
280 $this->tpl->setCurrentBlock("item_command");
281 $ilCtrl->setParameterByClass(get_class($this), 'hide', $a_set["obj_id"]);
282 $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass(get_class($this), 'hide'));
283 $this->tpl->setVariable("TXT_COMMAND", $this->lng->txt('trac_hide'));
284 $this->tpl->parseCurrentBlock();
285
286 $olp = ilObjectLP::getInstance($a_set["obj_id"]);
287 if ($olp->getCollectionInstance() && $a_set["ref_ids"]) {
288 $ref_id = $a_set["ref_ids"];
289 $ref_id = array_shift($ref_id);
290 $ilCtrl->setParameterByClass($ilCtrl->getCmdClass(), 'details_id', $ref_id);
291 $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass($ilCtrl->getCmdClass(), 'details'));
292 $ilCtrl->setParameterByClass($ilCtrl->getCmdClass(), 'details_id', '');
293 $this->tpl->setVariable("TXT_COMMAND", $this->lng->txt('trac_subitems'));
294 $this->tpl->parseCurrentBlock();
295 }
296
297 $this->tpl->setCurrentBlock("column_action");
298 $this->tpl->parseCurrentBlock();
299 }
300 }
301 }
302
303 protected function fillHeaderExcel(ilExcel $a_excel, &$a_row)
304 {
305 $a_excel->setCell($a_row, 0, $this->lng->txt("type"));
306 $a_excel->setCell($a_row, 1, $this->lng->txt("trac_title"));
307 $a_excel->setCell($a_row, 2, $this->lng->txt("status"));
308 $a_excel->setCell($a_row, 3, $this->lng->txt("trac_status_changed"));
309 $a_excel->setCell($a_row, 4, $this->lng->txt("trac_percentage"));
310 $a_excel->setCell($a_row, 5, $this->lng->txt("trac_mark"));
311 $a_excel->setCell($a_row, 6, $this->lng->txt("comment"));
312 $a_excel->setCell($a_row, 7, $this->lng->txt("trac_mode"));
313 // $a_excel->setCell($a_row, 7, $this->lng->txt("path"));
314
315 $a_excel->setBold("A" . $a_row . ":H" . $a_row);
316 }
317
318 protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
319 {
320 $a_excel->setCell($a_row, 0, $this->lng->txt($a_set["type"]));
321 $a_excel->setCell($a_row, 1, $a_set["title"]);
322 $a_excel->setCell($a_row, 2, ilLearningProgressBaseGUI::_getStatusText($a_set["status"]));
323
324 $a_excel->setCell($a_row, 3, new ilDateTime($a_set['status_changed'], IL_CAL_DATETIME));
325
326 if (!$this->isPercentageAvailable($a_row['obj_id'])) {
327 $a_excel->setCell($a_row, 4, '-');
328 } else {
329 $a_excel->setCell($a_row, 4, $a_set["percentage"] . "%");
330 }
331 $a_excel->setCell($a_row, 5, $a_set["mark"]);
332 $a_excel->setCell($a_row, 6, $a_set["comment"]);
333 $a_excel->setCell($a_row, 7, ilLPObjSettings::_mode2Text($a_set["u_mode"]));
334 }
335
336 protected function fillHeaderCSV($a_csv)
337 {
338 $a_csv->addColumn($this->lng->txt("type"));
339 $a_csv->addColumn($this->lng->txt("trac_title"));
340 $a_csv->addColumn($this->lng->txt("status"));
341 $a_csv->addColumn($this->lng->txt("trac_status_changed"));
342 $a_csv->addColumn($this->lng->txt("trac_percentage"));
343 $a_csv->addColumn($this->lng->txt("trac_mark"));
344 $a_csv->addColumn($this->lng->txt("comment"));
345 $a_csv->addColumn($this->lng->txt("trac_mode"));
346 // $a_csv->addColumn($this->lng->txt("path"));
347 $a_csv->addRow();
348 }
349
350 protected function fillRowCSV($a_csv, $a_set)
351 {
352 $a_csv->addColumn($this->lng->txt($a_set["type"]));
353 $a_csv->addColumn($a_set["title"]);
354 $a_csv->addColumn(ilLearningProgressBaseGUI::_getStatusText($a_set["status"]));
355
357 $a_csv->addColumn(ilDatePresentation::formatDate(new ilDateTime($a_set['status_changed'], IL_CAL_DATETIME)));
359
360 if (!$this->isPercentageAvailable($a_set['obj_id'])) {
361 $a_csv->addColumn('-');
362 } else {
363 $a_csv->addColumn(sprintf("%d%%", $a_set["percentage"]));
364 }
365 $a_csv->addColumn($a_set["mark"]);
366 $a_csv->addColumn($a_set["comment"]);
367 $a_csv->addColumn(ilLPObjSettings::_mode2Text($a_set["u_mode"]));
368
369 $a_csv->addRow();
370 }
371}
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
const IL_CAL_DATETIME
static resetToDefaults()
reset to defaults
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date @access public.
static setUseRelativeDates($a_status)
set use relative dates
@classDescription Date and time handling
Class for single dates.
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
setBold($a_coords)
Set cell(s) to bold.
static _mode2Text($a_mode)
TableGUI class for learning progress.
__construct($a_parent_obj, $a_parent_cmd, $a_user="", $obj_ids=null, $details=false, $mode=null, $personal_only=false, $a_parent_id=null, $a_parent_ref_id=null, $lp_context=null)
Constructor.
fillRow($a_set)
Fill table row.
numericOrdering($a_field)
Should this field be sorted numeric?
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
fillHeaderExcel(ilExcel $a_excel, &$a_row)
Excel Version of Fill Header.
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
Excel Version of Fill Row.
fillHeaderCSV($a_csv)
CSV Version of Fill Header.
static getInstance(int $variant=ilLPStatusIcons::ICON_VARIANT_DEFAULT, ?\ILIAS\UI\Renderer $renderer=null, ?\ILIAS\UI\Factory $factory=null)
const LP_STATUS_COMPLETED_NUM
TableGUI class for learning progress.
initBaseFilter($a_split_learning_resources=false, $a_include_no_status_filter=true)
Init filter.
getCurrentFilter($as_query=false)
showTimingsWarning($a_ref_id, $a_user_id)
buildPath($ref_ids)
Build path with deep-link.
searchObjects(array $filter, $permission, array $preset_obj_ids=null, $a_check_lp_activation=true)
Search objects that match current filters.
static _getStatusText($a_status, $a_lng=null)
Get status alt text.
static isObjectOffline($a_obj_id, $a_type=null)
static getLPMemberships($a_usr_id, array $a_obj_ids, $a_parent_ref_id=null, $a_mapped_ref_ids=false)
Get all objects where given user is member (from LP POV)
static getInstance($a_obj_id)
static _getIcon( $a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
setEnableHeader($a_enableheader)
Set Enable Header.
setExportFormats(array $formats)
Set available export formats.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
setSelectAllCheckbox($a_select_all_checkbox, $a_select_all_on_top=false)
Set the name of the checkbox that should be toggled with a select all button.
setData($a_data)
set table data @access public
setEnableTitle($a_enabletitle)
Set Enable Title.
setEnableNumInfo($a_val)
Set enable num info.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
setLimit($a_limit=0, $a_default_limit=0)
set max.
addMultiCommand($a_cmd, $a_text)
Add Command button.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
addColumn( $a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setShowTemplates($a_value)
Toggle templates.
static getObjectivesStatusForUser($a_user_id, $a_obj_id, array $a_objective_ids)
static getSubItemsStatusForUser($a_user_id, $a_parent_obj_id, array $a_item_ids)
Get subitems status.
static getObjectsStatusForUser($a_user_id, array $obj_refs)
static getSCOsStatusForUser($a_user_id, $a_parent_obj_id, array $a_sco_ids)
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
filter()
Definition: filter.php:2
global $DIC
Definition: goto.php:24
$ilUser
Definition: imgupload.php:18
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc