ILIAS  release_7 Revision v7.30-3-g800a261c036
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilCmiXapiStatementsReport.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 $response;
21 
25  protected $statements;
26 
30  protected $maxCount;
31 
35  protected $cmixUsersByIdent;
36 
40  protected $userLanguage;
44  protected $contentType;
45 
50 
51  public function __construct(string $responseBody, $obj)
52  {
53  global $DIC;
54  $this->userLanguage = $DIC->user()->getLanguage();
55 
56  $responseBody = json_decode($responseBody, true);
57 
58  if ($obj instanceof ilObjCmiXapi) {
59  $this->contentType = $obj->getContentType();
60 // $this->contentType = ilObjCmiXapi::getInstance($objId,false)->getContentType();
61  $this->isMixedContentType = $obj->isMixedContentType();
62 // $this->isMixedContentType = ilObjCmiXapi::getInstance($objId,false)->isMixedContentType();
63  }
64  if (count($responseBody)) {
65  $this->response = current($responseBody);
66  $this->statements = $this->response['statements'];
67  $this->maxCount = $this->response['maxcount'];
68  } else {
69  $this->response = '';
70  $this->statements = array();
71  $this->maxCount = 0;
72  }
73 
74  foreach (ilCmiXapiUser::getUsersForObject($obj->getId()) as $cmixUser) {
75  $this->cmixUsersByIdent[$cmixUser->getUsrIdent()] = $cmixUser;
76  }
77  }
78 
79  public function getMaxCount()
80  {
81  return $this->maxCount;
82  }
83 
84  public function getStatements()
85  {
86  return $this->statements;
87  }
88 
89  public function hasStatements()
90  {
91  return (bool) count($this->statements);
92  }
93 
94  public function getTableData()
95  {
96  $data = [];
97 
98  foreach ($this->statements as $index => $statement) {
99  $data[] = [
100  'date' => $this->fetchDate($statement),
101  'actor' => $this->fetchActor($statement),
102  'verb_id' => $this->fetchVerbId($statement),
103  'verb_display' => $this->fetchVerbDisplay($statement),
104  'object' => $this->fetchObjectName($statement),
105  'object_info' => $this->fetchObjectInfo($statement),
106  'statement' => json_encode($statement, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)
107  ];
108  }
109 
110  return $data;
111  }
112 
113  protected function fetchDate($statement)
114  {
115  return $statement['timestamp'];
116  }
117 
118  protected function fetchActor($statement)
119  {
120  if ($this->isMixedContentType) {
121  $ident = str_replace('mailto:', '', $statement['actor']['mbox']);
122  if (empty($ident)) {
123  $ident = $statement['actor']['account']['name'];
124  }
125  } elseif ($this->contentType == ilObjCmiXapi::CONT_TYPE_CMI5) {
126  $ident = $statement['actor']['account']['name'];
127  } else {
128  $ident = str_replace('mailto:', '', $statement['actor']['mbox']);
129  }
130  return $this->cmixUsersByIdent[$ident];
131  }
132 
133  protected function fetchVerbId($statement)
134  {
135  return $statement['verb']['id'];
136  }
137 
138  protected function fetchVerbDisplay($statement)
139  {
140  try {
141  return $statement['verb']['display']['en-US'];
142  } catch (Exception $e) {
143  return $statement['verb']['id'];
144  }
145  }
146 
147  protected function fetchObjectName($statement)
148  {
149  $ret = urldecode($statement['object']['id']);
150  $lang = self::getLanguageEntry($statement['object']['definition']['name'], $this->userLanguage);
151  $langEntry = $lang['languageEntry'];
152  if ($langEntry != '') {
153  $ret = $langEntry;
154  }
155  return $ret;
156  }
157 
158  protected function fetchObjectInfo($statement)
159  {
160  return $statement['object']['definition']['description']['en-US'];
161  }
162 
168  public static function getLanguageEntry($obj, $userLanguage)
169  {
170  $defaultLanguage = 'en-US';
171  $defaultLanguageEntry = '';
172  $defaultLanguageExists = false;
173  $firstLanguage = '';
174  $firstLanguageEntry = '';
175  $firstLanguageExists = false;
176  $userLanguage = '';
177  $userLanguageEntry = '';
178  $userLanguageExists = false;
179  $language = '';
180  $languageEntry = '';
181  try {
182  foreach ($obj as $k => $v) {
183  // save $firstLanguage
184  if ($firstLanguage == '') {
185  $f = '/^[a-z]+\-?.*/';
186  if (preg_match($f, $k)) {
187  $firstLanguageExists = true;
188  $firstLanguage = $k;
189  $firstLanguageEntry = $v;
190  }
191  }
192  // check defaultLanguage
193  if ($k == $defaultLanguage) {
194  $defaultLanguageExists = true;
195  $defaultLanguageEntry = $v;
196  }
197  // check userLanguage
198  $p = '/^' . $userLanguage . '\-?./';
199  preg_match($p, $k);
200  if (preg_match($p, $k)) {
201  $userLanguageExists = true;
202  $userLanguage = $k;
203  $userLanguageEntry = $v;
204  }
205  }
206  } catch (Exception $e) {
207  };
208 
209  if ($userLanguageExists) {
210  $language = $userLanguage;
211  $languageEntry = $userLanguageEntry;
212  } elseif ($defaultLanguageExists) {
213  $language = $userLanguage;
214  $languageEntry = $userLanguageEntry;
215  } elseif ($firstLanguageExists) {
216  $language = $firstLanguage;
217  $languageEntry = $firstLanguageEntry;
218  }
219  return ['language' => $language, 'languageEntry' => $languageEntry];
220  }
221 }
static getUsersForObject($objId, $asUsrId=false)
$data
Definition: storeScorm.php:23
static getLanguageEntry($obj, $userLanguage)
$defaultLanguage
Definition: xapiexit.php:7
$index
Definition: metadata.php:128
__construct(string $responseBody, $obj)
global $DIC
Definition: goto.php:24
$lang
Definition: xapiexit.php:8
$ret
Definition: parser.php:6