11require_once 
"./Modules/Scorm2004/classes/ilSCORM13Package.php";
 
   12require_once 
"./Modules/Scorm2004/classes/class.ilSCORM2004Chapter.php";
 
   13require_once 
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php";
 
   14require_once 
"./Modules/Scorm2004/classes/class.ilSCORM2004PageNode.php";
 
   15require_once 
"./Modules/Scorm2004/classes/adlparser/SeqTreeBuilder.php";
 
   16require_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'];             
 
   92                $pg_set = 
$ilDB->queryF(
'SELECT * FROM cp_package WHERE obj_id  = %s', array(
'integer'), array(
$packageId));
 
   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"');
 
  133                        'SELECT xmldata FROM cp_package WHERE obj_id = %s', 
 
  135                        array($this->packageId)
 
  154                if ($reimport === 
true) {
 
  161                $this->imsmanifestFile = $this->packageFolder . 
'/' . 
'imsmanifest.xml';
 
  163                $this->imsmanifest = 
new DOMDocument;
 
  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;
 
  259                foreach($x->sequencing as $s)
 
  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';
 
  309                $this->imsmanifest = 
new DOMDocument;
 
  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))
 
  326                        $scodoc = 
new DOMDocument;
 
  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';
 
  376                $this->imsmanifest = 
new DOMDocument;
 
  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';
 
  439                $this->imsmanifest = 
new DOMDocument;
 
  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());
 
  506                                $this->slm_tree->setTreeTablePK(
"slm_id");
 
  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());
 
  535                                                $mdxml->startParsing();
 
  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());
 
  570                                                $mdxml->startParsing();
 
  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)
 
  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());
 
  733                        $mdxml->startParsing();
 
  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());
 
  750                                $mdxml->startParsing();
 
  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());
 
  771                                                $mdxml->startParsing();
 
  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();
 
  897                        $ddoc = 
new DOMDocument();
 
  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:
 
  932                                        'SELECT * FROM cp_package WHERE obj_id = %s AND c_identifier = %s',
 
  933                                        array(
'integer', 
'text'),
 
  934                                        array($this->packageId, $this->packageName)
 
  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();
 
 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)
 
 1217                $xsl = 
new DOMDocument;
 
 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");
 
utf8_encode($string)
utf8-encodes string if it is not a valid utf8-string.
recursive_dirscan($dir, &$arr)
Recursively scans a given directory and writes path and filename into referenced array.
_refreshStatus($a_obj_id, $a_users=null)
Set dirty.
Class ilObjSCORM2004LearningModule.
_writeDescription($a_obj_id, $a_desc)
write description to db (static)
static _lookupType($a_id, $a_reference=false)
lookup object type
SCORM 13 Metadata importer.
dbAddNew()
add new sahs and package record
setSequencingInfo($a_node, $a_seq_info, $a_import_sequencing, $a_fix_obj_id="")
Save sequencing ingo.
transform($inputdoc, $xslfile, $outputpath=null)
__construct($packageId=null)
il_importSco($packageId, $sco_id, $packageFolder)
Imports an extracted SCORM 2004 module from ilias-data dir into database.
il_import($packageFolder, $packageId, $ilias, $validate, $reimport=false)
Imports an extracted SCORM 2004 module from ilias-data dir into database.
exportXML()
Export as internal XML.
jsonNode($node, &$sink)
Helper for UploadAndImport Recursively copies values from XML into PHP array for export as json Eleme...
dbImportSco($slm, $sco, $asset=false)
importGlossary($slm, $packageFolder)
static _removeTrackingDataForUser($user_id)
dbImportLM($node, $parent_id="", $a_import_sequencing=false)
il_importLM($slm, $packageFolder, $a_import_sequencing=false)
il_importAss($packageId, $sco_id, $packageFolder)
Imports an extracted SCORM 2004 module from ilias-data dir into database.
dbImport($node, &$lft=1, $depth=1, $parent=0)
setProgress($progress, $msg='')
Class ilSCORM2004Chapter.
removeCMIDataForPackage($packageId)
removeCMIDataForUser($user_id)
static putInTree($a_obj, $a_parent_id="", $a_target_node_id="")
put this object into content object tree
Class ilSCORM2004PageNode.
Class ilSCORM2004Sequencing.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
static getDir($a_dir, $a_rec=false, $a_sub_dir="")
get directory
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static renameExecutables($a_dir)
Rename uploaded executables for security reasons.