5 require_once(
"./Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php");
6 require_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMObjectGUI.php");
45 $next_class = $this->ctrl->getNextClass($this);
46 $cmd = $this->ctrl->getCmd(
"frameset");
48 if (!$ilAccess->checkAccess(
"write",
"",
$_GET[
"ref_id"]) &&
49 (!$ilAccess->checkAccess(
"read",
"",
$_GET[
"ref_id"]) ||
50 !$this->slm->getOnline()))
52 $ilias->raiseError($lng->txt(
"permission_denied"), $ilias->error_obj->WARNING);
67 if(!is_array($a_attributes))
71 foreach ($a_attributes as $attribute)
73 $attr[$attribute->name()] = $attribute->value();
86 $javascriptAPI =
true;
87 include_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMObject.php");
93 header(
'Content-Type: text/html; charset=utf-8');
94 echo($lng->txt(
"cont_sc_max_attempt_exceed"));
106 if ($javascriptAPI ==
false) {
107 if (count($items) > 1
108 || strtolower(get_class($this->slm)) ==
"ilobjaicclearningmodule" 109 || strtolower(get_class($this->slm)) ==
"ilobjhacplearningmodule")
111 $this->ctrl->setParameter($this,
"expand",
"1");
112 $exp_link = $this->ctrl->getLinkTarget($this,
"explorer");
113 $this->tpl =
new ilTemplate(
"tpl.sahs_pres_frameset.html",
false,
false,
"Modules/ScormAicc");
114 $this->tpl->setVariable(
"EXPLORER_LINK", $exp_link);
115 $api_link = $this->ctrl->getLinkTarget($this,
"api");
116 $this->tpl->setVariable(
"API_LINK", $api_link);
117 $pres_link = $this->ctrl->getLinkTarget($this,
"view");
118 $this->tpl->setVariable(
"PRESENTATION_LINK", $pres_link);
119 $this->tpl->show(
"DEFAULT",
false);
121 else if (count($items) == 1)
123 $this->tpl =
new ilTemplate(
"tpl.sahs_pres_frameset_one_page.html",
false,
false,
"Modules/ScormAicc");
124 $this->ctrl->setParameter($this,
"autolaunch", $items[0]);
125 $api_link = $this->ctrl->getLinkTarget($this,
"api");
126 $this->tpl->setVariable(
"API_LINK", $api_link);
127 $pres_link = $this->ctrl->getLinkTarget($this,
"view");
128 $this->tpl->setVariable(
"PRESENTATION_LINK", $pres_link);
129 $this->tpl->show(
"DEFAULT",
false);
132 $debug = $this->slm->getDebug();
133 if (count($items) > 1
134 || strtolower(get_class($this->slm)) ==
"ilobjaicclearningmodule" 135 || strtolower(get_class($this->slm)) ==
"ilobjhacplearningmodule")
137 $this->ctrl->setParameter($this,
"expand",
"1");
138 $this->ctrl->setParameter($this,
"jsApi",
"1");
139 $exp_link = $this->ctrl->getLinkTarget($this,
"explorer");
145 $this->tpl =
new ilTemplate(
"tpl.sahs_pres_frameset_js_debug.html",
false,
false,
"Modules/ScormAicc");
150 $this->tpl =
new ilTemplate(
"tpl.sahs_pres_frameset_js.html",
false,
false,
"Modules/ScormAicc");
153 $this->tpl->setVariable(
"EXPLORER_LINK", $exp_link);
154 $pres_link = $this->ctrl->getLinkTarget($this,
"contentSelect");
155 $this->tpl->setVariable(
"PRESENTATION_LINK", $pres_link);
161 $this->tpl =
new ilTemplate(
"tpl.sahs_pres_frameset_js_debug_one_page.html",
false,
false,
"Modules/ScormAicc");
165 $this->tpl =
new ilTemplate(
"tpl.sahs_pres_frameset_js_one_page.html",
false,
false,
"Modules/ScormAicc");
168 $this->ctrl->setParameter($this,
"autolaunch", $items[0]);
170 $api_link = $this->ctrl->getLinkTarget($this,
"apiInitData");
171 $this->tpl->setVariable(
"API_LINK", $api_link);
172 $this->tpl->show(
"DEFAULT",
false);
183 include_once
"./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMInitData.php";
193 $val_set = $ilDB->queryF(
'SELECT package_attempts FROM sahs_user WHERE obj_id = %s AND user_id = %s',
194 array(
'integer',
'integer'), array($this->slm->getId(),$ilUser->getId()));
195 $val_rec = $ilDB->fetchAssoc($val_set);
196 $attempts = $val_rec[
"package_attempts"];
197 if ($attempts == null) $attempts = 0;
284 $res = $ilDB->queryF(
285 'SELECT package_attempts,count(*) cnt FROM sahs_user WHERE obj_id = %s AND user_id = %s GROUP BY package_attempts',
286 array(
'integer',
'integer'),
287 array($this->slm->getId(),$ilUser->getId()));
288 $val_rec = $ilDB->fetchAssoc(
$res);
289 if ($val_rec[
"cnt"] == 0) {
292 'INSERT INTO sahs_user (obj_id,user_id,package_attempts,module_version,last_access) VALUES(%s,%s,%s,%s,%s)',
293 array(
'integer',
'integer',
'integer',
'integer',
'timestamp'),
294 array($this->slm->getId(), $ilUser->getId(), $attempts, $this->slm->getModuleVersion(), date(
'Y-m-d H:i:s')));
296 $attempts = $val_rec[
"package_attempts"];
297 if ($attempts == null) $attempts = 0;
300 'UPDATE sahs_user SET package_attempts = %s, module_version = %s, last_access=%s WHERE obj_id = %s AND user_id = %s ',
301 array(
'integer',
'integer',
'timestamp',
'integer',
'integer'),
302 array($attempts, $this->slm->getModuleVersion(), date(
'Y-m-d H:i:s'), $this->slm->getId(), $ilUser->getId()));
305 include_once(
"./Services/Tracking/classes/class.ilLPStatusWrapper.php");
365 $ilBench->start(
"SCORMExplorer",
"initExplorer");
367 $this->tpl =
new ilTemplate(
"tpl.sahs_exp_main.html",
true,
true,
"Modules/ScormAicc");
369 require_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMExplorer.php");
372 $exp->setFrameTarget($a_target);
376 if (
$_GET[
"jsApi"] ==
"1") $jsApi=
true;
378 if (
$_GET[
"scexpand"] ==
"")
385 $expanded =
$_GET[
"scexpand"];
387 $exp->setExpand($expanded);
389 $exp->forceExpandAll(
true,
false);
390 $ilBench->stop(
"SCORMExplorer",
"initExplorer");
393 $ilBench->start(
"SCORMExplorer",
"setOutput");
395 $ilBench->stop(
"SCORMExplorer",
"setOutput");
397 $ilBench->start(
"SCORMExplorer",
"getOutput");
398 $output = $exp->getOutput($jsApi);
399 $ilBench->stop(
"SCORMExplorer",
"getOutput");
402 $this->tpl->addBlockFile(
"CONTENT",
"content",
"tpl.sahs_explorer.html",
"Modules/ScormAicc");
404 $this->tpl->setVariable(
"EXP_REFRESH", $this->lng->txt(
"refresh"));
405 $this->tpl->setVariable(
"EXPLORER",$output);
406 $this->tpl->setVariable(
"ACTION",
"ilias.php?baseClass=ilSAHSPresentationGUI&cmd=".
$_GET[
"cmd"].
"&frame=".
$_GET[
"frame"].
407 "&ref_id=".$this->slm->getRefId().
"&scexpand=".
$_GET[
"scexpand"]);
408 $this->tpl->parseCurrentBlock();
420 if(is_object($sc_gui_object))
422 $sc_gui_object->view();
426 $this->tpl->show(
false);
431 $this->tpl =
new ilTemplate(
"tpl.scorm_content_select.html",
true,
true,
"Modules/ScormAicc");
433 $this->tpl->setVariable(
'TXT_SPECIALPAGE',$lng->txt(
"seq_toc"));
443 if (
$_GET[
"ref_id"] ==
"") {
444 print (
'alert("no start without ref_id");');
448 header(
'Content-Type: text/javascript; charset=UTF-8');
449 print(
"function iliasApi() {\r\n");
450 $js_data = file_get_contents(
"./Modules/ScormAicc/scripts/basisAPI.js");
452 $js_data = file_get_contents(
"./Modules/ScormAicc/scripts/SCORM1_2standard.js");
456 include_once(
"./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMInitData.php");
470 if ($this->slm->getAPIAdapterName() !=
"API") print(
'var '.$this->slm->getAPIAdapterName().
'=new iliasApi();');
471 else print(
'var API=new iliasApi();');
481 $this->tpl =
new ilTemplate(
"tpl.sahs_api.html",
true,
true,
"Modules/ScormAicc");
484 if (
$_GET[
"autolaunch"] !=
"")
486 $this->tpl->setCurrentBlock(
"auto_launch");
487 include_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMItem.php");
488 include_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMResource.php");
490 $id_ref = $sc_object->getIdentifierRef();
494 if ($scormtype ==
"asset")
496 $item_command =
"IliasLaunchAsset";
500 $item_command =
"IliasLaunchSahs";
502 $this->tpl->setVariable(
"AUTO_LAUNCH_ID",
$_GET[
"autolaunch"]);
503 $this->tpl->setVariable(
"AUTO_LAUNCH_CMD",
"this.autoLaunch();");
504 $this->tpl->setVariable(
"AUTO_LAUNCH_ITEM_CMD", $item_command);
505 $this->tpl->parseCurrentBlock();
509 if ($slm_obj->getSession()) {
510 $session_timeout = (int)($ilias->ini->readVariable(
"session",
"expire"))/2;
512 $session_timeout = 0;
514 $this->tpl->setVariable(
"PING_SESSION",$session_timeout);
516 $this->tpl->setVariable(
"USER_ID",$ilias->account->getId());
517 $this->tpl->setVariable(
"USER_FIRSTNAME",$ilias->account->getFirstname());
518 $this->tpl->setVariable(
"USER_LASTNAME",$ilias->account->getLastname());
519 $this->tpl->setVariable(
"USER_LOGIN",$ilias->account->getLogin());
520 $this->tpl->setVariable(
"USER_OU",$ilias->account->getDepartment());
521 $this->tpl->setVariable(
"REF_ID",
$_GET[
"ref_id"]);
522 $this->tpl->setVariable(
"SESSION_ID",session_id());
523 $this->tpl->setVariable(
"CODE_BASE",
"http://".$_SERVER[
'SERVER_NAME'].substr($_SERVER[
'PHP_SELF'], 0, strpos ($_SERVER[
'PHP_SELF'],
"/ilias.php")));
525 $this->tpl->parseCurrentBlock();
526 $this->tpl->show(
false);
538 $sco_id = (
$_GET[
"sahs_id"] ==
"")
547 include_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMItem.php");
548 include_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMResource.php");
551 $id_ref = $item->getIdentifierRef();
553 $resource->readByIdRef($id_ref, $item->getSLMId());
555 $href = $resource->getHref();
556 $this->tpl =
new ilTemplate(
"tpl.sahs_launch_cbt.html",
true,
true,
"Modules/ScormAicc");
557 $this->tpl->setVariable(
"HREF", $this->slm->getDataDirectory(
"output").
"/".$href);
560 $this->tpl->setVariable(
"LAUNCH_DATA", $item->getDataFromLms());
561 $this->tpl->setVariable(
"MAST_SCORE", $item->getMasteryScore());
562 $this->tpl->setVariable(
"MAX_TIME", $item->getMaxTimeAllowed());
563 $this->tpl->setVariable(
"LIMIT_ACT", $item->getTimeLimitAction());
566 if ($this->slm->getAPIAdapterName() !=
"API")
568 $this->tpl->setCurrentBlock(
"alt_api_ref");
569 $this->tpl->setVariable(
"API_NAME", $this->slm->getAPIAdapterName());
570 $this->tpl->parseCurrentBlock();
573 $val_set = $ilDB->queryF(
' 574 SELECT * FROM scorm_tracking 578 array(
'integer',
'integer',
'integer'),
579 array($ilUser->getId(),$sco_id,$this->slm->getId())
582 while($val_rec = $ilDB->fetchAssoc($val_set))
584 $val_rec[
"rvalue"] = str_replace(
"\r\n",
"\n", $val_rec[
"rvalue"]);
585 $val_rec[
"rvalue"] = str_replace(
"\r",
"\n", $val_rec[
"rvalue"]);
586 $val_rec[
"rvalue"] = str_replace(
"\n",
"\\n", $val_rec[
"rvalue"]);
587 $re_value[$val_rec[
"lvalue"]] = $val_rec[
"rvalue"];
590 foreach($re_value as $var => $value)
594 case "cmi.core.lesson_location":
595 case "cmi.core.lesson_status":
596 case "cmi.core.entry":
597 case "cmi.core.score.raw":
598 case "cmi.core.score.max":
599 case "cmi.core.score.min":
600 case "cmi.core.total_time":
601 case "cmi.core.exit":
602 case "cmi.suspend_data":
604 case "cmi.student_preference.audio":
605 case "cmi.student_preference.language":
606 case "cmi.student_preference.speed":
607 case "cmi.student_preference.text":
611 case "cmi.objectives._count":
613 $this->
setArray(
"cmi.objectives", $value,
"id", $re_value);
614 $this->
setArray(
"cmi.objectives", $value,
"score.raw", $re_value);
615 $this->
setArray(
"cmi.objectives", $value,
"score.max", $re_value);
616 $this->
setArray(
"cmi.objectives", $value,
"score.min", $re_value);
617 $this->
setArray(
"cmi.objectives", $value,
"status", $re_value);
620 case "cmi.interactions._count":
622 $this->
setArray(
"cmi.interactions", $value,
"id", $re_value);
623 for($i=0; $i<$value; $i++)
625 $var2 =
"cmi.interactions.".$i.
".objectives._count";
626 if (isset($v_array[$var2]))
628 $cnt = $v_array[$var2];
629 $this->
setArray(
"cmi.interactions.".$i.
".objectives",
630 $cnt,
"id", $re_value);
642 $this->
setArray(
"cmi.interactions", $value,
"time", $re_value);
643 $this->
setArray(
"cmi.interactions", $value,
"type", $re_value);
644 for($i=0; $i<$value; $i++)
646 $var2 =
"cmi.interactions.".$i.
".correct_responses._count";
647 if (isset($v_array[$var2]))
649 $cnt = $v_array[$var2];
650 $this->
setArray(
"cmi.interactions.".$i.
".correct_responses",
651 $cnt,
"pattern", $re_value);
652 $this->
setArray(
"cmi.interactions.".$i.
".correct_responses",
653 $cnt,
"weighting", $re_value);
656 $this->
setArray(
"cmi.interactions", $value,
"student_response", $re_value);
657 $this->
setArray(
"cmi.interactions", $value,
"result", $re_value);
658 $this->
setArray(
"cmi.interactions", $value,
"latency", $re_value);
664 $this->tpl->setCurrentBlock(
"switch_icon");
665 $this->tpl->setVariable(
"SCO_ID",
$_GET[
"sahs_id"]);
667 $this->tpl->setVariable(
"SCO_ALT",
668 $lng->txt(
"cont_status").
": " 669 .$lng->txt(
"cont_sc_stat_running")
671 $this->tpl->parseCurrentBlock();
675 if (count($items) > 1
676 || strtolower(get_class($this->slm)) ==
"ilobjaicclearningmodule" 677 || strtolower(get_class($this->slm)) ==
"ilobjhacplearningmodule")
679 $this->tpl->setVariable(
"SWITCH_ICON_CMD",
"switch_icon();");
684 $lesson_mode = $this->slm->getDefaultLessonMode();
685 if ($this->slm->getAutoReview())
687 if ($re_value[
"cmi.core.lesson_status"] ==
"completed" ||
688 $re_value[
"cmi.core.lesson_status"] ==
"passed" ||
689 $re_value[
"cmi.core.lesson_status"] ==
"failed")
691 $lesson_mode =
"review";
694 $this->tpl->setVariable(
"LESSON_MODE", $lesson_mode);
697 if ($lesson_mode ==
"normal")
699 $this->tpl->setVariable(
"CREDIT_MODE",
700 str_replace(
"_",
"-", $this->slm->getCreditMode()));
704 $this->tpl->setVariable(
"CREDIT_MODE",
"no-credit");
709 if (!isset($re_value[
"cmi.core.total_time"]))
711 $item->insertTrackData(
"cmi.core.total_time",
"0000:00:00", $sahs_obj_id);
713 if (!isset($re_value[
"cmi.core.lesson_status"]))
715 $item->insertTrackData(
"cmi.core.lesson_status",
"not attempted", $sahs_obj_id);
717 if (!isset($re_value[
"cmi.core.entry"]))
719 $item->insertTrackData(
"cmi.core.entry",
"", $sahs_obj_id);
729 $this->tpl =
new ilTemplate(
"tpl.sahs_finish_cbt.html",
true,
true,
"Modules/ScormAicc");
734 $this->tpl->setVariable(
"SCO_ID",
$_GET[
"sahs_id"]);
736 "scorm/".str_replace(
" ",
"_",
$_GET[
"status"]).
'.png')
738 $this->tpl->setVariable(
"SCO_ALT",
739 $lng->txt(
"cont_status").
": " 740 .$lng->txt(
"cont_sc_stat_".str_replace(
" ",
"_",
$_GET[
"status"])).
", " 741 .$lng->txt(
"cont_total_time").
": " 751 $launch_id =
$_GET[
'launch'];
752 if ($launch_id ==
'null' || $launch_id == null) {
753 require_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMTree.php");
756 if ($node_data && $node_data[type] ==
'sit')
758 $launch_id = $node_data[
'child'];
762 $this->tpl->setVariable(
"SCO_LAUNCH_ID", $launch_id);
769 $this->tpl =
new ilTemplate(
"tpl.sahs_unload_cbt.html",
true,
true,
"Modules/ScormAicc");
771 $this->tpl->setVariable(
"SCO_ID",
$_GET[
"sahs_id"]);
780 $sco_id = (
$_GET[
"asset_id"] ==
"")
789 include_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMItem.php");
790 include_once(
"./Modules/ScormAicc/classes/SCORM/class.ilSCORMResource.php");
793 $id_ref = $item->getIdentifierRef();
795 $resource->readByIdRef($id_ref, $item->getSLMId());
796 $href = $resource->getHref();
797 $this->tpl->setVariable(
"HREF", $this->slm->getDataDirectory(
"output").
"/".$href);
798 $this->tpl =
new ilTemplate(
"tpl.scorm_launch_asset.html",
true,
true,
"Modules/ScormAicc");
799 $this->tpl->setVariable(
"HREF", $this->slm->getDataDirectory(
"output").
"/".$href);
810 $logString = file_get_contents(
'php://input');
811 $ilLog->write(
"ScormAicc: ApiLog: Message: ".$logString);
816 $logString = file_get_contents(
'php://input');
817 $ilLog->write(
"ScormAicc: ApiLog: Warning: ".$logString,20);
825 $this->tpl->setCurrentBlock(
"set_value");
826 $this->tpl->setVariable(
"VAR", $a_var);
827 $this->tpl->setVariable(
"VALUE", $a_value);
828 $this->tpl->parseCurrentBlock();
834 function setArray($a_left, $a_value, $a_name, &$v_array)
836 for($i=0; $i<$a_value; $i++)
838 $var = $a_left.
".".$i.
".".$a_name;
839 if (isset($v_array[$var]))
841 $this->tpl->setCurrentBlock(
"set_value");
842 $this->tpl->setVariable(
"VAR", $var);
843 $this->tpl->setVariable(
"VALUE", $v_array[$var]);
844 $this->tpl->parseCurrentBlock();
859 include_once
"./Modules/ScormAicc/classes/class.ilObjSAHSLearningModuleAccess.php";
862 include_once
"./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php";
867 include_once
"./Modules/ScormAicc/classes/class.ilObjSCORMLearningModule.php";
872 include_once
"./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php";
883 include_once
"./Services/Certificate/classes/class.ilCertificate.php";
884 include_once
"./Modules/ScormAicc/classes/class.ilSCORMCertificateAdapter.php";
888 "last_access" => $last_access
890 $certificate->outCertificate($params,
true);
894 $parent = $tree->getParentId(
$_GET[
"ref_id"]);
895 $ilCtrl->setParameterByClass(
"ilrepositorygui",
"ref_id", $parent);
896 $ilCtrl->redirectByClass(
"ilrepositorygui",
"");
launchSahs()
This function is called by the API applet in the content frame when a SCO is started.
static _lookupLastAccess($a_obj_id, $a_usr_id)
Return the last access timestamp for a given user.
getIliasScormData($a_packageId)
setArray($a_left, $a_value, $a_name, &$v_array)
set single value
apiInitData()
SCORM Data for Javascript-API.
getIliasScormVars($slm_obj)
get_max_attempts()
Get max.
setTargetGet($a_target_get)
set the varname in Get-string public
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_no_raise=false, $a_force_raise=false)
Update status.
_lookupFields($a_user_id)
lookup fields (deprecated; use more specific methods instead)
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
setSingleVariable($a_var, $a_value)
set single value
static _lookupLastAccess($a_obj_id, $a_usr_id)
Return the last access timestamp for a given user.
& getInstance($a_id)
get instance of specialized GUI class
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
getIliasScormResources($a_packageId)
static _lookupObjId($a_id)
special template class to simplify handling of ITX/PEAR
& executeCommand()
execute command
get_max_attempts($a_packageId)
Get max.
_lookupSubType($a_obj_id)
lookup subtype id (scorm, aicc, hacp)
redirection script todo: (a better solution should control the processing via a xml file) ...
increase_attemptAndsave_module_version()
Increases attempts by one for this package.
_lookupScormType($a_obj_id)
Class ilSCORMPresentationGUI.
explorer($a_target="sahs_content")
save the active module version to scorm_tracking
getIliasScormTree($a_packageId)
SCORM certificate adapter.
downloadCertificate()
Download the certificate for the active user.
_lookupIdByIdRef($a_id_ref, $a_slm_id)
fetchSuccessorNode($a_node_id, $a_type="")
get node data of successor node
frameset()
Output main frameset.
get_actual_attempts()
Get number of actual attempts for the user.
Class ilObjSCORMLearningModule.
attrib2arr(&$a_attributes)
_lookupPresentableItems($a_slm_id)
Count number of presentable SCOs/Assets of SCORM learning module.
view()
SCORM content screen.
static _lookupUserCertificate($obj_id, $usr_id=0)
Checks whether a certificate exists for the active user or not.
readRootId()
read root id from database