ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilLTIConsumerXapiStatementsGUI.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2019 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5
16{
20 protected $object;
21
25 protected $access;
26
31 {
32 $this->object = $object;
33
34 $this->access = ilLTIConsumerAccess::getInstance($this->object);
35 }
36
40 public function executeCommand()
41 {
42 global $DIC; /* @var \ILIAS\DI\Container $DIC */
43
44 if (!$this->access->hasStatementsAccess()) {
45 throw new ilCmiXapiException('access denied!');
46 }
47
48 switch ($DIC->ctrl()->getNextClass($this)) {
49 default:
50 $cmd = $DIC->ctrl()->getCmd('show') . 'Cmd';
51 $this->{$cmd}();
52 }
53 }
54
55 protected function resetFilterCmd()
56 {
57 $table = $this->buildTableGUI();
58 $table->resetFilter();
59 $table->resetOffset();
60 $this->showCmd();
61 }
62
63 protected function applyFilterCmd()
64 {
65 $table = $this->buildTableGUI();
66 $table->writeFilterToSession();
67 $table->resetOffset();
68 $this->showCmd();
69 }
70
71 protected function showCmd()
72 {
73 global $DIC; /* @var \ILIAS\DI\Container $DIC */
74
75 $table = $this->buildTableGUI();
76
77 try {
78 $statementsFilter = new ilCmiXapiStatementsReportFilter();
79
80 $statementsFilter->setActivityId($this->object->getActivityId());
81
82 $this->initLimitingAndOrdering($statementsFilter, $table);
83 $this->initActorFilter($statementsFilter, $table);
84 $this->initVerbFilter($statementsFilter, $table);
85 $this->initPeriodFilter($statementsFilter, $table);
86 $this->initTableData($table, $statementsFilter);
87 } catch (Exception $e) {
88 ilUtil::sendFailure($e->getMessage());
89 $table->setData(array());
90 $table->setMaxCount(0);
91 $table->resetOffset();
92 }
93
94 $DIC->ui()->mainTemplate()->setContent($table->getHTML());
95 }
96
98 {
100
101 $filter->setLimit($table->getLimit());
102 $filter->setOffset($table->getOffset());
103
104 $filter->setOrderField($table->getOrderField());
105 $filter->setOrderDirection($table->getOrderDirection());
106 }
107
109 {
110 global $DIC; /* @var \ILIAS\DI\Container $DIC */
111
112 if ($this->access->hasOutcomesAccess()) {
113 $actor = $table->getFilterItemByPostVar('actor')->getValue();
114
115 if (strlen($actor)) {
116 $usrId = ilObjUser::getUserIdByLogin($actor);
117
118 if ($usrId) {
119 $filter->setActor(new ilCmiXapiUser($this->object->getId(), $usrId, $this->object->getProvider()->getPrivacyIdent()));
120 } else {
122 "given actor ({$actor}) is not a valid actor for object ({$this->object->getId()})"
123 );
124 }
125 }
126 } else {
127 $filter->setActor(new ilCmiXapiUser($this->object->getId(), $DIC->user()->getId(), $this->object->getProvider()->getPrivacyIdent()));
128 }
129 }
130
132 {
133 $verb = urldecode($table->getFilterItemByPostVar('verb')->getValue());
134
135 if (ilCmiXapiVerbList::getInstance()->isValidVerb($verb)) {
136 $filter->setVerb($verb);
137 }
138 }
139
141 {
142 $period = $table->getFilterItemByPostVar('period');
143
144 if ($period->getStartXapiDateTime()) {
145 $filter->setStartDate($period->getStartXapiDateTime());
146 }
147
148 if ($period->getEndXapiDateTime()) {
149 $filter->setEndDate($period->getEndXapiDateTime());
150 }
151 }
152
153 public function asyncUserAutocompleteCmd()
154 {
155 $auto = new ilCmiXapiUserAutocomplete($this->object->getId());
156 $auto->setSearchFields(array('login','firstname','lastname','email'));
157 $auto->setResultField('login');
158 $auto->enableFieldSearchableCheck(true);
159 $auto->setMoreLinkAvailable(true);
160
161 //$auto->setLimit(ilUserAutoComplete::MAX_ENTRIES);
162
163 $result = json_decode($auto->getList(ilUtil::stripSlashes($_REQUEST['term'])), true);
164
165 echo json_encode($result);
166 exit();
167 }
168
174 {
175 $aggregateEndPointUrl = str_replace(
176 'data/xAPI',
177 'api/statements/aggregate',
178 $this->object->getProvider()->getXapiLaunchUrl() // should be named endpoint not launch url
179 );
180
181 $linkBuilder = new ilCmiXapiStatementsReportLinkBuilder(
182 $this->object,
183 $aggregateEndPointUrl,
184 $filter
185 );
186
188 $this->object->getProvider()->getXapiLaunchKey(),
189 $this->object->getProvider()->getXapiLaunchSecret()
190 );
191
193 $basicAuth,
194 $linkBuilder
195 );
196
197 $statementsReport = $request->queryReport($this->object);
198 $table->setData($statementsReport->getTableData());
199 $table->setMaxCount($statementsReport->getMaxCount());
200 }
201
206 {
207 $isMultiActorReport = $this->access->hasOutcomesAccess();
208
209 $table = new ilCmiXapiStatementsTableGUI($this, 'show', $isMultiActorReport);
210 $table->setFilterCommand('applyFilter');
211 $table->setResetCommand('resetFilter');
212 return $table;
213 }
214}
$result
An exception for terminatinating execution or to throw for unit testing.
static buildBasicAuth($lrsKey, $lrsSecret)
static getInstance(ilObjLTIConsumer $object)
initLimitingAndOrdering(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
initTableData(ilCmiXapiStatementsTableGUI $table, ilCmiXapiStatementsReportFilter $filter)
initPeriodFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
initVerbFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
initActorFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
static getUserIdByLogin($a_login)
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
setData($a_data)
set table data @access public
getLimit()
Get limit.
getFilterItemByPostVar($a_post_var)
getOffset()
Get offset.
getOrderDirection()
Get order direction.
setMaxCount($a_max_count)
set max.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
exit
Definition: login.php:29
$DIC
Definition: xapitoken.php:46