ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
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  {
99  $table->determineOffsetAndOrder();
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 
192  $request = new ilCmiXapiStatementsReportRequest(
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 }
static getUserIdByLogin($a_login)
initTableData(ilCmiXapiStatementsTableGUI $table, ilCmiXapiStatementsReportFilter $filter)
initLimitingAndOrdering(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
exit
Definition: login.php:29
$result
initActorFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
getFilterItemByPostVar($a_post_var)
getOrderDirection()
Get order direction.
initPeriodFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
static getInstance(ilObjLTIConsumer $object)
getOffset()
Get offset.
static buildBasicAuth($lrsKey, $lrsSecret)
global $DIC
Definition: goto.php:24
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
determineOffsetAndOrder($a_omit_offset=false)
Determine offset and order.
initVerbFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
setSearchFields($a_fields)
Set searchable fields.
getLimit()
Get limit.
setMaxCount($a_max_count)
set max.