5require_once 
"./Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php";
 
   20        const CONVERT_XSL   = 
'./Modules/Scorm2004/templates/xsl/op/scorm12To2004.xsl';
 
   21        const WRAPPER_HTML  = 
'./Modules/Scorm2004/scripts/converter/GenericRunTimeWrapper1.0_aadlc/GenericRunTimeWrapper.htm';
 
   22        const WRAPPER_JS        = 
'./Modules/Scorm2004/scripts/converter/GenericRunTimeWrapper1.0_aadlc/SCOPlayerWrapper.js';
 
   33                parent::__construct($a_id,$a_call_by_reference);
 
   43                $this->import_sequencing = $a_val;
 
   53                return $this->import_sequencing;
 
   78                if (!function_exists(
'json_encode') ||  !function_exists(
'json_decode') ) {
 
   79                        $ilias->raiseError(
$lng->txt(
'scplayer_phpmysqlcheck'),
$ilias->error_obj->WARNING);
 
   82                $needs_convert = 
false;
 
   89                $check_for_manifest_file = is_file($manifest_file);
 
   94                if (!$check_for_manifest_file)
 
   96                        $this->
ilias->raiseError($this->lng->txt(
"Manifestfile $manifest_file not found!"), $this->ilias->error_obj->MESSAGE);
 
  101                if ($check_for_manifest_file)
 
  103                        $manifest_file_array = file($manifest_file);
 
  105                        foreach($manifest_file_array as $mfa)
 
  108                                if (@iconv(
'UTF-8', 
'UTF-8', $mfa) != $mfa) 
 
  110                                        $needs_convert = 
true;
 
  118                        $estimated_manifest_filesize = filesize($manifest_file) * 2;
 
  122                        $check_disc_free = 2;
 
  130                        if ($check_for_manifest_file && ($check_disc_free > 1))
 
  134                                if (!copy($manifest_file, $manifest_file.
".old"))
 
  136                                        echo 
"Failed to copy $manifest_file...<br>\n";
 
  141                                $f_write_handler = fopen($manifest_file.
".new", 
"w");
 
  142                                $f_read_handler = fopen($manifest_file.
".old", 
"r");
 
  143                                while (!feof($f_read_handler))
 
  145                                        $zeile = fgets($f_read_handler);
 
  147                                        fputs($f_write_handler, utf8_encode($zeile));
 
  149                                fclose($f_read_handler);
 
  150                                fclose($f_write_handler);
 
  153                                if (!copy($manifest_file.
".new", $manifest_file))
 
  155                                        echo 
"Failed to copy $manifest_file...<br>\n";
 
  158                                if (!@is_file($manifest_file))
 
  160                                        $this->
ilias->raiseError($this->lng->txt(
"cont_no_manifest"),
 
  161                                        $this->ilias->error_obj->WARNING);
 
  168                                if (!($check_disc_free > 1))
 
  169                                        $this->
ilias->raiseError($this->lng->txt(
"Not enough space left on device!"),$this->ilias->error_obj->MESSAGE);
 
  177                        $hmani = fopen($manifest_file, 
"r");
 
  178                        $start = fread($hmani, 3);
 
  179                        if (strtolower(bin2hex(
$start)) == 
"efbbbf")
 
  181                                $f_write_handler = fopen($manifest_file.
".new", 
"w");
 
  182                                while (!feof($hmani))
 
  184                                        $n = fread($hmani, 900);
 
  185                                        fputs($f_write_handler, 
$n);
 
  187                                fclose($f_write_handler);
 
  191                                if (!copy($manifest_file.
".new", $manifest_file))
 
  193                                        echo 
"Failed to copy $manifest_file...<br>\n";
 
  203                if (
$_POST[
"validate"] == 
"y")
 
  208                                        $this->
ilias->error_obj->WARNING);
 
  217                include_once (
"./Modules/Scorm2004/classes/ilSCORM13Package.php");
 
  232                $out = file_get_contents($this->imsmanifestFile);
 
  233                $check =
'/xmlns="http:\/\/www.imsglobal.org\/xsd\/imscp_v1p1"/';
 
  234                $replace=
"xmlns=\"http://www.imsproject.org/xsd/imscp_rootv1p1p2\"";
 
  235                $out=preg_replace($check, $replace, 
$out);
 
  236                file_put_contents($this->imsmanifestFile, 
$out);
 
  243                ##check manifest-file for version. Check for schemaversion as this is a required element for SCORM 2004 
  244                ##accept 2004 3rd Edition an CAM 1.3 as valid schemas 
  248                $this->imsmanifestFile=$manifest;
 
  249                $doc = 
new DomDocument();
 
  253                $doc->load($this->imsmanifestFile);
 
  254                $elements = $doc->getElementsByTagName(
"schemaversion");
 
  255                $schema=$elements->item(0)->nodeValue;
 
  256                if (strtolower(trim(
$schema))==
"cam 1.3" || strtolower(trim(
$schema))==
"2004 3rd edition" || strtolower(trim(
$schema))==
"2004 4th edition") {
 
  258                        $this->converted=
false;
 
  262                        $this->converted=
true;
 
  266                        $organizations = $doc->getElementsByTagName(
"organizations");
 
  268                        if ($organizations->item(0)==
null) die(
"organizations missing in manifest");
 
  269                        $default=$organizations->item(0)->getAttribute(
"default");
 
  270                        if ($default==
"" || $default==
null) {
 
  272                                $organization = $doc->getElementsByTagName(
"organization");
 
  273                                $ident=$organization->item(0)->getAttribute(
"identifier");
 
  274                                $organizations->item(0)->setAttribute(
"default",$ident);
 
  281                        $wrapperdir=$this->packageFolder.
"/GenericRunTimeWrapper1.0_aadlc";
 
  283                        copy(self::WRAPPER_HTML,$wrapperdir.
"/GenericRunTimeWrapper.htm");
 
  284                        copy(self::WRAPPER_JS,$wrapperdir.
"/SCOPlayerWrapper.js");
 
  287                        $this->backupManifest=$this->packageFolder.
"/imsmanifest.xml.back";
 
  288                        $ret=copy($this->imsmanifestFile,$this->backupManifest);
 
  291                        $this->totransform = $doc;
 
  292                        $ilLog->write(
"SCORM: about to transform to SCORM 2004");
 
  294                        $xsl = 
new DOMDocument;
 
  296                        $xsl->load(self::CONVERT_XSL);
 
  297                        $prc = 
new XSLTProcessor;
 
  298                        $r = @$prc->importStyleSheet($xsl);
 
  300                        file_put_contents($this->imsmanifestFile, $prc->transformToXML($this->totransform));
 
  302                        $ilLog->write(
"SCORM: Transformation completed");
 
  320                        SELECT MAX(c_timestamp) last_access  
  321                        FROM cmi_node, cp_node  
  322                        WHERE cmi_node.cp_node_id = cp_node.cp_node_id  
  323                        AND cp_node.slm_id = %s 
  325                        GROUP BY c_timestamp',
 
  326                array(
'integer', 
'integer'),
 
  327                array($a_obj_id, $a_usr_id));
 
  331                        return $row[
"last_access"];
 
  387                include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004DeleteData.php");
 
  388                include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");        
 
  389                include_once(
"./Services/Tracking/classes/class.ilChangeEvent.php");
 
  392                foreach($a_users as $user)
 
  407                $sco_set = 
$ilDB->queryF(
' 
  408                SELECT DISTINCT cmi_node.cp_node_id id 
  409                FROM cp_node, cmi_node  
  411                AND cp_node.cp_node_id = cmi_node.cp_node_id  
  412                ORDER BY cmi_node.cp_node_id ',
 
  414                array($this->
getId()));
 
  418                while($sco_rec = 
$ilDB->fetchAssoc($sco_set))
 
  420                        $item[
'id']=$sco_rec[
"id"];
 
  422                        $items[count($items)] =$item;
 
  437                $val_set = 
$ilDB->queryF(
 
  438                        'SELECT cp_node_id FROM cp_node  
  440                        AND cp_node.slm_id = %s',
 
  441                        array(
'text', 
'integer'),
 
  442                        array(
'item',$this->
getId())
 
  444                while($val_rec = 
$ilDB->fetchAssoc($val_set))
 
  446                        array_push($scos,$val_rec[
'cp_node_id']);
 
  449                foreach ($scos as $sco) 
 
  451                        $data_set = 
$ilDB->queryF(
' 
  452                                SELECT c_timestamp last_access, total_time, success_status, completion_status, 
  453                                           c_raw, scaled, cp_node_id 
  455                                WHERE cp_node_id = %s 
  457                                array(
'integer',
'integer'),
 
  458                                array($sco,$a_user_id)
 
  461                        while($data_rec = 
$ilDB->fetchAssoc($data_set))
 
  463                                if ($data_rec[
"success_status"]!=
"" && $data_rec[
"success_status"]!=
"unknown") {
 
  464                                        $status = $data_rec[
"success_status"];
 
  466                                        if ($data_rec[
"completion_status"]==
"") {
 
  469                                                $status = $data_rec[
"completion_status"];
 
  476                                        if ($data_rec[
"c_raw"] != 
null) {
 
  477                                                $score = $data_rec[
"c_raw"];
 
  478                                                if ($data_rec[
"scaled"] != 
null) $score .= 
" = ";
 
  480                                        if ($data_rec[
"scaled"] != 
null) $score .= ($data_rec[
"scaled"]*100).
"%";
 
  483                                        $data[] = array(
"sco_id"=>$data_rec[
"cp_node_id"],
 
  484                                                "score" => $score, 
"time" => $time, 
"status" => $status,
"last_access"=>$last_access,
"title"=>
$title);
 
  489                                        $data[$data_rec[
"cp_node_id"]] = $data_rec;
 
  503                $val_set = 
$ilDB->queryF(
'SELECT package_attempts FROM sahs_user WHERE user_id = %s AND obj_id = %s',
 
  504                array(
'integer',
'integer'),
 
  505                array($a_user_id, $this->
getId()));
 
  507                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  509                if ($val_rec[
"package_attempts"] == 
null) {
 
  510                        $val_rec[
"package_attempts"]=
"";
 
  513                return $val_rec[
"package_attempts"];
 
  522                $val_set = 
$ilDB->queryF(
'SELECT module_version FROM sahs_user WHERE user_id = %s AND obj_id = %s',
 
  523                array(
'integer',
'integer'),
 
  524                array($a_user_id, $this->
getId()));
 
  526                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  528                if ($val_rec[
"module_version"] == 
null) {
 
  529                        $val_rec[
"module_version"]=
"";
 
  531                return $val_rec[
"module_version"];
 
  545                include_once(
"./Services/Tracking/classes/class.ilLPStatus.php");
 
  548                include_once 
'./Services/Object/classes/class.ilObjectLP.php';
 
  550                $collection = $olp->getCollectionInstance();
 
  553                        $scos = $collection->getItems();
 
  556                $fhandle = fopen($a_file, 
"r");
 
  558                $obj_id = $this->getID();
 
  560                $usersToDelete = array();
 
  561                $fields = fgetcsv($fhandle, 4096, 
';');
 
  562                while(($csv_rows = fgetcsv($fhandle, 4096, 
";")) !== FALSE) {
 
  563                        $data = array_combine($fields, $csv_rows);
 
  568                        if (
$data[
"user"] && is_numeric(
$data[
"user"])) $user_id = 
$data[
"user"];
 
  572                                        $date_ex = explode(
'.', 
$data[
'Date']);
 
  573                                        $last_access = implode(
'-', array($date_ex[2], $date_ex[1], $date_ex[0]));
 
  575                                if (
$data[
'LastAccess']) {
 
  576                                        $last_access = 
$data[
'LastAccess'];
 
  581                                if (
$data[
"Status"]) {
 
  582                                        if (is_numeric(
$data[
"Status"])) $status = 
$data[
"Status"];
 
  588                                if(
$data[
"Attempts"]) $attempts = 
$data[
"Attempts"];
 
  590                                $percentage_completed = 0;
 
  592                                else if (
$data[
'percentageCompletedSCOs']) $percentage_completed = 
$data[
'percentageCompletedSCOs'];
 
  594                                $sco_total_time_sec = 
null;
 
  595                                if (
$data[
'SumTotal_timeSeconds']) $sco_total_time_sec = 
$data[
'SumTotal_timeSeconds'];
 
  598                                        $usersToDelete[] = $user_id;
 
  600                                        $this->
importSuccessForSahsUser($user_id, $last_access, $status, $attempts, $percentage_completed, $sco_total_time_sec);
 
  605                                        foreach ($scos as $sco_id) 
 
  608                                                        SELECT completion_status, success_status, user_id FROM cmi_node WHERE cp_node_id = %s AND user_id  = %s',
 
  609                                                        array(
'integer',
'integer'),
 
  610                                                        array($sco_id,$user_id)
 
  615                                                        $nextId = 
$ilDB->nextId(
'cmi_node');
 
  616                                                        $val_set = 
$ilDB->manipulateF(
'INSERT INTO cmi_node  
  617                                                        (cp_node_id,user_id,completion_status,c_timestamp,cmi_node_id)  
  618                                                        VALUES(%s,%s,%s,%s,%s)',
 
  619                                                        array(
'integer',
'integer',
'text',
'timestamp',
'integer'),
 
  620                                                        array($sco_id,$user_id,
'completed',$last_access,$nextId));
 
  624                                                                if ( (
$row[
"completion_status"] == 
"completed" && 
$row[
"success_status"] != 
"failed") || 
$row[
"success_status"] == 
"passed") {
 
  625                                                                        if ($doUpdate != 
true) $doUpdate = 
false; 
 
  630                                                        if ($doUpdate == 
true) {
 
  631                                                                $ilDB->update(
'cmi_node',
 
  633                                                                                'completion_status'     => array(
'text', 
'completed'),
 
  634                                                                                'success_status'        => array(
'text', 
''),
 
  635                                                                                'suspend_data'          => array(
'text', 
''),
 
  636                                                                                'c_timestamp'           => array(
'timestamp', $last_access)
 
  639                                                                                'user_id'               => array(
'integer', $user_id),
 
  640                                                                                'cp_node_id'    => array(
'integer', $sco_id)
 
  653                if (count($usersToDelete)>0) {
 
  658                include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
 
  671            $aV = array(0, 0, 0, 0, 0, 0);
 
  674            if (strpos($str,
"P") != 0) {
 
  678                $aT =  array(
"Y", 
"M", 
"D", 
"H", 
"M", 
"S");
 
  681                $str = substr($str,1);
 
  682                for ($i = 0; $i < count($aT); $i++) {
 
  683                    if (strpos($str,
"T")===0) {
 
  684                        $str = substr($str,1);
 
  688                    $p = strpos($str,$aT[$i]);
 
  691                        if ($i == 1 && strpos($str,
"T") > -1 && strpos($str,
"T") < $p) {
 
  694                        if ($aT[$i] == 
"S") {
 
  695                            $aV[$i] = substr($str,0, $p);
 
  698                            $aV[$i] = intval(substr($str,0, $p));
 
  700                        if (!is_numeric($aV[$i])) {
 
  703                        } 
else if ($i > 2 && !$bTFound) {
 
  707                        $str = substr($str,$p + 1);
 
  711                if (!$bErr && strlen($str) != 0) {
 
  720            return $aV[0] * 3155760000 + $aV[1] * 262980000 + $aV[2] * 8640000 + $aV[3] * 360000 + $aV[4] * 6000 + round($aV[5] * 100);
 
  730                $val_set = 
$ilDB->queryF(
' 
  731                SELECT  cp_node.cp_node_id FROM cp_node,cp_resource,cp_item  
  732                WHERE   cp_item.cp_node_id = cp_node.cp_node_id  
  733                AND     cp_item.resourceid = cp_resource.id  
  736                AND cp_node.slm_id = %s ',
 
  737                array(
'text',
'text',
'integer'),
 
  738                array(
'sco',
'item',$this->
getId()));
 
  740                while ($val_rec = 
$ilDB->fetchAssoc($val_set))
 
  742                        array_push($scos,$val_rec[
'cp_node_id']);
 
  749                for ($i=0;$i<count($scos);$i++)
 
  752                        $val_set = 
$ilDB->queryF(
' 
  753                                SELECT * FROM cmi_node  
  756                                AND (completion_status=%s OR success_status=%s))',
 
  757                                array(
'integer',
'integer',
'text', 
'text'), 
 
  758                                array($a_user,$scos[$i],
'completed',
'passed')
 
  761                        if (
$ilDB->numRows($val_set) > 0) {
 
  763                                $key = array_search($scos[$i], $scos_c); 
 
  764                                unset ($scos_c[$key]);
 
  769                if (count($scos_c) == 0) {
 
  789                $val_set = 
$ilDB->queryF(
' 
  790                SELECT cp_node.cp_node_id FROM cp_node,cp_resource,cp_item  
  791                WHERE cp_item.cp_node_id = cp_node.cp_node_id  
  792                AND cp_item.resourceid = cp_resource.id  
  795                AND cp_node.slm_id =  %s',
 
  796                array(
'text',
'text',
'integer'), array(
'sco' ,
'item',$a_id));
 
  797                while ($val_rec = 
$ilDB->fetchAssoc($val_set)) 
 
  799                        array_push($scos,$val_rec[
'cp_node_id']);
 
  805                for ($i=0;$i<count($scos);$i++)
 
  808                        $val_set = 
$ilDB->queryF(
' 
  809                                SELECT * FROM cmi_node  
  812                                AND (completion_status = %s OR success_status = %s))',
 
  813                        array(
'integer',
'integer',
'text',
'text'),
 
  814                        array($a_user,$scos[$i],
'completed',
'passed'));
 
  816                        if (
$ilDB->numRows($val_set) > 0) 
 
  819                                $key = array_search($scos[$i], $scos_c); 
 
  820                                unset ($scos_c[$key]);
 
  825                if (count($scos_c) == 0) {
 
  845                $val_set = 
$ilDB->queryF(
"SELECT cp_node.cp_node_id FROM cp_node,cp_resource,cp_item WHERE".
 
  846                        " cp_item.cp_node_id=cp_node.cp_node_id AND cp_item.resourceId = cp_resource.id AND scormType='sco' AND nodeName='item' AND cp_node.slm_id = %s GROUP BY cp_node.cp_node_id",
 
  850                while ($val_rec = 
$ilDB->fetchAssoc($val_set)) 
 
  852                        array_push($scos,$val_rec[
'cp_node_id']);
 
  856                for ($i=0;$i<count($scos);$i++)
 
  858                        $val_set = 
$ilDB->queryF(
"SELECT scaled FROM cmi_node WHERE (user_id = %s AND cp_node_id = %s)",
 
  859                                array(
'integer', 
'integer'),
 
  860                                array($a_user, $scos[$i])
 
  862                        if ($val_set->numRows()>0) 
 
  864                                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  865                                if ($val_rec[
'scaled']!=NULL) {
 
  867                                        $scaled = $val_rec[
'scaled'];
 
  871                $retVal = ($set == 1) ? $scaled : 
null ;
 
  885                $item_set = 
$ilDB->queryF(
' 
  886                        SELECT cp_item.*  FROM cp_node, cp_item WHERE slm_id = %s 
  887                        AND cp_node.cp_node_id = cp_item.cp_node_id  
  888                        ORDER BY cp_node.cp_node_id ',
 
  894                while ($item_rec = 
$ilDB->fetchAssoc($item_set))
 
  897                        $s2 = 
$ilDB->queryF(
' 
  898                                SELECT cp_resource.* FROM cp_node, cp_resource  
  900                                AND cp_node.cp_node_id = cp_resource.cp_node_id  
  901                                AND cp_resource.id = %s ',
 
  902                                array(
'integer',
'text'),
 
  903                                array($a_obj_id,$item_rec[
"resourceid"])
 
  910                                if (
$res[
"scormtype"] == 
"sco")
 
  912                                        $items[] = array(
"id" => $item_rec[
"cp_node_id"],
 
  913                                                "title" => $item_rec[
"title"]);
 
  925                $status_set = 
$ilDB->queryF(
' 
  926                        SELECT * FROM cmi_gobjective  
  928                        AND objective_id = %s 
  930                        array(
'integer',
'text',
'integer'),
 
  931                        array($a_obj_id,
'course_overall_status',$a_user_id)
 
  934                if ($status_rec = 
$ilDB->fetchAssoc($status_set))
 
  936                        return $status_rec[
"status"];
 
  947                $status_set = 
$ilDB->queryF(
' 
  948                        SELECT * FROM cmi_gobjective  
  950                        AND objective_id = %s 
  952                        array(
'integer',
'text',
'integer'),
 
  953                        array($a_obj_id,
'course_overall_status',$a_user_id)
 
  956                if ($status_rec = 
$ilDB->fetchAssoc($status_set))               
 
  958                        return $status_rec[
"satisfied"];
 
  968                $status_set = 
$ilDB->queryF(
' 
  969                        SELECT * FROM cmi_gobjective  
  971                        AND objective_id = %s 
  973                        array(
'integer',
'text',
'integer'),
 
  974                        array($a_obj_id,
'course_overall_status',$a_user_id)
 
  977                if ($status_rec = 
$ilDB->fetchAssoc($status_set))               
 
  979                        return $status_rec[
"measure"];
 
  990                        SELECT * FROM cp_item 
  991                        WHERE cp_node_id = %s',
 
  996                if ($i = 
$ilDB->fetchAssoc(
$r))
 
 1008                include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Tree.php");
 
 1014                $this->slm_tree->addTree($this->
getId(), 1);
 
 1017                include_once (
"./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Sequencing.php");
 
 1019                $seq_info->insert();
 
 1025                $this->slm_tree->setTreeTablePK(
"slm_id");
 
 1026                $this->slm_tree->setTableNames(
'sahs_sc13_tree', 
'sahs_sc13_tree_node');
 
 1027                return $this->slm_tree;
 
 1033                $ilTabs->setTabActive(
"sequencing");
 
 1035                include_once (
"./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Sequencing.php");
 
 1038                return $control_settings;
 
 1042                include_once (
"./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Sequencing.php");
 
 1048                $control_settings->insert();
 
 1064                $this->slm_tree->setTableNames(
'sahs_sc13_tree', 
'sahs_sc13_tree_node');
 
 1065                $this->slm_tree->setTreeTablePK(
"slm_id");
 
 1067                require_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004NodeFactory.php");
 
 1076                        $target_parent = $this->slm_tree->getParentId(
$target_id);
 
 1080                if ($source_obj->getType() == 
"page")
 
 1082                        if ($this->slm_tree->isInTree($source_obj->getId()))
 
 1084                                $node_data = $this->slm_tree->getNodeData($source_obj->getId());
 
 1087                                if ($movecopy == 
"move")
 
 1089                                        $parent_id = $this->slm_tree->getParentId($source_obj->getId());
 
 1090                                        $this->slm_tree->deleteTree($node_data);
 
 1112                                if(!$this->slm_tree->isInTree($source_obj->getId()))
 
 1119                                        else if ($as_subitem)           
 
 1123                                                $pg_childs = $this->slm_tree->getChildsByType($parent, 
"page");
 
 1124                                                if (count($pg_childs) != 0)
 
 1126                                                        $target_pos = $pg_childs[count($pg_childs) - 1][
"obj_id"];
 
 1132                                                $parent = $target_parent;
 
 1136                                        $this->slm_tree->insertNode($source_obj->getId(),
 
 1137                                                $parent, $target_pos);
 
 1158                if ($source_obj->getType() == 
"sco" || $source_obj->getType() == 
"ass")
 
 1161                        $source_node = $this->slm_tree->getNodeData($source_id);
 
 1162                        $subnodes = $this->slm_tree->getSubtree($source_node);
 
 1165                        foreach ($subnodes as $subnode)
 
 1180                                $pg_childs = $this->slm_tree->getChildsByType($target_parent, 
"page");
 
 1181                                if (count($pg_childs) != 0)
 
 1183                                        $target_pos = $pg_childs[count($pg_childs) - 1][
"obj_id"];
 
 1186                        else if ($as_subitem)           
 
 1190                                $childs = $this->slm_tree->getChilds($target_parent);
 
 1191                                if (count($childs) != 0)
 
 1193                                        $target_pos = $childs[count($childs) - 1][
"obj_id"];
 
 1198                        if ($movecopy == 
"move")
 
 1200                                $this->slm_tree->deleteTree($source_node);
 
 1209                        if (!$this->slm_tree->isInTree($source_id))
 
 1211                                $this->slm_tree->insertNode($source_id, $target_parent, $target_pos);
 
 1214                                if ($movecopy == 
"move")
 
 1216                                        foreach ($subnodes as $node)
 
 1218                                                if($node[
"obj_id"] != $source_id)
 
 1220                                                        $this->slm_tree->insertNode($node[
"obj_id"], $node[
"parent"]);
 
 1231                if ($source_obj->getType() == 
"chap")
 
 1234                        $source_node = $this->slm_tree->getNodeData($source_id);
 
 1235                        $subnodes = $this->slm_tree->getSubtree($source_node);
 
 1238                        foreach ($subnodes as $subnode)
 
 1259                        else if ($as_subitem)           
 
 1263                                $childs = $this->slm_tree->getChilds($target_parent);
 
 1264                                if (count($childs) != 0)
 
 1266                                        $target_pos = $childs[count($childs) - 1][
"obj_id"];
 
 1271                        if ($movecopy == 
"move")
 
 1273                                $this->slm_tree->deleteTree($source_node);
 
 1282                        if (!$this->slm_tree->isInTree($source_id))
 
 1284                                $this->slm_tree->insertNode($source_id, $target_parent, $target_pos);
 
 1287                                if ($movecopy == 
"move")
 
 1289                                        foreach ($subnodes as $node)
 
 1291                                                if($node[
"obj_id"] != $source_id)
 
 1293                                                        $this->slm_tree->insertNode($node[
"obj_id"], $node[
"parent"]);
 
 1310                require_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Export.php");
 
 1312                $export = 
new ilSCORM2004Export($this);
 
 1313                foreach ($export->getSupportedExportTypes() as 
$type)
 
 1315                        $dir = $export->getExportDirectoryForType(
$type);
 
 1317                        if (!@is_dir($dir) or !is_writeable($dir))
 
 1325                        while ($entry = $cdir->read())
 
 1327                                if ($entry != 
"." and
 
 1330                                        preg_match(
"~^[0-9]{10}_{2}[0-9]+_{2}(".$this->
getType().
"_)*[0-9]+\.zip\$~", $entry) or
 
 1331                                        preg_match(
"~^[0-9]{10}_{2}[0-9]+_{2}(".$this->
getType().
"_)*[0-9]+\.pdf\$~", $entry) or
 
 1332                                        preg_match(
"~^[0-9]{10}_{2}[0-9]+_{2}(".$this->
getType().
"_)*[0-9]+\.iso\$~", $entry)
 
 1335                                        $file[$entry.$type] = array(
"type" => 
$type, 
"file" => $entry,
 
 1336                                                "size" => filesize($dir.
"/".$entry));
 
 1360                $metadata_xml = $a_xml_writer->xmlDumpMem(
false);
 
 1361                $a_xml_writer->_XmlWriter;
 
 1363                $xsl = file_get_contents(
"./Modules/Scorm2004/templates/xsl/metadata.xsl");
 
 1364                $args = array( 
'/_xml' => $metadata_xml , 
'/_xsl' => $xsl );
 
 1366                $output = xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",NULL,$args,NULL);
 
 1368                file_put_contents($a_target_dir.
'/indexMD.xml',
$output);
 
 1374                        include_once(
"./Modules/Glossary/classes/class.ilObjGlossary.php");
 
 1375                        include_once(
"./Modules/Glossary/classes/class.ilGlossaryExport.php");
 
 1378                        $glo_xml_writer->xmlSetDtdDef(
"<!DOCTYPE ContentObject SYSTEM \"http://www.ilias.de/download/dtd/ilias_co_3_7.dtd\">");
 
 1380                        $glo_xml_writer->xmlHeader();
 
 1384                        $glos->exportXML($glo_xml_writer,$glos_export->getInstId(), $a_target_dir.
"/glossary", $expLog);
 
 1385                        $glo_xml_writer->xmlDumpFile($a_target_dir.
"/glossary/glossary.xml");
 
 1386                        $glo_xml_writer->_XmlWriter;
 
 1391                $a_xml_writer->
xmlSetDtdDef(
"<!DOCTYPE ContentObject SYSTEM \"http://www.ilias.de/download/dtd/ilias_co_3_7.dtd\">");
 
 1394                $a_xml_writer->xmlSetGenCmt(
"Export of ILIAS Content Module ".  $this->
getId().
" of installation ".$a_inst.
".");
 
 1397                $a_xml_writer->xmlHeader();
 
 1401                $a_xml_writer->xmlStartTag(
"ContentObject", array(
"Type"=>
"SCORM2004LearningModule"));
 
 1409                $expLog->write(
date(
"[y-m-d H:i:s] ").
"Start Export Sco Objects");
 
 1411                $expLog->write(
date(
"[y-m-d H:i:s] ").
"Finished Export Sco Objects");
 
 1413                $a_xml_writer->xmlEndTag(
"ContentObject");
 
 1414                $a_xml_writer->xmlDumpFile($a_target_dir.
'/index.xml', 
false);
 
 1416                if ($ver == 
"2004 4th") {
 
 1421                if ($ver == 
"2004 3rd") {
 
 1427                $css_dir = $a_target_dir.
"/ilias_css_4_2";
 
 1429                include_once(
"./Modules/Scorm2004/classes/class.ilScormExportUtil.php");
 
 1433                include_once(
"./Modules/Scorm2004/classes/class.ilContObjectManifestBuilder.php");
 
 1435                $manifestBuilder->buildManifest($ver,$revision);
 
 1436                $manifestBuilder->dump($a_target_dir);
 
 1438                $xsl = file_get_contents(
"./Modules/Scorm2004/templates/xsl/module.xsl");
 
 1439                $args = array( 
'/_xml' => file_get_contents($a_target_dir.
"/imsmanifest.xml"), 
'/_xsl' => $xsl );
 
 1441                $output = xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",NULL,$args,NULL);
 
 1443                fputs(fopen($a_target_dir.
'/index.html',
'w+'),
$output);
 
 1448                                if ($revision == 
"3rd") {
 
 1449                                        ilUtil::rCopy(
'./Modules/Scorm2004/templates/xsd/adlcp_130_export_2004',$a_target_dir,
false);
 
 1452                                if ($revision == 
"4th") {
 
 1453                                        ilUtil::rCopy(
'./Modules/Scorm2004/templates/xsd/adlcp_130_export_2004_4th',$a_target_dir,
false);
 
 1457                                ilUtil::rCopy(
'./Modules/Scorm2004/templates/xsd/adlcp_120_export_12',$a_target_dir,
false);
 
 1461                $a_xml_writer->_XmlWriter;
 
 1469                $tree->setTableNames(
'sahs_sc13_tree', 
'sahs_sc13_tree_node');
 
 1470                $tree->setTreeTablePK(
"slm_id");
 
 1471                foreach($tree->getSubTree($tree->getNodeData($tree->getRootId()),
true,
'sco') as $sco)
 
 1473                        include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
 
 1474                        $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
 
 1477                        $node->exportHTML4PDF($a_inst, $sco_folder, $expLog);
 
 1485                $a_xml_writer->
xmlStartTag(
"ContentObject", array(
"Type"=>
"SCORM2004SCO"));
 
 1488                $tree->setTableNames(
'sahs_sc13_tree', 
'sahs_sc13_tree_node');
 
 1489                $tree->setTreeTablePK(
"slm_id");
 
 1490                foreach($tree->getSubTree($tree->getNodeData($tree->getRootId()),
true,
'sco') as $sco)
 
 1492                        include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
 
 1493                        $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
 
 1496                        $node->exportPDFPrepareXmlNFiles($a_inst, $a_target_dir, $expLog, $a_xml_writer);
 
 1501            include_once(
"./Modules/Glossary/classes/class.ilObjGlossary.php");
 
 1502            include_once(
"./Modules/Glossary/classes/class.ilGlossaryExport.php");
 
 1505            $glos->exportXML($a_xml_writer,$glos_export->getInstId(), $a_target_dir.
"/glossary", $expLog);
 
 1507                $a_xml_writer->xmlEndTag(
"ContentObject");
 
 1508                include_once 
'Services/Transformation/classes/class.ilXML2FO.php';
 
 1510                $xml2FO->setXSLTLocation(
'./Modules/Scorm2004/templates/xsl/contentobject2fo.xsl');
 
 1511                $xml2FO->setXMLString($a_xml_writer->xmlDumpMem());
 
 1512                $xml2FO->setXSLTParams(array (
'target_dir' => $a_target_dir));
 
 1513                $xml2FO->transform();
 
 1514                $fo_string = $xml2FO->getFOString();
 
 1515        $fo_xml = simplexml_load_string($fo_string);
 
 1516        $fo_ext = $fo_xml->xpath(
"//fo:declarations");
 
 1517        $fo_ext = $fo_ext[0];
 
 1519        include_once 
"./Services/Utilities/classes/class.ilFileUtils.php";
 
 1523            foreach (
$results[
"file"] as $key => $value)
 
 1525                $e = $fo_ext->addChild(
"fox:embedded-file",
"",
"http://xml.apache.org/fop/extensions");
 
 1526                $e->addAttribute(
"src",
$results[path][$key].$value);
 
 1527                $e->addAttribute(
"name",$value);
 
 1528                $e->addAttribute(
"desc",
"");
 
 1531        $fo_string = $fo_xml->asXML(); 
 
 1532                $a_xml_writer->_XmlWriter;
 
 1538                $one_file = fopen($a_target_dir.
'/index.html',
'w+');
 
 1539                $this->
exportHTML($a_inst, $a_target_dir, $expLog, $one_file);
 
 1546        function exportHTML($a_inst, $a_target_dir, &$expLog, $a_one_file = 
"")
 
 1575                if ($a_one_file == 
"")
 
 1577                        include_once(
"./Modules/Scorm2004/classes/class.ilContObjectManifestBuilder.php");
 
 1579                        $manifestBuilder->buildManifest(
'12');
 
 1581                        include_once(
"Services/Frameset/classes/class.ilFramesetGUI.php");
 
 1583                        $fs_gui->setFramesetTitle($this->
getTitle());
 
 1584                        $fs_gui->setMainFrameSource(
"");
 
 1585                        $fs_gui->setSideFrameSource(
"toc.html");
 
 1586                        $fs_gui->setMainFrameName(
"content");
 
 1587                        $fs_gui->setSideFrameName(
"toc");
 
 1589                        fputs(fopen($a_target_dir.
'/index.html',
'w+'),
$output);
 
 1591                        $xsl = file_get_contents(
"./Modules/Scorm2004/templates/xsl/module.xsl");
 
 1592                        $xml = simplexml_load_string($manifestBuilder->writer->xmlDumpMem());
 
 1593                        $args = array( 
'/_xml' => $xml->organizations->organization->asXml(), 
'/_xsl' => $xsl );
 
 1595                        $output = xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",NULL,$args,NULL);
 
 1597                        fputs(fopen($a_target_dir.
'/toc.html',
'w+'),
$output);
 
 1610                include_once(
"Services/MetaData/classes/class.ilMD2XML.php");
 
 1612                $md2xml->setExportMode(
true);
 
 1613                $md2xml->startExport();
 
 1614                $a_xml_writer->appendXML($md2xml->getXML());
 
 1625                include_once(
"Services/MetaData/classes/class.ilMD2XML.php");
 
 1627                $tree->setTableNames(
'sahs_sc13_tree', 
'sahs_sc13_tree_node');
 
 1628                $tree->setTreeTablePK(
"slm_id");
 
 1629                $a_xml_writer->xmlStartTag(
"StructureObject");
 
 1630                foreach($tree->getFilteredSubTree($tree->getRootId(),Array(
'page')) as $obj)
 
 1632                        if($obj[
'type']==
'') 
continue;
 
 1635                        $md2xml = 
new ilMD2XML($this->
getId(), $obj[
'obj_id'], $obj[
'type']);
 
 1636                        $md2xml->setExportMode(
true);
 
 1637                        $md2xml->startExport();
 
 1638                        $a_xml_writer->appendXML($md2xml->getXML());
 
 1640                $a_xml_writer->xmlEndTag(
"StructureObject");
 
 1654                $tree->setTableNames(
'sahs_sc13_tree', 
'sahs_sc13_tree_node');
 
 1655                $tree->setTreeTablePK(
"slm_id");
 
 1656                foreach($tree->getSubTree($tree->getNodeData($tree->getRootId()),
true,array(
'sco',
'ass')) as $sco)
 
 1658                        if ($sco[
'type'] == 
"sco")
 
 1660                                include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
 
 1661                                $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
 
 1664                                $node->exportScorm($a_inst, $sco_folder, $ver, $expLog);
 
 1666                        if ($sco[
'type'] == 
"ass")
 
 1668                                include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Asset.php");
 
 1669                                $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
 
 1672                                $node->exportScorm($a_inst, $sco_folder, $ver, $expLog);
 
 1688                $tree->setTableNames(
'sahs_sc13_tree', 
'sahs_sc13_tree_node');
 
 1689                $tree->setTreeTablePK(
"slm_id");
 
 1692                if ($a_one_file != 
"")
 
 1697                        $sco_tpl = 
new ilTemplate(
"tpl.sco.html", 
true, 
true, 
"Modules/Scorm2004");
 
 1698                        include_once(
"./Services/COPage/classes/class.ilCOPageHTMLExport.php");
 
 1700                        $sco_tpl = $page_html_export->getPreparedMainTemplate($sco_tpl);
 
 1702                        $sco_tpl->setCurrentBlock(
"js_file");
 
 1703                        $sco_tpl->setVariable(
"JS_FILE", 
"./js/pure.js");
 
 1704                        $sco_tpl->parseCurrentBlock();
 
 1705                        $sco_tpl->setCurrentBlock(
"js_file");
 
 1706                        $sco_tpl->setVariable(
"JS_FILE", 
"./js/question_handling.js");
 
 1707                        $sco_tpl->parseCurrentBlock();
 
 1710                        $sco_tpl->setCurrentBlock(
"head");
 
 1711                        $sco_tpl->parseCurrentBlock();
 
 1712                        fputs($a_one_file, $sco_tpl->get(
"head"));
 
 1715                        include_once(
"./Modules/Scorm2004/classes/class.ilContObjectManifestBuilder.php");
 
 1717                        $manifestBuilder->buildManifest(
'12');
 
 1718                        $xsl = file_get_contents(
"./Modules/Scorm2004/templates/xsl/module.xsl");
 
 1719                        $xml = simplexml_load_string($manifestBuilder->writer->xmlDumpMem());
 
 1720                        $args = array( 
'/_xml' => $xml->organizations->organization->asXml(), 
'/_xsl' => $xsl );
 
 1722                        $params = array(
"one_page" => 
"y");
 
 1723                        $output = xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",NULL,$args,
$params);
 
 1729                foreach($tree->getSubTree($tree->getNodeData($tree->getRootId()),
true,
'sco') as $sco)
 
 1731                        include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
 
 1732                        $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
 
 1736                        if ($a_one_file == 
"")
 
 1738                                $node->exportHTML($a_inst, $sco_folder, $expLog, $a_one_file);
 
 1742                                $node->exportHTMLPageObjects($a_inst, $a_target_dir, $expLog, 
'full',
 
 1743                                        "sco", $a_one_file, $sco_tpl);
 
 1747                                include_once(
"./Modules/Glossary/classes/class.ilObjGlossary.php");
 
 1754                if ($a_one_file != 
"")
 
 1757                        fputs($a_one_file, $sco_tpl->get(
"tail"));
 
 1771                include_once(
"./Services/Style/System/classes/class.ilSystemStyleHTMLExport.php");
 
 1773                $this->sys_style_html_export->export();
 
 1776                include_once(
"./Services/COPage/classes/class.ilCOPageHTMLExport.php");
 
 1778                include_once(
"./Services/Style/Content/classes/class.ilObjStyleSheet.php");
 
 1779                $this->co_page_html_export->setContentStyleId(
 
 1781                $this->co_page_html_export->createDirectories();
 
 1782                $this->co_page_html_export->exportStyles();
 
 1783                $this->co_page_html_export->exportSupportScripts();
 
 1785                include_once(
"./Services/MediaObjects/classes/class.ilPlayerUtil.php");
 
 1793                include_once(
"./Services/MediaObjects/classes/class.ilPlayerUtil.php");
 
 1798                copy(
'./Modules/Scorm2004/scripts/scorm_2004.js',$a_target_dir.
'/js/scorm.js');
 
 1799                copy(
'./Modules/Scorm2004/scripts/pager.js',$a_target_dir.
'/js/pager.js');
 
 1800                copy(
'./Modules/Scorm2004/scripts/questions/pure.js',$a_target_dir.
'/js/pure.js');
 
 1801                copy(
'./Modules/Scorm2004/scripts/questions/question_handling.js',
 
 1802                        $a_target_dir.
'/js/question_handling.js');
 
 1815                return $this->public_export_file[
$a_type];
 
 1824                include_once(
"./Modules/File/classes/class.ilObjFile.php");
 
 1826                foreach ($this->file_ids as $file_id)
 
 1828                        $expLog->write(
date(
"[y-m-d H:i:s] ").
"File Item ".$file_id);
 
 1829                        $file_obj = 
new ilObjFile($file_id, 
false);
 
 1830                        $file_obj->export($a_target_dir);
 
 1840                $this->public_export_file[
$a_type] = $a_file;
 
 1860                        'SELECT cp_node.cp_node_id ' 
 1861                   .
'FROM cp_node, cp_resource, cp_item ' 
 1862                   .
'WHERE cp_item.cp_node_id = cp_node.cp_node_id ' 
 1863                   .
'AND cp_item.resourceId = cp_resource.id ' 
 1864                   .
'AND scormType = '.
$ilDB->quote(
'sco', 
'text').
' ' 
 1865                   .
'AND nodeName = '.
$ilDB->quote(
'item', 
'text').
' ' 
 1866                   .
'AND cp_node.slm_id = '.
$ilDB->quote($a_id, 
'integer').
' ' 
 1867                   .
'GROUP BY cp_node.cp_node_id' 
 1872                        array_push($scos, 
$row[
'cp_node_id']);
 
 1877                for($i = 0; $i < count($scos); $i++)
 
 1880                                'SELECT c_max FROM cmi_node WHERE (user_id = %s AND cp_node_id = %s)',
 
 1881                                array(
'integer', 
'integer'),
 
 1882                                array($a_user, $scos[$i])
 
 1888                                if(
$row[
'c_max'] != 
null)
 
 1891                                        $max = 
$row[
'c_max'];
 
 1895                $retVal = ($set == 1) ? $max : 
null;
 
 1902                $retAr = array(
"raw" => 
null, 
"max" => 
null, 
"scaled" => 
null);
 
 1903                $val_set = 
$ilDB->queryF(
"SELECT c_raw, c_max, scaled FROM cmi_node WHERE (user_id = %s AND cp_node_id = %s)",
 
 1904                        array(
'integer', 
'integer'),
 
 1905                        array($a_user, $a_cp_node_id)
 
 1907                if ($val_set->numRows()>0) 
 
 1909                        $val_rec = 
$ilDB->fetchAssoc($val_set);
 
 1910                        $retAr[
"raw"] = $val_rec[
'c_raw'];
 
 1911                        $retAr[
"max"] = $val_rec[
'c_max'];
 
 1912                        $retAr[
"scaled"] = $val_rec[
'scaled'];
 
 1913                        if ($val_rec[
'scaled']==
null && $val_rec[
'c_raw']!=
null && $val_rec[
'c_max']!=
null) {
 
 1914                                $retAr[
"scaled"] = ($val_rec[
'c_raw'] / $val_rec[
'c_max']);
 
 1931                include_once(
"./Services/Style/Content/classes/class.ilObjStyleSheet.php");
 
 1935                        $style_obj = 
$ilias->obj_factory->getInstanceByObjId($style_id);
 
 1936                        $new_id = $style_obj->ilClone();
 
 1937                        $a_new_obj->setStyleSheetId($new_id);
 
 1938                        $a_new_obj->update();
 
 1941                $a_new_obj->createScorm2004Tree();
 
 1942                $source_tree = $this->
getTree();
 
 1943                $target_tree_root_id = $a_new_obj->getTree()->readRootId();
 
 1944                $childs = $source_tree->getChilds($source_tree->readRootId());
 
 1945                $a_copied_nodes = array();
 
 1946                include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Node.php");
 
 1947                foreach ($childs as $c)
 
date( 'd-M-Y', $objPHPExcel->getProperties() ->getCreated())
An exception for terminatinating execution or to throw for unit testing.
HTML export class for pages.
static _deleteReadEventsForUsers($a_obj_id, array $a_user_ids)
Content Object (ILIAS native learning module / digilib book) Manifest export class.
static secondsToString($seconds, $force_with_seconds=false, $a_lng=null)
converts seconds to string: Long: 7 days 4 hour(s) ...
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
static recursive_dirscan($dir, &$arr)
Recursively scans a given directory and writes path and filename into referenced array.
Export class for content objects.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
static _refreshStatus($a_obj_id, $a_users=null)
Set dirty.
const LP_STATUS_COMPLETED_NUM
const LP_STATUS_IN_PROGRESS_NUM
const LP_STATUS_NOT_ATTEMPTED_NUM
const LP_STATUS_FAILED_NUM
const LP_STATUS_NOT_ATTEMPTED
const LP_STATUS_IN_PROGRESS
getEditable()
Get Editable.
getAssignedGlossary()
get assigned glossary
getStyleSheetId()
get ID of assigned style sheet object
getDataDirectory($mode="filesystem")
get data directory of lm
Class ilObjSCORM2004LearningModule.
__construct($a_id=0, $a_call_by_reference=true)
Constructor @access public.
exportXMLStructureObjects(&$a_xml_writer, $a_inst, &$expLog)
export structure objects to xml (see ilias_co.dtd)
deleteTrackingDataOfUsers($a_users)
get all tracked items of current user
validate($directory)
Validate all XML-Files in a SCOM-Directory.
setImportSequencing($a_val)
Set import sequencing.
exportXMLScoObjects($a_inst, $a_target_dir, $ver, &$expLog)
export page objects to xml (see ilias_co.dtd)
static _ISODurationToCentisec($str)
convert ISO 8601 Timeperiods to centiseconds ta
exportPDF($a_inst, $a_target_dir, &$expLog)
exportHTML($a_inst, $a_target_dir, &$expLog, $a_one_file="")
Export SCORM package to HTML.
static _getTrackingItems($a_obj_id)
get all tracking items of scorm object
copyAuthoredContent($a_new_obj)
Copy authored content (everything done with the editor.
exportXMLMetaData(&$a_xml_writer)
export content objects meta data to xml (see ilias_co.dtd)
getTrackingDataAgg($a_user_id, $raw=false)
executeDragDrop($source_id, $target_id, $first_child, $as_subitem=false, $movecopy="move")
Execute Drag Drop Action.
static _getMaxScoreForUser($a_id, $a_user)
Returns score.max for the learning module, refered to the last sco where score.max is set.
getCourseCompletionForUser($a_user)
exportHTML4PDF($a_inst, $a_target_dir, &$expLog)
exportHTMLScoObjects($a_inst, $a_target_dir, &$expLog, $a_one_file="")
static _getStatus($a_obj_id, $a_user_id)
getImportSequencing()
Get import sequencing.
getAttemptsForUser($a_user_id)
get number of atttempts for a certain user and package
static _getUniqueScaledScoreForUser($a_id, $a_user)
Get the Unique Scaled Score of a course Conditions: Only one SCO may set cmi.score....
updateSequencingSettings()
exportHTMLOne($a_inst, $a_target_dir, &$expLog)
static _lookupLastAccess($a_obj_id, $a_usr_id)
Return the last access timestamp for a given user.
getTrackedItems()
get all tracked items of current user
static _getMeasure($a_obj_id, $a_user_id)
readObject()
read manifest file @access public
static _getSatisfied($a_obj_id, $a_user_id)
getPublicExportFile($a_type)
get public export file
createScorm2004Tree()
Create Scorm 2004 Tree used by Editor.
exportFileItems($a_target_dir, &$expLog)
export files of file itmes
getModuleVersionForUser($a_user_id)
get module version that tracking data for a user was recorded on
static _getScores2004ForUser($a_cp_node_id, $a_user)
static _lookupItemTitle($a_node_id)
convert_1_2_to_2004($manifest)
setPublicExportFile($a_type, $a_file)
prepareHTMLExporter($a_target_dir)
Prepare HTML exporter.
exportScorm($a_inst, $a_target_dir, $ver, &$expLog)
Export (authoring) scorm package.
static _getCourseCompletionForUser($a_id, $a_user)
Get the completion of a SCORM module for a given user.
Class ilObjSCORMLearningModule.
importSuccessForSahsUser($user_id, $last_access, $status, $attempts=null, $percentage_completed=null, $sco_total_time_sec=null)
static _lookupStandard($a_id)
Lookup standard flag.
static getEffectiveContentStyleId($a_style_id, $a_type="")
Get effective Style Id.
static getInstance($a_obj_id)
getType()
get object type @access public
getId()
get object id @access public
getTitle()
get object title @access public
static getFlashVideoPlayerDirectory()
Get flash video player directory.
static copyPlayerFilesToTargetDirectory($a_target_dir)
Copy css files to target dir.
static removeCMIDataForUserAndPackage($user_id, $packageId)
static getInstance($a_slm_object, $a_id=0, $a_halt=true)
static pasteTree($a_target_slm, $a_item_id, $a_parent_id, $a_target, $a_insert_time, &$a_copied_nodes, $a_as_copy=false, $a_from_clipboard=true, $a_source_parent_type="")
Paste item (tree) from clipboard or other learning module to target scorm learning module.
Class ilSCORM2004Sequencing.
static exportContentCSS($a_slm_object, $a_target_dir)
Export lm content css to a directory.
HTML export class for system styles.
special template class to simplify handling of ITX/PEAR
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 now()
Return current timestamp in Y-m-d H:i:s format.
static yn2tf($a_yn)
convert "y"/"n" to true/false
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
xmlStartTag($tag, $attrs=NULL, $empty=FALSE, $encode=TRUE, $escape=TRUE)
Writes a starttag.
xmlSetDtdDef($dtdDef)
Sets dtd definition.
if(!is_dir( $entity_dir)) exit("Fatal Error ([A-Za-z0-9]+)\s+" &#(? foreach( $entity_files as $file) $output
redirection script todo: (a better solution should control the processing via a xml file)
if(!file_exists("$old.txt")) if( $old===$new) if(file_exists("$new.txt")) $file