5 require_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::ilObject($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') || ($ilDB->getDBType() ==
'mysql' && !$ilDB->isMysql4_1OrHigher())) {
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"];
344 $sco_set = $ilDB->queryF(
' 345 SELECT DISTINCT user_id,MAX(c_timestamp) last_access 346 FROM cmi_node, cp_node 347 WHERE cmi_node.cp_node_id = cp_node.cp_node_id 348 AND cp_node.slm_id = %s 351 array($this->
getId()));
356 while($sco_rec = $ilDB->fetchAssoc($sco_set))
359 if ($sco_rec[
'last_access'] != 0) {
362 $sco_rec[
'last_access'] =
"";
364 if (
ilObject::_exists($sco_rec[
'user_id']) && ilObject::_lookUpType($sco_rec[
'user_id'])==
"usr" ) {
365 $user =
new ilObjUser($sco_rec[
'user_id']);
366 $temp = array(
"user_full_name" => $name[
"lastname"].
", ".
368 "user_id" => $sco_rec[
"user_id"],
"last_access" => $sco_rec[
'last_access'],
371 "username" => $user->getLastname().
", ".$user->getFirstname()
373 if ($a_search !=
"" && (strpos(strtolower($user->getLastname()), strtolower($a_search)) !==
false || strpos(strtolower($user->getFirstname()), strtolower($a_search)) !==
false ) ) {
375 }
else if ($a_search ==
"") {
391 foreach($a_users as $user)
393 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004DeleteData.php");
397 include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
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 cp_node.cp_node_id ',
414 array($this->
getId()));
418 while($sco_rec = $ilDB->fetchAssoc($sco_set))
420 $item[
'id']=$sco_rec[
"id"];
421 $item[
'title']=self::_lookupItemTitle($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).
"%";
481 $title = self::_lookupItemTitle($data_rec[
"cp_node_id"]);
483 $data[] = array(
"user_id" => $data_rec[
"user_id"],
"sco_id"=>$data_rec[
"cp_node_id"],
484 "score" => $score,
"time" => $time,
"status" => $status,
"last_access"=>$last_access,
"title"=>
$title);
488 $data_rec[
"total_time"] = self::_ISODurationToCentisec($data_rec[
"total_time"])/100;
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"];
543 $query =
'SELECT cp_node.cp_node_id ' 544 .
'FROM cp_node, cp_resource, cp_item ' 545 .
'WHERE cp_item.cp_node_id = cp_node.cp_node_id ' 546 .
'AND cp_item.resourceid = cp_resource.id AND scormtype = %s ' 547 .
'AND nodename = %s AND cp_node.slm_id = %s';
548 $res = $ilDB->queryF(
550 array(
'text',
'text',
'integer'),
551 array(
'sco',
'item', $this->
getId())
553 while(
$row = $ilDB->fetchAssoc(
$res))
555 $scos[] =
$row[
'cp_node_id'];
561 $user_array = array();
563 if($a_exportall == 1)
565 $query =
'SELECT user_id ' 566 .
'FROM cmi_node, cp_node ' 567 .
'WHERE cmi_node.cp_node_id = cp_node.cp_node_id AND cp_node.slm_id = %s ' 568 .
'GROUP BY user_id';
569 $res = $ilDB->queryF(
572 array($this->
getId())
574 while(
$row = $ilDB->fetchAssoc(
$res))
576 $user_array[] =
$row[
'user_id'];
581 $user_array = $a_user;
584 foreach($user_array as $user)
589 for($i = 0; $i < count($scos); $i++)
591 $query =
'SELECT * FROM cmi_node ' 592 .
'WHERE user_id = %s AND cp_node_id = %s ' 593 .
'AND completion_status = %s OR success_status = %s';
594 $res = $ilDB->queryF(
596 array(
'integer',
'integer',
'text',
'text'),
597 array($user, $scos[$i],
'completed',
'passed')
604 $key = array_search($scos[$i], $scos_c);
605 unset($scos_c[$key]);
610 if(count($scos_c) == 0)
623 $login = $e_user->getLogin();
624 $firstname = $e_user->getFirstname();
625 $lastname = $e_user->getLastname();
626 $email = $e_user->getEmail();
627 $department = $e_user->getDepartment();
629 $query =
'SELECT user_id, MAX(c_timestamp) exp_date ' 630 .
'FROM cmi_node, cp_node ' 631 .
'WHERE cmi_node.cp_node_id = cp_node.cp_node_id ' 632 .
'AND cp_node.slm_id = %s ' 633 .
'GROUP BY user_id';
634 $res = $ilDB->queryF(
637 array($this->
getId())
644 $datetime = explode(
' ',
$data[
'exp_date']);
645 if(count($datetime) == 2)
647 $date = explode(
'-', $datetime[0]);
648 if(count($date) == 3 && checkdate($date[1], $date[2], $date[0]))
653 $date = date(
'd.m.Y', strtotime(
$data[
'exp_date']));
661 $csv = $csv.
"$department;$login;$lastname;$firstname;$email;$date;$completion\n";
664 $header =
"Department;Login;Lastname;Firstname;Email;Date;Status\n";
673 $val_set = $ilDB->queryF(
' 674 SELECT cp_node.cp_node_id FROM cp_node,cp_resource,cp_item 675 WHERE cp_item.cp_node_id = cp_node.cp_node_id 676 AND cp_item.resourceid = cp_resource.id 679 AND cp_node.slm_id = %s 680 GROUP BY cp_node.cp_node_id',
681 array(
'text',
'text',
'integer'),
682 array(
'sco',
'item', $this->
getId())
684 while ($val_rec = $ilDB->fetchAssoc($val_set))
686 array_push($scos,$val_rec[
'cp_node_id']);
689 $fhandle = fopen($a_file,
"r");
691 $obj_id = $this->getID();
694 $fields = fgetcsv($fhandle, 4096,
';');
695 while(($csv_rows = fgetcsv($fhandle, 4096,
";")) !== FALSE) {
696 $data = array_combine($fields, $csv_rows);
699 if (count($csv_rows) == 6) {$statuscheck = 1;}
704 $import =
$data[
"Status"];
705 if ($import ==
"") {$import = 1;}
708 foreach ($scos as $sco)
711 $date =
$data[
'Date'];
713 $res = $ilDB->queryF(
' 714 SELECT * FROM cmi_node 715 WHERE cp_node_id = %s 717 AND completion_status = %s 718 AND success_status = %s 719 AND c_timestamp = %s',
720 array(
'integer',
'integer',
'text',
'text',
'timestamp'),
721 array($sco_id,$user_id,
'completed',
'passed',
$data[
'Date']));
723 if(!$ilDB->numRows(
$res))
725 $nextId = $ilDB->nextId(
'cmi_node');
726 $val_set = $ilDB->manipulateF(
' 728 (cp_node_id,user_id,completion_status,success_status,c_timestamp,cmi_node_id) 729 VALUES(%s,%s,%s,%s,%s,%s)',
730 array(
'integer',
'integer',
'text',
'text',
'timestamp',
'integer'),
731 array($sco_id,$user_id,
'completed',
'passed',
$data[
'Date'],$nextId));
744 foreach ($users as $user_id)
746 include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
760 $aV = array(0, 0, 0, 0, 0, 0);
763 if (strpos($str,
"P") != 0) {
767 $aT = array(
"Y",
"M",
"D",
"H",
"M",
"S");
770 $str = substr($str,1);
771 for ($i = 0; $i < count($aT); $i++) {
772 if (strpos($str,
"T")===0) {
773 $str = substr($str,1);
777 $p = strpos($str,$aT[$i]);
780 if ($i == 1 && strpos($str,
"T") > -1 && strpos($str,
"T") < $p) {
783 if ($aT[$i] ==
"S") {
784 $aV[$i] = substr($str,0, $p);
787 $aV[$i] = intval(substr($str,0, $p));
789 if (!is_numeric($aV[$i])) {
792 }
else if ($i > 2 && !$bTFound) {
796 $str = substr($str,$p + 1);
800 if (!$bErr && strlen($str) != 0) {
809 return $aV[0] * 3155760000 + $aV[1] * 262980000 + $aV[2] * 8640000 + $aV[3] * 360000 + $aV[4] * 6000 + round($aV[5] * 100);
819 $val_set = $ilDB->queryF(
' 820 SELECT cp_node.cp_node_id FROM cp_node,cp_resource,cp_item 821 WHERE cp_item.cp_node_id = cp_node.cp_node_id 822 AND cp_item.resourceid = cp_resource.id 825 AND cp_node.slm_id = %s ',
826 array(
'text',
'text',
'integer'),
827 array(
'sco',
'item',$this->
getId()));
829 while ($val_rec = $ilDB->fetchAssoc($val_set))
831 array_push($scos,$val_rec[
'cp_node_id']);
838 for ($i=0;$i<count($scos);$i++)
841 $val_set = $ilDB->queryF(
' 842 SELECT * FROM cmi_node 845 AND (completion_status=%s OR success_status=%s))',
846 array(
'integer',
'integer',
'text',
'text'),
847 array($a_user,$scos[$i],
'completed',
'passed')
850 if ($ilDB->numRows($val_set) > 0) {
852 $key = array_search($scos[$i], $scos_c);
853 unset ($scos_c[$key]);
858 if (count($scos_c) == 0) {
878 $val_set = $ilDB->queryF(
' 879 SELECT cp_node.cp_node_id FROM cp_node,cp_resource,cp_item 880 WHERE cp_item.cp_node_id = cp_node.cp_node_id 881 AND cp_item.resourceid = cp_resource.id 884 AND cp_node.slm_id = %s',
885 array(
'text',
'text',
'integer'), array(
'sco' ,
'item',$a_id));
886 while ($val_rec = $ilDB->fetchAssoc($val_set))
888 array_push($scos,$val_rec[
'cp_node_id']);
894 for ($i=0;$i<count($scos);$i++)
897 $val_set = $ilDB->queryF(
' 898 SELECT * FROM cmi_node 901 AND (completion_status = %s OR success_status = %s))',
902 array(
'integer',
'integer',
'text',
'text'),
903 array($a_user,$scos[$i],
'completed',
'passed'));
905 if ($ilDB->numRows($val_set) > 0)
908 $key = array_search($scos[$i], $scos_c);
909 unset ($scos_c[$key]);
914 if (count($scos_c) == 0) {
934 $val_set = $ilDB->queryF(
"SELECT cp_node.cp_node_id FROM cp_node,cp_resource,cp_item WHERE".
935 " 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",
939 while ($val_rec = $ilDB->fetchAssoc($val_set))
941 array_push($scos,$val_rec[
'cp_node_id']);
945 for ($i=0;$i<count($scos);$i++)
947 $val_set = $ilDB->queryF(
"SELECT scaled FROM cmi_node WHERE (user_id = %s AND cp_node_id = %s)",
948 array(
'integer',
'integer'),
949 array($a_user, $scos[$i])
951 if ($val_set->numRows()>0)
953 $val_rec = $ilDB->fetchAssoc($val_set);
954 if ($val_rec[
'scaled']!=NULL) {
956 $scaled = $val_rec[
'scaled'];
960 $retVal = ($set == 1) ? $scaled : null ;
977 $item_set = $ilDB->queryF(
' 978 SELECT cp_item.* FROM cp_node, cp_item WHERE slm_id = %s 979 AND cp_node.cp_node_id = cp_item.cp_node_id 980 ORDER BY cp_node.cp_node_id ',
986 while ($item_rec = $ilDB->fetchAssoc($item_set))
989 $s2 = $ilDB->queryF(
' 990 SELECT cp_resource.* FROM cp_node, cp_resource 992 AND cp_node.cp_node_id = cp_resource.cp_node_id 993 AND cp_resource.id = %s ',
994 array(
'integer',
'text'),
995 array($a_obj_id,$item_rec[
"resourceid"])
999 if (
$res = $ilDB->fetchAssoc($s2))
1002 if (
$res[
"scormtype"] ==
"sco")
1004 $items[] = array(
"id" => $item_rec[
"cp_node_id"],
1005 "title" => $item_rec[
"title"]);
1017 $status_set = $ilDB->queryF(
' 1018 SELECT * FROM cmi_gobjective 1020 AND objective_id = %s 1022 array(
'integer',
'text',
'integer'),
1023 array($a_obj_id,
'course_overall_status',$a_user_id)
1026 if ($status_rec = $ilDB->fetchAssoc($status_set))
1028 return $status_rec[
"status"];
1039 $status_set = $ilDB->queryF(
' 1040 SELECT * FROM cmi_gobjective 1042 AND objective_id = %s 1044 array(
'integer',
'text',
'integer'),
1045 array($a_obj_id,
'course_overall_status',$a_user_id)
1048 if ($status_rec = $ilDB->fetchAssoc($status_set))
1050 return $status_rec[
"satisfied"];
1060 $status_set = $ilDB->queryF(
' 1061 SELECT * FROM cmi_gobjective 1063 AND objective_id = %s 1065 array(
'integer',
'text',
'integer'),
1066 array($a_obj_id,
'course_overall_status',$a_user_id)
1069 if ($status_rec = $ilDB->fetchAssoc($status_set))
1071 return $status_rec[
"measure"];
1081 $r = $ilDB->queryF(
' 1082 SELECT * FROM cp_item 1083 WHERE cp_node_id = %s',
1088 if ($i = $ilDB->fetchAssoc(
$r))
1100 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Tree.php");
1106 $this->slm_tree->addTree($this->
getId(), 1);
1109 include_once (
"./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Sequencing.php");
1111 $seq_info->insert();
1117 $this->slm_tree->setTreeTablePK(
"slm_id");
1118 $this->slm_tree->setTableNames(
'sahs_sc13_tree',
'sahs_sc13_tree_node');
1119 return $this->slm_tree;
1125 $ilTabs->setTabActive(
"sequencing");
1127 include_once (
"./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Sequencing.php");
1130 return $control_settings;
1134 include_once (
"./Modules/Scorm2004/classes/seq_editor/class.ilSCORM2004Sequencing.php");
1140 $control_settings->insert();
1156 $this->slm_tree->setTableNames(
'sahs_sc13_tree',
'sahs_sc13_tree_node');
1157 $this->slm_tree->setTreeTablePK(
"slm_id");
1159 require_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004NodeFactory.php");
1168 $target_parent = $this->slm_tree->getParentId(
$target_id);
1172 if ($source_obj->getType() ==
"page")
1174 if ($this->slm_tree->isInTree($source_obj->getId()))
1176 $node_data = $this->slm_tree->getNodeData($source_obj->getId());
1179 if ($movecopy ==
"move")
1181 $parent_id = $this->slm_tree->getParentId($source_obj->getId());
1182 $this->slm_tree->deleteTree($node_data);
1204 if(!$this->slm_tree->isInTree($source_obj->getId()))
1211 else if ($as_subitem)
1215 $pg_childs = $this->slm_tree->getChildsByType($parent,
"page");
1216 if (count($pg_childs) != 0)
1218 $target_pos = $pg_childs[count($pg_childs) - 1][
"obj_id"];
1224 $parent = $target_parent;
1228 $this->slm_tree->insertNode($source_obj->getId(),
1229 $parent, $target_pos);
1250 if ($source_obj->getType() ==
"sco" || $source_obj->getType() ==
"ass")
1253 $source_node = $this->slm_tree->getNodeData($source_id);
1254 $subnodes = $this->slm_tree->getSubtree($source_node);
1257 foreach ($subnodes as $subnode)
1272 $pg_childs = $this->slm_tree->getChildsByType($target_parent,
"page");
1273 if (count($pg_childs) != 0)
1275 $target_pos = $pg_childs[count($pg_childs) - 1][
"obj_id"];
1278 else if ($as_subitem)
1282 $childs = $this->slm_tree->getChilds($target_parent);
1283 if (count($childs) != 0)
1285 $target_pos = $childs[count($childs) - 1][
"obj_id"];
1290 if ($movecopy ==
"move")
1292 $this->slm_tree->deleteTree($source_node);
1301 if (!$this->slm_tree->isInTree($source_id))
1303 $this->slm_tree->insertNode($source_id, $target_parent, $target_pos);
1306 if ($movecopy ==
"move")
1308 foreach ($subnodes as $node)
1310 if($node[
"obj_id"] != $source_id)
1312 $this->slm_tree->insertNode($node[
"obj_id"], $node[
"parent"]);
1323 if ($source_obj->getType() ==
"chap")
1326 $source_node = $this->slm_tree->getNodeData($source_id);
1327 $subnodes = $this->slm_tree->getSubtree($source_node);
1330 foreach ($subnodes as $subnode)
1351 else if ($as_subitem)
1355 $childs = $this->slm_tree->getChilds($target_parent);
1356 if (count($childs) != 0)
1358 $target_pos = $childs[count($childs) - 1][
"obj_id"];
1363 if ($movecopy ==
"move")
1365 $this->slm_tree->deleteTree($source_node);
1374 if (!$this->slm_tree->isInTree($source_id))
1376 $this->slm_tree->insertNode($source_id, $target_parent, $target_pos);
1379 if ($movecopy ==
"move")
1381 foreach ($subnodes as $node)
1383 if($node[
"obj_id"] != $source_id)
1385 $this->slm_tree->insertNode($node[
"obj_id"], $node[
"parent"]);
1402 require_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Export.php");
1404 $export =
new ilSCORM2004Export($this);
1405 foreach ($export->getSupportedExportTypes() as
$type)
1407 $dir = $export->getExportDirectoryForType(
$type);
1409 if (!@is_dir($dir) or !is_writeable($dir))
1417 while ($entry = $cdir->read())
1419 if ($entry !=
"." and
1422 ereg(
"^[0-9]{10}_{2}[0-9]+_{2}(".$this->
getType().
"_)*[0-9]+\.zip\$", $entry) or
1423 ereg(
"^[0-9]{10}_{2}[0-9]+_{2}(".$this->
getType().
"_)*[0-9]+\.pdf\$", $entry) or
1424 ereg(
"^[0-9]{10}_{2}[0-9]+_{2}(".$this->
getType().
"_)*[0-9]+\.iso\$", $entry)
1427 $file[$entry.$type] = array(
"type" =>
$type,
"file" => $entry,
1428 "size" => filesize($dir.
"/".$entry));
1452 $metadata_xml = $a_xml_writer->xmlDumpMem(
false);
1453 $a_xml_writer->_XmlWriter;
1455 $xsl = file_get_contents(
"./Modules/Scorm2004/templates/xsl/metadata.xsl");
1456 $args = array(
'/_xml' => $metadata_xml ,
'/_xsl' => $xsl );
1458 $output =
xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",NULL,$args,NULL);
1460 file_put_contents($a_target_dir.
'/indexMD.xml',$output);
1466 include_once(
"./Modules/Glossary/classes/class.ilObjGlossary.php");
1467 include_once(
"./Modules/Glossary/classes/class.ilGlossaryExport.php");
1470 $glo_xml_writer->xmlSetDtdDef(
"<!DOCTYPE ContentObject SYSTEM \"http://www.ilias.de/download/dtd/ilias_co_3_7.dtd\">");
1472 $glo_xml_writer->xmlHeader();
1476 $glos->exportXML($glo_xml_writer,$glos_export->getInstId(), $a_target_dir.
"/glossary", $expLog);
1477 $glo_xml_writer->xmlDumpFile($a_target_dir.
"/glossary/glossary.xml");
1478 $glo_xml_writer->_XmlWriter;
1483 $a_xml_writer->
xmlSetDtdDef(
"<!DOCTYPE ContentObject SYSTEM \"http://www.ilias.de/download/dtd/ilias_co_3_7.dtd\">");
1486 $a_xml_writer->xmlSetGenCmt(
"Export of ILIAS Content Module ". $this->
getId().
" of installation ".$a_inst.
".");
1489 $a_xml_writer->xmlHeader();
1493 $a_xml_writer->xmlStartTag(
"ContentObject", array(
"Type"=>
"SCORM2004LearningModule"));
1501 $expLog->write(date(
"[y-m-d H:i:s] ").
"Start Export Sco Objects");
1503 $expLog->write(date(
"[y-m-d H:i:s] ").
"Finished Export Sco Objects");
1505 $a_xml_writer->xmlEndTag(
"ContentObject");
1506 $a_xml_writer->xmlDumpFile($a_target_dir.
'/index.xml',
false);
1508 if ($ver ==
"2004 4th") {
1513 if ($ver ==
"2004 3rd") {
1519 $css_dir = $a_target_dir.
"/ilias_css_4_2";
1521 include_once(
"./Modules/Scorm2004/classes/class.ilScormExportUtil.php");
1525 include_once(
"./Modules/Scorm2004/classes/class.ilContObjectManifestBuilder.php");
1527 $manifestBuilder->buildManifest($ver,$revision);
1528 $manifestBuilder->dump($a_target_dir);
1530 $xsl = file_get_contents(
"./Modules/Scorm2004/templates/xsl/module.xsl");
1531 $args = array(
'/_xml' => file_get_contents($a_target_dir.
"/imsmanifest.xml"),
'/_xsl' => $xsl );
1533 $output =
xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",NULL,$args,NULL);
1535 fputs(fopen($a_target_dir.
'/index.html',
'w+'),$output);
1540 if ($revision ==
"3rd") {
1541 ilUtil::rCopy(
'./Modules/Scorm2004/templates/xsd/adlcp_130_export_2004',$a_target_dir,
false);
1544 if ($revision ==
"4th") {
1545 ilUtil::rCopy(
'./Modules/Scorm2004/templates/xsd/adlcp_130_export_2004_4th',$a_target_dir,
false);
1549 ilUtil::rCopy(
'./Modules/Scorm2004/templates/xsd/adlcp_120_export_12',$a_target_dir,
false);
1553 $a_xml_writer->_XmlWriter;
1561 $tree->setTableNames(
'sahs_sc13_tree',
'sahs_sc13_tree_node');
1562 $tree->setTreeTablePK(
"slm_id");
1563 foreach($tree->getSubTree($tree->getNodeData($tree->getRootId()),
true,
'sco') as $sco)
1565 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
1566 $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
1569 $node->exportHTML4PDF($a_inst, $sco_folder, $expLog);
1577 $a_xml_writer->
xmlStartTag(
"ContentObject", array(
"Type"=>
"SCORM2004SCO"));
1580 $tree->setTableNames(
'sahs_sc13_tree',
'sahs_sc13_tree_node');
1581 $tree->setTreeTablePK(
"slm_id");
1582 foreach($tree->getSubTree($tree->getNodeData($tree->getRootId()),
true,
'sco') as $sco)
1584 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
1585 $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
1588 $node->exportPDFPrepareXmlNFiles($a_inst, $a_target_dir, $expLog, $a_xml_writer);
1593 include_once(
"./Modules/Glossary/classes/class.ilObjGlossary.php");
1594 include_once(
"./Modules/Glossary/classes/class.ilGlossaryExport.php");
1597 $glos->exportXML($a_xml_writer,$glos_export->getInstId(), $a_target_dir.
"/glossary", $expLog);
1599 copy(
'./templates/default/images/icon_attachment_s.png',$a_target_dir.
"/icon_attachment_s.png");
1600 $a_xml_writer->xmlEndTag(
"ContentObject");
1601 include_once
'Services/Transformation/classes/class.ilXML2FO.php';
1603 $xml2FO->setXSLTLocation(
'./Modules/Scorm2004/templates/xsl/contentobject2fo.xsl');
1604 $xml2FO->setXMLString($a_xml_writer->xmlDumpMem());
1605 $xml2FO->setXSLTParams(array (
'target_dir' => $a_target_dir));
1606 $xml2FO->transform();
1607 $fo_string = $xml2FO->getFOString();
1608 $fo_xml = simplexml_load_string($fo_string);
1609 $fo_ext = $fo_xml->xpath(
"//fo:declarations");
1610 $fo_ext = $fo_ext[0];
1612 include_once
"./Services/Utilities/classes/class.ilFileUtils.php";
1616 foreach (
$results[
"file"] as $key => $value)
1618 $e = $fo_ext->addChild(
"fox:embedded-file",
"",
"http://xml.apache.org/fop/extensions");
1619 $e->addAttribute(
"src",
$results[path][$key].$value);
1620 $e->addAttribute(
"name",$value);
1621 $e->addAttribute(
"desc",
"");
1624 $fo_string = $fo_xml->asXML();
1625 $a_xml_writer->_XmlWriter;
1631 $one_file = fopen($a_target_dir.
'/index.html',
'w+');
1632 $this->
exportHTML($a_inst, $a_target_dir, $expLog, $one_file);
1639 function exportHTML($a_inst, $a_target_dir, &$expLog, $a_one_file =
"")
1669 if ($a_one_file ==
"")
1671 include_once(
"./Modules/Scorm2004/classes/class.ilContObjectManifestBuilder.php");
1673 $manifestBuilder->buildManifest(
'12');
1675 include_once(
"Services/Frameset/classes/class.ilFramesetGUI.php");
1677 $fs_gui->setFramesetTitle($this->
getTitle());
1678 $fs_gui->setMainFrameSource(
"");
1679 $fs_gui->setSideFrameSource(
"toc.html");
1680 $fs_gui->setMainFrameName(
"content");
1681 $fs_gui->setSideFrameName(
"toc");
1682 $output = $fs_gui->get();
1683 fputs(fopen($a_target_dir.
'/index.html',
'w+'),$output);
1685 $xsl = file_get_contents(
"./Modules/Scorm2004/templates/xsl/module.xsl");
1686 $xml = simplexml_load_string($manifestBuilder->writer->xmlDumpMem());
1687 $args = array(
'/_xml' => $xml->organizations->organization->asXml(),
'/_xsl' => $xsl );
1689 $output =
xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",NULL,$args,NULL);
1691 fputs(fopen($a_target_dir.
'/toc.html',
'w+'),$output);
1704 include_once(
"Services/MetaData/classes/class.ilMD2XML.php");
1706 $md2xml->setExportMode(
true);
1707 $md2xml->startExport();
1708 $a_xml_writer->appendXML($md2xml->getXML());
1719 include_once(
"Services/MetaData/classes/class.ilMD2XML.php");
1721 $tree->setTableNames(
'sahs_sc13_tree',
'sahs_sc13_tree_node');
1722 $tree->setTreeTablePK(
"slm_id");
1723 $a_xml_writer->xmlStartTag(
"StructureObject");
1724 foreach($tree->getFilteredSubTree($tree->getRootId(),Array(
'page')) as $obj)
1726 if($obj[
'type']==
'')
continue;
1729 $md2xml =
new ilMD2XML($this->
getId(), $obj[
'obj_id'], $obj[
'type']);
1730 $md2xml->setExportMode(
true);
1731 $md2xml->startExport();
1732 $a_xml_writer->appendXML($md2xml->getXML());
1734 $a_xml_writer->xmlEndTag(
"StructureObject");
1748 $tree->setTableNames(
'sahs_sc13_tree',
'sahs_sc13_tree_node');
1749 $tree->setTreeTablePK(
"slm_id");
1750 foreach($tree->getSubTree($tree->getNodeData($tree->getRootId()),
true,array(
'sco',
'ass')) as $sco)
1752 if ($sco[
'type'] ==
"sco")
1754 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
1755 $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
1758 $node->exportScorm($a_inst, $sco_folder, $ver, $expLog);
1760 if ($sco[
'type'] ==
"ass")
1762 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Asset.php");
1763 $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
1766 $node->exportScorm($a_inst, $sco_folder, $ver, $expLog);
1782 $tree->setTableNames(
'sahs_sc13_tree',
'sahs_sc13_tree_node');
1783 $tree->setTreeTablePK(
"slm_id");
1786 if ($a_one_file !=
"")
1791 $sco_tpl =
new ilTemplate(
"tpl.sco.html",
true,
true,
"Modules/Scorm2004");
1792 include_once(
"./Services/COPage/classes/class.ilCOPageHTMLExport.php");
1795 $sco_tpl->setCurrentBlock(
"js_file");
1796 $sco_tpl->setVariable(
"JS_FILE",
"./js/pure.js");
1797 $sco_tpl->parseCurrentBlock();
1798 $sco_tpl->setCurrentBlock(
"js_file");
1799 $sco_tpl->setVariable(
"JS_FILE",
"./js/question_handling.js");
1800 $sco_tpl->parseCurrentBlock();
1803 $sco_tpl->setCurrentBlock(
"head");
1804 $sco_tpl->parseCurrentBlock();
1805 fputs($a_one_file, $sco_tpl->get(
"head"));
1808 include_once(
"./Modules/Scorm2004/classes/class.ilContObjectManifestBuilder.php");
1810 $manifestBuilder->buildManifest(
'12');
1811 $xsl = file_get_contents(
"./Modules/Scorm2004/templates/xsl/module.xsl");
1812 $xml = simplexml_load_string($manifestBuilder->writer->xmlDumpMem());
1813 $args = array(
'/_xml' => $xml->organizations->organization->asXml(),
'/_xsl' => $xsl );
1815 $params = array(
"one_page" =>
"y");
1816 $output =
xslt_process($xh,
"arg:/_xml",
"arg:/_xsl",NULL,$args,$params);
1818 fputs($a_one_file, $output);
1822 foreach($tree->getSubTree($tree->getNodeData($tree->getRootId()),
true,
'sco') as $sco)
1824 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Sco.php");
1825 $sco_folder = $a_target_dir.
"/".$sco[
'obj_id'];
1829 if ($a_one_file ==
"")
1831 $node->exportHTML($a_inst, $sco_folder, $expLog, $a_one_file);
1835 $node->exportHTMLPageObjects($a_inst, $a_target_dir, $expLog,
'full',
1836 "sco", $a_one_file, $sco_tpl);
1840 include_once(
"./Modules/Glossary/classes/class.ilObjGlossary.php");
1847 if ($a_one_file !=
"")
1850 fputs($a_one_file, $sco_tpl->get(
"tail"));
1864 include_once(
"./Services/Style/classes/class.ilSystemStyleHTMLExport.php");
1866 $this->sys_style_html_export->export();
1869 include_once(
"./Services/COPage/classes/class.ilCOPageHTMLExport.php");
1871 $this->co_page_html_export->setContentStyleId(
1873 $this->co_page_html_export->createDirectories();
1874 $this->co_page_html_export->exportStyles();
1875 $this->co_page_html_export->exportSupportScripts();
1877 include_once(
"./Services/MediaObjects/classes/class.ilPlayerUtil.php");
1885 include_once(
"./Services/MediaObjects/classes/class.ilPlayerUtil.php");
1890 copy(
'./Modules/Scorm2004/scripts/scorm_2004.js',$a_target_dir.
'/js/scorm.js');
1891 copy(
'./Modules/Scorm2004/scripts/pager.js',$a_target_dir.
'/js/pager.js');
1892 copy(
'./Modules/Scorm2004/scripts/questions/pure.js',$a_target_dir.
'/js/pure.js');
1893 copy(
'./Modules/Scorm2004/scripts/questions/question_handling.js',
1894 $a_target_dir.
'/js/question_handling.js');
1907 return $this->public_export_file[$a_type];
1916 include_once(
"./Modules/File/classes/class.ilObjFile.php");
1918 foreach ($this->file_ids as $file_id)
1920 $expLog->write(date(
"[y-m-d H:i:s] ").
"File Item ".$file_id);
1921 $file_obj =
new ilObjFile($file_id,
false);
1922 $file_obj->export($a_target_dir);
1932 $this->public_export_file[$a_type] = $a_file;
1952 'SELECT cp_node.cp_node_id ' 1953 .
'FROM cp_node, cp_resource, cp_item ' 1954 .
'WHERE cp_item.cp_node_id = cp_node.cp_node_id ' 1955 .
'AND cp_item.resourceId = cp_resource.id ' 1956 .
'AND scormType = '.$ilDB->quote(
'sco',
'text').
' ' 1957 .
'AND nodeName = '.$ilDB->quote(
'item',
'text').
' ' 1958 .
'AND cp_node.slm_id = '.$ilDB->quote($a_id,
'integer').
' ' 1959 .
'GROUP BY cp_node.cp_node_id' 1964 array_push($scos,
$row[
'cp_node_id']);
1969 for($i = 0; $i < count($scos); $i++)
1971 $res = $ilDB->queryF(
1972 'SELECT c_max FROM cmi_node WHERE (user_id = %s AND cp_node_id = %s)',
1973 array(
'integer',
'integer'),
1974 array($a_user, $scos[$i])
1977 if($ilDB->numRows(
$res) > 0)
1980 if(
$row[
'c_max'] != null)
1983 $max =
$row[
'c_max'];
1987 $retVal = ($set == 1) ? $max : null;
1994 $retAr = array(
"raw" => null,
"max" => null,
"scaled" => null);
1995 $val_set = $ilDB->queryF(
"SELECT c_raw, c_max, scaled FROM cmi_node WHERE (user_id = %s AND cp_node_id = %s)",
1996 array(
'integer',
'integer'),
1997 array($a_user, $a_cp_node_id)
1999 if ($val_set->numRows()>0)
2001 $val_rec = $ilDB->fetchAssoc($val_set);
2002 $retAr[
"raw"] = $val_rec[
'c_raw'];
2003 $retAr[
"max"] = $val_rec[
'c_max'];
2004 $retAr[
"scaled"] = $val_rec[
'scaled'];
2005 if ($val_rec[
'scaled']==null && $val_rec[
'c_raw']!=null && $val_rec[
'c_max']!=null) {
2006 $retAr[
"scaled"] = ($val_rec[
'c_raw'] / $val_rec[
'c_max']);
2023 include_once(
"./Services/Style/classes/class.ilObjStyleSheet.php");
2027 $style_obj = $ilias->obj_factory->getInstanceByObjId($style_id);
2028 $new_id = $style_obj->ilClone();
2029 $a_new_obj->setStyleSheetId($new_id);
2030 $a_new_obj->update();
2033 $a_new_obj->createScorm2004Tree();
2034 $source_tree = $this->
getTree();
2035 $target_tree_root_id = $a_new_obj->getTree()->readRootId();
2036 $childs = $source_tree->getChilds($source_tree->readRootId());
2037 $a_copied_nodes = array();
2038 include_once(
"./Modules/Scorm2004/classes/class.ilSCORM2004Node.php");
2039 foreach ($childs as $c)
static _lookupName($a_user_id)
lookup user name
static _lookupLastAccess($a_obj_id, $a_usr_id)
Return the last access timestamp for a given user.
_getTrackingItems($a_obj_id)
get all tracking items of scorm object
getStyleSheetId()
get ID of assigned style sheet object
copyAuthoredContent($a_new_obj)
Copy authored content (everything done with the editor.
exportHTML4PDF($a_inst, $a_target_dir, &$expLog)
exportHTMLScoObjects($a_inst, $a_target_dir, &$expLog, $a_one_file="")
getTrackingDataAgg($a_user_id, $raw=false)
xmlSetDtdDef($dtdDef)
Sets dtd definition.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_no_raise=false, $a_force_raise=false)
Update status.
static rCopy($a_sdir, $a_tdir, $preserveTimeAttributes=false)
Copies content of a directory $a_sdir recursively to a directory $a_tdir.
HTML export class for pages.
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data
copyPlayerFilesToTargetDirectory($a_target_dir)
Copy css files to target dir.
ilObjSCORM2004LearningModule($a_id=0, $a_call_by_reference=true)
Constructor public.
static exportContentCSS($a_slm_object, $a_target_dir)
Export lm content css to a directory.
static _getSatisfied($a_obj_id, $a_user_id)
xmlStartTag($tag, $attrs=NULL, $empty=FALSE, $encode=TRUE, $escape=TRUE)
Writes a starttag.
HTML export class for system styles.
removeCMIDataForUserAndPackage($user_id, $packageId)
sendExportFile($a_header, $a_content)
send export file to browser
_ISODurationToCentisec($str)
convert ISO 8601 Timeperiods to centiseconds ta
getAssignedGlossary()
get assigned glossary
getEditable()
Get Editable.
prepareHTMLExporter($a_target_dir)
Prepare HTML exporter.
getPreparedMainTemplate($a_tpl="")
Get prepared main template.
static _getScores2004ForUser($a_cp_node_id, $a_user)
exportXMLStructureObjects(&$a_xml_writer, $a_inst, &$expLog)
export structure objects to xml (see ilias_co.dtd)
exportSelected($a_exportall=0, $a_user=array())
setImportSequencing($a_val)
Set import sequencing.
getDataDirectory($mode="filesystem")
get data directory of lm
fetchAssoc($a_set)
Fetch row as associative array from result set.
exportHTMLOne($a_inst, $a_target_dir, &$expLog)
exportFileItems($a_target_dir, &$expLog)
export files of file itmes
getId()
get object id public
static getInstance($a_slm_object, $a_id=0, $a_halt=true)
validate($directory)
Validate all XML-Files in a SCOM-Directory.
deleteTrackingDataOfUsers($a_users)
get all tracked items of current user
exportXMLMetaData(&$a_xml_writer)
export content objects meta data to xml (see ilias_co.dtd)
xslt_process(&$proc, $xml_var, $xslt_var, $dummy, $args, $params, $a_no_warnings=false)
special template class to simplify handling of ITX/PEAR
executeDragDrop($source_id, $target_id, $first_child, $as_subitem=false, $movecopy="move")
Execute Drag Drop Action.
static formatDate(ilDateTime $date)
Format a date public.
static _getUniqueScaledScoreForUser($a_id, $a_user)
Get the Unique Scaled Score of a course Conditions: Only one SCO may set cmi.score.scaled.
getTitle()
get object title public
static getFlashVideoPlayerDirectory()
Get flash video player directory.
redirection script todo: (a better solution should control the processing via a xml file) ...
_lookupLogin($a_user_id)
lookup login
Class ilSCORM2004Sequencing.
getType()
get object type public
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)
Paste item (tree) from clipboard or other learning module to target scorm learning module...
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
getTrackedUsers($a_search)
get all tracked items of current user
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static _getMeasure($a_obj_id, $a_user_id)
getCourseCompletionForUser($a_user)
_lookupStandard($a_id)
Lookup standard flag.
exportXMLScoObjects($a_inst, $a_target_dir, $ver, &$expLog)
export page objects to xml (see ilias_co.dtd)
while($lm_rec=$ilDB->fetchAssoc($lm_set)) $data
getAttemptsForUser($a_user_id)
get number of atttempts for a certain user and package
exportHTML($a_inst, $a_target_dir, &$expLog, $a_one_file="")
Export SCORM package to HTML.
Class ilObjSCORM2004LearningModule.
recursive_dirscan($dir, &$arr)
Recursively scans a given directory and writes path and filename into referenced array.
updateSequencingSettings()
createScorm2004Tree()
Create Scorm 2004 Tree used by Editor.
exportPDF($a_inst, $a_target_dir, &$expLog)
static _getMaxScoreForUser($a_id, $a_user)
Returns score.max for the learning module, refered to the last sco where score.max is set...
Export class for content objects.
setPublicExportFile($a_type, $a_file)
getPublicExportFile($a_type)
get public export file
static yn2tf($a_yn)
convert "y"/"n" to true/false
readObject()
read manifest file public
static _lookupItemTitle($a_node_id)
convert_1_2_to_2004($manifest)
Class ilObjSCORMLearningModule.
static _getCourseCompletionForUser($a_id, $a_user)
Get the completion of a SCORM module for a given user.
Content Object (ILIAS native learning module / digilib book) Manifest export class.
exportScorm($a_inst, $a_target_dir, $ver, &$expLog)
Export (authoring) scorm package.
getImportSequencing()
Get import sequencing.
getModuleVersionForUser($a_user_id)
get module version that tracking data for a user was recorded on
static _getStatus($a_obj_id, $a_user_id)