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
4include_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?>
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
An exception for terminatinating execution or to throw for unit testing.
static getInstanceByType($a_type, $a_id)
Get type instance.
const TYPE_GRID
setCell($a_row, $a_col, $a_value)
Set cell value.
TableGUI class for learning progress.
fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
Excel Version of Fill Row.
__construct($a_parent_obj, $a_parent_cmd, array $a_preselect=null, $a_load_items=true)
Constructor.
fillMetaExcel(ilExcel $a_excel, &$a_row)
Add meta information to excel export.
fillRowCSV($a_csv, $a_set)
CSV Version of Fill Row.
fillMetaCSV($a_csv)
Add meta information to csv export.
numericOrdering($a_field)
Should this field be sorted numeric?
TableGUI class for learning progress.
formatSeconds($seconds, $a_shorten_zero=false)
getCurrentFilter($as_query=false)
getMonthsYear($a_year=null, $a_short=false)
buildValueScale($a_max_value, $a_anonymize=false, $a_format_seconds=false)
anonymizeValue($a_value, $a_force_number=false)
getMonthsFilter($a_short=false)
getPossibleTypes($a_split_learning_resources=false, $a_include_digilib=false, $a_allow_undefined_lp=false)
Get possible subtypes.
searchObjects(array $filter, $permission, array $preset_obj_ids=null, $a_check_lp_activation=true)
Search objects that match current filters.
static _lookupTitle($a_id)
lookup object title
static _getIcon($a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
static _lookupType($a_id, $a_reference=false)
lookup object type
This class represents a selection list property in a property form.
setEnableHeader($a_enableheader)
Set Enable Header.
setDisableFilterHiding($a_val=true)
Set disable filter hiding.
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.
setShowRowsSelector($a_value)
Toggle rows-per-page selector.
setExportFormats(array $formats)
Set available export formats.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
setData($a_data)
set table data @access public
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
setEnableTitle($a_enabletitle)
Set Enable Title.
setEnableNumInfo($a_val)
Set enable num info.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiCommand($a_cmd, $a_text)
Add Command button.
addFilterItem($a_input_item, $a_optional=false)
Add filter item.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setFilterCommand($a_val, $a_caption=null)
Set filter command.
This class represents a text property in a property form.
static getObjectAccessStatistics(array $a_ref_ids, $a_year, $a_month=null)
static getWorkspaceBlogs($a_title=null)
static getPortfolios($a_title=null)
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:17