ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.ilLPObjectStatisticsGUI.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=0);
4 
22 
32 {
34 
35  public function __construct(int $a_mode, int $a_ref_id = 0)
36  {
37  global $DIC;
38 
39  $this->cronManager = $DIC->cron()->manager();
40 
41  parent::__construct($a_mode, $a_ref_id);
42 
43  if (!$this->ref_id) {
44  if ($this->http->wrapper()->query()->has('ref_id')) {
45  $this->ref_id = $this->http->wrapper()->query()->retrieve(
46  'ref_id',
47  $this->refinery->kindlyTo()->int()
48  );
49  }
50  }
51  }
52 
53  protected function initItemIdFromPost(): array
54  {
55  if ($this->http->wrapper()->post()->has('item_id')) {
56  return $this->http->wrapper()->post()->retrieve(
57  'item_id',
58  $this->refinery->kindlyTo()->dictOf(
59  $this->refinery->kindlyTo()->string()
60  )
61  );
62  }
63  return [];
64  }
65 
66  protected function setTabs(): void
67  {
68  $this->tabs_gui->addSubTab(
69  'trac_object_stat_access',
70  $this->lng->txt('trac_object_stat_access'),
71  $this->ctrl->getLinkTarget($this, 'accessFilter')
72  );
73  $this->tabs_gui->addSubTab(
74  'trac_object_stat_daily',
75  $this->lng->txt('trac_object_stat_daily'),
76  $this->ctrl->getLinkTarget($this, 'dailyFilter')
77  );
78  $this->tabs_gui->addSubTab(
79  'trac_object_stat_lp',
80  $this->lng->txt('trac_object_stat_lp'),
81  $this->ctrl->getLinkTarget($this, 'learningProgressFilter')
82  );
83  $this->tabs_gui->addSubTab(
84  'trac_object_stat_types',
85  $this->lng->txt('trac_object_stat_types'),
86  $this->ctrl->getLinkTarget($this, 'typesFilter')
87  );
88 
89  if ($this->rbacsystem->checkAccess("visible,read", $this->ref_id)) {
90  $this->tabs_gui->addSubTab(
91  'trac_object_stat_admin',
92  $this->lng->txt('trac_object_stat_admin'),
93  $this->ctrl->getLinkTarget($this, 'admin')
94  );
95  }
96  }
97 
98  public function executeCommand(): void
99  {
100  $this->ctrl->setReturn($this, "");
101  $this->setTabs();
102 
103  switch ($this->ctrl->getNextClass()) {
104  case "illpobjectstatisticstablegui":
105  $lp_table = new ilLPObjectStatisticsTableGUI(
106  $this,
107  "access",
108  null
109  );
110  $lp_table->init();
111  $this->ctrl->forwardCommand($lp_table);
112  break;
113 
114  case "illpobjectstatisticsdailytablegui":
115  $lp_table = new ilLPObjectStatisticsDailyTableGUI(
116  $this,
117  "daily",
118  null
119  );
120  $lp_table->init();
121  $this->ctrl->forwardCommand($lp_table);
122  break;
123 
124  case "illpobjectstatisticslptablegui":
125  $lp_table = new ilLPObjectStatisticsLPTableGUI(
126  $this,
127  "learningProgress",
128  null
129  );
130  $lp_table->init();
131  $this->ctrl->forwardCommand($lp_table);
132  break;
133 
134  default:
135  $cmd = $this->__getDefaultCommand();
136  $this->$cmd();
137  }
138  }
139 
140  public function applyAccessFilter(): void
141  {
142  $lp_table = new ilLPObjectStatisticsTableGUI(
143  $this,
144  "access",
145  null
146  );
147  $lp_table->init();
148  $lp_table->resetOffset();
149  $lp_table->writeFilterToSession();
150  $this->access();
151  }
152 
153  public function resetAccessFilter(): void
154  {
155  $lp_table = new ilLPObjectStatisticsTableGUI(
156  $this,
157  "access",
158  null
159  );
160  $lp_table->init();
161  $lp_table->resetOffset();
162  $lp_table->resetFilter();
163  $this->access();
164  }
165 
166  public function accessFilter(): void
167  {
168  $this->access(false);
169  }
170 
171  public function access(bool $a_load_data = true): void
172  {
173  $this->tabs_gui->activateSubTab('trac_object_stat_access');
174  $this->showAggregationInfo();
175  $lp_table = new ilLPObjectStatisticsTableGUI(
176  $this,
177  "access",
178  null
179  );
180  $lp_table->init();
181  if ($a_load_data) {
182  $lp_table->getItems();
183  } else {
184  $lp_table->disable("content");
185  $lp_table->disable("header");
186  }
187  $this->tpl->setContent($lp_table->getHTML());
188  }
189 
190  public function showAccessGraph(): void
191  {
192  if (!$this->initItemIdFromPost()) {
193  $this->tpl->setOnScreenMessage(
194  'failure',
195  $this->lng->txt("no_checkbox")
196  );
197  $this->access();
198  }
199 
200  $this->tabs_gui->activateSubTab('trac_object_stat_access');
201  $lp_table = new ilLPObjectStatisticsTableGUI(
202  $this,
203  "access",
204  $this->initItemIdFromPost()
205  );
206  $lp_table->init();
207  $lp_table->getItems();
208  $this->tpl->setContent(
209  $lp_table->getGraph(
210  $this->initItemIdFromPost()
211  ) . $lp_table->getHTML()
212  );
213  }
214 
215  public function applyTypesFilter(): void
216  {
217  $lp_table = new ilLPObjectStatisticsTypesTableGUI(
218  $this,
219  "types",
220  null,
221  false
222  );
223  $lp_table->resetOffset();
224  $lp_table->writeFilterToSession();
225  $this->types();
226  }
227 
228  public function resetTypesFilter(): void
229  {
230  $lp_table = new ilLPObjectStatisticsTypesTableGUI(
231  $this,
232  "types",
233  null,
234  false
235  );
236  $lp_table->resetOffset();
237  $lp_table->resetFilter();
238  $this->types();
239  }
240 
241  public function typesFilter(): void
242  {
243  $this->types(false);
244  }
245 
246  public function types(bool $a_load_data = true): void
247  {
248  $this->tabs_gui->activateSubTab('trac_object_stat_types');
249  $this->showCronJobInfo();
250 
251  $lp_table = new ilLPObjectStatisticsTypesTableGUI(
252  $this,
253  "types",
254  null,
255  $a_load_data
256  );
257 
258  if (!$a_load_data) {
259  $lp_table->disable("content");
260  $lp_table->disable("header");
261  }
262 
263  $this->tpl->setContent($lp_table->getHTML());
264  }
265 
266  public function showTypesGraph(): void
267  {
268  if (!$this->initItemIdFromPost()) {
269  $this->tpl->setOnScreenMessage(
270  'failure',
271  $this->lng->txt("no_checkbox")
272  );
273  $this->types();
274  return;
275  }
276 
277  $this->tabs_gui->activateSubTab('trac_object_stat_types');
278 
279  $lp_table = new ilLPObjectStatisticsTypesTableGUI(
280  $this,
281  "types",
282  $this->initItemIdFromPost()
283  );
284 
285  $this->tpl->setContent(
286  $lp_table->getGraph(
287  $this->initItemIdFromPost()
288  ) . $lp_table->getHTML()
289  );
290  }
291 
292  public function applyDailyFilter(): void
293  {
294  $lp_table = new ilLPObjectStatisticsDailyTableGUI(
295  $this,
296  "daily",
297  null
298  );
299  $lp_table->init();
300  $lp_table->resetOffset();
301  $lp_table->writeFilterToSession();
302  $this->daily();
303  }
304 
305  public function resetDailyFilter(): void
306  {
307  $lp_table = new ilLPObjectStatisticsDailyTableGUI(
308  $this,
309  "daily",
310  null
311  );
312  $lp_table->init();
313  $lp_table->resetOffset();
314  $lp_table->resetFilter();
315  $this->daily();
316  }
317 
318  public function dailyFilter(): void
319  {
320  $this->daily(false);
321  }
322 
323  public function daily(bool $a_load_data = true): void
324  {
325  $this->tabs_gui->activateSubTab('trac_object_stat_daily');
326 
327  $this->showAggregationInfo();
328 
329  $lp_table = new ilLPObjectStatisticsDailyTableGUI(
330  $this,
331  "daily",
332  null
333  );
334  $lp_table->init();
335 
336  if ($a_load_data) {
337  $lp_table->getItems();
338  } else {
339  $lp_table->disable("content");
340  $lp_table->disable("header");
341  }
342  $this->tpl->setContent($lp_table->getHTML());
343  }
344 
345  public function showDailyGraph(): void
346  {
347  if (!$this->initItemIdFromPost()) {
348  $this->tpl->setOnScreenMessage(
349  'failure',
350  $this->lng->txt("no_checkbox")
351  );
352  $this->daily();
353  return;
354  }
355 
356  $this->tabs_gui->activateSubTab('trac_object_stat_daily');
357 
358  $lp_table = new ilLPObjectStatisticsDailyTableGUI(
359  $this,
360  "daily",
361  $this->initItemIdFromPost()
362  );
363  $lp_table->init();
364  $lp_table->getItems();
365  $this->tpl->setContent(
366  $lp_table->getGraph(
367  $this->initItemIdFromPost()
368  ) . $lp_table->getHTML()
369  );
370  }
371 
372  public function admin(): void
373  {
374  $this->tabs_gui->activateSubTab('trac_object_stat_admin');
375 
376  $this->showAggregationInfo(false);
377 
378  if ($this->rbacsystem->checkAccess('write', $this->ref_id)) {
379  $this->toolbar->addButton(
380  $this->lng->txt("trac_sync_obj_stats"),
381  $this->ctrl->getLinkTarget($this, "adminSync")
382  );
383  }
384 
385  if ($this->access->checkAccess("delete", "", $this->ref_id)) {
386  $lp_table = new ilLPObjectStatisticsAdminTableGUI($this, "admin");
387  $this->tpl->setContent($lp_table->getHTML());
388  }
389  }
390 
391  public function adminSync(): void
392  {
394 
395  $this->tpl->setOnScreenMessage(
396  'success',
397  $this->lng->txt(
398  "trac_sync_obj_stats_success"
399  ),
400  true
401  );
402  $this->ctrl->redirect($this, "admin");
403  }
404 
405  public function confirmDeleteData(): void
406  {
407  if (!$this->initItemIdFromPost()) {
408  $this->tpl->setOnScreenMessage(
409  'failure',
410  $this->lng->txt("no_checkbox")
411  );
412  $this->admin();
413  return;
414  }
415 
416  $this->tabs_gui->clearTargets();
417  $this->tabs_gui->setBackTarget(
418  $this->lng->txt("back"),
419  $this->ctrl->getLinkTarget($this, "admin")
420  );
421 
422  // display confirmation message
423  $cgui = new ilConfirmationGUI();
424  $cgui->setFormAction($this->ctrl->getFormAction($this));
425  $cgui->setHeaderText($this->lng->txt("trac_sure_delete_data"));
426  $cgui->setCancel($this->lng->txt("cancel"), "admin");
427  $cgui->setConfirm($this->lng->txt("delete"), "deleteData");
428 
429  // list objects that should be deleted
430  foreach ($this->initItemIdFromPost() as $i) {
431  $caption = $this->lng->txt(
432  "month_" . str_pad(
433  substr($i, 5),
434  2,
435  "0",
436  STR_PAD_LEFT
437  ) . "_long"
438  ) .
439  " " . substr($i, 0, 4);
440 
441  $cgui->addItem("item_id[]", $i, $caption);
442  }
443 
444  $this->tpl->setContent($cgui->getHTML());
445  }
446 
447  public function deleteData(): void
448  {
449  if (!$this->initItemIdFromPost()) {
450  $this->tpl->setOnScreenMessage(
451  'failure',
452  $this->lng->txt("no_checkbox")
453  );
454  $this->admin();
455  return;
456  }
457 
459  $this->tpl->setOnScreenMessage(
460  'success',
461  $this->lng->txt("trac_data_deleted")
462  );
463  $this->admin();
464  }
465 
466  public function applyLearningProgressFilter(): void
467  {
468  $lp_table = new ilLPObjectStatisticsLPTableGUI(
469  $this,
470  "learningProgress",
471  null
472  );
473  $lp_table->init();
474  $lp_table->resetOffset();
475  $lp_table->writeFilterToSession();
476  $this->learningProgress();
477  }
478 
479  public function resetLearningProgressFilter(): void
480  {
481  $lp_table = new ilLPObjectStatisticsLPTableGUI(
482  $this,
483  "learningProgress",
484  null
485  );
486  $lp_table->init();
487  $lp_table->resetOffset();
488  $lp_table->resetFilter();
489  $this->learningProgress();
490  }
491 
492  public function learningProgressFilter(): void
493  {
494  $this->learningProgress(false);
495  }
496 
497  public function learningProgress(bool $a_load_data = true): void
498  {
499  $this->tabs_gui->activateSubTab('trac_object_stat_lp');
500 
501  $this->showCronJobInfo();
502 
503  $lp_table = new ilLPObjectStatisticsLPTableGUI(
504  $this,
505  "learningProgress",
506  null
507  );
508  $lp_table->init();
509  if ($a_load_data) {
510  $lp_table->loadItems();
511  } else {
512  $lp_table->disable("content");
513  $lp_table->disable("header");
514  }
515  $this->tpl->setContent($lp_table->getHTML());
516  }
517 
518  public function showLearningProgressGraph()
519  {
520  if (!$this->initItemIdFromPost()) {
521  $this->tpl->setOnScreenMessage(
522  'failure',
523  $this->lng->txt("no_checkbox")
524  );
525  $this->learningProgress();
526  return;
527  }
528 
529  $this->tabs_gui->activateSubTab('trac_object_stat_lp');
530  $lp_table = new ilLPObjectStatisticsLPTableGUI(
531  $this,
532  "learningProgress",
533  $this->initItemIdFromPost(),
534  true
535  );
536  $lp_table->init();
537  $lp_table->loadItems();
538  $this->tpl->setContent(
539  $lp_table->getGraph(
540  $this->initItemIdFromPost()
541  ) . $lp_table->getHTML()
542  );
543  }
544 
545  public function showLearningProgressDetails(): void
546  {
547  $item_id = 0;
548  if ($this->http->wrapper()->query()->has('item_id')) {
549  $item_id = $this->http->wrapper()->query()->retrieve(
550  'item_id',
551  $this->refinery->kindlyTo()->int()
552  );
553  }
554  $lp_table = new ilLPObjectStatisticsLPTableGUI(
555  $this,
556  "showLearningProgressDetails",
557  array($item_id),
558  false,
559  true
560  );
561  $lp_table->init();
562  $lp_table->loadItems();
563  $a_tpl = new ilTemplate(
564  "tpl.lp_object_statistics_lp_details.html",
565  true,
566  true,
567  "components/ILIAS/Tracking"
568  );
569  $a_tpl->setVariable("CONTENT", $lp_table->getHTML());
570  $a_tpl->setVariable('CLOSE_IMG_TXT', $this->lng->txt('close'));
571  echo $a_tpl->get();
572  exit();
573  }
574 
575  protected function showAggregationInfo(bool $a_show_link = true): void
576  {
578  $info_date = ilDatePresentation::formatDate(
579  new ilDateTime($info["tstamp"], IL_CAL_UNIX)
580  );
581 
582  $link = "";
583  if ($a_show_link && $this->access->checkAccess(
584  "write",
585  "",
586  $this->ref_id
587  )) {
588  $link = " <a href=\"" . $this->ctrl->getLinkTarget(
589  $this,
590  "admin"
591  ) . "\">&raquo;" .
592  $this->lng->txt("trac_log_info_link") . "</a>";
593  }
594 
595  $this->tpl->setOnScreenMessage(
596  'info',
597  sprintf(
598  $this->lng->txt(
599  "trac_log_info"
600  ),
601  $info_date,
602  $info["counter"]
603  ) . $link
604  );
605  }
606 
607  protected function showCronJobInfo(): void
608  {
609  if (!$this->cronManager->isJobActive("lp_object_statistics")) {
610  $this->tpl->setOnScreenMessage(
611  'info',
612  $this->lng->txt("trac_cron_info")
613  );
614  }
615  }
616 }
static deleteObjectStatistics(array $a_months)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
TableGUI class for learning progress.
const IL_CAL_UNIX
static _syncObjectStats(?int $a_now=null, int $a_minimum=20000)
learningProgress(bool $a_load_data=true)
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static http()
Fetches the global http state from ILIAS.
global $DIC
Definition: shib_login.php:26
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
exit
__construct(int $a_mode, int $a_ref_id=0)
showAggregationInfo(bool $a_show_link=true)
__construct(Container $dic, ilPlugin $plugin)
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
TableGUI class for learning progress.
$info
Definition: entry_point.php:21
static getObjectStatisticsLogInfo()
Get last update info for object statistics.