11 require_once
"./Modules/Scorm2004/classes/ilSCORM13Package.php";
12 require_once
"./Modules/Scorm2004/classes/class.ilSCORM2004Chapter.php";
13 require_once
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php";
14 require_once
"./Modules/Scorm2004/classes/class.ilSCORM2004PageNode.php";
15 require_once
"./Modules/Scorm2004/classes/adlparser/SeqTreeBuilder.php";
16 require_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMTree.php");
21 const DB_ENCODE_XSL =
'./Modules/Scorm2004/templates/xsl/op/op-scorm13.xsl';
22 const CONVERT_XSL =
'./Modules/Scorm2004/templates/xsl/op/scorm12To2004.xsl';
23 const DB_DECODE_XSL =
'./Modules/Scorm2004/templates/xsl/op/op-scorm13-revert.xsl';
24 const VALIDATE_XSD =
'./Modules/Scorm2004/templates/xsd/op/op-scorm13.xsd';
26 const WRAPPER_HTML =
'./Modules/Scorm2004/scripts/converter/GenericRunTimeWrapper1.0_aadlc/GenericRunTimeWrapper.htm';
27 const WRAPPER_JS =
'./Modules/Scorm2004/scripts/converter/GenericRunTimeWrapper1.0_aadlc/SCOPlayerWrapper.js';
76 $this->packagesFolder = IL_OP_PACKAGES_FOLDER;
78 $this->userId =
$GLOBALS[
'USER'][
'usr_id'];
90 $lm_set = $ilDB->queryF(
'SELECT * FROM sahs_lm WHERE id = %s', array(
'integer'), array(
$packageId));
91 $lm_data = $ilDB->fetchAssoc(
$lm_set);
92 $pg_set = $ilDB->queryF(
'SELECT * FROM cp_package WHERE obj_id = %s', array(
'integer'), array(
$packageId));
93 $pg_data = $ilDB->fetchAssoc(
$lm_set);
95 $this->packageData = array_merge($lm_data, $pg_data);
97 $this->packageFolder = $this->packagesFolder .
'/' .
$packageId;
98 $this->packageFile = $this->packageFolder .
'.zip';
99 $this->imsmanifestFile = $this->packageFolder .
'/' .
'imsmanifest.xml';
107 if (is_dir($this->packageFolder))
108 dir_delete($this->packageFolder);
109 if (is_file($this->packageFile))
110 @unlink($this->packageFile);
116 header(
'content-type: application/zip');
117 header(
'content-disposition: attachment; filename="' . basename($this->packageFile) .
'"');
118 readfile($this->packageFile);
128 header(
'content-type: text/xml');
129 header(
'content-disposition: attachment; filename="manifest.xml"');
132 $res = $ilDB->queryF(
133 'SELECT xmldata FROM cp_package WHERE obj_id = %s',
135 array($this->packageId)
139 print(
$row[
'xmldata']);
154 if ($reimport ===
true) {
161 $this->imsmanifestFile = $this->packageFolder .
'/' .
'imsmanifest.xml';
164 $this->imsmanifest->async =
false;
165 if (!@$this->imsmanifest->load($this->imsmanifestFile))
167 $this->diagnostic[] =
'XML not wellformed';
172 $this->manifest = $this->
transform($this->imsmanifest, self::DB_ENCODE_XSL);
174 if (!$this->manifest)
176 $this->diagnostic[] =
'Cannot transform into normalized manifest';
180 $path =
new DOMXpath($this->manifest);
181 $path->registerNamespace(
"scorm",
"http://www.openpalms.net/scorm/scorm13");
182 $items =
$path->query(
"//scorm:item");
183 if($items->length == 1){
184 $n = $items->item(0);
185 $resource =
$path->query(
"//scorm:resource");
186 foreach($resource as
$res){
187 if($res->getAttribute(
'id') ==
$n->getAttribute(
"resourceId")){
188 $res->setAttribute(
'scormType',
'sco');
194 if ($validate==
"y") {
195 if (!$this->
validate($this->manifest, self::VALIDATE_XSD))
198 $ilErr->raiseError(
"<b>The uploaded SCORM 1.2 / SCORM 2004 is not valid. You can try to import the package without the validation option checked on your own risk. </b><br><br>Validation Error(s):</b><br> Normalized XML is not conform to ". self::VALIDATE_XSD,
204 if(file_exists($this->packageFolder .
'/' .
'index.xml'))
206 $doc = simplexml_load_file($this->packageFolder .
'/' .
'index.xml');
207 $l = $doc->xpath (
"/ContentObject/MetaData" );
210 include_once
'Services/MetaData/classes/class.ilMDXMLCopier.php';
212 $mdxml->startParsing();
213 $mdxml->getMDObject()->update();
218 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM13MDImporter.php");
221 $title = $importer->getTitle();
222 $description = $importer->getDescription();
223 if ($description !=
"") {
229 $x = simplexml_load_string($this->manifest->saveXML());
230 $x[
'persistPreviousAttempts'] = $this->packageData[
'persistprevattempts'];
231 $x[
'online'] = $this->packageData[
'c_online'];
233 $x[
'defaultLessonMode'] = $this->packageData[
'default_lesson_mode'];
234 $x[
'credit'] = $this->packageData[
'credit'];
235 $x[
'autoReview'] = $this->packageData[
'auto_review'];
239 foreach ($x->resource as $xe)
241 $r[strval($xe[
'id'])] = $xe;
245 foreach ($x->xpath(
'//*[local-name()="item"]') as $xe)
248 if ($b =
$r[strval($xe[
'resourceId'])])
250 $xe[
'href'] = strval($b[
'base']) . strval($b[
'href']);
251 unset($xe[
'resourceId']);
252 if (strval($b[
'scormType'])==
'sco') $xe[
'sco'] =
true;
258 self::jsonNode($x->organization, $j[
'item']);
259 foreach($x->sequencing as $s)
261 self::jsonNode($s, $j[
'sequencing'][]);
264 $j[
'item'][
'base'] = strval($x[
'base']);
267 $j[
'foreignId'] = floatval($x[
'foreignId']);
268 $j[
'id'] = strval($x[
'id']);
273 $adl_tree = $act->buildNodeSeqTree($this->imsmanifestFile);
274 $ilDB->update(
'cp_package',
276 'xmldata' => array(
'clob', $x->asXML()),
277 'jsdata' => array(
'clob', json_encode($j)),
278 'activitytree' => array(
'clob', json_encode($adl_tree[
'tree'])),
279 'global_to_system' => array(
'integer', (
int)$adl_tree[
'global']),
280 'shared_data_global_to_system' => array(
'integer', (
int)$adl_tree[
'dataglobal'])
283 'obj_id' => array(
'integer', (
int)$this->packageId)
292 return $j[
'item'][
'title'];
308 $this->imsmanifestFile = $this->packageFolder .
'/' .
'index.xml';
310 $this->imsmanifest->async =
false;
312 if (!@$this->imsmanifest->load($this->imsmanifestFile))
314 $this->diagnostic[] =
'XML not wellformed';
323 $sco_xml_file = $this->packageFolder .
'/sco.xml';
324 if (is_file($sco_xml_file))
327 $scodoc->async =
false;
328 if (!@$scodoc->load($sco_xml_file))
330 $this->diagnostic[] =
'XML of sco.xml not wellformed';
335 $xpath =
new DOMXPath($scodoc);
336 $nodes = $xpath->query(
"/sco/objective");
337 foreach($nodes as $node)
339 $t_node = $node->firstChild;
340 if (is_object($t_node))
342 $objective_text = $t_node->textContent;
343 if (trim($objective_text) !=
"")
345 $objs = $sco->getObjectives();
346 foreach ($objs as $o)
348 $mappings = $o->getMappings();
349 if ($mappings == null)
351 $ob =
new ilScorm2004Objective($sco->getId(), $o->getId());
352 $ob->setObjectiveID($objective_text);
353 $ob->updateObjective();
375 $this->imsmanifestFile = $this->packageFolder .
'/' .
'index.xml';
377 $this->imsmanifest->async =
false;
379 if (!@$this->imsmanifest->load($this->imsmanifestFile))
381 $this->diagnostic[] =
'XML not wellformed';
437 $this->packageId=
$slm->getId();
438 $this->imsmanifestFile = $this->packageFolder .
'/' .
'imsmanifest.xml';
440 $this->imsmanifest->async =
false;
441 $this->imsmanifest->formatOutput =
false;
442 $this->imsmanifest->preserveWhiteSpace =
false;
444 if (!@$this->imsmanifest->load($this->imsmanifestFile))
446 $this->diagnostic[] =
'XML not wellformed';
450 $this->mani_xpath =
new DOMXPath($this->imsmanifest);
451 $this->mani_xpath->registerNamespace(
"d",
"http://www.imsproject.org/xsd/imscp_rootv1p1p2");
452 $this->mani_xpath->registerNamespace(
"imscp",
"http://www.imsglobal.org/xsd/imscp_v1p1");
453 $this->mani_xpath->registerNamespace(
"imsss",
"http://www.imsglobal.org/xsd/imsss");
456 $this->
dbImportLM(simplexml_import_dom($this->imsmanifest->documentElement),
"",
457 $a_import_sequencing);
472 include_once(
"./Modules/Glossary/classes/class.ilObjGlossary.php");
474 $newObj->setType(
'glo');
475 $newObj->setTitle(
'');
476 $newObj->create(
true);
477 $newObj->createReference();
478 $newObj->putInTree(
$_GET[
"ref_id"]);
479 $newObj->setPermissions(
$_GET[
"ref_id"]);
480 $newObj->notify(
"new",
$_GET[
"ref_id"],
$_GET[
"parent_non_rbac_id"],
$_GET[
"ref_id"],$newObj->getRefId());
485 if (!is_file($xml_file))
490 include_once (
"./Modules/LearningModule/classes/class.ilContObjParser.php");
492 $contParser->startParsing();
495 $slm->setAssignedGlossary($newObj->getId());
499 function dbImportLM($node, $parent_id =
"", $a_import_sequencing =
false)
502 switch($node->getName())
505 $this->slm_tree =&
new ilTree($this->slm->getId());
507 $this->slm_tree->setTableNames(
'sahs_sc13_tree',
'sahs_sc13_tree_node');
508 $this->slm_tree->addTree($this->slm->getId(), 1);
511 include_once (
"./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Sequencing.php");
515 $r = $this->mani_xpath->query(
"/d:manifest/d:organizations/d:organization/imsss:sequencing");
516 $this->imsmanifest->formatOutput =
false;
520 if ($a_import_sequencing)
522 $seq_info->initDom();
527 if(file_exists($this->packageFolder .
'/' .
'index.xml'))
529 $doc = simplexml_load_file($this->packageFolder .
'/' .
'index.xml');
530 $l = $doc->xpath (
"/ContentObject/MetaData" );
533 include_once
'Services/MetaData/classes/class.ilMDXMLCopier.php';
534 $mdxml =&
new ilMDXMLCopier($l[0]->asXML(),$this->slm->getId(),$this->slm->getId(),$this->slm->getType());
536 $mdxml->getMDObject()->update();
541 $this->slm->title=$node->title;
544 $a = $node->attributes();
545 if(preg_match(
"/il_\d+_chap_\d+/",$a[
'identifier']))
548 $chap->setTitle($node->title);
549 $chap->setSLMId($this->slm->getId());
553 $r = $this->mani_xpath->query(
"//d:item[@identifier='".$a[
'identifier'].
"']/imsss:sequencing");
558 $seq_info->initDom();
563 $parent_id = $chap->getId();
564 $doc = simplexml_load_file($this->packageFolder .
'/' .
'index.xml');
565 $l = $doc->xpath (
"/ContentObject/StructureObject/MetaData[General/Identifier/@Entry='".$a[
'identifier'].
"']" );
568 include_once
'Services/MetaData/classes/class.ilMDXMLCopier.php';
569 $mdxml =&
new ilMDXMLCopier($l[0]->asXML(),$this->slm->getId(),$chap->getId(),$chap->getType());
571 $mdxml->getMDObject()->update();
574 if(preg_match(
"/il_\d+_sco_(\d+)/",$a[
'identifier'], $match))
577 $sco->setTitle($node->title);
578 $sco->setSLMId($this->slm->getId());
582 $r = $this->mani_xpath->query(
"//d:item[@identifier='".$a[
'identifier'].
"']/imsss:sequencing");
587 "local_obj_".$sco->getID().
"_0");
588 $seq_info->initDom();
594 $newPack->il_importSco($this->slm->getId(),$sco->getId(),$this->packageFolder.
"/".$match[1]);
595 $parent_id = $sco->getId();
597 if(preg_match(
"/il_\d+_ass_(\d+)/",$a[
'identifier'], $match))
600 $ass->setTitle($node->title);
601 $ass->setSLMId($this->slm->getId());
605 $r = $this->mani_xpath->query(
"//d:item[@identifier='".$a[
'identifier'].
"']/imsss:sequencing");
610 "local_obj_".$ass->getID().
"_0");
611 $seq_info->initDom();
617 $newPack->il_importAss($this->slm->getId(),$ass->getId(),$this->packageFolder.
"/".$match[1]);
618 $parent_id = $ass->getId();
625 foreach($node->children() as $child)
627 $this->
dbImportLM($child, $parent_id, $a_import_sequencing);
640 $seq_xml = trim(str_replace(
"imsss:",
"", $this->imsmanifest->saveXML($a_node)));
643 $a_seq_info->setImportSeqXml(
'<?xml version="1.0"?>'.$seq_xml);
645 if ($a_import_sequencing)
647 if ($a_fix_obj_id !=
"")
649 $seq_xml = preg_replace(
"/local_obj_[0-9]*_0/", $a_fix_obj_id, $seq_xml);
651 $a_seq_info->setSeqXml(
'<?xml version="1.0"?>'.$seq_xml);
659 $this->diagnostic[] = $msg;
672 foreach ($node->attributes() as $k => $v)
676 if ($v===
"true") $v =
true;
677 else if ($v===
"false") $v =
false;
678 else if (is_numeric($v)) $v = (float) $v;
681 foreach ($node->children() as $name => $child)
683 self::jsonNode($child, $sink[$name][]);
691 foreach (
$d as $f ) {
693 if ($f [type] ==
'file' && substr ( $f [entry], 0, 4 ) ==
'qti_') {
694 include_once
"./Services/QTI/classes/class.ilQTIParser.php";
695 include_once
"./Modules/Test/classes/class.ilObjTest.php";
699 $result = $qtiParser->startParsing ();
700 $founditems = & $qtiParser->getFoundItems ();
702 foreach ( $founditems as $qp ) {
717 $qtiParser->setTestObject ( $newObj );
718 $result = $qtiParser->startParsing ();
720 $qtis = array_merge($qtis, $qtiParser->getImportMapping());
726 include_once
'Modules/Scorm2004/classes/class.ilSCORM2004Page.php';
727 $doc =
new SimpleXMLElement($this->imsmanifest->saveXml());
728 $l = $doc->xpath (
"/ContentObject/MetaData" );
731 include_once
'Services/MetaData/classes/class.ilMDXMLCopier.php';
732 $mdxml =&
new ilMDXMLCopier($l[0]->asXML(),
$slm->getId(),$sco->getId(),$sco->getType());
734 $mdxml->getMDObject()->update();
736 $l = $doc->xpath(
"/ContentObject/PageObject");
737 foreach ( $l as $page_xml )
739 $tnode = $page_xml->xpath (
'MetaData/General/Title' );
741 $page->setTitle ( $tnode [0] );
742 $page->setSLMId (
$slm->getId () );
743 $page->create (
true);
745 $pmd = $page_xml->xpath (
"MetaData");
748 include_once
'Services/MetaData/classes/class.ilMDXMLCopier.php';
749 $mdxml =&
new ilMDXMLCopier($pmd[0]->asXML(),
$slm->getId(),$page->getId(),$page->getType());
751 $mdxml->getMDObject()->update();
753 $tnode = $page_xml->xpath(
"//MediaObject/MediaAlias | //InteractiveImage/MediaAlias");
754 foreach($tnode as $ttnode)
756 include_once
'./Services/MediaObjects/classes/class.ilObjMediaObject.php';
757 $OriginId = $ttnode[OriginId];
758 $medianodes = $doc->xpath(
"//MediaObject[MetaData/General/Identifier/@Entry='".$OriginId .
"']");
759 $medianode = $medianodes[0];
763 $media_object->setTitle ($medianode->MetaData->General->Title);
764 $media_object->setDescription ($medianode->MetaData->General->Description);
765 $media_object->create (
false);
766 $mmd = $medianode->xpath (
"MetaData");
769 include_once
'Services/MetaData/classes/class.ilMDXMLCopier.php';
770 $mdxml =&
new ilMDXMLCopier($mmd[0]->asXML(),0,$media_object->getId(),$media_object->getType());
772 $mdxml->getMDObject()->update();
775 $media_object->createDirectory ();
777 foreach ( $medianode->MediaItem as $xMediaItem )
780 $media_object->addMediaItem ( $media_item );
781 $media_item->setPurpose($xMediaItem[Purpose]);
782 $media_item->setFormat($xMediaItem->Format );
783 $media_item->setLocation($xMediaItem->Location);
784 $media_item->setLocationType($xMediaItem->Location[Type]);
785 $media_item->setWidth ( $xMediaItem->Layout[Width]);
786 $media_item->setHeight ( $xMediaItem->Layout[Height]);
787 $media_item->setHAlign($xMediaItem->Layout[HorizontalAlign]);
788 $media_item->setCaption($xMediaItem->Caption);
789 $media_item->setTextRepresentation($xMediaItem->TextRepresentation);
793 foreach ($xMediaItem->MapArea as
$n => $v)
796 if ($v->ExtLink[Href] !=
"")
798 include_once(
"./Services/MediaObjects/classes/class.ilMapArea.php");
802 $map_area->setShape($v[Shape]);
803 $map_area->setCoords($v[Coords]);
805 $map_area->setTitle($v->ExtLink);
806 $map_area->setHref($v->ExtLink[Href]);
808 $media_item->addMapArea($map_area);
812 if($media_item->getLocationType()==
"LocalFile")
820 ilUtil::rCopy($this->packageFolder.
"/objects/".$OriginId, $mob_dir);
827 $media_object->update(
true);
828 $ttnode [OriginId] =
"il__mob_" . $media_object->getId ();
831 include_once(
"./Modules/File/classes/class.ilObjFile.php");
832 include_once(
"./Services/Utilities/classes/class.ilFileUtils.php");
833 include_once(
"./Services/MediaObjects/classes/class.ilObjMediaObject.php");
835 $intlinks = $page_xml->xpath(
"//IntLink");
839 foreach ( $intlinks as $intlink )
841 if($intlink[Type]!=
"File")
continue;
842 $path = $this->packageFolder.
"/objects/".str_replace(
'dfile',
'file',$intlink[Target]);
843 if(!is_dir(
$path ))
continue;
848 $fileObj->setType(
"file");
857 $fileObj->createReference();
860 $fileObj->createDirectory();
862 $intlink[Target]=
"il__dfile_".$fileObj->getId();
866 $fileitems = $page_xml->xpath(
"//FileItem/Identifier");
869 foreach ( $fileitems as $fileitem )
871 $path = $this->packageFolder.
"/objects/".$fileitem[Entry];
872 if(!is_dir(
$path ))
continue;
877 $fileObj->setType(
"file");
886 $fileObj->createReference();
889 $fileObj->createDirectory();
891 $fileitem[Entry]=
"il__file_".$fileObj->getId();
898 $ddoc->async =
false;
899 $ddoc->preserveWhiteSpace =
false;
900 $ddoc->formatOutput =
false;
901 $ddoc->loadXML($page_xml->asXML());
902 $xpath =
new DOMXPath($ddoc);
903 $tnode = $xpath->query(
'PageContent');
905 foreach($tnode as $ttnode)
906 $t .= $ddoc->saveXML($ttnode);
907 $t .=
"</PageObject>";
908 foreach ($qtis as $old=>$q)
909 $t = str_replace($old,
'il__qst_'.$q[
'pool'],
$t);
910 $pagex->setXMLContent(
$t);
911 $pagex->updateFromXML();
915 public function dbImport($node, &$lft=1, $depth=1, $parent=0)
919 switch ($node->nodeType)
921 case XML_DOCUMENT_NODE:
931 $res = $ilDB->queryF(
932 'SELECT * FROM cp_package WHERE obj_id = %s AND c_identifier = %s',
933 array(
'integer',
'text'),
934 array($this->packageId, $this->packageName)
936 if($num_rows = $ilDB->numRows(
$res))
938 $query =
'UPDATE cp_package ' 939 .
'SET persistprevattempts = %s, c_settings = %s ' 940 .
'WHERE obj_id = %s AND c_identifier= %s';
943 array(
'integer',
'text',
'integer',
'text'),
944 array(0, NULL, $this->packageId, $this->packageName)
949 $query =
'INSERT INTO cp_package (obj_id, c_identifier, persistprevattempts, c_settings) ' 950 .
'VALUES (%s, %s, %s, %s)';
953 array(
'integer',
'text',
'integer',
'text'),
954 array($this->packageId, $this->packageName, 0, NULL)
959 $this->
dbImport($node->documentElement);
962 case XML_ELEMENT_NODE:
963 if ($node->nodeName===
'manifest')
965 if ($node->getAttribute(
'uri')==
"")
968 $node->setAttribute(
'uri',
'md5:' . $this->packageHash);
972 $cp_node_id = $ilDB->nextId(
'cp_node');
974 $query =
'INSERT INTO cp_node (cp_node_id, slm_id, nodename) ' 975 .
'VALUES (%s, %s, %s)';
978 array(
'integer',
'integer',
'text'),
979 array($cp_node_id, $this->packageId, $node->nodeName)
982 $query =
'INSERT INTO cp_tree (child, depth, lft, obj_id, parent, rgt) ' 983 .
'VALUES (%s, %s, %s, %s, %s, %s)';
986 array(
'integer',
'integer',
'integer',
'integer',
'integer',
'integer'),
987 array($cp_node_id, $depth, $lft++, $this->packageId, $parent, 0)
992 $names = array(
'cp_node_id');
993 $values = array($cp_node_id);
994 $types = array(
'integer');
996 foreach ($node->attributes as $attr)
998 switch(strtolower($attr->name))
1000 case 'completionsetbycontent': $names[] =
'completionbycontent';
break;
1001 case 'objectivesetbycontent': $names[] =
'objectivebycontent';
break;
1002 case 'type': $names[] =
'c_type';
break;
1003 case 'mode': $names[] =
'c_mode';
break;
1004 case 'language': $names[] =
'c_language';
break;
1005 case 'condition': $names[] =
'c_condition';
break;
1006 case 'operator': $names[] =
'c_operator';
break;
1007 case 'condition': $names[] =
'c_condition';
break;
1008 case 'readnormalizedmeasure': $names[] =
'readnormalmeasure';
break;
1009 case 'writenormalizedmeasure': $names[] =
'writenormalmeasure';
break;
1010 case 'minnormalizedmeasure': $names[] =
'minnormalmeasure';
break;
1011 case 'primary': $names[] =
'c_primary';
break;
1012 case 'minnormalizedmeasure': $names[] =
'minnormalmeasure';
break;
1013 case 'persistpreviousattempts': $names[] =
'persistprevattempts';
break;
1014 case 'identifier': $names[] =
'c_identifier';
break;
1015 case 'settings': $names[] =
'c_settings';
break;
1016 case 'activityabsolutedurationlimit': $names[] =
'activityabsdurlimit';
break;
1017 case 'activityexperienceddurationlimit': $names[] =
'activityexpdurlimit';
break;
1018 case 'attemptabsolutedurationlimit': $names[] =
'attemptabsdurlimit';
break;
1019 case 'measuresatisfactionifactive': $names[] =
'measuresatisfactive';
break;
1020 case 'objectivemeasureweight': $names[] =
'objectivemeasweight';
break;
1021 case 'requiredforcompleted': $names[] =
'requiredcompleted';
break;
1022 case 'requiredforincomplete': $names[] =
'requiredincomplete';
break;
1023 case 'requiredfornotsatisfied': $names[] =
'requirednotsatisfied';
break;
1024 case 'rollupobjectivesatisfied': $names[] =
'rollupobjectivesatis';
break;
1025 case 'rollupprogresscompletion': $names[] =
'rollupprogcompletion';
break;
1026 case 'usecurrentattemptobjectiveinfo': $names[] =
'usecurattemptobjinfo';
break;
1027 case 'usecurrentattemptprogressinfo': $names[] =
'usecurattemptproginfo';
break;
1028 default: $names[] = strtolower($attr->name);
break;
1031 if(in_array($names[count($names) - 1],
1032 array(
'flow',
'completionbycontent',
1033 'objectivebycontent',
'rollupobjectivesatis',
1034 'tracked',
'choice',
1035 'choiceexit',
'satisfiedbymeasure',
1036 'c_primary',
'constrainchoice',
1037 'forwardonly',
'global_to_system',
1038 'writenormalmeasure',
'writesatisfiedstatus',
1039 'readnormalmeasure',
'readsatisfiedstatus',
1040 'preventactivation',
'measuresatisfactive',
1041 'reorderchildren',
'usecurattemptproginfo',
1042 'usecurattemptobjinfo',
'rollupprogcompletion',
1043 'read_shared_data',
'write_shared_data',
1044 'shared_data_global_to_system',
'completedbymeasure')))
1046 if($attr->value ==
'true')
1048 else if ($attr->value ==
'false')
1051 $values[] = (int)$attr->value;
1055 $values[] = $attr->value;
1058 if( in_array($names[count($names) - 1],
1059 array(
'objectivesglobtosys',
'attemptlimit',
1060 'flow',
'completionbycontent',
1061 'objectivebycontent',
'rollupobjectivesatis',
1062 'tracked',
'choice',
1063 'choiceexit',
'satisfiedbymeasure',
1064 'c_primary',
'constrainchoice',
1065 'forwardonly',
'global_to_system',
1066 'writenormalmeasure',
'writesatisfiedstatus',
1067 'readnormalmeasure',
'readsatisfiedstatus',
1068 'preventactivation',
'measuresatisfactive',
1069 'reorderchildren',
'usecurattemptproginfo',
1070 'usecurattemptobjinfo',
'rollupprogcompletion',
1071 'read_shared_data',
'write_shared_data',
1072 'shared_data_global_to_system')))
1073 $types[] =
'integer';
1074 else if ( in_array($names[count($names) - 1],
1075 array(
'jsdata',
'xmldata',
'activitytree',
'data')))
1077 else if ( in_array($names[count($names) - 1],
1078 array(
'objectivemeasweight')))
1084 if($node->nodeName===
'datamap')
1086 $names[] =
'slm_id';
1088 $types[] =
'integer';
1090 $names[] =
'sco_node_id';
1091 $values[] = $parent;
1092 $types[] =
'integer';
1096 $insert_data = array();
1097 foreach($names as $key => $db_field)
1099 $insert_data[$db_field] = array($types[$key], trim($values[$key]));
1101 $ilDB->insert(
'cp_'.strtolower($node->nodeName), $insert_data);
1103 $node->setAttribute(
'foreignId', $cp_node_id);
1104 $this->idmap[$node->getAttribute(
'id')] = $cp_node_id;
1107 foreach($node->childNodes as $child)
1109 $this->
dbImport($child, $lft, $depth + 1, $cp_node_id);
1113 $query =
'UPDATE cp_tree SET rgt = %s WHERE child = %s';
1116 array(
'integer',
'integer'),
1117 array($lft++, $cp_node_id)
1142 $ilDB->insert(
'cp_package', array(
1143 'obj_id' => array(
'integer', $this->packageId),
1144 'xmldata' => array(
'clob', $x->asXML()),
1145 'jsdata' => array(
'clob', json_encode($j))
1154 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004DeleteData.php");
1157 include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
1166 $cp_nodes = array();
1168 $res = $ilDB->queryF(
1169 'SELECT cp_node.cp_node_id FROM cp_node WHERE cp_node.slm_id = %s',
1171 array($this->packageId)
1175 $cp_nodes[] =
$data[
'cp_node_id'];
1179 foreach(self::$elements[
'cp'] as
$t)
1183 $in = $ilDB->in(strtolower($t).
'.cp_node_id', $cp_nodes,
false,
'integer');
1184 $ilDB->manipulate(
'DELETE FROM '.strtolower($t).
' WHERE '.
$in);
1189 'DELETE FROM cp_tree WHERE cp_tree.obj_id = %s',
1191 array($this->packageId)
1195 'DELETE FROM cp_node WHERE cp_node.slm_id = %s',
1197 array($this->packageId)
1202 'DELETE FROM cp_package WHERE cp_package.obj_id = %s',
1204 array($this->packageId)
1215 public function transform($inputdoc, $xslfile, $outputpath = null)
1218 $xsl->async =
false;
1219 if (!@$xsl->load($xslfile))
1221 die(
'ERROR: load StyleSheet ' . $xslfile);
1223 $prc =
new XSLTProcessor;
1224 $prc->registerPHPFunctions();
1225 $r = @$prc->importStyleSheet($xsl);
1226 if (
false===@$prc->importStyleSheet($xsl))
1228 die(
'ERROR: importStyleSheet ' . $xslfile);
1232 file_put_contents($outputpath, $prc->transformToXML($inputdoc));
1236 return $prc->transformToDoc($inputdoc);
1242 libxml_use_internal_errors(
true);
1243 $return = @$doc->schemaValidate($schema);
1247 LIBXML_ERR_ERROR =>
'Error',
1248 LIBXML_ERR_FATAL =>
'Fatal Error' 1250 foreach (libxml_get_errors() as $error)
1252 $level = $levels[$error->level];
1255 $message = trim($error->message);
1256 $this->diagnostic[] =
"XSLT $level (Line $error->line) $message";
1259 libxml_clear_errors();
1261 libxml_use_internal_errors(
false);
1268 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004DeleteData.php");
Class ilSCORM2004PageNode.
dbImportSco($slm, $sco, $asset=false)
static putInTree($a_obj, $a_parent_id="", $a_target_node_id="")
put this object into content object tree
dbImportLM($node, $parent_id="", $a_import_sequencing=false)
transform($inputdoc, $xslfile, $outputpath=null)
jsonNode($node, &$sink)
Helper for UploadAndImport Recursively copies values from XML into PHP array for export as json Eleme...
dbImport($node, &$lft=1, $depth=1, $parent=0)
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
startParsing()
stores xml data in array
_writeDescription($a_obj_id, $a_desc)
write description to db (static)
il_import($packageFolder, $packageId, $ilias, $validate, $reimport=false)
Imports an extracted SCORM 2004 module from ilias-data dir into database.
SCORM 13 Metadata importer.
static getDir($a_dir, $a_rec=false, $a_sub_dir="")
get directory
Class ilSCORM2004Chapter.
dbAddNew()
add new sahs and package record
setSequencingInfo($a_node, $a_seq_info, $a_import_sequencing, $a_fix_obj_id="")
Save sequencing ingo.
exportXML()
Export as internal XML.
removeCMIDataForPackage($packageId)
il_importAss($packageId, $sco_id, $packageFolder)
Imports an extracted SCORM 2004 module from ilias-data dir into database.
utf8_encode($string)
utf8-encodes string if it is not a valid utf8-string.
setProgress($progress, $msg='')
static _removeTrackingDataForUser($user_id)
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
il_importLM($slm, $packageFolder, $a_import_sequencing=false)
Class ilSCORM2004Sequencing.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
removeCMIDataForUser($user_id)
static _lookupType($a_id, $a_reference=false)
lookup object type
setTreeTablePK($a_column_name)
set column containing primary key in tree table public
_refreshStatus($a_obj_id, $a_users=null)
Set dirty.
static renameExecutables($a_dir)
Rename uploaded executables for security reasons.
Class ilObjSCORM2004LearningModule.
recursive_dirscan($dir, &$arr)
Recursively scans a given directory and writes path and filename into referenced array.
__construct($packageId=null)
il_importSco($packageId, $sco_id, $packageFolder)
Imports an extracted SCORM 2004 module from ilias-data dir into database.
importGlossary($slm, $packageFolder)