19declare(strict_types=1);
35 private \ILIAS\DI\Container
$dic;
41 $this->main_tpl =
$DIC->ui()->mainTemplate();
54 if (!$this->
access->hasStatementsAccess()) {
58 switch (
$DIC->ctrl()->getNextClass($this)) {
60 $cmd =
$DIC->ctrl()->getCmd(
'show') .
'Cmd';
68 $table->resetFilter();
69 $table->resetOffset();
76 $table->writeFilterToSession();
77 $table->resetOffset();
87 $statementsFilter->setActivityId($this->
object->getActivityId());
94 }
catch (Exception
$e) {
95 $this->main_tpl->setOnScreenMessage(
'failure',
$e->getMessage());
96 $table->setData(array());
97 $table->setMaxCount(0);
98 $table->resetOffset();
101 $this->dic->ui()->mainTemplate()->setContent($table->getHTML());
119 if ($this->
access->hasOutcomesAccess()) {
121 if ($actor && strlen($actor)) {
127 "given actor ({$actor}) is not a valid actor for object ({$this->object->getId()})"
132 $filter->setActor(
new ilCmiXapiUser($this->
object->getId(), $this->dic->user()->getId(), $this->object->getPrivacyIdent()));
140 if ($table->getFilterItemByPostVar(
'verb') != null) {
153 if ($table->getFilterItemByPostVar(
'period') != null) {
156 if ($period->getStartXapiDateTime()) {
160 if ($period->getEndXapiDateTime()) {
161 $filter->
setEndDate($period->getEndXapiDateTime());
169 $auto->setSearchFields(array(
'login',
'firstname',
'lastname',
'email'));
170 $auto->setResultField(
'login');
171 $auto->enableFieldSearchableCheck(
true);
172 $auto->setMoreLinkAvailable(
true);
176 if ($this->dic->http()->wrapper()->query()->has(
'term')) {
177 $term = $this->dic->http()->wrapper()->query()->retrieve(
'term', $this->dic->refinery()->kindlyTo()->string());
178 } elseif ($this->dic->http()->wrapper()->post()->has(
'term')) {
179 $term = $this->dic->http()->wrapper()->post()->retrieve(
'term', $this->dic->refinery()->kindlyTo()->string());
183 echo json_encode($result);
193 if ($this->
access->hasOutcomesAccess()) {
201 $usrId =
$DIC->user()->getId();
212 $this->object->getLrsType()->getLrsEndpointStatementsAggregationLink(),
217 $this->
object->getLrsType()->getBasicAuth(),
220 $statementsReport = $request->queryReport($this->
object->getId());
221 $data = $statementsReport->getTableData();
223 $table->
setMaxCount($statementsReport->getMaxCount());
228 $isMultiActorReport = $this->
access->hasOutcomesAccess();
240 $lrsType = $this->
object->getLrsType();
241 $defaultLrs = $lrsType->getLrsEndpointStatementsAggregationLink();
242 $defaultBasicAuth = $lrsType->getBasicAuth();
245 'X-Experience-API-Version: 1.0.3',
246 'Authorization: ' . $defaultBasicAuth,
247 'Cache-Control: no-cache, no-store, must-revalidate'
251 $pipeline = json_encode($this->getVerbsPipline());
252 $defaultVerbsUrl = $defaultLrs .
"?pipeline=" . urlencode($pipeline);
255 $ch = curl_init($defaultVerbsUrl);
256 curl_setopt_array($ch, [
257 CURLOPT_RETURNTRANSFER =>
true,
258 CURLOPT_HTTPHEADER => $defaultHeaders,
259 CURLOPT_CONNECTTIMEOUT => 10,
260 CURLOPT_TIMEOUT => 30,
261 CURLOPT_SSL_VERIFYPEER =>
true,
262 CURLOPT_FOLLOWLOCATION =>
true
266 $body = curl_exec($ch);
267 $error = curl_error($ch);
268 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
273 $log->error(
'cURL error in getVerbs(): ' . $error);
277 if ($httpCode < 200 || $httpCode >= 300) {
278 $log->error(
"Unexpected HTTP code in getVerbs(): {$httpCode}");
283 $log->error(
'Empty response in getVerbs()');
288 $decoded = json_decode($body,
true);
289 if (json_last_error() !== JSON_ERROR_NONE) {
290 $log->error(
'JSON decode error in getVerbs(): ' . json_last_error_msg());
303 $match[
'statement.object.objectType'] =
'Activity';
304 $match[
'statement.actor.objectType'] =
'Agent';
306 $activityId = array();
310 $activityId[
'statement.context.extensions.https://ilias&46;de/cmi5/activityid'] = $this->
object->getActivityId();
313 '$regex' =>
'^' . preg_quote($this->
object->getActivityId()) .
''
315 $activityId[
'$or'] = [];
316 $activityId[
'$or'][] = [
'statement.object.id' => $activityQuery];
317 $activityId[
'$or'][] = [
'statement.context.contextActivities.parent.id' => $activityQuery];
320 $match[
'$and'][] = $activityId;
323 $sort[
'statement.verb.id'] = 1;
326 $group = array(
'_id' =>
'$statement.verb.id');
330 $pipeline[] = array(
'$match' => $match);
331 $pipeline[] = array(
'$group' => $group);
332 $pipeline[] = array(
'$sort' => $sort);
static getInstance(ilObjCmiXapi $object)
initActorFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
ilGlobalTemplateInterface $main_tpl
initVerbFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
initTableData(ilCmiXapiStatementsTableGUI $table, ilCmiXapiStatementsReportFilter $filter)
asyncUserAutocompleteCmd()
__construct(ilObjCmiXapi $object)
initLimitingAndOrdering(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
initPeriodFilter(ilCmiXapiStatementsReportFilter $filter, ilCmiXapiStatementsTableGUI $table)
setStartDate(\ilCmiXapiDateTime $startDate)
setOrderDirection(string $orderDirection)
setEndDate(\ilCmiXapiDateTime $endDate)
setActor(\ilCmiXapiUser $actor)
setOrderField(string $orderField)
static getUsersForObject(int $objId, bool $asUsrId=false)
static getLogger(string $a_component_id)
Get component logger.
static getUserIdByLogin(string $a_login)
setFilterCommand(string $a_val, string $a_caption="")
getFilterItemByPostVar(string $a_post_var)
determineOffsetAndOrder(bool $a_omit_offset=false)
resetOffset(bool $a_in_determination=false)
setResetCommand(string $a_val, string $a_caption="")
setData(array $a_data)
Set table data.
setMaxCount(int $a_max_count)
set max.
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
if(!file_exists('../ilias.ini.php'))