ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilLPObjectStatisticsGUI.php
Go to the documentation of this file.
1<?php
2
3declare(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
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
571 $modal = $this->ui_factory->modal()->roundtrip(
572 $this->lng->txt('details'),
573 $this->ui_factory->legacy()->content($a_tpl->get())
574 )->withCancelButtonLabel($this->lng->txt('close'));
575 echo $this->ui_renderer->renderAsync($modal);
576 exit();
577 }
578
579 protected function showAggregationInfo(bool $a_show_link = true): void
580 {
583 new ilDateTime($info["tstamp"], IL_CAL_UNIX)
584 );
585
586 $link = "";
587 if ($a_show_link && $this->access->checkAccess(
588 "write",
589 "",
590 $this->ref_id
591 )) {
592 $link = " <a href=\"" . $this->ctrl->getLinkTarget(
593 $this,
594 "admin"
595 ) . "\">&raquo;" .
596 $this->lng->txt("trac_log_info_link") . "</a>";
597 }
598
599 $this->tpl->setOnScreenMessage(
600 'info',
601 sprintf(
602 $this->lng->txt(
603 "trac_log_info"
604 ),
605 $info_date,
606 $info["counter"]
607 ) . $link
608 );
609 }
610
611 protected function showCronJobInfo(): void
612 {
613 if (!$this->cronManager->isJobActive("lp_object_statistics")) {
614 $this->tpl->setOnScreenMessage(
615 'info',
616 $this->lng->txt("trac_cron_info")
617 );
618 }
619 }
620}
const IL_CAL_UNIX
static _syncObjectStats(?int $a_now=null, int $a_minimum=20000)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
@classDescription Date and time handling
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
learningProgress(bool $a_load_data=true)
showAggregationInfo(bool $a_show_link=true)
__construct(int $a_mode, int $a_ref_id=0)
TableGUI class for learning progress.
TableGUI class for learning progress.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
special template class to simplify handling of ITX/PEAR
static getObjectStatisticsLogInfo()
Get last update info for object statistics.
static deleteObjectStatistics(array $a_months)
exit
$info
Definition: entry_point.php:21
static http()
Fetches the global http state from ILIAS.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $DIC
Definition: shib_login.php:26