ILIAS  Release_4_4_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
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 
4 include_once("./Services/Tracking/classes/class.ilLPTableBaseGUI.php");
5 require_once("./Services/Tracking/classes/class.ilLearningProgressGUI.php");
6 
17 {
21  function __construct($a_parent_obj, $a_parent_cmd, $a_user = "", $obj_ids = NULL, $details = false, $mode = null, $personal_only = false, $a_parent_id = null, $lp_context = null)
22  {
23  global $ilCtrl, $lng, $ilUser;
24 
25  $this->tracked_user = $a_user;
26  $this->obj_ids = $obj_ids;
27  $this->details = $details;
28  $this->mode = $mode;
29  $this->parent_obj_id = $a_parent_id;
30  $this->lp_context = $lp_context;
31 
32  $this->setId("lpprgtbl");
33 
34  parent::__construct($a_parent_obj, $a_parent_cmd);
35 
36  $this->setLimit(9999);
37 
38  if(!$this->details)
39  {
40  $this->has_object_subitems = true;
41 
42  $user = $this->tracked_user;
43  if(!$user)
44  {
45  $user = $ilUser;
46  }
47 
48  $this->addColumn("", "", "1", true);
49  $this->addColumn($this->lng->txt("trac_title"), "title", "26%");
50  $this->addColumn($this->lng->txt("status"), "status", "7%");
51  $this->addColumn($this->lng->txt('trac_status_changed'),'status_changed','10%');
52  $this->addColumn($this->lng->txt("trac_percentage"), "percentage", "7%");
53  $this->addColumn($this->lng->txt("trac_mark"), "", "5%");
54  $this->addColumn($this->lng->txt("comment"), "", "10%");
55  $this->addColumn($this->lng->txt("trac_mode"), "", "20%");
56  $this->addColumn($this->lng->txt("path"), "", "20%");
57  $this->addColumn($this->lng->txt("actions"), "", "5%");
58 
59  $this->setTitle(sprintf($this->lng->txt("trac_learning_progress_of"), $user->getFullName()));
60  $this->initFilter();
61 
62  $this->setSelectAllCheckbox("item_id");
63  $this->addMultiCommand("hideSelected", $lng->txt("trac_hide_selected"));
64  }
65  else
66  {
67  include_once './Services/Object/classes/class.ilObjectLP.php';
68  $olp = ilObjectLP::getInstance($this->parent_obj_id);
69  $collection = $olp->getCollectionInstance();
70  $this->has_object_subitems = ($collection instanceof ilLPCollectionOfRepositoryObjects);
71 
72  if(!$personal_only)
73  {
74  $this->parseTitle($a_parent_obj->details_obj_id, "trac_subitems");
75  }
76  else
77  {
78  $this->parseTitle($a_parent_obj->details_obj_id, "trac_progress");
79  }
80 
81  $this->addColumn($this->lng->txt("trac_title"), "title", "31%");
82  $this->addColumn($this->lng->txt("status"), "status", "7%");
83 
84  if($this->mode == ilLPObjSettings::LP_MODE_SCORM)
85  {
86  $this->lng->loadLanguageModule('content');
87  $this->addColumn($this->lng->txt('cont_score'),'score','10%');
88  }
89  else if($this->has_object_subitems)
90  {
91  $this->addColumn($this->lng->txt('trac_status_changed'),'status_changed','10%');
92  $this->addColumn($this->lng->txt("trac_percentage"), "percentage", "7%");
93  $this->addColumn($this->lng->txt("trac_mark"), "", "5%");
94  $this->addColumn($this->lng->txt("comment"), "", "10%");
95  $this->addColumn($this->lng->txt("trac_mode"), "", "20%");
96  $this->addColumn($this->lng->txt("path"), "", "20%");
97  }
98  }
99 
100  $this->setEnableHeader(true);
101  $this->setFormAction($ilCtrl->getFormActionByClass(get_class($this)));
102  $this->setRowTemplate("tpl.lp_progress_list_row.html", "Services/Tracking");
103  $this->setEnableHeader(true);
104  $this->setEnableNumInfo(true);
105  $this->setEnableTitle(true);
106  $this->setDefaultOrderField("title");
107  $this->setDefaultOrderDirection("asc");
108  $this->setShowTemplates(true);
109 
110  if($this->has_object_subitems)
111  {
112  $this->setExportFormats(array(self::EXPORT_CSV, self::EXPORT_EXCEL));
113  }
114 
115  // area selector gets in the way
116  if($this->tracked_user)
117  {
118  $this->getItems();
119  }
120  }
121 
122  function getItems()
123  {
124  $obj_ids = $this->obj_ids;
125  if(!$obj_ids && !$this->details)
126  {
127  // restrict courses/groups to objects where current user is member
128  $membership_ids = null;
129  if($this->filter["type"] == "crs" || $this->filter["type"] == "grp")
130  {
131  include_once "Services/Membership/classes/class.ilParticipants.php";
132  $membership_ids = ilParticipants::_getMembershipByType($this->tracked_user->getId(),
133  $this->filter["type"]);
134  }
135  if($membership_ids === null || sizeof($membership_ids))
136  {
137  switch($this->lp_context)
138  {
140  $obj_ids = $this->searchObjects($this->getCurrentFilter(true),null,$membership_ids);
141  break;
142  default:
143  $obj_ids = $this->searchObjects($this->getCurrentFilter(true),"read",$membership_ids);
144  break;
145  }
146  }
147  }
148  if($obj_ids)
149  {
150  include_once("./Services/Tracking/classes/class.ilTrQuery.php");
151  switch($this->mode)
152  {
154  $data = ilTrQuery::getSCOsStatusForUser($this->tracked_user->getId(), $this->parent_obj_id, $obj_ids);
155  break;
156 
158  $data = ilTrQuery::getObjectivesStatusForUser($this->tracked_user->getId(), $obj_ids);
159  break;
160 
163  $data = ilTrQuery::getSubItemsStatusForUser($this->tracked_user->getId(), $this->parent_obj_id, $obj_ids);
164  break;
165 
166  default:
167  $data = ilTrQuery::getObjectsStatusForUser($this->tracked_user->getId(), $obj_ids);
168  foreach($data as $idx => $item)
169  {
170  if(!$item["status"] && !$this->filter["status"] && !$this->details)
171  {
172  unset($data[$idx]);
173  }
174  else
175  {
176  $data[$idx]["offline"] = ilLearningProgressBaseGUI::isObjectOffline($item["obj_id"], $item["type"]);
177  }
178  }
179  break;
180  }
181  $this->setData($data);
182  }
183  }
184 
188  protected function fillRow($a_set)
189  {
190  global $ilCtrl;
191 
192  if(!$this->details)
193  {
194  $this->tpl->setCurrentBlock("column_checkbox");
195  $this->tpl->setVariable("OBJ_ID", $a_set["obj_id"]);
196  $this->tpl->parseCurrentBlock();
197  }
198 
199  $this->tpl->setVariable("ICON_SRC", ilObject::_getIcon("", "tiny", $a_set["type"]));
200  $this->tpl->setVariable("ICON_ALT", $this->lng->txt($a_set["type"]));
201  $this->tpl->setVariable("TITLE_TEXT", $a_set["title"]);
202 
203  if($a_set["offline"])
204  {
205  $this->tpl->setCurrentBlock("offline");
206  $this->tpl->setVariable("TEXT_STATUS", $this->lng->txt("status"));
207  $this->tpl->setVariable("TEXT_OFFLINE", $this->lng->txt("offline"));
208  $this->tpl->parseCurrentBlock();
209  }
210 
211  $this->tpl->setVariable("STATUS_ALT", ilLearningProgressBaseGUI::_getStatusText($a_set["status"]));
212  $this->tpl->setVariable("STATUS_IMG", ilLearningProgressBaseGUI::_getImagePathForStatus($a_set["status"]));
213 
214  if($this->mode == ilLPObjSettings::LP_MODE_SCORM)
215  {
216  $this->tpl->setVariable('SCORE_VAL', $a_set["score"]);
217  }
218  else if($this->has_object_subitems)
219  {
220  $this->tpl->setCurrentBlock("status_details");
221 
222  $this->tpl->setVariable('STATUS_CHANGED_VAL', ilDatePresentation::formatDate(new ilDateTime($a_set['status_changed'],IL_CAL_DATETIME)));
223 
224  $olp = ilObjectLP::getInstance($a_set["obj_id"]);
225  $this->tpl->setVariable("MODE_TEXT", $olp->getModeText($a_set["u_mode"]));
226  $this->tpl->setVariable("MARK_VALUE", $a_set["mark"]);
227  $this->tpl->setVariable("COMMENT_TEXT", $a_set["comment"]);
228 
229  if(!$this->isPercentageAvailable($a_set["obj_id"]) || (int)$a_set["percentage"] === 0)
230  {
231  $this->tpl->setVariable("PERCENTAGE_VALUE", "");
232  }
233  else
234  {
235  $this->tpl->setVariable("PERCENTAGE_VALUE", sprintf("%d%%", $a_set["percentage"]));
236  }
237 
238  // path
239  $path = $this->buildPath($a_set["ref_ids"]);
240  if($path)
241  {
242  $this->tpl->setCurrentBlock("item_path");
243  foreach($path as $path_item)
244  {
245  $this->tpl->setVariable("PATH_ITEM", $path_item);
246  $this->tpl->parseCurrentBlock();
247  }
248  }
249 
250  $this->tpl->parseCurrentBlock();
251  }
252 
253  // not for objectives/scos
254  if(!$this->mode)
255  {
256  // tlt warning
257  if($a_set["status"] != ilLPStatus::LP_STATUS_COMPLETED_NUM && $a_set["ref_ids"])
258  {
259  $ref_id = $a_set["ref_ids"];
260  $ref_id = array_shift($ref_id);
261  $timing = $this->showTimingsWarning($ref_id, $this->tracked_user->getId());
262  if($timing)
263  {
264  if($timing !== true)
265  {
266  $timing = ": ".ilDatePresentation::formatDate(new ilDate($timing, IL_CAL_UNIX));
267  }
268  else
269  {
270  $timing = "";
271  }
272  $this->tpl->setCurrentBlock('warning_img');
273  $this->tpl->setVariable('WARNING_IMG', ilUtil::getImagePath('time_warn.png'));
274  $this->tpl->setVariable('WARNING_ALT', $this->lng->txt('trac_time_passed').$timing);
275  $this->tpl->parseCurrentBlock();
276  }
277  }
278 
279  // hide / unhide?!
280  if(!$this->details)
281  {
282  $this->tpl->setCurrentBlock("item_command");
283  $ilCtrl->setParameterByClass(get_class($this),'hide', $a_set["obj_id"]);
284  $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass(get_class($this),'hide'));
285  $this->tpl->setVariable("TXT_COMMAND", $this->lng->txt('trac_hide'));
286  $this->tpl->parseCurrentBlock();
287 
288  $olp = ilObjectLP::getInstance($a_set["obj_id"]);
289  if($olp->getCollectionInstance() && $a_set["ref_ids"])
290  {
291  $ref_id = $a_set["ref_ids"];
292  $ref_id = array_shift($ref_id);
293  $ilCtrl->setParameterByClass($ilCtrl->getCmdClass(), 'details_id', $ref_id);
294  $this->tpl->setVariable("HREF_COMMAND", $ilCtrl->getLinkTargetByClass($ilCtrl->getCmdClass(), 'details'));
295  $ilCtrl->setParameterByClass($ilCtrl->getCmdClass(), 'details_id', '');
296  $this->tpl->setVariable("TXT_COMMAND", $this->lng->txt('trac_subitems'));
297  $this->tpl->parseCurrentBlock();
298  }
299 
300  $this->tpl->setCurrentBlock("column_action");
301  $this->tpl->parseCurrentBlock();
302  }
303  }
304  }
305 
306  protected function fillHeaderExcel($worksheet, &$a_row)
307  {
308  $worksheet->write($a_row, 0, $this->lng->txt("type"));
309  $worksheet->write($a_row, 1, $this->lng->txt("trac_title"));
310  $worksheet->write($a_row, 2, $this->lng->txt("status"));
311  $worksheet->write($a_row, 3, $this->lng->txt("trac_status_changed"));
312  $worksheet->write($a_row, 4, $this->lng->txt("trac_percentage"));
313  $worksheet->write($a_row, 5, $this->lng->txt("trac_mark"));
314  $worksheet->write($a_row, 6, $this->lng->txt("comment"));
315  $worksheet->write($a_row, 7, $this->lng->txt("trac_mode"));
316  // $worksheet->write($a_row, 7, $this->lng->txt("path"));
317  }
318 
319  protected function fillRowExcel($worksheet, &$a_row, $a_set)
320  {
321  $worksheet->write($a_row, 0, $this->lng->txt($a_set["type"]));
322  $worksheet->write($a_row, 1, $a_set["title"]);
323  $worksheet->write($a_row, 2, ilLearningProgressBaseGUI::_getStatusText($a_set["status"]));
324 
326  $worksheet->write($a_row, 3, ilDatePresentation::formatDate(new ilDateTime($a_set['status_changed'],IL_CAL_DATETIME)));
328 
329  $worksheet->write($a_row, 4, sprintf("%d%%", $a_set["percentage"]));
330  $worksheet->write($a_row, 5, $a_set["mark"]);
331  $worksheet->write($a_row, 6, $a_set["comment"]);
332  $worksheet->write($a_row, 7, ilLPObjSettings::_mode2Text($a_set["u_mode"]));
333 
334  /*
335  // path
336  $path = $this->buildPath($a_set["ref_ids"]);
337  if($path)
338  {
339  $col = 7;
340  foreach($path as $path_item)
341  {
342  $worksheet->write($a_row, $col, strip_tags($path_item));
343  $col++;
344  }
345  }
346  */
347 
348  }
349 
350  protected function fillHeaderCSV($a_csv)
351  {
352  $a_csv->addColumn($this->lng->txt("type"));
353  $a_csv->addColumn($this->lng->txt("trac_title"));
354  $a_csv->addColumn($this->lng->txt("status"));
355  $a_csv->addColumn($this->lng->txt("trac_status_changed"));
356  $a_csv->addColumn($this->lng->txt("trac_percentage"));
357  $a_csv->addColumn($this->lng->txt("trac_mark"));
358  $a_csv->addColumn($this->lng->txt("comment"));
359  $a_csv->addColumn($this->lng->txt("trac_mode"));
360  // $a_csv->addColumn($this->lng->txt("path"));
361  $a_csv->addRow();
362  }
363 
364  protected function fillRowCSV($a_csv, $a_set)
365  {
366  $a_csv->addColumn($this->lng->txt($a_set["type"]));
367  $a_csv->addColumn($a_set["title"]);
368  $a_csv->addColumn(ilLearningProgressBaseGUI::_getStatusText($a_set["status"]));
369 
371  $a_csv->addColumn(ilDatePresentation::formatDate(new ilDateTime($a_set['status_changed'],IL_CAL_DATETIME)));
373 
374  $a_csv->addColumn(sprintf("%d%%", $a_set["percentage"]));
375  $a_csv->addColumn($a_set["mark"]);
376  $a_csv->addColumn($a_set["comment"]);
377  $a_csv->addColumn(ilLPObjSettings::_mode2Text($a_set["u_mode"]));
378 
379  /*
380  // path
381  $path = $this->buildPath($a_set["ref_ids"]);
382  if($path)
383  {
384  $col = 7;
385  foreach($path as $path_item)
386  {
387  $a_csv->addColumn(strip_tags($path_item));
388  $col++;
389  }
390  }
391  */
392 
393  $a_csv->addRow();
394  }
395 }
396 
397 ?>