ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
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  public 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  foreach ($this->getMonthsYear($this->filter["yearmonth"]) as $num => $caption) {
39  $this->addColumn($caption, "month_" . $num);
40  }
41  }
42  $this->addColumn($lng->txt("total"), "total");
43 
44  $this->setTitle($this->lng->txt("trac_object_stat_access"));
45 
46  // $this->setSelectAllCheckbox("item_id");
47  $this->addMultiCommand("showAccessGraph", $lng->txt("trac_show_graph"));
48  $this->setResetCommand("resetAccessFilter");
49  $this->setFilterCommand("applyAccessFilter");
50 
51  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj, $a_parent_cmd));
52  $this->setRowTemplate("tpl.lp_object_statistics_row.html", "Services/Tracking");
53  $this->setEnableHeader(true);
54  $this->setEnableNumInfo(true);
55  $this->setEnableTitle(true);
56  $this->setDefaultOrderField("title");
57  $this->setDefaultOrderDirection("asc");
58 
59  $this->setExportFormats(array(self::EXPORT_EXCEL, self::EXPORT_CSV));
60 
61  if ($a_load_items) {
62  $this->getItems();
63  }
64  }
65 
66  public function numericOrdering($a_field)
67  {
68  if ($a_field != "title") {
69  return true;
70  }
71  return false;
72  }
73 
77  public function initFilter()
78  {
79  global $lng;
80 
81  $this->setDisableFilterHiding(true);
82 
83  // object type selection
84  include_once("./Services/Form/classes/class.ilSelectInputGUI.php");
85  $si = new ilSelectInputGUI($lng->txt("obj_type"), "type");
86  $si->setOptions($this->getPossibleTypes(true, false, true));
87  $this->addFilterItem($si);
88  $si->readFromSession();
89  if (!$si->getValue()) {
90  $si->setValue("crs");
91  }
92  $this->filter["type"] = $si->getValue();
93 
94  // title/description
95  include_once("./Services/Form/classes/class.ilTextInputGUI.php");
96  $ti = new ilTextInputGUI($lng->txt("trac_title_description"), "query");
97  $ti->setMaxLength(64);
98  $ti->setSize(20);
99  $this->addFilterItem($ti);
100  $ti->readFromSession();
101  $this->filter["query"] = $ti->getValue();
102 
103  // read_count/spent_seconds
104  $si = new ilSelectInputGUI($lng->txt("trac_figure"), "figure");
105  $si->setOptions(array("read_count"=>$lng->txt("trac_read_count"),
106  "spent_seconds"=>$lng->txt("trac_spent_seconds"),
107  "users"=>$lng->txt("users")));
108  $this->addFilterItem($si);
109  $si->readFromSession();
110  if (!$si->getValue()) {
111  $si->setValue("read_count");
112  }
113  $this->filter["measure"] = $si->getValue();
114 
115  // year/month
116  $si = new ilSelectInputGUI($lng->txt("year") . " / " . $lng->txt("month"), "yearmonth");
117  $si->setOptions($this->getMonthsFilter());
118  $this->addFilterItem($si);
119  $si->readFromSession();
120  if (!$si->getValue()) {
121  $si->setValue(date("Y-m"));
122  }
123  $this->filter["yearmonth"] = $si->getValue();
124  }
125 
126  public function getItems()
127  {
128  $data = array();
129 
130  if ($this->filter["type"] != "prtf") {
131  // JF, 2016-06-06
132  $objects = $this->searchObjects($this->getCurrentFilter(true), "", null, false);
133 
134  if ($this->filter["type"] == "blog") {
135  include_once './Services/Tracking/classes/class.ilTrQuery.php';
136  foreach (ilTrQuery::getWorkspaceBlogs($this->filter["query"]) as $obj_id) {
137  $objects[$obj_id] = array($obj_id);
138  }
139  }
140  } else {
141  // portfolios are not part of repository
142  include_once './Services/Tracking/classes/class.ilTrQuery.php';
143  foreach (ilTrQuery::getPortfolios($this->filter["query"]) as $obj_id) {
144  $objects[$obj_id] = array($obj_id);
145  }
146  }
147 
148  if ($objects) {
149  $yearmonth = explode("-", $this->filter["yearmonth"]);
150  if (sizeof($yearmonth) == 1) {
151  include_once './Services/Tracking/classes/class.ilTrQuery.php';
152  foreach (ilTrQuery::getObjectAccessStatistics($objects, $yearmonth[0]) as $obj_id => $months) {
153  $data[$obj_id]["obj_id"] = $obj_id;
154  $data[$obj_id]["title"] = ilObject::_lookupTitle($obj_id);
155 
156  foreach ($months as $month => $values) {
157  $idx = $yearmonth[0] . "-" . str_pad($month, 2, "0", STR_PAD_LEFT);
158  $data[$obj_id]["month_" . $idx] = (int) $values[$this->filter["measure"]];
159  $data[$obj_id]["total"] += (int) $values[$this->filter["measure"]];
160  }
161  }
162  } else {
163  include_once './Services/Tracking/classes/class.ilTrQuery.php';
164  foreach (ilTrQuery::getObjectAccessStatistics($objects, $yearmonth[0], (int) $yearmonth[1]) as $obj_id => $days) {
165  $data[$obj_id]["obj_id"] = $obj_id;
166  $data[$obj_id]["title"] = ilObject::_lookupTitle($obj_id);
167 
168  foreach ($days as $day => $values) {
169  $data[$obj_id]["day_" . $day] = (int) $values[$this->filter["measure"]];
170  $data[$obj_id]["total"] += (int) $values[$this->filter["measure"]];
171  }
172  }
173  }
174 
175  // add objects with no usage data
176  foreach (array_keys($objects) as $obj_id) {
177  if (!isset($data[$obj_id])) {
178  $data[$obj_id]["obj_id"] = $obj_id;
179  $data[$obj_id]["title"] = ilObject::_lookupTitle($obj_id);
180  }
181  }
182  }
183 
184  $this->setData($data);
185  }
186 
190  protected function fillRow($a_set)
191  {
192  global $ilCtrl;
193 
194  $type = ilObject::_lookupType($a_set["obj_id"]);
195 
196  $this->tpl->setVariable("OBJ_ID", $a_set["obj_id"]);
197  $this->tpl->setVariable("ICON_SRC", ilObject::_getIcon("", "tiny", $type));
198  $this->tpl->setVariable("ICON_ALT", $this->lng->txt($type));
199  $this->tpl->setVariable("TITLE_TEXT", $a_set["title"]);
200 
201  if ($this->preselected && in_array($a_set["obj_id"], $this->preselected)) {
202  $this->tpl->setVariable("CHECKBOX_STATE", " checked=\"checked\"");
203  }
204 
205  $sum = 0;
206  if (strpos($this->filter["yearmonth"], "-") === false) {
207  $this->tpl->setCurrentBlock("month");
208  foreach (array_keys($this->getMonthsYear($this->filter["yearmonth"])) as $num) {
209  $value = (int) $a_set["month_" . $num];
210  if ($this->filter["measure"] != "spent_seconds") {
211  $value = $this->anonymizeValue($value);
212  } else {
213  $value = $this->formatSeconds($value, true);
214  }
215  $this->tpl->setVariable("MONTH_VALUE", $value);
216  $this->tpl->parseCurrentBlock();
217  }
218  }
219 
220  if ($this->filter["measure"] == "spent_seconds") {
221  $sum = $this->formatSeconds((int) $a_set["total"], true);
222  } else {
223  $sum = $this->anonymizeValue((int) $a_set["total"]);
224  }
225  $this->tpl->setVariable("TOTAL", $sum);
226  }
227 
228  public function getGraph(array $a_graph_items)
229  {
230  global $lng;
231 
232  include_once "Services/Chart/classes/class.ilChart.php";
234  $chart->setSize(700, 500);
235 
236  $legend = new ilChartLegend();
237  $chart->setLegend($legend);
238 
239  $max_value = 0;
240  foreach ($this->getData() as $object) {
241  if (in_array($object["obj_id"], $a_graph_items)) {
242  $series = $chart->getDataInstance(ilChartGrid::DATA_LINES);
243  $series->setLabel(ilObject::_lookupTitle($object["obj_id"]));
244 
245  if (strpos($this->filter["yearmonth"], "-") === false) {
246  foreach (array_keys($this->getMonthsYear($this->filter["yearmonth"])) as $idx => $num) {
247  $value = (int) $object["month_" . $num];
248  $max_value = max($max_value, $value);
249  if ($this->filter["measure"] != "spent_seconds") {
250  $value = $this->anonymizeValue($value, true);
251  }
252  $series->addPoint($idx, $value);
253  }
254  } else {
255  for ($loop = 1; $loop<32; $loop++) {
256  $value = (int) $object["day_" . $loop];
257  $max_value = max($max_value, $value);
258  if ($this->filter["measure"] != "spent_seconds") {
259  $value = $this->anonymizeValue($value, true);
260  }
261  $series->addPoint($loop, $value);
262  }
263  }
264 
265  $chart->addData($series);
266  }
267  }
268 
269  $value_ticks = $this->buildValueScale(
270  $max_value,
271  ($this->filter["measure"] != "spent_seconds"),
272  ($this->filter["measure"] == "spent_seconds")
273  );
274 
275  $labels = array();
276  if (strpos($this->filter["yearmonth"], "-") === false) {
277  foreach (array_values($this->getMonthsYear($this->filter["yearmonth"], true)) as $idx => $caption) {
278  $labels[$idx] = $caption;
279  }
280  } else {
281  for ($loop = 1; $loop<32; $loop++) {
282  $labels[$loop] = $loop . ".";
283  }
284  }
285  $chart->setTicks($labels, $value_ticks, true);
286 
287  return $chart->getHTML();
288  }
289 
290  protected function fillMetaExcel(ilExcel $a_excel, &$a_row)
291  {
292  }
293 
294  protected function fillRowExcel(ilExcel $a_excel, &$a_row, $a_set)
295  {
296  $a_excel->setCell($a_row, 0, ilObject::_lookupTitle($a_set["obj_id"]));
297  $a_excel->setCell($a_row, 1, $a_set["obj_id"]);
298 
299  $col = 1;
300  if (strpos($this->filter["yearmonth"], "-") === false) {
301  foreach (array_keys($this->getMonthsYear($this->filter["yearmonth"])) as $num) {
302  $value = (int) $a_set["month_" . $num];
303  if ($this->filter["measure"] != "spent_seconds") {
304  $value = $this->anonymizeValue($value);
305  }
306 
307  $a_excel->setCell($a_row, ++$col, $value);
308  }
309  }
310 
311  if ($this->filter["measure"] == "spent_seconds") {
312  // keep seconds
313  // $sum = $this->formatSeconds((int)$a_set["total"]);
314  $sum = (int) $a_set["total"];
315  } else {
316  $sum = $this->anonymizeValue((int) $a_set["total"]);
317  }
318  $a_excel->setCell($a_row, ++$col, $sum);
319  }
320 
321  protected function fillMetaCSV($a_csv)
322  {
323  }
324 
325  protected function fillRowCSV($a_csv, $a_set)
326  {
327  $a_csv->addColumn(ilObject::_lookupTitle($a_set["obj_id"]));
328  $a_csv->addColumn($a_set["obj_id"]);
329 
330  if (strpos($this->filter["yearmonth"], "-") === false) {
331  foreach (array_keys($this->getMonthsYear($this->filter["yearmonth"])) as $num) {
332  $value = (int) $a_set["month_" . $num];
333  if ($this->filter["measure"] != "spent_seconds") {
334  $value = $this->anonymizeValue($value);
335  }
336 
337  $a_csv->addColumn($value);
338  }
339  }
340 
341  if ($this->filter["measure"] == "spent_seconds") {
342  // keep seconds
343  // $sum = $this->formatSeconds((int)$a_set["total"]);
344  $sum = (int) $a_set["total"];
345  } else {
346  $sum = $this->anonymizeValue((int) $a_set["total"]);
347  }
348  $a_csv->addColumn($sum);
349 
350  $a_csv->addRow();
351  }
352 }
static _getIcon( $a_obj_id="", $a_size="big", $a_type="", $a_offline=false)
Get icon for repository item.
anonymizeValue($a_value, $a_force_number=false)
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.
$type
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.
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
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
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)
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.
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.
static getInstanceByType($a_type, $a_id)
Get type instance.
setFilterCommand($a_val, $a_caption=null)
Set filter command.