ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilLPObjectStatisticsTableGUI.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 
16 {
20  function __construct($a_parent_obj, $a_parent_cmd, array $a_preselect = null, $a_load_items = true)
21  {
22  global $ilCtrl, $lng;
23 
24  $this->preselected = $a_preselect;
25 
26  $this->setId("lpobjstattbl");
27 
28  parent::__construct($a_parent_obj, $a_parent_cmd);
29 
30  $this->setShowRowsSelector(true);
31  // $this->setLimit(ilSearchSettings::getInstance()->getMaxHits());
32  $this->initFilter();
33 
34  $this->addColumn("", "", "1", true);
35  $this->addColumn($lng->txt("trac_title"), "title");
36  $this->addColumn($lng->txt("object_id"), "obj_id");
37  if(strpos($this->filter["yearmonth"], "-") === false)
38  {
39  foreach($this->getMonthsYear($this->filter["yearmonth"]) as $num => $caption)
40  {
41  $this->addColumn($caption, "month_".$num);
42  }
43  }
44  $this->addColumn($lng->txt("total"), "total");
45 
46  $this->setTitle($this->lng->txt("trac_object_stat_access"));
47 
48  // $this->setSelectAllCheckbox("item_id");
49  $this->addMultiCommand("showAccessGraph", $lng->txt("trac_show_graph"));
50  $this->setResetCommand("resetAccessFilter");
51  $this->setFilterCommand("applyAccessFilter");
52 
53  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj, $a_parent_cmd));
54  $this->setRowTemplate("tpl.lp_object_statistics_row.html", "Services/Tracking");
55  $this->setEnableHeader(true);
56  $this->setEnableNumInfo(true);
57  $this->setEnableTitle(true);
58  $this->setDefaultOrderField("title");
59  $this->setDefaultOrderDirection("asc");
60 
61  $this->setExportFormats(array(self::EXPORT_EXCEL, self::EXPORT_CSV));
62 
63  if($a_load_items)
64  {
65  $this->getItems();
66  }
67  }
68 
69  public function numericOrdering($a_field)
70  {
71  if($a_field != "title")
72  {
73  return true;
74  }
75  return false;
76  }
77 
81  public function initFilter()
82  {
83  global $lng;
84 
85  $this->setDisableFilterHiding(true);
86 
87  // object type selection
88  include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
89  $si = new ilSelectInputGUI($lng->txt("obj_type"), "type");
90  $si->setOptions($this->getPossibleTypes(true, false, true));
91  $this->addFilterItem($si);
92  $si->readFromSession();
93  if(!$si->getValue())
94  {
95  $si->setValue("crs");
96  }
97  $this->filter["type"] = $si->getValue();
98 
99  // title/description
100  include_once("./Services/Form/classes/class.ilTextInputGUI.php");
101  $ti = new ilTextInputGUI($lng->txt("trac_title_description"), "query");
102  $ti->setMaxLength(64);
103  $ti->setSize(20);
104  $this->addFilterItem($ti);
105  $ti->readFromSession();
106  $this->filter["query"] = $ti->getValue();
107 
108  // read_count/spent_seconds
109  $si = new ilSelectInputGUI($lng->txt("trac_figure"), "figure");
110  $si->setOptions(array("read_count"=>$lng->txt("trac_read_count"),
111  "spent_seconds"=>$lng->txt("trac_spent_seconds"),
112  "users"=>$lng->txt("users")));
113  $this->addFilterItem($si);
114  $si->readFromSession();
115  if(!$si->getValue())
116  {
117  $si->setValue("read_count");
118  }
119  $this->filter["measure"] = $si->getValue();
120 
121  // year/month
122  $si = new ilSelectInputGUI($lng->txt("year")." / ".$lng->txt("month"), "yearmonth");
123  $si->setOptions($this->getMonthsFilter());
124  $this->addFilterItem($si);
125  $si->readFromSession();
126  if(!$si->getValue())
127  {
128  $si->setValue(date("Y-m"));
129  }
130  $this->filter["yearmonth"] = $si->getValue();
131  }
132 
133  function getItems()
134  {
135  $data = array();
136 
137  if($this->filter["type"] != "prtf")
138  {
139  // JF, 2016-06-06
140  $objects = $this->searchObjects($this->getCurrentFilter(true), "", null, false);
141 
142  if($this->filter["type"] == "blog")
143  {
144  include_once './Services/Tracking/classes/class.ilTrQuery.php';
145  foreach(ilTrQuery::getWorkspaceBlogs($this->filter["query"]) as $obj_id)
146  {
147  $objects[$obj_id] = array($obj_id);
148  }
149  }
150  }
151  else
152  {
153  // portfolios are not part of repository
154  include_once './Services/Tracking/classes/class.ilTrQuery.php';
155  foreach(ilTrQuery::getPortfolios($this->filter["query"]) as $obj_id)
156  {
157  $objects[$obj_id] = array($obj_id);
158  }
159  }
160 
161  if($objects)
162  {
163  $yearmonth = explode("-", $this->filter["yearmonth"]);
164  if(sizeof($yearmonth) == 1)
165  {
166  include_once './Services/Tracking/classes/class.ilTrQuery.php';
167  foreach(ilTrQuery::getObjectAccessStatistics($objects, $yearmonth[0]) as $obj_id => $months)
168  {
169  $data[$obj_id]["obj_id"] = $obj_id;
170  $data[$obj_id]["title"] = ilObject::_lookupTitle($obj_id);
171 
172  foreach($months as $month => $values)
173  {
174  $idx = $yearmonth[0]."-".str_pad($month, 2, "0", STR_PAD_LEFT);
175  $data[$obj_id]["month_".$idx] = (int)$values[$this->filter["measure"]];
176  $data[$obj_id]["total"] += (int)$values[$this->filter["measure"]];
177  }
178  }
179  }
180  else
181  {
182  include_once './Services/Tracking/classes/class.ilTrQuery.php';
183  foreach(ilTrQuery::getObjectAccessStatistics($objects, $yearmonth[0], (int)$yearmonth[1]) as $obj_id => $days)
184  {
185  $data[$obj_id]["obj_id"] = $obj_id;
186  $data[$obj_id]["title"] = ilObject::_lookupTitle($obj_id);
187 
188  foreach($days as $day => $values)
189  {
190  $data[$obj_id]["day_".$day] = (int)$values[$this->filter["measure"]];
191  $data[$obj_id]["total"] += (int)$values[$this->filter["measure"]];
192  }
193  }
194  }
195 
196  // add objects with no usage data
197  foreach(array_keys($objects) as $obj_id)
198  {
199  if(!isset($data[$obj_id]))
200  {
201  $data[$obj_id]["obj_id"] = $obj_id;
202  $data[$obj_id]["title"] = ilObject::_lookupTitle($obj_id);
203  }
204  }
205  }
206 
207  $this->setData($data);
208  }
209 
213  protected function fillRow($a_set)
214  {
215  global $ilCtrl;
216 
217  $type = ilObject::_lookupType($a_set["obj_id"]);
218 
219  $this->tpl->setVariable("OBJ_ID", $a_set["obj_id"]);
220  $this->tpl->setVariable("ICON_SRC", ilObject::_getIcon("", "tiny", $type));
221  $this->tpl->setVariable("ICON_ALT", $this->lng->txt($type));
222  $this->tpl->setVariable("TITLE_TEXT", $a_set["title"]);
223 
224  if($this->preselected && in_array($a_set["obj_id"], $this->preselected))
225  {
226  $this->tpl->setVariable("CHECKBOX_STATE", " checked=\"checked\"");
227  }
228 
229  $sum = 0;
230  if(strpos($this->filter["yearmonth"], "-") === false)
231  {
232  $this->tpl->setCurrentBlock("month");
233  foreach(array_keys($this->getMonthsYear($this->filter["yearmonth"])) as $num)
234  {
235  $value = (int)$a_set["month_".$num];
236  if($this->filter["measure"] != "spent_seconds")
237  {
238  $value = $this->anonymizeValue($value);
239  }
240  else
241  {
242  $value = $this->formatSeconds($value, true);
243  }
244  $this->tpl->setVariable("MONTH_VALUE", $value);
245  $this->tpl->parseCurrentBlock();
246  }
247  }
248 
249  if($this->filter["measure"] == "spent_seconds")
250  {
251  $sum = $this->formatSeconds((int)$a_set["total"], true);
252  }
253  else
254  {
255  $sum = $this->anonymizeValue((int)$a_set["total"]);
256  }
257  $this->tpl->setVariable("TOTAL", $sum);
258  }
259 
260  function getGraph(array $a_graph_items)
261  {
262  global $lng;
263 
264  include_once "Services/Chart/classes/class.ilChart.php";
266  $chart->setSize(700, 500);
267 
268  $legend = new ilChartLegend();
269  $chart->setLegend($legend);
270 
271  $max_value = 0;
272  foreach($this->getData() as $object)
273  {
274  if(in_array($object["obj_id"], $a_graph_items))
275  {
276  $series = $chart->getDataInstance(ilChartGrid::DATA_LINES);
277  $series->setLabel(ilObject::_lookupTitle($object["obj_id"]));
278 
279  if(strpos($this->filter["yearmonth"], "-") === false)
280  {
281  foreach(array_keys($this->getMonthsYear($this->filter["yearmonth"])) as $idx => $num)
282  {
283  $value = (int)$object["month_".$num];
284  $max_value = max($max_value, $value);
285  if($this->filter["measure"] != "spent_seconds")
286  {
287  $value = $this->anonymizeValue($value, true);
288  }
289  $series->addPoint($idx, $value);
290  }
291  }
292  else
293  {
294  for($loop = 1; $loop<32; $loop++)
295  {
296  $value = (int)$object["day_".$loop];
297  $max_value = max($max_value, $value);
298  if($this->filter["measure"] != "spent_seconds")
299  {
300  $value = $this->anonymizeValue($value, true);
301  }
302  $series->addPoint($loop, $value);
303  }
304  }
305 
306  $chart->addData($series);
307  }
308  }
309 
310  $value_ticks = $this->buildValueScale($max_value, ($this->filter["measure"] != "spent_seconds"),
311  ($this->filter["measure"] == "spent_seconds"));
312 
313  $labels = array();
314  if(strpos($this->filter["yearmonth"], "-") === false)
315  {
316  foreach(array_values($this->getMonthsYear($this->filter["yearmonth"], true)) as $idx => $caption)
317  {
318  $labels[$idx] = $caption;
319  }
320  }
321  else
322  {
323  for($loop = 1; $loop<32; $loop++)
324  {
325  $labels[$loop] = $loop.".";
326  }
327  }
328  $chart->setTicks($labels, $value_ticks, true);
329 
330  return $chart->getHTML();
331  }
332 
333  protected function fillMetaExcel(ilExcel $a_excel, &$a_row)
334  {
335 
336  }
337 
338  protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
339  {
340  $a_excel->setCell($a_row, 0, ilObject::_lookupTitle($a_set["obj_id"]));
341  $a_excel->setCell($a_row, 1, $a_set["obj_id"]);
342 
343  $col = 1;
344  if(strpos($this->filter["yearmonth"], "-") === false)
345  {
346  foreach(array_keys($this->getMonthsYear($this->filter["yearmonth"])) as $num)
347  {
348  $value = (int)$a_set["month_".$num];
349  if($this->filter["measure"] != "spent_seconds")
350  {
351  $value = $this->anonymizeValue($value);
352  }
353 
354  $a_excel->setCell($a_row, ++$col, $value);
355  }
356  }
357 
358  if($this->filter["measure"] == "spent_seconds")
359  {
360  // keep seconds
361  // $sum = $this->formatSeconds((int)$a_set["total"]);
362  $sum = (int)$a_set["total"];
363  }
364  else
365  {
366  $sum = $this->anonymizeValue((int)$a_set["total"]);
367  }
368  $a_excel->setCell($a_row, ++$col, $sum);
369  }
370 
371  protected function fillMetaCSV($a_csv)
372  {
373 
374  }
375 
376  protected function fillRowCSV($a_csv, $a_set)
377  {
378  $a_csv->addColumn(ilObject::_lookupTitle($a_set["obj_id"]));
379  $a_csv->addColumn($a_set["obj_id"]);
380 
381  if(strpos($this->filter["yearmonth"], "-") === false)
382  {
383  foreach(array_keys($this->getMonthsYear($this->filter["yearmonth"])) as $num)
384  {
385  $value = (int)$a_set["month_".$num];
386  if($this->filter["measure"] != "spent_seconds")
387  {
388  $value = $this->anonymizeValue($value);
389  }
390 
391  $a_csv->addColumn($value);
392  }
393  }
394 
395  if($this->filter["measure"] == "spent_seconds")
396  {
397  // keep seconds
398  // $sum = $this->formatSeconds((int)$a_set["total"]);
399  $sum = (int)$a_set["total"];
400  }
401  else
402  {
403  $sum = $this->anonymizeValue((int)$a_set["total"]);
404  }
405  $a_csv->addColumn($sum);
406 
407  $a_csv->addRow();
408  }
409 }
410 
411 ?>
anonymizeValue($a_value, $a_force_number=false)
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setExportFormats(array $formats)
Set available export formats.
This class represents a selection list property in a property form.
Chart legend.
setEnableNumInfo($a_val)
Set enable num info.
getMonthsYear($a_year=null, $a_short=false)
searchObjects(array $filter, $permission, array $preset_obj_ids=null, $a_check_lp_activation=true)
Search objects that match current filters.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
static _lookupTitle($a_id)
lookup object title
TableGUI class for learning progress.
getPossibleTypes($a_split_learning_resources=false, $a_include_digilib=false, $a_allow_undefined_lp=false)
Get possible subtypes.
setId($a_val)
Set id.
global $ilCtrl
Definition: ilias.php:18
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
TableGUI class for learning progress.
static getObjectAccessStatistics(array $a_ref_ids, $a_year, $a_month=null)
setDisableFilterHiding($a_val=true)
Set disable filter hiding.
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
buildValueScale($a_max_value, $a_anonymize=false, $a_format_seconds=false)
addMultiCommand($a_cmd, $a_text)
Add Command button.
This class represents a text property in a property form.
setMaxLength($a_maxlength)
Set Max Length.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
Create styles array
The data for the language used.
static _lookupType($a_id, $a_reference=false)
lookup object type
const TYPE_GRID
setCell($a_row, $a_col, $a_value)
Set cell value.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
getMonthsFilter($a_short=false)
formatSeconds($seconds, $a_shorten_zero=false)
static getPortfolios($a_title=null)
global $lng
Definition: privfeed.php:17
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
setEnableHeader($a_enableheader)
Set Enable Header.
static getWorkspaceBlogs($a_title=null)
getCurrentFilter($as_query=false)
setEnableTitle($a_enabletitle)
Set Enable Title.
__construct($a_parent_obj, $a_parent_cmd, array $a_preselect=null, $a_load_items=true)
Constructor.
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.
static getInstanceByType($a_type, $a_id)
Get type instance.
setFilterCommand($a_val, $a_caption=null)
Set filter command.