ILIAS  release_8 Revision v8.19-1-g4e8f2f9140c
All Data Structures Namespaces Files Functions Variables Modules Pages
ilCmiXapiContentUploadImporter Class Reference
+ Collaboration diagram for ilCmiXapiContentUploadImporter:

Public Member Functions

 __construct (ilObjCmiXapi $object)
 ilCmiXapiContentUploadImporter constructor. More...
 
 ensureCreatedObjectDirectory ()
 
 importServerFile (string $serverFile)
 
 importFormUpload (array $fileData)
 
 getWebDataDirRelativeObjectDirectory ()
 

Data Fields

const RELATIVE_CONTENT_DIRECTORY_NAMEBASE = 'lm_data/lm_'
 
const RELATIVE_XSD_DIRECTORY = 'Modules/CmiXapi/xml/contentschema'
 
const IMP_FILE_EXTENSION_XML = 'xml'
 
const IMP_FILE_EXTENSION_ZIP = 'zip'
 
const CMI5_XML = 'cmi5.xml'
 
const CMI5_XSD = 'cmi5_v1_CourseStructure.xsd'
 
const TINCAN_XML = 'tincan.xml'
 
const TINCAN_XSD = 'tincan.xsd'
 

Protected Member Functions

 sanitizeObjectDirectory ()
 
 handleFile (string $serverFile)
 
 getUpload (?string $uploadFilePath)
 
 handleUpload (FileUploadResult $uploadResult)
 
 handleXmlFile (string $xmlFilePath)
 
 handleXmlFileFromUpload (string $xmlFileName, string $xmlFilePath)
 
 validateXmlFile (DOMDocument $dom, $xsdFilePath)
 
 handleZipContentUpload (string $uploadFilePath)
 
 getAbsoluteObjectDirectory ()
 
 fetchFileExtension (FileUploadResult $uploadResult)
 
 hasStoredContentXml ()
 
 getStoredContentXml ()
 
 getXsdFilePath (string $xsdFileName)
 
 initObjectFromCmi5Xml (DOMDocument $dom)
 
 initObjectFromTincanXml (DOMDocument $dom)
 

Protected Attributes

ilObjCmiXapi $object
 

Static Protected Attributes

static array $CONTENT_XML_FILENAMES
 
static array $CONTENT_XSD_FILENAMES
 

Private Member Functions

 generateActivityId (string $publisherId)
 

Private Attributes

ILIAS DI Container $dic
 

Detailed Description

Definition at line 35 of file class.ilCmiXapiContentUploadImporter.php.

Constructor & Destructor Documentation

◆ __construct()

ilCmiXapiContentUploadImporter::__construct ( ilObjCmiXapi  $object)

ilCmiXapiContentUploadImporter constructor.

Definition at line 72 of file class.ilCmiXapiContentUploadImporter.php.

References $DIC, and $object.

73  {
74  global $DIC;
75  $this->dic = $DIC;
76  $this->object = $object;
77  }
global $DIC
Definition: feed.php:28

Member Function Documentation

◆ ensureCreatedObjectDirectory()

ilCmiXapiContentUploadImporter::ensureCreatedObjectDirectory ( )
Exceptions

Definition at line 82 of file class.ilCmiXapiContentUploadImporter.php.

References $DIC, and getWebDataDirRelativeObjectDirectory().

Referenced by importFormUpload(), and importServerFile().

82  : void
83  {
84  global $DIC; /* @var \ILIAS\DI\Container $DIC */
85 
86  if (!$DIC->filesystem()->web()->has($this->getWebDataDirRelativeObjectDirectory())) {
87  $DIC->filesystem()->web()->createDir($this->getWebDataDirRelativeObjectDirectory());
88  }
89  }
global $DIC
Definition: feed.php:28
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ fetchFileExtension()

ilCmiXapiContentUploadImporter::fetchFileExtension ( FileUploadResult  $uploadResult)
protected

Definition at line 309 of file class.ilCmiXapiContentUploadImporter.php.

Referenced by handleUpload().

309  : string
310  {
311  return pathinfo($uploadResult->getName(), PATHINFO_EXTENSION);
312  }
+ Here is the caller graph for this function:

◆ generateActivityId()

ilCmiXapiContentUploadImporter::generateActivityId ( string  $publisherId)
private

Definition at line 453 of file class.ilCmiXapiContentUploadImporter.php.

References $DIC, $objId, and ilCmiXapiUser\getIliasUuid().

Referenced by initObjectFromCmi5Xml().

453  : string
454  {
455  global $DIC;
456  $objId = $this->object->getId();
457  return "https://ilias.de/cmi5/activityid/" . (new \Ramsey\Uuid\UuidFactory())->uuid3(ilCmiXapiUser::getIliasUuid(), $objId . '-' . $publisherId);
458  }
$objId
Definition: xapitoken.php:57
global $DIC
Definition: feed.php:28
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getAbsoluteObjectDirectory()

ilCmiXapiContentUploadImporter::getAbsoluteObjectDirectory ( )
protected

Definition at line 293 of file class.ilCmiXapiContentUploadImporter.php.

References getWebDataDirRelativeObjectDirectory(), and ilFileUtils\getWebspaceDir().

Referenced by getStoredContentXml(), and handleZipContentUpload().

293  : string
294  {
295  $dirs = [
296  ILIAS_ABSOLUTE_PATH,
299  ];
300 
301  return implode(DIRECTORY_SEPARATOR, $dirs);
302  }
static getWebspaceDir(string $mode="filesystem")
get webspace directory
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getStoredContentXml()

ilCmiXapiContentUploadImporter::getStoredContentXml ( )
protected

Definition at line 319 of file class.ilCmiXapiContentUploadImporter.php.

References getAbsoluteObjectDirectory(), and getWebDataDirRelativeObjectDirectory().

Referenced by handleFile(), handleUpload(), and hasStoredContentXml().

319  : string
320  {
321  foreach (self::$CONTENT_XML_FILENAMES as $xmlFileName) {
322  $xmlFilePath = $this->getWebDataDirRelativeObjectDirectory() . DIRECTORY_SEPARATOR . $xmlFileName;
323 
324  if ($this->dic->filesystem()->web()->has($xmlFilePath)) {
325  return $this->getAbsoluteObjectDirectory() . DIRECTORY_SEPARATOR . $xmlFileName;
326  }
327  }
328 
329  return '';
330  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getUpload()

ilCmiXapiContentUploadImporter::getUpload ( ?string  $uploadFilePath)
protected
Exceptions

Definition at line 162 of file class.ilCmiXapiContentUploadImporter.php.

References $DIC, and $results.

Referenced by importFormUpload().

163  {
164  global $DIC; /* @var \ILIAS\DI\Container $DIC */
165 
166  if ($DIC->upload()->hasUploads()) {
167  if (!$DIC->upload()->hasBeenProcessed()) {
168  $DIC->upload()->process();
169  }
170 
171  /* @var FileUploadResult $result */
172 
173  $results = $DIC->upload()->getResults();
174 
175  if (isset($results[$uploadFilePath])) {
176  $result = $results[$uploadFilePath];
177 
178  if ($result->isOK()) {
179  return $result;
180  }
181 
183  'upload processing failed with message ' .
184  '"' . $result->getStatus()->getMessage() . '"'
185  );
186  }
187 
188  throw new ilCmiXapiInvalidUploadContentException('upload lost during processing!');
189  }
190 
191  throw new ilCmiXapiInvalidUploadContentException('no upload provided!');
192  }
global $DIC
Definition: feed.php:28
$results
+ Here is the caller graph for this function:

◆ getWebDataDirRelativeObjectDirectory()

ilCmiXapiContentUploadImporter::getWebDataDirRelativeObjectDirectory ( )

Definition at line 304 of file class.ilCmiXapiContentUploadImporter.php.

Referenced by ensureCreatedObjectDirectory(), getAbsoluteObjectDirectory(), getStoredContentXml(), and sanitizeObjectDirectory().

304  : string
305  {
306  return self::RELATIVE_CONTENT_DIRECTORY_NAMEBASE . $this->object->getId();
307  }
+ Here is the caller graph for this function:

◆ getXsdFilePath()

ilCmiXapiContentUploadImporter::getXsdFilePath ( string  $xsdFileName)
protected

Definition at line 332 of file class.ilCmiXapiContentUploadImporter.php.

Referenced by handleXmlFile(), and handleXmlFileFromUpload().

332  : string
333  {
334  return ILIAS_ABSOLUTE_PATH . DIRECTORY_SEPARATOR . self::RELATIVE_XSD_DIRECTORY . DIRECTORY_SEPARATOR . $xsdFileName;
335  }
+ Here is the caller graph for this function:

◆ handleFile()

ilCmiXapiContentUploadImporter::handleFile ( string  $serverFile)
protected
Exceptions
ilCmiXapiInvalidUploadContentException

Definition at line 117 of file class.ilCmiXapiContentUploadImporter.php.

References getStoredContentXml(), handleXmlFile(), handleZipContentUpload(), and hasStoredContentXml().

Referenced by importServerFile().

117  : void
118  {
119  $fileInfo = pathinfo($serverFile);
120 
121  switch ($fileInfo['extension']) {
122  case self::IMP_FILE_EXTENSION_XML:
123 
124  $this->handleXmlFile($serverFile);
125  break;
126 
127  case self::IMP_FILE_EXTENSION_ZIP:
128 
129  $this->handleZipContentUpload($serverFile);
130 
131  if ($this->hasStoredContentXml()) {
132  $this->handleXmlFile($this->getStoredContentXml());
133  }
134 
135  break;
136  }
137  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleUpload()

ilCmiXapiContentUploadImporter::handleUpload ( FileUploadResult  $uploadResult)
protected
Exceptions
ilCmiXapiInvalidUploadContentException

Definition at line 197 of file class.ilCmiXapiContentUploadImporter.php.

References fetchFileExtension(), getStoredContentXml(), handleXmlFile(), handleXmlFileFromUpload(), handleZipContentUpload(), and hasStoredContentXml().

Referenced by importFormUpload().

197  : void
198  {
199  switch ($this->fetchFileExtension($uploadResult)) {
200  case self::IMP_FILE_EXTENSION_XML:
201 
202  $this->handleXmlFileFromUpload($uploadResult->getName(), $uploadResult->getPath());
203  break;
204 
205  case self::IMP_FILE_EXTENSION_ZIP:
206 
207  $this->handleZipContentUpload($uploadResult->getPath());
208 
209  if ($this->hasStoredContentXml()) {
210  $this->handleXmlFile($this->getStoredContentXml());
211  }
212 
213  break;
214  }
215  }
fetchFileExtension(FileUploadResult $uploadResult)
handleXmlFileFromUpload(string $xmlFileName, string $xmlFilePath)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleXmlFile()

ilCmiXapiContentUploadImporter::handleXmlFile ( string  $xmlFilePath)
protected
Exceptions
ilCmiXapiInvalidUploadContentException

Definition at line 220 of file class.ilCmiXapiContentUploadImporter.php.

References getXsdFilePath(), initObjectFromCmi5Xml(), initObjectFromTincanXml(), and validateXmlFile().

Referenced by handleFile(), and handleUpload().

220  : void
221  {
222  $dom = new DOMDocument();
223  $dom->load($xmlFilePath);
224 
225  switch (basename($xmlFilePath)) {
226  case self::CMI5_XML:
227 
228  $xsdFilePath = $this->getXsdFilePath(self::CMI5_XSD);
229  $this->validateXmlFile($dom, $xsdFilePath);
230 
231  $this->initObjectFromCmi5Xml($dom);
232 
233  break;
234 
235  case self::TINCAN_XML:
236 
237  $xsdFilePath = $this->getXsdFilePath(self::TINCAN_XSD);
238  $this->validateXmlFile($dom, $xsdFilePath);
239 
240  $this->initObjectFromTincanXml($dom);
241 
242  break;
243  }
244  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleXmlFileFromUpload()

ilCmiXapiContentUploadImporter::handleXmlFileFromUpload ( string  $xmlFileName,
string  $xmlFilePath 
)
protected
Exceptions
ilCmiXapiInvalidUploadContentException

Definition at line 249 of file class.ilCmiXapiContentUploadImporter.php.

References getXsdFilePath(), initObjectFromCmi5Xml(), initObjectFromTincanXml(), and validateXmlFile().

Referenced by handleUpload().

249  : void
250  {
251  $dom = new DOMDocument();
252  $dom->load($xmlFilePath);
253  switch (basename($xmlFileName)) {
254  case self::CMI5_XML:
255 
256  $xsdFilePath = $this->getXsdFilePath(self::CMI5_XSD);
257  $this->validateXmlFile($dom, $xsdFilePath);
258 
259  $this->initObjectFromCmi5Xml($dom);
260 
261  break;
262 
263  case self::TINCAN_XML:
264 
265  $xsdFilePath = $this->getXsdFilePath(self::TINCAN_XSD);
266  $this->validateXmlFile($dom, $xsdFilePath);
267 
268  $this->initObjectFromTincanXml($dom);
269 
270  break;
271  }
272  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ handleZipContentUpload()

ilCmiXapiContentUploadImporter::handleZipContentUpload ( string  $uploadFilePath)
protected

Definition at line 284 of file class.ilCmiXapiContentUploadImporter.php.

References getAbsoluteObjectDirectory().

Referenced by handleFile(), and handleUpload().

284  : void
285  {
286  $targetPath = $this->getAbsoluteObjectDirectory();
287  $zar = new \ZipArchive();
288  $zar->open($uploadFilePath);
289  $zar->extractTo($targetPath);
290  $zar->close();
291  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ hasStoredContentXml()

ilCmiXapiContentUploadImporter::hasStoredContentXml ( )
protected

Definition at line 314 of file class.ilCmiXapiContentUploadImporter.php.

References getStoredContentXml().

Referenced by handleFile(), and handleUpload().

314  : bool
315  {
316  return $this->getStoredContentXml() !== '';
317  }
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ importFormUpload()

ilCmiXapiContentUploadImporter::importFormUpload ( array  $fileData)
Exceptions

Definition at line 144 of file class.ilCmiXapiContentUploadImporter.php.

References $DIC, ensureCreatedObjectDirectory(), getUpload(), handleUpload(), and sanitizeObjectDirectory().

144  : void
145  {
146  global $DIC;
148 
149  $uploadResult = $this->getUpload(
150  $fileData['tmp_name']
151  );
152 
153  $this->handleUpload($uploadResult);
154 
155  $this->sanitizeObjectDirectory();
156  }
global $DIC
Definition: feed.php:28
+ Here is the call graph for this function:

◆ importServerFile()

ilCmiXapiContentUploadImporter::importServerFile ( string  $serverFile)
Exceptions

Definition at line 105 of file class.ilCmiXapiContentUploadImporter.php.

References ensureCreatedObjectDirectory(), handleFile(), and sanitizeObjectDirectory().

+ Here is the call graph for this function:

◆ initObjectFromCmi5Xml()

ilCmiXapiContentUploadImporter::initObjectFromCmi5Xml ( DOMDocument  $dom)
protected

Definition at line 337 of file class.ilCmiXapiContentUploadImporter.php.

References generateActivityId(), ilObjCmiXapi\LMS_MASTERY_SCORE, ilLPObjSettings\LP_MODE_CMIX_COMPLETED, ilLPObjSettings\LP_MODE_CMIX_COMPLETED_OR_PASSED, ilLPObjSettings\LP_MODE_CMIX_PASSED, ilLPObjSettings\LP_MODE_DEACTIVATED, ilCmiXapiLP\MOVEON_COMPLETED, ilCmiXapiLP\MOVEON_COMPLETED_AND_PASSED, ilCmiXapiLP\MOVEON_COMPLETED_OR_PASSED, ilCmiXapiLP\MOVEON_PASSED, and ILIAS\Repository\object().

Referenced by handleXmlFile(), and handleXmlFileFromUpload().

337  : void
338  {
339  $xPath = new DOMXPath($dom);
340 
341  $courseNode = $xPath->query("//*[local-name()='course']")->item(0);
342  // TODO: multilanguage support
343  $title = $xPath->query("//*[local-name()='title']/*[local-name()='langstring']", $courseNode)->item(0)->nodeValue;
344  $this->object->setTitle(trim($title));
345 
346  $description = $xPath->query("//*[local-name()='description']/*[local-name()='langstring']", $courseNode)->item(0)->nodeValue;
347  $this->object->setDescription(trim($description));
348 
349  $publisherId = trim($courseNode->getAttribute('id'));
350  $this->object->setPublisherId($publisherId);
351 
352  $activityId = $this->generateActivityId($publisherId);
353  $this->object->setActivityId($activityId);
354 
355  $moveOn = '';
356 
357  foreach ($xPath->query("//*[local-name()='au']") as $assignedUnitNode) {
358  $relativeLaunchUrl = $xPath->query("//*[local-name()='url']", $assignedUnitNode)->item(0)->nodeValue;
359  if (!empty($xPath->query("//*[local-name()='launchParameters']", $assignedUnitNode)->item(0)->nodeValue)) {
360  $launchParameters = $xPath->query(
361  "//*[local-name()='launchParameters']",
362  $assignedUnitNode
363  )->item(0)->nodeValue;
364  }
365  if (!empty($assignedUnitNode->getAttribute('moveOn'))) {
366  $moveOn = trim($assignedUnitNode->getAttribute('moveOn'));
367  }
368  if (!empty($xPath->query("//*[local-name()='entitlementKey']", $assignedUnitNode)->item(0)->nodeValue)) {
369  $entitlementKey = $xPath->query(
370  "//*[local-name()='entitlementKey']",
371  $assignedUnitNode
372  )->item(0)->nodeValue;
373  }
374  if (!empty($assignedUnitNode->getAttribute('masteryScore'))) {
375  $masteryScore = trim($assignedUnitNode->getAttribute('masteryScore'));
376  }
377 
378  if (!empty($relativeLaunchUrl)) {
379  $this->object->setLaunchUrl(trim($relativeLaunchUrl));
380  }
381  if (!empty($launchParameters)) {
382  $this->object->setLaunchParameters(trim($launchParameters));
383  }
384  if (!empty($moveOn)) {
386  $moveOn = ilCmiXapiLP::MOVEON_PASSED;
387  }
388  $this->object->setMoveOn($moveOn);
389  }
390  if (!empty($entitlementKey)) {
391  $this->object->setEntitlementKey($entitlementKey);
392  }
393  if (!empty($masteryScore)) {
394  $this->object->setMasteryScore((float) $masteryScore);
395  } else {
396  $this->object->setMasteryScore(ilObjCmiXapi::LMS_MASTERY_SCORE);
397  }
398 
399  break; // TODO: manage multi au imports
400  }
401  $xml_str = $dom->saveXML();
402  $this->object->setXmlManifest($xml_str);
403  $this->object->update();
404  $this->object->save();
405 
406  $lpSettings = new ilLPObjSettings($this->object->getId());
408 
409  switch ($moveOn) {
412  break;
415  break;
418  break;
419  case ilCmiXapiLP::MOVEON_COMPLETED_AND_PASSED: // ich würde es noch implementieren
421  break;
422  }
423  $lpSettings->setMode($mode);
424  $lpSettings->update();
425  }
const MOVEON_COMPLETED_AND_PASSED
const MOVEON_COMPLETED_OR_PASSED
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ initObjectFromTincanXml()

ilCmiXapiContentUploadImporter::initObjectFromTincanXml ( DOMDocument  $dom)
protected

Definition at line 427 of file class.ilCmiXapiContentUploadImporter.php.

Referenced by handleXmlFile(), and handleXmlFileFromUpload().

427  : void
428  {
429  $xPath = new DOMXPath($dom);
430 
431  foreach ($xPath->query("//*[local-name()='activity']") as $activityNode) {
432  $title = $xPath->query("//*[local-name()='name']", $activityNode)->item(0)->nodeValue;
433  $this->object->setTitle(trim($title));
434 
435  $description = $xPath->query("//*[local-name()='description']", $activityNode)->item(0)->nodeValue;
436  $this->object->setDescription(trim($description));
437 
438  $activityId = $activityNode->getAttribute('id');
439  $this->object->setActivityId(trim($activityId));
440 
441  $relativeLaunchUrl = $xPath->query("//*[local-name()='launch']", $activityNode)->item(0)->nodeValue;
442  $this->object->setLaunchUrl(trim($relativeLaunchUrl));
443 
444  break; // TODO: manage multi activities imports
445  }
446 
447  $xml_str = $dom->saveXML();
448  $this->object->setXmlManifest($xml_str);
449  $this->object->update();
450  $this->object->save();
451  }
+ Here is the caller graph for this function:

◆ sanitizeObjectDirectory()

ilCmiXapiContentUploadImporter::sanitizeObjectDirectory ( )
protected

Definition at line 91 of file class.ilCmiXapiContentUploadImporter.php.

References getWebDataDirRelativeObjectDirectory(), ilFileUtils\getWebspaceDir(), and ilFileUtils\renameExecutables().

Referenced by importFormUpload(), and importServerFile().

91  : void
92  {
94  implode(DIRECTORY_SEPARATOR, [
97  ])
98  );
99  }
static getWebspaceDir(string $mode="filesystem")
get webspace directory
static renameExecutables(string $a_dir)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ validateXmlFile()

ilCmiXapiContentUploadImporter::validateXmlFile ( DOMDocument  $dom,
  $xsdFilePath 
)
protected
Exceptions
ilCmiXapiInvalidUploadContentException

Definition at line 277 of file class.ilCmiXapiContentUploadImporter.php.

Referenced by handleXmlFile(), and handleXmlFileFromUpload().

277  : void
278  {
279  if (!$dom->schemaValidate($xsdFilePath)) {
280  throw new ilCmiXapiInvalidUploadContentException('invalid content xml given!');
281  }
282  }
+ Here is the caller graph for this function:

Field Documentation

◆ $CONTENT_XML_FILENAMES

array ilCmiXapiContentUploadImporter::$CONTENT_XML_FILENAMES
staticprotected
Initial value:
= [
self::CMI5_XML, self::TINCAN_XML
]

Definition at line 53 of file class.ilCmiXapiContentUploadImporter.php.

◆ $CONTENT_XSD_FILENAMES

array ilCmiXapiContentUploadImporter::$CONTENT_XSD_FILENAMES
staticprotected
Initial value:
= [
self::CMI5_XML => self::CMI5_XSD

Definition at line 60 of file class.ilCmiXapiContentUploadImporter.php.

◆ $dic

ILIAS DI Container ilCmiXapiContentUploadImporter::$dic
private

Definition at line 67 of file class.ilCmiXapiContentUploadImporter.php.

◆ $object

ilObjCmiXapi ilCmiXapiContentUploadImporter::$object
protected

Definition at line 65 of file class.ilCmiXapiContentUploadImporter.php.

Referenced by __construct().

◆ CMI5_XML

const ilCmiXapiContentUploadImporter::CMI5_XML = 'cmi5.xml'

Definition at line 44 of file class.ilCmiXapiContentUploadImporter.php.

◆ CMI5_XSD

const ilCmiXapiContentUploadImporter::CMI5_XSD = 'cmi5_v1_CourseStructure.xsd'

Definition at line 45 of file class.ilCmiXapiContentUploadImporter.php.

◆ IMP_FILE_EXTENSION_XML

const ilCmiXapiContentUploadImporter::IMP_FILE_EXTENSION_XML = 'xml'

Definition at line 41 of file class.ilCmiXapiContentUploadImporter.php.

◆ IMP_FILE_EXTENSION_ZIP

const ilCmiXapiContentUploadImporter::IMP_FILE_EXTENSION_ZIP = 'zip'

Definition at line 42 of file class.ilCmiXapiContentUploadImporter.php.

◆ RELATIVE_CONTENT_DIRECTORY_NAMEBASE

const ilCmiXapiContentUploadImporter::RELATIVE_CONTENT_DIRECTORY_NAMEBASE = 'lm_data/lm_'

◆ RELATIVE_XSD_DIRECTORY

const ilCmiXapiContentUploadImporter::RELATIVE_XSD_DIRECTORY = 'Modules/CmiXapi/xml/contentschema'

Definition at line 39 of file class.ilCmiXapiContentUploadImporter.php.

◆ TINCAN_XML

const ilCmiXapiContentUploadImporter::TINCAN_XML = 'tincan.xml'

Definition at line 47 of file class.ilCmiXapiContentUploadImporter.php.

◆ TINCAN_XSD

const ilCmiXapiContentUploadImporter::TINCAN_XSD = 'tincan.xsd'

Definition at line 48 of file class.ilCmiXapiContentUploadImporter.php.


The documentation for this class was generated from the following file: