ILIAS  release_8 Revision v8.24
class.ilCmiXapiImporter.php
Go to the documentation of this file.
1<?php
2
3declare(strict_types=1);
4
31{
32 private array $_moduleProperties = [];
33
34 public array $manifest = [];
35
36 private \ilCmiXapiDataSet $_dataset;
37
39
40 private ?string $_newId = null;
41
42 private string $_import_objId;
43
44 private \ilImportMapping $_mapping;
45
46 private ?string $_relWebDir = 'lm_data/lm_';
47
48 private string $_relImportDir = '';
49
50 private bool $_isSingleImport = false;
51
52 private \ILIAS\DI\Container $dic;
53
54 private \ILIAS\Filesystem\Filesystem $filesystemWeb;
55
56 private \ILIAS\Filesystem\Filesystem $filesystemTemp;
60 public function __construct()
61 {
63 global $DIC;
64 $this->dic = $DIC;
65 $this->filesystemWeb = $DIC->filesystem()->web();
66 $this->filesystemTemp = $DIC->filesystem()->temp();
67 $this->_dataset = new ilCmiXapiDataSet();
68 $this->_dataset->_cmixSettingsProperties['Title'] = '';
69 $this->_dataset->_cmixSettingsProperties['Description'] = '';
70 //todo: at the moment restricted to one module in xml file, extend?
71 }
72
78 public function importXmlRepresentation(string $a_entity, string $a_id, string $a_xml, ilImportMapping $a_mapping): void
79 {
80 $this->_import_objId = $a_id;
81 $this->_mapping = $a_mapping;
82
83 if ($this->_newId = $a_mapping->getMapping('Services/Container', 'objs', (string) $this->_import_objId)) {
84 // container content
87 } else {
88 // single object
89 $this->prepareSingleObject();
91 $this->_isSingleImport = true;
92 }
95 $this->updateNewObj();
96 }
97
101 private function prepareSingleObject(): self
102 {
103 // create new cmix object
104 $this->_cmixObj = new ilObjCmiXapi();
105 // set type of questionpool object
106 $this->_cmixObj->setType('cmix');
107 // set title of questionpool object to "dummy"
108 $this->_cmixObj->setTitle("dummy");
109 // set description of questionpool object
110 $this->_cmixObj->setDescription("test import");
111 // create the questionpool class in the ILIAS database (object_data table)
112 $this->_cmixObj->create(true);
113 $this->_newId = (string) $this->_cmixObj->getId();
114 $this->_mapping->addMapping('Modules/CmiXapi', 'cmix', (string) $this->_import_objId, (string) $this->_newId);
115 //$this->getImport();
116 $this->_cmixObj->update();
117
118 return $this;
119 }
120
124 private function prepareContainerObject(): void
125 {
126 $this->_newId = $this->_mapping->getMapping('Services/Container', 'objs', (string) $this->_import_objId);
127 if (!is_null($this->_newId) && $this->_newId != "") {
128 // container content
129 $this->_cmixObj = ilObjectFactory::getInstanceByObjId((int) $this->_newId, false);
130 //$_SESSION['tst_import_subdir'] = $this->getImportPackageName();
131 $this->_cmixObj->save(); // this generates test id first time
132 //var_dump([$this->getImportDirectory(), $this->_import_dirname]); exit;
133 $this->_mapping->addMapping("Modules/CmiXapi", "cmix", (string) $this->_import_objId, $this->_newId);
134 }
135 $this->_cmixObj->save();
136 $this->_cmixObj->update();
137 }
138
144 private function prepareLocalSourceStorage(): self
145 {
146 if (true === $this->filesystemTemp->has($this->_relImportDir . '/content.zip')) {
147 // $this->_hasContent = true;
148 $this->_relWebDir = $this->_relWebDir . $this->_cmixObj->getId();
149 if (false === $this->filesystemWeb->has($this->_relWebDir)) {
150 $this->filesystemWeb->createDir($this->_relWebDir);
151 $this->filesystemWeb->put($this->_relWebDir . '/content.zip', $this->filesystemTemp->read($this->_relImportDir . '/content.zip'));
152 $webDataDir = ilFileUtils::getWebspaceDir();
153 ilFileUtils::unzip($webDataDir . "/" . $this->_relWebDir . "/content.zip");
154 $this->filesystemWeb->delete($this->_relWebDir . '/content.zip');
155 }
156 }
157 return $this;
158 }
159
166 private function parseXmlFileProperties(): self
167 {
168 $xmlRoot = null;
169 $xml = $this->filesystemTemp->readStream($this->_relImportDir . '/properties.xml');
170 if ($xml != false) {
171 $use_internal_errors = libxml_use_internal_errors(true);
172 $xmlRoot = simplexml_load_string((string) $xml);
173 libxml_use_internal_errors($use_internal_errors);
174 }
175 foreach ($this->_dataset->_cmixSettingsProperties as $key => $property) {
176 $this->_moduleProperties[$key] = trim($xmlRoot->$key->__toString());
177 }
178 return $this;
179 }
180
185 private function updateNewObj(): void
186 {
187 $this->_cmixObj->setTitle($this->_moduleProperties['Title'] . " " . $this->dic->language()->txt("copy_of_suffix"));
188 $this->_cmixObj->setDescription($this->_moduleProperties['Description']);
189 $this->_cmixObj->update();
190
191 if ($this->_moduleProperties['LrsTypeId']) {
192 $this->_cmixObj->setLrsTypeId((int) $this->_moduleProperties['LrsTypeId']);
193 $this->_cmixObj->setLrsType(new ilCmiXapiLrsType((int) $this->_moduleProperties['LrsTypeId']));
194 }
195 $this->_cmixObj->setContentType((string) $this->_moduleProperties['ContentType']);
196 $this->_cmixObj->setSourceType((string) $this->_moduleProperties['SourceType']);
197 $this->_cmixObj->setActivityId((string) $this->_moduleProperties['ActivityId']);
198 $this->_cmixObj->setInstructions((string) $this->_moduleProperties['Instructions']);
199 // $this->_cmixObj->setOfflineStatus($this->_moduleProperties['OfflineStatus']);
200 $this->_cmixObj->setLaunchUrl((string) $this->_moduleProperties['LaunchUrl']);
201 $this->_cmixObj->setAuthFetchUrlEnabled((bool) $this->_moduleProperties['AuthFetchUrl']);
202 $this->_cmixObj->setLaunchMethod((string) $this->_moduleProperties['LaunchMethod']);
203 $this->_cmixObj->setLaunchMode((string) $this->_moduleProperties['LaunchMode']);
204 $this->_cmixObj->setMasteryScore((float) $this->_moduleProperties['MasteryScore']);
205 $this->_cmixObj->setKeepLpStatusEnabled((bool) $this->_moduleProperties['KeepLp']);
206 $this->_cmixObj->setPrivacyIdent((int) $this->_moduleProperties['PrivacyIdent']);
207 $this->_cmixObj->setPrivacyName((int) $this->_moduleProperties['PrivacyName']);
208 $this->_cmixObj->setUserPrivacyComment((string) $this->_moduleProperties['UsrPrivacyComment']);
209 $this->_cmixObj->setStatementsReportEnabled((bool) $this->_moduleProperties['ShowStatements']);
210 $this->_cmixObj->setXmlManifest((string) $this->_moduleProperties['XmlManifest']);
211 $this->_cmixObj->setVersion((int) $this->_moduleProperties['Version']);
212 $this->_cmixObj->setHighscoreEnabled((bool) $this->_moduleProperties['HighscoreEnabled']);
213 $this->_cmixObj->setHighscoreAchievedTS((bool) $this->_moduleProperties['HighscoreAchievedTs']);
214 $this->_cmixObj->setHighscorePercentage((bool) $this->_moduleProperties['HighscorePercentage']);
215 $this->_cmixObj->setHighscoreWtime((bool) $this->_moduleProperties['HighscoreWtime']);
216 $this->_cmixObj->setHighscoreOwnTable((bool) $this->_moduleProperties['HighscoreOwnTable']);
217 $this->_cmixObj->setHighscoreTopTable((bool) $this->_moduleProperties['HighscoreTopTable']);
218 $this->_cmixObj->setHighscoreTopNum((int) $this->_moduleProperties['HighscoreTopNum']);
219 $this->_cmixObj->setBypassProxyEnabled((bool) $this->_moduleProperties['BypassProxy']);
220 $this->_cmixObj->setOnlyMoveon((bool) $this->_moduleProperties['OnlyMoveon']);
221 $this->_cmixObj->setAchieved((bool) $this->_moduleProperties['Achieved']);
222 $this->_cmixObj->setAnswered((bool) $this->_moduleProperties['Answered']);
223 $this->_cmixObj->setCompleted((bool) $this->_moduleProperties['Completed']);
224 $this->_cmixObj->setFailed((bool) $this->_moduleProperties['Failed']);
225 $this->_cmixObj->setInitialized((bool) $this->_moduleProperties['Initialized']);
226 $this->_cmixObj->setPassed((bool) $this->_moduleProperties['Passed']);
227 $this->_cmixObj->setProgressed((bool) $this->_moduleProperties['Progressed']);
228 $this->_cmixObj->setSatisfied((bool) $this->_moduleProperties['Satisfied']);
229 $this->_cmixObj->setTerminated((bool) $this->_moduleProperties['Terminated']);
230 $this->_cmixObj->setHideData((bool) $this->_moduleProperties['HideData']);
231 $this->_cmixObj->setTimestamp((bool) $this->_moduleProperties['Timestamp']);
232 $this->_cmixObj->setDuration((bool) $this->_moduleProperties['Duration']);
233 $this->_cmixObj->setNoSubstatements((bool) $this->_moduleProperties['NoSubstatements']);
234 $this->_cmixObj->setPublisherId((string) $this->_moduleProperties['PublisherId']);
235 // $this->_cmixObj->setAnonymousHomepage($this->_moduleProperties['AnonymousHomepage']);
236 $this->_cmixObj->setMoveOn((string) $this->_moduleProperties['MoveOn']);
237 $this->_cmixObj->setLaunchParameters((string) $this->_moduleProperties['LaunchParameters']);
238 $this->_cmixObj->setEntitlementKey((string) $this->_moduleProperties['EntitlementKey']);
239 $this->_cmixObj->setSwitchToReviewEnabled((bool) $this->_moduleProperties['SwitchToReview']);
240 $this->_cmixObj->save();
241 $this->_cmixObj->updateMetaData();
242
243 }
244
250 private function deleteImportDirectiry(): self
251 {
252 $this->filesystemTemp->delete($this->_relImportDir);
253 return $this;
254 }
255
260 private function getImportDirectorySingle(): self
261 {
262 $importTempDir = $this->getImportDirectory();
263 $dirArr = array_reverse(explode('/', $importTempDir));
264 $this->_relImportDir = $dirArr[1] . '/' . $dirArr[0];
265 return $this;
266 }
267
272 private function getImportDirectoryContainer(): self
273 {
274 $importTempDir = $this->getImportDirectory();
275 $dirArr = array_reverse(explode('/', $importTempDir));
276 $this->_relImportDir = $dirArr[3] . '/' . $dirArr[2] . '/' . $dirArr[1] . '/' . $dirArr[0];
277
278 return $this;
279 }
280
282 public function init(): void
283 {
284 }
285
289 public function __destruct()
290 {
291 if ($this->_isSingleImport) {
292 $this->deleteImportDirectiry();
293 }
294 }
295}
ILIAS Filesystem Filesystem $filesystemTemp
ILIAS DI Container $dic
ilCmiXapiDataSet $_dataset
updateNewObj()
Finalize the new CmiXapi Object.
ILIAS Filesystem Filesystem $filesystemWeb
getImportDirectorySingle()
Gets the relative path to the Filesystem::temp Folder.
getImportDirectoryContainer()
Gets the relative path to the Filesystem::temp Folder.
deleteImportDirectiry()
Delete the import directory.
__construct()
ilCmiXapiImporter constructor.
prepareLocalSourceStorage()
Creates a folder in the data directory of the document root.
parseXmlFileProperties()
Parse xml file and set properties.
importXmlRepresentation(string $a_entity, string $a_id, string $a_xml, ilImportMapping $a_mapping)
Init the object creation from import.
prepareContainerObject()
Builds the CmiXapi Object.
__destruct()
if single import then deleteImportDirectiry
prepareSingleObject()
Builds the CmiXapi Object.
static unzip(string $path_to_zip_file, bool $overwrite_existing=false, bool $unpack_flat=false)
static getWebspaceDir(string $mode="filesystem")
get webspace directory
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getMapping(string $a_comp, string $a_entity, string $a_old_id)
static getInstanceByObjId(?int $obj_id, bool $stop_on_error=true)
get an instance of an Ilias object by object id
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: feed.php:28
$xml
Definition: metadata.php:351
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
string $key
Consumer key/client ID value.
Definition: System.php:193