5require_once(
"./Services/YUI/classes/class.ilYuiUtil.php");
 
    6require_once(
"./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php");
 
   26                        'user_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>user_id),
 
   27                        'learner_name' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>learner_name),
 
   28                        'slm_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>slm_id),
 
   29                        'mode' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>c_mode),
 
   30                        'credit' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>credit),
 
   33                        'accesscount' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>accesscount),
 
   34                        'accessduration' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>accessduration),
 
   35                        'accessed' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>accessed),
 
   36                        'activityAbsoluteDuration' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>activityabsduration),
 
   37                        'activityAttemptCount' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>activityattemptcount),   
 
   38                        'activityExperiencedDuration' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>activityexpduration),
 
   39                        'activityProgressStatus' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>activityprogstatus),
 
   40                        'attemptAbsoluteDuration' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>attemptabsduration),
 
   41                        'attemptCompletionAmount' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>attemptcomplamount),
 
   42                        'attemptCompletionStatus' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>attemptcomplstatus),
 
   43                        'attemptExperiencedDuration' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>attemptexpduration),
 
   44                        'attemptProgressStatus' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>attemptprogstatus),
 
   45                        'audio_captioning' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>audio_captioning),
 
   46                        'audio_level' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>audio_level),
 
   47                        'availableChildren' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>availablechildren),
 
   48                        'cmi_node_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_node_id),
 
   49                        'completion' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>completion),
 
   50                        'completion_status' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>completion_status),
 
   51                        'completion_threshold' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>completion_threshold),
 
   52                        'cp_node_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cp_node_id),
 
   53                        'created' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>created),
 
   54                        'credit' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>credit),
 
   55                        'delivery_speed' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>delivery_speed),
 
   56                        'entry' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_entry),
 
   57                        'exit' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_exit),
 
   58                        'language' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_language),
 
   59                        'launch_data' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>launch_data),
 
   60                        'learner_name' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>learner_name),
 
   61                        'location' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>location),
 
   62                        'max' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_max),
 
   63                        'min' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_min),
 
   64                        'mode' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_mode),
 
   65                        'modified' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>modified),
 
   66                        'progress_measure' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>progress_measure),
 
   67                        'raw' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_raw),
 
   68                        'scaled' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>scaled),
 
   69                        'scaled_passing_score' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>scaled_passing_score),   
 
   70                        'session_time' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>session_time),
 
   71                        'success_status' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>success_status),
 
   72                        'suspend_data' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>suspend_data),
 
   73                        'total_time' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>total_time),
 
   74                        'user_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>user_id),
 
   77                        'cmi_comment_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_comment_id),    
 
   78                        'cmi_node_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_node_id),
 
   79                        'comment' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_comment),   
 
   80                        'timestamp' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_timestamp),       
 
   81                        'location' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>location),   
 
   82                        'sourceIsLMS' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>sourceislms),
 
   84                'correct_response' => array(
 
   85                        'cmi_correct_response_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_correct_resp_id),      
 
   86                        'cmi_interaction_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_interaction_id),
 
   87                        'pattern' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>pattern),
 
   89                'interaction' => array(
 
   90                        'cmi_interaction_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_interaction_id),    
 
   91                        'cmi_node_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_node_id),
 
   92                        'description' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>description),
 
   93                        'id' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>
id),
 
   94                        'latency' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>latency),
 
   95                        'learner_response' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>learner_response),
 
   96                        'result' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>result),
 
   97                        'timestamp' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_timestamp),
 
   98                        'type' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_type),
 
   99                        'weighting' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>weighting),
 
  101                'objective' => array(
 
  102                        'cmi_interaction_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_interaction_id),    
 
  103                        'cmi_node_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_node_id),
 
  104                        'cmi_objective_id' =>  array(
'pattern'=>
null, 
'permission' => self::NONE, 
'default'=>
null, 
'dbfield'=>cmi_objective_id),
 
  105                        'completion_status' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>completion_status),
 
  106                        'description' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>description),
 
  107                        'id' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>
id),
 
  108                        'max' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_max),
 
  109                        'min' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_min),
 
  110                        'raw' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>c_raw),
 
  111                        'scaled' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>scaled),
 
  112                        'progress_measure' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>progress_measure),
 
  113                        'success_status' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>success_status),
 
  114                        'scope' =>  array(
'pattern'=>
null, 
'permission' => self::READWRITE, 
'default'=>
null, 
'dbfield'=>scope),                 
 
  135                                $this->userId = 
$GLOBALS[
'USER'][
'usr_id'];
 
  137                $this->packageId = (int) 
$_REQUEST[
'packageId'];
 
  138                $this->jsMode = strpos($_SERVER[
'HTTP_ACCEPT'], 
'text/javascript')!==
false;
 
  150                $this->ref_id = 
$_GET[
'ref_id'];
 
  151                $this->userId=
$ilUser->getID();
 
  153                if (
$_GET[
'envEditor'] != 
null) {
 
  154                        $this->envEditor = 
$_GET[
'envEditor'];
 
  156                        $this->envEditor = 0;
 
  168                $next_class = $this->ctrl->getNextClass($this);
 
  169                $cmd = $this->ctrl->getCmd();
 
  171                if (!$ilAccess->checkAccess(
"read", 
"", 
$_GET[
"ref_id"]))
 
  173                        $ilias->raiseError(
$lng->txt(
"permission_denied"), 
$ilias->error_obj->WARNING);
 
  204                        case 'getGobjective':   
 
  208                        case 'getSharedData':
 
  212                        case 'setSharedData':
 
  218                                if ($_SERVER[
'REQUEST_METHOD']==
'POST') {
 
  219                                        include_once 
'./Modules/Scorm2004/classes/class.ilSCORM2004StoreData.php';
 
  221                                        $this->slm->getDefaultLessonMode(), $this->slm->getComments(), 
 
  222                                        $this->slm->getInteractions(), $this->slm->getObjectives(), $this->slm->getTime_from_lms());
 
  239                        case 'liveLogContent':
 
  252                        case 'scormPlayerUnload':
 
  253                                include_once 
'./Modules/Scorm2004/classes/class.ilSCORM2004StoreData.php';
 
  269                $js_data = file_get_contents(
"./Modules/Scorm2004/scripts/buildrte/rte.js");
 
  270                if (self::ENABLE_GZIP==1) {
 
  271                        ob_start(
"ob_gzhandler");
 
  272                        header(
'Content-Type: text/javascript; charset=UTF-8');
 
  274                        header(
'Content-Type: text/javascript; charset=UTF-8');
 
  282                $webdir=str_replace(
"/ilias.php",
"",$_SERVER[
"SCRIPT_NAME"]);   
 
  284                $lm_dir=$webdir.
"/".
ILIAS_WEB_DIR.
"/".$this->
ilias->client_id .
"/lm_data".
"/lm_".$this->packageId;
 
  292                $initSuspendData = 
null;
 
  293                $cmi_learner_id = (string) 
$ilUser->getID();
 
  295                if(
$lm_set->get(
"scorm_login_as_learner_id") == 1) {
 
  296                        $cmi_learner_id = (string) 
$ilUser->getLogin();
 
  301                        'learner_id' => (
string) $ilUser->getID(),
 
  302                        'cmi_learner_id' => $cmi_learner_id,
 
  303                        'course_id' => (
string) $this->packageId,
 
  304                        'learner_name' => 
$ilUser->getFirstname().
" ".
$ilUser->getLastname(),
 
  305                        'mode' => $this->slm->getDefaultLessonMode(),
 
  306                        'credit' => $this->slm->getCreditMode(),
 
  307                        'auto_review' => $this->slm->getAutoReviewChar(),
 
  308                        'hide_navig' => $this->slm->getHideNavig(),
 
  309                        'hide_menu' => $this->slm->getNoMenu(),
 
  310                        'ie_force_render' => $this->slm->getIe_force_render(),
 
  311                        'fourth_edition' => $this->slm->getFourth_edition(),
 
  312                        'sequencing_enabled' => $this->slm->getSequencing(),
 
  313                        'interactions_storable' => $this->slm->getInteractions(),
 
  314                        'objectives_storable' => $this->slm->getObjectives(),
 
  315                        'comments_storable' => $this->slm->getComments(),
 
  316                        'time_from_lms' => $this->slm->getTime_from_lms(),
 
  317                        'auto_last_visited' => $this->slm->getAuto_last_visited(),
 
  318                        'checkSetValues' => $this->slm->getCheck_values(),
 
  319                        'auto_suspend' => $this->slm->getAutoSuspend(),
 
  320                        'suspend_data' => $initSuspendData,
 
  323                        'adlact_data' => 
null,
 
  324                        'globalobj_data' => 
null 
  326                include_once 
'./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMInitData.php';
 
  345                $initSuspendData = 
null;
 
  346                $initAdlactData = 
null;
 
  347                if ($this->slm->getSequencing() == 
true) {
 
  356                if ($this->slm->getSession()) {
 
  360                        $session_timeout = 0;
 
  362                $config[
'session_ping'] = $session_timeout;
 
  365                $store_url = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=cmi&ref_id='.
$_GET[
"ref_id"];
 
  366                $unload_url = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=scormPlayerUnload&ref_id='.
$_GET[
"ref_id"];
 
  367                if ($this->slm->getSessionDeactivated()){
 
  368                        $store_url = 
'storeScorm2004.php?package_id='.$this->packageId.
'&ref_id='.
$_GET[
"ref_id"].
'&client_id='.$this->
ilias->client_id.
'&do=store';
 
  369                        $unload_url = 
'storeScorm2004.php?package_id='.$this->packageId.
'&ref_id='.
$_GET[
"ref_id"].
'&client_id='.$this->
ilias->client_id.
'&do=unload';
 
  371                $config[
'cp_url']                               = 
'ilias.php?baseClass=ilSAHSPresentationGUI' . 
'&cmd=cp&ref_id='.$_GET[
"ref_id"];
 
  372                $config[
'cmi_url']                              = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=cmi&ref_id='.
$_GET[
"ref_id"];
 
  373                $config[
'store_url']                    = $store_url;
 
  374                $config[
'get_adldata_url']              = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=getSharedData&ref_id='.
$_GET[
"ref_id"];
 
  375                $config[
'set_adldata_url']              = 
'ilias.php?baseClass=ilSAHSPresentationGUI' . 
'&cmd=setSharedData&ref_id=' . 
$_GET[
"ref_id"];
 
  376                $config[
'adlact_url']                   = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=adlact&ref_id='.
$_GET[
"ref_id"];
 
  377                $config[
'specialpage_url']              = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=specialPage&ref_id='.
$_GET[
"ref_id"];
 
  378                $config[
'suspend_url']                  = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=suspend&ref_id='.
$_GET[
"ref_id"];
 
  379                $config[
'get_suspend_url']              = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=getSuspend&ref_id='.
$_GET[
"ref_id"];
 
  381                $config[
'gobjective_url']               = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=gobjective&ref_id='.
$_GET[
"ref_id"];
 
  382                $config[
'get_gobjective_url']   = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=getGobjective&ref_id='.
$_GET[
"ref_id"];
 
  383                $config[
'ping_url']                             = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=pingSession&ref_id='.
$_GET[
"ref_id"];
 
  384                $config[
'scorm_player_unload_url']= $unload_url;
 
  385                $config[
'post_log_url']                 = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=postLogEntry&ref_id='.
$_GET[
"ref_id"];
 
  386                $config[
'livelog_url']                  = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=liveLogContent&ref_id='.
$_GET[
"ref_id"];
 
  390                $config[
'envEditor']                    = $this->envEditor;
 
  393                $config[
'debug']                                = $this->slm->getDebug();
 
  399                $langstrings[
'btnStart'] = 
$lng->txt(
'scplayer_start');
 
  400                $langstrings[
'btnExit'] = 
$lng->txt(
'scplayer_exit');
 
  401                $langstrings[
'btnExitAll'] = 
$lng->txt(
'scplayer_exitall');
 
  402                $langstrings[
'btnSuspendAll'] = 
$lng->txt(
'scplayer_suspendall');
 
  403                $langstrings[
'btnPrevious'] = 
$lng->txt(
'scplayer_previous');
 
  404                $langstrings[
'btnContinue'] = 
$lng->txt(
'scplayer_continue');
 
  405                $langstrings[
'btnhidetree']=
$lng->txt(
'scplayer_hidetree');
 
  406                $langstrings[
'btnshowtree']=
$lng->txt(
'scplayer_showtree');
 
  407                $langstrings[
'linkexpandTree']=
$lng->txt(
'scplayer_expandtree');
 
  408                $langstrings[
'linkcollapseTree']=
$lng->txt(
'scplayer_collapsetree');
 
  409                $langstrings[
'contCreditOff']=
$lng->txt(
'cont_credit_off');
 
  410                $config[
'langstrings'] = $langstrings;
 
  414                $this->tpl = 
new ilTemplate(
"tpl.scorm2004.player.html", 
true, 
true, 
"Modules/Scorm2004");
 
  416                include_once(
"./Services/jQuery/classes/class.iljQueryUtil.php");
 
  420                $rte_css = $this->slm->getDataDirectory().
"/ilias_css_4_2/css/style.css";
 
  421                if (is_file($rte_css))
 
  423                        $this->tpl->setCurrentBlock(
"rte_css");
 
  424                        $this->tpl->setVariable(
"RTE_CSS", $rte_css);
 
  425                        $this->tpl->parseCurrentBlock();
 
  429                $this->tpl->setVariable(
'JSON_LANGSTRINGS', json_encode($langstrings));
 
  433                $this->tpl->setVariable(
'TREE_JS', 
"./Modules/Scorm2004/scripts/ilNestedList.js");
 
  434                $this->tpl->setVariable($langstrings);
 
  435                $this->tpl->setVariable(
'DOC_TITLE', 
'ILIAS SCORM 2004 Player');
 
  436                if ($this->slm->getIe_compatibility()) $this->tpl->setVariable(
'IE_COMPATIBILITY', 
'<meta http-equiv="X-UA-Compatible" content="IE=7" />');
 
  438                $this->tpl->setVariable(
'INIT_CP_DATA', json_encode(json_decode($this->
getCPDataInit())));
 
  439                $this->tpl->setVariable(
'INIT_CMI_DATA', json_encode($this->
getCMIData($this->userId, $this->packageId)));
 
  440                $this->tpl->setVariable(
'INIT_ADLACT_DATA', json_encode($initAdlactData));
 
  441                $this->tpl->setVariable(
'INIT_GLOBALOBJ_DATA', json_encode($initGlobalobjData));
 
  442                $this->tpl->setVariable(
'JS_DATA', json_encode($config));
 
  443                list($tsfrac, $tsint) = explode(
' ', microtime());
 
  444                $this->tpl->setVariable(
'TIMESTAMP', sprintf(
'%d%03d', $tsint, 1000*(
float)$tsfrac));
 
  445                $this->tpl->setVariable(
'BASE_DIR', 
'./Modules/Scorm2004/');
 
  446                $this->tpl->setVariable(
'TXT_COLLAPSE',
$lng->txt(
'scplayer_collapsetree'));
 
  447                if ($this->slm->getDebug()) {
 
  448                        $this->tpl->setVariable(
'TXT_DEBUGGER',
$lng->txt(
'scplayer_debugger'));
 
  449                        $this->tpl->setVariable(
'DEBUG_URL',
"PopupCenter('ilias.php?baseClass=ilSAHSPresentationGUI&cmd=debugGUI&ref_id=".
$_GET[
"ref_id"].
"','Debug',800,600);");
 
  451                        $this->tpl->setVariable(
'TXT_DEBUGGER',
'');
 
  452                        $this->tpl->setVariable(
'DEBUG_URL',
'');
 
  456                $this->tpl->setVariable(
'INLINE_CSS', ilSCORM13Player::getInlineCss());
 
  459                if ($this->slm->getCacheDeactivated()){
 
  460                        $this->tpl->setVariable(
'JS_SCRIPTS', 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=getRTEjs&ref_id='.
$_GET[
"ref_id"]);
 
  462                        $this->tpl->setVariable(
'JS_SCRIPTS', 
'./Modules/Scorm2004/scripts/buildrte/rte-min.js');
 
  466                if ($this->slm->getNoMenu()==
"y") {
 
  467                        $this->tpl->setVariable(
"VAL_DISPLAY", 
"style=\"display:none;\"");
 
  469                        $this->tpl->setVariable(
"VAL_DISPLAY", 
"");
 
  476                                header(
'Content-Type: text/html; charset=utf-8');
 
  477                                echo(
$lng->txt(
"cont_sc_max_attempt_exceed"));
 
  486                $this->tpl->show(
"DEFAULT", 
false);
 
  494                $is_tpl = 
new ilTemplate(
"tpl.scorm2004.inlinecss.html", 
true, 
true, 
"Modules/Scorm2004");
 
  503                return $is_tpl->get();
 
  511                        header(
'Content-Type: text/javascript; charset=UTF-8');
 
  516                        header(
'Content-Type: text/plain; charset=UTF-8');
 
  517                        $jsdata = json_decode($jsdata);
 
  526                        'SELECT jsdata FROM cp_package WHERE obj_id = %s',
 
  528                        array($this->packageId)
 
  532                $jsdata = $packageData[
'jsdata'];
 
  533                if (!$jsdata) $jsdata = 
'null';
 
  544                        'SELECT activitytree FROM cp_package WHERE obj_id = %s',
 
  546                        array($this->packageId)
 
  550                $activitytree = 
$data[
'activitytree'];
 
  554                        $activitytree = 
'null';
 
  556                return $activitytree;
 
  564                        header(
'Content-Type: text/javascript; charset=UTF-8');
 
  565                        print($activitytree);
 
  569                        header(
'Content-Type: text/plain; charset=UTF-8');
 
  570                        $activitytree = json_decode($activitytree);
 
  571                        print_r($activitytree);
 
  578                header(
'Content-Type: text/plain; charset=UTF-8');
 
  587                        'SELECT global_to_system FROM cp_package WHERE obj_id = %s',
 
  589                        array($this->packageId)
 
  593                $gystem = 
$data[
'global_to_system'];
 
  607                        'SELECT data FROM cp_suspend WHERE obj_id = %s AND user_id = %s',
 
  608                        array(
'integer', 
'integer'),
 
  609                        array($this->packageId, 
$ilUser->getId())
 
  615                        'DELETE FROM cp_suspend WHERE obj_id = %s AND user_id = %s',
 
  616                        array(
'integer', 
'integer'),
 
  617                        array($this->packageId, 
$ilUser->getId())
 
  619                return $data[
'data'];
 
  627                        header(
'Content-Type: text/javascript; charset=UTF-8');
 
  628                        print($suspend_data);
 
  632                        header(
'Content-Type: text/plain; charset=UTF-8');
 
  633                        $suspend_data = json_decode($suspend_data);
 
  634                        print_r($suspend_data); 
 
  643                        'SELECT * FROM cp_suspend WHERE obj_id = %s     AND user_id = %s',
 
  644                        array(
'integer', 
'integer'), 
 
  645                        array($this->packageId, 
$ilUser->getId())
 
  650                        $ilDB->insert(
'cp_suspend', array(
 
  651                                'data'          => array(
'clob', file_get_contents(
'php://input')),
 
  652                                'obj_id'        => array(
'integer', $this->packageId),
 
  653                                'user_id'       => array(
'integer', 
$ilUser->getId())
 
  658                        $ilDB->update(
'cp_suspend',
 
  660                                        'data'          => array(
'clob', file_get_contents(
'php://input'))
 
  663                                        'obj_id'        => array(
'integer', $this->packageId),
 
  664                                        'user_id'       => array(
'integer', 
$ilUser->getId())
 
  675                $g_data = 
new stdClass();
 
  677                $global_to_system = 1;
 
  679                $res = 
$ilDB->queryF(
'SELECT global_to_system FROM cp_package WHERE obj_id = %s',
 
  681                        array($this->packageId)
 
  685                        $global_to_system = 
$data[
'global_to_system'];
 
  688                $query = 
'SELECT objective_id, scope_id, satisfied, measure, user_id,  
  689                                                 score_min, score_max, score_raw, completion_status,  
  691                       . 
'FROM cmi_gobjective, cp_node, cp_mapinfo '  
  692                           . 
'WHERE (cmi_gobjective.objective_id <> %s AND cmi_gobjective.status IS NULL '  
  693                           . 
'AND cp_node.slm_id = %s AND cp_node.nodename = %s ' 
  694                           . 
'AND cp_node.cp_node_id = cp_mapinfo.cp_node_id '   
  695                           . 
'AND cmi_gobjective.objective_id = cp_mapinfo.targetobjectiveid) ' 
  696                           . 
'GROUP BY objective_id, scope_id, satisfied, measure, user_id, 
  697                                       score_min, score_max, score_raw, completion_status,  
  701                        array(
'text', 
'integer', 
'text'),
 
  702                        array(
'-course_overall_status-', $this->packageId, 
'mapInfo')
 
  706                        if (($global_to_system == 1 && 
$row[
'scope_id'] == 0) || ($global_to_system == 0 && 
$row[
'scope_id'] == $this->packageId)) {
 
  707                                $learner = 
$row[
'user_id'];
 
  708                                $objective_id = 
$row[
'objective_id'];
 
  709                                if(
$row[
'scope_id'] == 0)
 
  715                                        $scope = 
$row[
'scope_id'];
 
  718                                if(
$row[
'satisfied'] != NULL)
 
  720                                        $toset = 
$row[
'satisfied'];
 
  721                                        $g_data->{
"satisfied"}->{$objective_id}->{$learner}->{$scope} = $toset;
 
  724                                if(
$row[
'measure'] != NULL)
 
  726                                        $toset = 
$row[
'measure'];
 
  727                                        $g_data->{
"measure"}->{$objective_id}->{$learner}->{$scope} = $toset;
 
  730                                if(
$row[
'score_raw'] != NULL)
 
  732                                        $toset = 
$row[
'score_raw'];
 
  733                                        $g_data->{
"score_raw"}->{$objective_id}->{$learner}->{$scope} = $toset;
 
  736                                if(
$row[
'score_min'] != NULL)
 
  738                                        $toset = 
$row[
'score_min'];
 
  739                                        $g_data->{
"score_min"}->{$objective_id}->{$learner}->{$scope} = $toset;
 
  742                                if(
$row[
'score_max'] != NULL)
 
  744                                        $toset = 
$row[
'score_max'];
 
  745                                        $g_data->{
"score_max"}->{$objective_id}->{$learner}->{$scope} = $toset;
 
  748                                if(
$row[
'progress_measure'] != NULL)
 
  750                                        $toset = 
$row[
'progress_measure'];
 
  751                                        $g_data->{
"progress_measure"}->{$objective_id}->{$learner}->{$scope} = $toset;
 
  754                                if(
$row[
'completion_status'] != NULL)
 
  756                                        $toset = 
$row[
'completion_status'];
 
  757                                        $g_data->{
"completion_status"}->{$objective_id}->{$learner}->{$scope} = $toset;
 
  767                $gobjective_data = json_encode($this->readGObjectiveInit());
 
  770                        header(
'Content-Type: text/javascript; charset=UTF-8');
 
  771                        print($gobjective_data);
 
  775                        header(
'Content-Type: text/plain; charset=UTF-8');
 
  776                        $gobjective_data = json_decode($gobjective_data);
 
  777                        print_r($gobjective_data);      
 
  787                $dataStores = array( 
"data" => array(),
 
  788                                                         "permissions" => array());
 
  789                $readPermissions = array();
 
  791                $query = 
'SELECT target_id, read_shared_data, write_shared_data ' 
  793                           . 
'WHERE slm_id = %s ' 
  794                           . 
'AND sco_node_id = %s '  
  795                           . 
'GROUP BY target_id, read_shared_data, write_shared_data';
 
  800                        array(
'integer', 
'integer'),
 
  801                        array($this->packageId, $sco_node_id)
 
  808                        $storeVal = (
$row[
'read_shared_data'] == 0 && 
$row[
'write_shared_data'] == 1 )
 
  812                        $dataStores[
"data"][
$row[
'target_id']] = array( 
"store" => $storeVal,
 
  813                                                                        "readSharedData" => 
$row[
'read_shared_data'],
 
  814                                                                        "writeSharedData" => 
$row[
'write_shared_data']);
 
  815                        $dataStores[
"readPermissions"][
$row[
'target_id']] = 
$row[
'read_shared_data'];   
 
  818                if(count($dataStores) < 1)
 
  824                else if ($dataStores[
"readPermissions"] != 
null && array_sum($dataStores[
"readPermissions"]) != 0)
 
  831                        $params = array(
"types" => array(
"integer", 
"integer"),
 
  832                                                    "values" => array($this->userId, $this->packageId));
 
  838                        foreach($dataStores[
"data"] as $key => $val)
 
  840                                if($dataStores[
"readPermissions"][$key] == 1 
 
  841                                        && $dataStores[
"data"][$key][
"store"] != 
'notWritten')
 
  843                                        $params[
"types"][] = 
"text";
 
  844                                        $params[
"values"][] = $key;
 
  845                                        $paramTemplate .= 
'%s, ';
 
  850                        $paramTemplate = substr($paramTemplate, 0, strlen($paramTemplate) - 2);
 
  853                        $query = 
'SELECT target_id, store ' 
  854                                   . 
'FROM adl_shared_data ' 
  855                                   . 
'WHERE user_id = %s ' 
  857                                   . 
'AND target_id IN (' . $paramTemplate . 
')';
 
  868                                $dataStores[
"data"][
$row[
'target_id']][
"store"] = 
$row[
'store'];
 
  872                header(
'Content-Type: text/javascript; charset=UTF-8');
 
  874                echo json_encode($dataStores[
"data"]);  
 
  880                $g_data = json_decode(file_get_contents(
'php://input'));
 
  883                $query = 
'SELECT dm.target_id, sd.store ' 
  884                           . 
'FROM cp_datamap dm ' 
  885                           . 
'LEFT JOIN adl_shared_data sd ' 
  886                           . 
'ON(dm.slm_id = sd.slm_id AND dm.target_id = sd.target_id) ' 
  887                           . 
'WHERE sco_node_id = %s ' 
  888                           . 
'AND dm.slm_id = %s ' 
  889                           . 
'AND write_shared_data = 1 ' 
  890                           . 
'AND user_id = %s';
 
  894                        array(
'integer', 
'integer', 
'integer'),
 
  895                        array($sco_node_id, $this->packageId, $this->userId)
 
  898                $dataStores = array();
 
  899                $originalVals = array();
 
  902                        $id = 
$row[
'target_id'];
 
  903                        $dataStores[$id] = $g_data->{$id};
 
  904                        $originalVals[$id] = 
$row[
'store'];
 
  909                foreach($g_data as $key => $obj)
 
  913                        if(array_key_exists($key, $dataStores) )        
 
  915                                if($obj == 
'notWritten') 
continue;
 
  917                                $query = 
'UPDATE adl_shared_data ' 
  919                                           . 
'WHERE user_id = %s ' 
  920                                           . 
'AND target_id = %s ' 
  921                                           . 
'AND slm_id = %s ';
 
  925                                        array(
'text', 
'integer', 
'text', 
'integer'),
 
  926                                        array($dataStores[$key], $this->userId, $key, $this->packageId) 
 
  932                                        'SELECT write_shared_data ' 
  934                                          . 
'WHERE target_id = %s ' 
  936                                          . 
'AND sco_node_id = %s',
 
  937                                         array(
'text', 
'integer', 
'integer'),
 
  938                                         array($key, $this->packageId, $sco_node_id));
 
  941                                if(
$row[
"write_shared_data"] != 1)
 
  948                                        'INSERT INTO adl_shared_data VALUES (%s, %s, %s, %s)',
 
  949                                        array(
'integer', 
'integer', 
'text', 
'text'),
 
  950                                        array($this->packageId, $this->userId, $key, $obj));                    
 
  962                $specialpages = array (
 
  963                        "_COURSECOMPLETE_"      =>              
"seq_coursecomplete",
 
  964                        "_ENDSESSION_"          =>              
"seq_endsession",
 
  965                        "_SEQBLOCKED_"          =>              
"seq_blocked",
 
  966                        "_NOTHING_"                     =>              
"seq_nothing",
 
  967                        "_ERROR_"                       =>      
"seq_error",
 
  968                        "_DEADLOCK_"            =>              
"seq_deadlock",
 
  969                        "_INVALIDNAVREQ_"       =>              
"seq_invalidnavreq",
 
  970                        "_SEQABANDON_"          =>              
"seq_abandon",
 
  971                        "_SEQABANDONALL_"       =>              
"seq_abandonall",
 
  975                $this->tpl = 
new ilTemplate(
"tpl.scorm2004.specialpages.html", 
false, 
false, 
"Modules/Scorm2004");
 
  977                $this->tpl->setVariable(
'TXT_SPECIALPAGE',
$lng->txt($specialpages[$this->page]));
 
  978                if ($this->page!=
"_TOC_" && $this->page!=
"_SEQABANDON_" && $this->page!=
"_SEQABANDONALL_" ) {
 
  979                        $this->tpl->setVariable(
'CLOSE_WINDOW',
$lng->txt(
'seq_close'));
 
  981                        $this->tpl->setVariable(
'CLOSE_WINDOW',
"");     
 
  983                $this->tpl->show(
"DEFAULT", 
false);                             
 
  989                $data = $this->getCMIData($this->userId, $this->packageId);
 
  992                        header(
'Content-Type: text/javascript; charset=UTF-8');
 
  997                        header(
'Content-Type: text/plain; charset=UTF-8');
 
 1010                foreach (self::$schema[$table] as $k => $v) 
 
 1013                        if (isset($value) && is_string($v) && !preg_match($v, $value)) 
 
 1026                        'schema' => array(), 
 
 1030                foreach(self::$schema as $k => &$v)
 
 1032                        $result[
'schema'][$k] = array_keys($v);
 
 1037                                        $q = 
'SELECT cmi_node.*  
 1039                                                INNER JOIN cp_node ON cmi_node.cp_node_id = cp_node.cp_node_id 
 1040                                                WHERE cmi_node.user_id = %s 
 1041                                                AND cp_node.slm_id = %s';
 
 1048                                                if ($this->slm->getComments()) $q = 
'SELECT  
 1049                                                        cmi_comment.cmi_comment_id,  
 1050                                                        cmi_comment.cmi_node_id,  
 1051                                                        cmi_comment.c_comment,  
 1052                                                        cmi_comment.c_timestamp,  
 1053                                                        cmi_comment.location,  
 1054                                                        cmi_comment.sourceislms  
 1056                                                        INNER JOIN cmi_node ON cmi_node.cmi_node_id = cmi_comment.cmi_node_id  
 1057                                                        INNER JOIN cp_node ON cp_node.cp_node_id = cmi_node.cp_node_id 
 1058                                                        WHERE cmi_node.user_id = %s 
 1059                                                        AND cp_node.slm_id = %s  
 1060                                                        ORDER BY cmi_comment.cmi_comment_id';
 
 1065                                case "correct_response":
 
 1068                                                if ($this->slm->getInteractions()) $q = 
'SELECT cmi_correct_response.*  
 1069                                                        FROM cmi_correct_response  
 1070                                                        INNER JOIN cmi_interaction  
 1071                                                        ON cmi_interaction.cmi_interaction_id = cmi_correct_response.cmi_interaction_id  
 1072                                                        INNER JOIN cmi_node ON cmi_node.cmi_node_id = cmi_interaction.cmi_node_id  
 1073                                                        INNER JOIN cp_node ON cp_node.cp_node_id = cmi_node.cp_node_id 
 1074                                                        WHERE cmi_node.user_id = %s 
 1075                                                        AND cp_node.slm_id = %s  
 1076                                                        ORDER BY cmi_correct_response.cmi_correct_resp_id';
 
 1083                                                if ($this->slm->getInteractions()) $q = 
'SELECT  
 1084                                                        cmi_interaction.cmi_interaction_id,  
 1085                                                        cmi_interaction.cmi_node_id,  
 1086                                                        cmi_interaction.description,  
 1088                                                        cmi_interaction.latency,  
 1089                                                        cmi_interaction.learner_response,  
 1090                                                        cmi_interaction.result,  
 1091                                                        cmi_interaction.c_timestamp,  
 1092                                                        cmi_interaction.c_type,  
 1093                                                        cmi_interaction.weighting 
 1094                                                        FROM cmi_interaction  
 1095                                                        INNER JOIN cmi_node ON cmi_node.cmi_node_id = cmi_interaction.cmi_node_id  
 1096                                                        INNER JOIN cp_node ON cp_node.cp_node_id = cmi_node.cp_node_id 
 1097                                                        WHERE cmi_node.user_id = %s 
 1098                                                        AND cp_node.slm_id = %s  
 1099                                                        ORDER BY cmi_interaction.cmi_interaction_id';
 
 1105                                                if ($this->slm->getObjectives()) $q = 
'SELECT  
 1106                                                        cmi_objective.cmi_interaction_id,  
 1107                                                        cmi_objective.cmi_node_id,  
 1108                                                        cmi_objective.cmi_objective_id,  
 1109                                                        cmi_objective.completion_status,  
 1110                                                        cmi_objective.description,  
 1112                                                        cmi_objective.c_max,  
 1113                                                        cmi_objective.c_min,  
 1114                                                        cmi_objective.c_raw,  
 1115                                                        cmi_objective.scaled,  
 1116                                                        cmi_objective.progress_measure,  
 1117                                                        cmi_objective.success_status,  
 1120                                                        INNER JOIN cmi_node ON cmi_node.cmi_node_id = cmi_objective.cmi_node_id  
 1121                                                        INNER JOIN cp_node ON cp_node.cp_node_id = cmi_node.cp_node_id 
 1122                                                        WHERE cmi_node.user_id = %s 
 1123                                                        AND cp_node.slm_id = %s  
 1124                                                        ORDER BY cmi_objective.cmi_objective_id';
 
 1129                                        $q = 
'SELECT usr_data.usr_id user_id,  
 1130                                                CONCAT(CONCAT(COALESCE(usr_data.firstname, \'\'), \' \'), COALESCE(usr_data.lastname, \'\')) learner_name,  
 1131                                                sahs_lm.id slm_id , sahs_lm.default_lesson_mode "mode", sahs_lm.credit 
 1132                                                FROM usr_data, cp_package 
 1133                                                INNER JOIN sahs_lm ON cp_package.obj_id = sahs_lm.id  
 1134                                                WHERE usr_data.usr_id = %s 
 1135                                                AND sahs_lm.id = %s';
 
 1141                        $result[
'data'][$k] = array();
 
 1143                                $types = array(
'integer', 
'integer');
 
 1145                                $res = 
$ilDB->queryF($q, $types, $values);
 
 1149                                        $tmp_result = array();
 
 1150                                        foreach(
$row as $key => $value)
 
 1152                                                if ($k == 
"comment" && $key == 
"c_timestamp" && strpos($value,
' ')==10) $value = str_replace(
' ',
'T',$value);
 
 1153                                                $tmp_result[] = $value;
 
 1154                                                if($k==
"node" && $key==
"additional_tables" && $i_check<$value){
 
 1159                                        $result[
'data'][$k][] = $tmp_result;
 
 1171                if(!is_array($a_array) or !count($a_array))
 
 1176                foreach($a_array as $k => $item)
 
 1178                        if ($item !=  
null) {
 
 1179                                $a_array[$k] = 
$ilDB->quote($item);
 
 1181                                $a_array[$k] = 
"NULL";
 
 1197                include_once(
"./Services/MediaObjects/classes/class.ilObjMediaObject.php");
 
 1208                return unserialize(base64_decode(
$_COOKIE[IL_OP_COOKIE_NAME]));
 
 1213                setCookie(IL_OP_COOKIE_NAME, base64_encode(serialize($cook)));
 
 1226                        die(
'Error: Cookie could not be established');
 
 1229                $SAHS_LM_POSITION = 1; 
 
 1231                $comp = explode(
'/', (
string) 
$path);
 
 1232                $sahs = $comp[$SAHS_LM_POSITION];
 
 1233                $cook = $this->getCookie();
 
 1234                $perm = $cook[$sahs];
 
 1243                                header(
'HTTP/1.0 401 Unauthorized');
 
 1244                                die(
'/* Unauthorized */');
 
 1247                        $cook[$sahs] = $perm;
 
 1248                        $this->setCookie($cook);
 
 1252                if (!is_file(
$path))
 
 1254                        header(
'HTTP/1.0 404 Not Found');
 
 1255                        die(
'/* Not Found ' . 
$path . 
'*/');
 
 1259                header(
'Content-Type: ' . $this->getMimetype(
$path));
 
 1262                header(
'Expires: ' . gmdate(
'D, d M Y H:i:s', time() + session_cache_expire()*60) . 
' GMT');
 
 1263                header(
'Cache-Control: private');
 
 1275                include_once 
"./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMInitData.php";
 
 1284                        'SELECT module_version FROM sahs_lm WHERE id = %s', 
 
 1286                        array($this->packageId));
 
 1289                return $row[
'module_version']; 
 
 1298                $val_set = 
$ilDB->queryF(
'SELECT package_attempts FROM sahs_user WHERE obj_id = %s AND user_id = %s',
 
 1299                        array(
'integer',
'integer'), array($this->packageId,$this->userId));
 
 1300                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
 1301                $attempts = $val_rec[
"package_attempts"];
 
 1302                if ($attempts == 
null) $attempts = 0;
 
 1313                        'SELECT package_attempts,count(*) cnt FROM sahs_user WHERE obj_id = %s AND user_id = %s GROUP BY package_attempts',
 
 1314                        array(
'integer',
'integer'),
 
 1315                        array($this->slm->getId(),
$ilUser->getId()));
 
 1317                if ($val_rec[
"cnt"] == 0) { 
 
 1320                                'INSERT INTO sahs_user (obj_id,user_id,package_attempts,module_version,last_access) VALUES(%s,%s,%s,%s,%s)',
 
 1321                                array(
'integer', 
'integer', 
'integer', 
'integer', 
'timestamp'),
 
 1322                                array($this->slm->getId(), 
$ilUser->getId(), $attempts, $this->slm->getModuleVersion(), date(
'Y-m-d H:i:s')));
 
 1324                        $attempts = $val_rec[
"package_attempts"];
 
 1325                        if ($attempts == 
null) $attempts = 0;
 
 1328                                'UPDATE sahs_user SET package_attempts = %s, module_version = %s, last_access=%s WHERE obj_id = %s AND user_id = %s ',
 
 1329                                array(
'integer', 
'integer', 
'timestamp', 
'integer', 
'integer'),
 
 1330                                array($attempts, $this->slm->getModuleVersion(), date(
'Y-m-d H:i:s'), $this->slm->getId(), 
$ilUser->getId()));
 
 1339                                          SELECT shared_data_global_to_system    
 1343                                  array($this->packageId)
 
 1346                $shared_global_to_sys = 
$ilDB->fetchObject(
$res)->shared_data_global_to_system;
 
 1353                                          array(
'integer', 
'integer'),
 
 1354                                          array($this->packageId, $this->userId)
 
 1360                if($dat != 
null && $dat != 
'' ) $suspended = 
true;
 
 1362                if($shared_global_to_sys == 0 && !$suspended)
 
 1364                        $ilDB->manipulateF(
' 
 1365                                DELETE FROM adl_shared_data  
 1368                                array(
'integer', 
'integer'),
 
 1369                                array($this->packageId, $this->userId)
 
 1380                $fieldList = 
"cmi_node.cp_node_id, cmi_node.completion_threshold, cmi_node.c_exit, cmi_node.completion_status, cmi_node.progress_measure, cmi_node.success_status, cmi_node.scaled, cmi_node.session_time,".
 
 1381                                         "cmi_node.c_min, cmi_node.c_max, cmi_node.c_raw, cmi_node.location, cmi_node.suspend_data, cmi_node.scaled_passing_score, cmi_node.total_time";
 
 1385                                          SELECT '.$fieldList.
' 
 1386                                          FROM cmi_node,cp_node,cp_item 
 1387                                          WHERE cp_node.slm_id = %s 
 1388                                          AND cp_node.cp_node_id = cp_item.cp_node_id 
 1390                                          AND cmi_node.cp_node_id = cp_item.cp_node_id 
 1391                                          AND cmi_node.user_id = %s',
 
 1392                                          array(
'integer',
'text',
'integer'),
 
 1393                                          array($this->packageId, $sco_id, $this->userId)
 
 1402                $filename = $this->logDirectory().
"/".$this->packageId.
".tmp";
 
 1405                        $fHandle = fopen(
$filename, 
'a') or die(
"can't open file");
 
 1406                        fwrite($fHandle, $string);
 
 1414                $filename = $this->logDirectory().
"/".$this->packageId.
"_summary_".$this->get_actual_attempts();
 
 1418                while (file_exists(
$filename.
"_".$adder.$suffix)) {
 
 1420                        $adder = (string) $i;
 
 1422                $retname = 
$filename.
"_".$adder.$suffix;
 
 1424                if (!file_exists($retname)) {
 
 1426                        $fHandle = fopen($retname, 
'a') or die(
"can't open file");
 
 1427                        fwrite($fHandle, $string);
 
 1436                $lng->loadLanguageModule(
"scormdebug");
 
 1438                $filename = $this->logDirectory().
"/".$this->packageId.
"_".$this->get_actual_attempts();
 
 1441                if (!file_exists($path_csv)) {
 
 1443                        $fHandle = fopen($path_csv, 
'a') or die(
"can't open file");
 
 1444                        $string = 
'"CourseId";"ScoId";"ScoTitle";"Timestamp";"Action";"Key";"Value";"Return Value";"Errorcode";"Timespan";"ErrorDescription"'.
"\n";
 
 1445                        fwrite($fHandle, $string);
 
 1448                if (!file_exists($path_txt)) {
 
 1449                        if (file_exists($this->logTmpName())) {
 
 1450                                unlink($this->logTmpName());
 
 1453                        $fHandle2 = fopen($path_txt, 
'a') or die(
"can't open file");
 
 1454                        $logtpl = $this->getLogTemplate();
 
 1455                        $logtpl->setCurrentBlock(
'NewLog');
 
 1456                        $logtpl->setVariable(
"COURSETITLE", $this->slm->getTitle());
 
 1457                        $logtpl->setVariable(
"COURSEID", $this->packageId);
 
 1458                        $logtpl->setVariable(
"TIMESTAMP", date(
"d.m.Y H:i",time()));
 
 1459                        $logtpl->setVariable(
"SESSION", $this->get_actual_attempts());
 
 1460                        $logtpl->setVariable(
"error0", 
$lng->txt(
"error0"));
 
 1461                        $logtpl->setVariable(
"error101", 
$lng->txt(
"error101"));
 
 1462                        $logtpl->setVariable(
"error102", 
$lng->txt(
"error102"));
 
 1463                        $logtpl->setVariable(
"error103", 
$lng->txt(
"error103"));
 
 1464                        $logtpl->setVariable(
"error104", 
$lng->txt(
"error104"));
 
 1465                        $logtpl->setVariable(
"error111", 
$lng->txt(
"error111"));
 
 1466                        $logtpl->setVariable(
"error112", 
$lng->txt(
"error112"));
 
 1467                        $logtpl->setVariable(
"error113", 
$lng->txt(
"error113"));
 
 1468                        $logtpl->setVariable(
"error122", 
$lng->txt(
"error122"));
 
 1469                        $logtpl->setVariable(
"error123", 
$lng->txt(
"error123"));
 
 1470                        $logtpl->setVariable(
"error132", 
$lng->txt(
"error132"));
 
 1471                        $logtpl->setVariable(
"error133", 
$lng->txt(
"error133"));
 
 1472                        $logtpl->setVariable(
"error142", 
$lng->txt(
"error142"));
 
 1473                        $logtpl->setVariable(
"error143", 
$lng->txt(
"error143"));
 
 1474                        $logtpl->setVariable(
"error201", 
$lng->txt(
"error201"));
 
 1475                        $logtpl->setVariable(
"error301", 
$lng->txt(
"error301"));
 
 1476                        $logtpl->setVariable(
"error351", 
$lng->txt(
"error351"));
 
 1477                        $logtpl->setVariable(
"error391", 
$lng->txt(
"error391"));
 
 1478                        $logtpl->setVariable(
"error401", 
$lng->txt(
"error401"));
 
 1479                        $logtpl->setVariable(
"error402", 
$lng->txt(
"error402"));
 
 1480                        $logtpl->setVariable(
"error403", 
$lng->txt(
"error403"));
 
 1481                        $logtpl->setVariable(
"error404", 
$lng->txt(
"error404"));
 
 1482                        $logtpl->setVariable(
"error405", 
$lng->txt(
"error405"));
 
 1483                        $logtpl->setVariable(
"error406", 
$lng->txt(
"error406"));
 
 1484                        $logtpl->setVariable(
"error407", 
$lng->txt(
"error407"));
 
 1485                        $logtpl->setVariable(
"error408", 
$lng->txt(
"error408"));
 
 1486                        $logtpl->setVariable(
"SetValue", 
$lng->txt(
"SetValue"));
 
 1487                        $logtpl->setVariable(
"GetValue", 
$lng->txt(
"GetValue"));
 
 1488                        $logtpl->setVariable(
"Commit", 
$lng->txt(
"Commit"));
 
 1489                        $logtpl->setVariable(
"Initialize", 
$lng->txt(
"Initialize"));
 
 1490                        $logtpl->setVariable(
"Terminate", 
$lng->txt(
"Terminate"));
 
 1491                        $logtpl->setVariable(
"GetErrorString", 
$lng->txt(
"GetErrorString"));
 
 1492                        $logtpl->setVariable(
"GetLastError", 
$lng->txt(
"GetLastError"));
 
 1493                        $logtpl->setVariable(
"GetDiagnostic", 
$lng->txt(
"GetDiagnostic"));
 
 1494                        $logtpl->setVariable(
"cmi._version", 
$lng->txt(
"cmi._version"));
 
 1495                        $logtpl->setVariable(
"cmi.comments_from_learner._children", 
$lng->txt(
"cmi.comments_from_learner._children"));
 
 1496                        $logtpl->setVariable(
"cmi.comments_from_learner._count", 
$lng->txt(
"cmi.comments_from_learner._count"));
 
 1497                        $logtpl->setVariable(
"cmi.comments_from_learner.n.comment", 
$lng->txt(
"cmi.comments_from_learner.n.comment"));
 
 1498                        $logtpl->setVariable(
"cmi.comments_from_learner.n.location", 
$lng->txt(
"cmi.comments_from_learner.n.location"));
 
 1499                        $logtpl->setVariable(
"cmi.comments_from_learner.n.timestamp", 
$lng->txt(
"cmi.comments_from_learner.n.timestamp"));
 
 1500                        $logtpl->setVariable(
"cmi.comments_from_lms._children", 
$lng->txt(
"cmi.comments_from_lms._children"));
 
 1501                        $logtpl->setVariable(
"cmi.comments_from_lms._count", 
$lng->txt(
"cmi.comments_from_lms._count"));
 
 1502                        $logtpl->setVariable(
"cmi.comments_from_lms.n.comment", 
$lng->txt(
"cmi.comments_from_lms.n.comment"));
 
 1503                        $logtpl->setVariable(
"cmi.comments_from_lms.n.location", 
$lng->txt(
"cmi.comments_from_lms.n.location"));
 
 1504                        $logtpl->setVariable(
"cmi.comments_from_lms.n.timestamp", 
$lng->txt(
"cmi.comments_from_lms.n.timestamp"));
 
 1505                        $logtpl->setVariable(
"cmi.completion_status", 
$lng->txt(
"cmi.completion_status"));
 
 1506                        $logtpl->setVariable(
"cmi.completion_threshold", 
$lng->txt(
"cmi.completion_threshold"));
 
 1507                        $logtpl->setVariable(
"cmi.credit", 
$lng->txt(
"cmi.credit"));
 
 1508                        $logtpl->setVariable(
"cmi.entry", 
$lng->txt(
"cmi.entry"));
 
 1509                        $logtpl->setVariable(
"cmi.exit", 
$lng->txt(
"cmi.exit"));
 
 1510                        $logtpl->setVariable(
"cmi.interactions._children", 
$lng->txt(
"cmi.interactions._children"));
 
 1511                        $logtpl->setVariable(
"cmi.interactions._count", 
$lng->txt(
"cmi.interactions._count"));
 
 1512                        $logtpl->setVariable(
"cmi.interactions.n.id", 
$lng->txt(
"cmi.interactions.n.id"));
 
 1513                        $logtpl->setVariable(
"cmi.interactions.n.type", 
$lng->txt(
"cmi.interactions.n.type"));
 
 1514                        $logtpl->setVariable(
"cmi.interactions.n.objectives._count", 
$lng->txt(
"cmi.interactions.n.objectives._count"));
 
 1515                        $logtpl->setVariable(
"cmi.interactions.n.objectives.n.id", 
$lng->txt(
"cmi.interactions.n.objectives.n.id"));
 
 1516                        $logtpl->setVariable(
"cmi.interactions.n.timestamp", 
$lng->txt(
"cmi.interactions.n.timestamp"));
 
 1517                        $logtpl->setVariable(
"cmi.interactions.n.correct_responses._count", 
$lng->txt(
"cmi.interactions.n.correct_responses._count"));
 
 1518                        $logtpl->setVariable(
"cmi.interactions.n.correct_responses.n.pattern", 
$lng->txt(
"cmi.interactions.n.correct_responses.n.pattern"));
 
 1519                        $logtpl->setVariable(
"cmi.interactions.n.weighting", 
$lng->txt(
"cmi.interactions.n.weighting"));
 
 1520                        $logtpl->setVariable(
"cmi.interactions.n.learner_response", 
$lng->txt(
"cmi.interactions.n.learner_response"));
 
 1521                        $logtpl->setVariable(
"cmi.interactions.n.result", 
$lng->txt(
"cmi.interactions.n.result"));
 
 1522                        $logtpl->setVariable(
"cmi.interactions.n.latency", 
$lng->txt(
"cmi.interactions.n.latency"));
 
 1523                        $logtpl->setVariable(
"cmi.interactions.n.description", 
$lng->txt(
"cmi.interactions.n.description"));
 
 1524                        $logtpl->setVariable(
"cmi.launch_data", 
$lng->txt(
"cmi.launch_data"));
 
 1525                        $logtpl->setVariable(
"cmi.learner_id", 
$lng->txt(
"cmi.learner_id"));
 
 1526                        $logtpl->setVariable(
"cmi.learner_name", 
$lng->txt(
"cmi.learner_name"));
 
 1527                        $logtpl->setVariable(
"cmi.learner_preference._children", 
$lng->txt(
"cmi.learner_preference._children"));
 
 1528                        $logtpl->setVariable(
"cmi.learner_preference.audio_level", 
$lng->txt(
"cmi.learner_preference.audio_level"));
 
 1529                        $logtpl->setVariable(
"cmi.learner_preference.language", 
$lng->txt(
"cmi.learner_preference.language"));
 
 1530                        $logtpl->setVariable(
"cmi.learner_preference.delivery_speed", 
$lng->txt(
"cmi.learner_preference.delivery_speed"));
 
 1531                        $logtpl->setVariable(
"cmi.learner_preference.audio_captioning", 
$lng->txt(
"cmi.learner_preference.audio_captioning"));
 
 1532                        $logtpl->setVariable(
"cmi.location", 
$lng->txt(
"cmi.location"));
 
 1533                        $logtpl->setVariable(
"cmi.max_time_allowed", 
$lng->txt(
"cmi.max_time_allowed"));
 
 1534                        $logtpl->setVariable(
"cmi.mode", 
$lng->txt(
"cmi.mode"));
 
 1535                        $logtpl->setVariable(
"cmi.objectives._children", 
$lng->txt(
"cmi.objectives._children"));
 
 1536                        $logtpl->setVariable(
"cmi.objectives._count", 
$lng->txt(
"cmi.objectives._count"));
 
 1537                        $logtpl->setVariable(
"cmi.objectives.n.id", 
$lng->txt(
"cmi.objectives.n.id"));
 
 1538                        $logtpl->setVariable(
"cmi.objectives.n.score._children", 
$lng->txt(
"cmi.objectives.n.score._children"));
 
 1539                        $logtpl->setVariable(
"cmi.objectives.n.score.scaled", 
$lng->txt(
"cmi.objectives.n.score.scaled"));
 
 1540                        $logtpl->setVariable(
"cmi.objectives.n.score.raw", 
$lng->txt(
"cmi.objectives.n.score.raw"));
 
 1541                        $logtpl->setVariable(
"cmi.objectives.n.score.min", 
$lng->txt(
"cmi.objectives.n.score.min"));
 
 1542                        $logtpl->setVariable(
"cmi.objectives.n.score.max", 
$lng->txt(
"cmi.objectives.n.score.max"));
 
 1543                        $logtpl->setVariable(
"cmi.objectives.n.success_status", 
$lng->txt(
"cmi.objectives.n.success_status"));
 
 1544                        $logtpl->setVariable(
"cmi.objectives.n.completion_status", 
$lng->txt(
"cmi.objectives.n.completion_status"));
 
 1545                        $logtpl->setVariable(
"cmi.objectives.n.progress_measure", 
$lng->txt(
"cmi.objectives.n.progress_measure"));
 
 1546                        $logtpl->setVariable(
"cmi.objectives.n.description", 
$lng->txt(
"cmi.objectives.n.description"));
 
 1547                        $logtpl->setVariable(
"cmi.progress_measure", 
$lng->txt(
"cmi.progress_measure"));
 
 1548                        $logtpl->setVariable(
"cmi.scaled_passing_score", 
$lng->txt(
"cmi.scaled_passing_score"));
 
 1549                        $logtpl->setVariable(
"cmi.score._children", 
$lng->txt(
"cmi.score._children"));
 
 1550                        $logtpl->setVariable(
"cmi.score.scaled", 
$lng->txt(
"cmi.score.scaled"));
 
 1551                        $logtpl->setVariable(
"cmi.score.raw", 
$lng->txt(
"cmi.score.raw"));
 
 1552                        $logtpl->setVariable(
"cmi.score.min", 
$lng->txt(
"cmi.score.min"));
 
 1553                        $logtpl->setVariable(
"cmi.score.max", 
$lng->txt(
"cmi.score.max"));
 
 1554                        $logtpl->setVariable(
"cmi.session_time", 
$lng->txt(
"cmi.session_time"));
 
 1555                        $logtpl->setVariable(
"cmi.success_status", 
$lng->txt(
"cmi.success_status"));
 
 1556                        $logtpl->setVariable(
"cmi.suspend_data", 
$lng->txt(
"cmi.suspend_data"));
 
 1557                        $logtpl->setVariable(
"cmi.time_limit_action", 
$lng->txt(
"cmi.time_limit_action"));
 
 1558                        $logtpl->setVariable(
"cmi.total_time", 
$lng->txt(
"cmi.total_time"));
 
 1559                        $logtpl->setVariable(
"adl.nav.request", 
$lng->txt(
"adl.nav.request"));
 
 1560                        $logtpl->setVariable(
"adl.nav.request_valid.continue", 
$lng->txt(
"adl.nav.request_valid.continue"));
 
 1561                        $logtpl->setVariable(
"adl.nav.request_valid.previous", 
$lng->txt(
"adl.nav.request_valid.previous"));
 
 1562                        $logtpl->setVariable(
"adl.nav.request_valid.choice", 
$lng->txt(
"adl.nav.request_valid.choice"));
 
 1563                        $logtpl->setVariable(
"i_green", 
$lng->txt(
"i_green"));
 
 1564                        $logtpl->setVariable(
"i_red", 
$lng->txt(
"i_red"));
 
 1565                        $logtpl->setVariable(
"i_orange", 
$lng->txt(
"i_orange"));
 
 1566                        $logtpl->setVariable(
"i_fuchsia", 
$lng->txt(
"i_fuchsia"));
 
 1567                        $logtpl->setVariable(
"i_gray", 
$lng->txt(
"i_gray"));
 
 1568                        $logtpl->setVariable(
"error", 
$lng->txt(
"error"));
 
 1569                        $logtpl->setVariable(
"strange_error", 
$lng->txt(
"strange_error"));
 
 1570                        $logtpl->setVariable(
"strange_API-Call", 
$lng->txt(
"strange_API-Call"));
 
 1571                        $logtpl->setVariable(
"unknown", 
$lng->txt(
"unknown"));
 
 1572                        $logtpl->setVariable(
"undefined_color", 
$lng->txt(
"undefined_color"));
 
 1573                        $logtpl->setVariable(
"description_for", 
$lng->txt(
"description_for"));
 
 1574                        $logtpl->setVariable(
"hide", 
$lng->txt(
"hide"));
 
 1575                        $logtpl->setVariable(
"all_API-calls_shown", 
$lng->txt(
"all_API-calls_shown"));
 
 1576                        $logtpl->setVariable(
"show_only_important_API-calls", 
$lng->txt(
"show_only_important_API-calls"));
 
 1577                        $logtpl->setVariable(
"only_important_API-Calls_shown", 
$lng->txt(
"only_important_API-Calls_shown"));
 
 1578                        $logtpl->setVariable(
"show_all_API-calls", 
$lng->txt(
"show_all_API-calls"));
 
 1579                        $logtpl->setVariable(
"log_for", 
$lng->txt(
"log_for"));
 
 1580                        $logtpl->setVariable(
"started", 
$lng->txt(
"started"));
 
 1581                        $logtpl->setVariable(
"nr_session", 
$lng->txt(
"nr_session"));
 
 1582                        $logtpl->setVariable(
"id_learning_module", 
$lng->txt(
"id_learning_module"));
 
 1583                        if($this->slm->getCheck_values()==
false) $logtpl->setVariable(
"CHECK_VALUES", 
$lng->txt(
"sent_values_not_checked"));
 
 1584                        $logtpl->parseCurrentBlock();
 
 1585                        fwrite($fHandle2,$logtpl->get());
 
 1593                $webdir=str_replace(
"/ilias.php",
"",$_SERVER[
"SCRIPT_NAME"]);   
 
 1595                $lm_dir=$webdir.
"/".
ILIAS_WEB_DIR.
"/".$this->
ilias->client_id .
"/lm_data".
"/lm_".$this->packageId;
 
 1603                $logDir=$this->slm->getDataDirectory().
"/logs";
 
 1604                if (!file_exists($logDir)) {
 
 1613                header(
'Content-Type: text/html; charset=UTF-8');
 
 1614                echo file_get_contents($this->logDirectory().
"/".
$filename);
 
 1621                header(
"Expires: 0");
 
 1622                header(
"Cache-Control: private");
 
 1623                header(
"Cache-Control: must-revalidate, post-check=0, pre-check=0");
 
 1624                header(
"Pragma: cache");
 
 1625                header(
"Content-Description: File Transfer");
 
 1626                header(
"Content-Type: application/octet-stream");
 
 1627                header(
"Content-disposition: attachment; filename=$filename");
 
 1628                echo file_get_contents($this->logDirectory().
"/".
$filename);
 
 1636                        if ($fileInfo->isDot()) {
 
 1639                        $item[
'filename'] = $fileInfo->getFilename();
 
 1640                        $parts = pathinfo($item[
'filename']);
 
 1641                        $fnameparts = preg_split(
'/_/', $parts[
'filename'], -1, PREG_SPLIT_NO_EMPTY);
 
 1642                        $deleteUrl = 
' <a href=#'.
" onclick=\"javascript:deleteFile('".$item[
'filename'].
"');\">".$s_delete.
"</a>";
 
 1644                        if ($this->get_actual_attempts()==$fnameparts[1]) {$deleteUrl=
"";}
 
 1646                        $urlDownload = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=downloadLog&ref_id='.
$_GET[
"ref_id"].
'&logFile='.$fileInfo->getFilename();
 
 1647                        $urlOpen = 
'ilias.php?baseClass=ilSAHSPresentationGUI' .
'&cmd=openLog&ref_id='.
$_GET[
"ref_id"].
'&logFile='.$fileInfo->getFilename();
 
 1648                        $item[
'date'] = date(
'Y/m/d H:i:s', $fileInfo->getCTime());
 
 1649                        if ($parts[
'extension'] == 
"html") {
 
 1650                                $item[
'action'] =$deleteUrl.
" <a href=".$urlDownload.
">".$s_download.
"</a> <a target=_new href=".$urlOpen.
">".$s_open.
"</a>";
 
 1652                                $item[
'action'] =$deleteUrl.
" <a href=".$urlDownload.
">".$s_download.
"</a>";
 
 1654                        if ($parts[
'extension'] == 
"html" || $parts[
'extension'] == 
"csv") {
 
 1655                                array_push(
$data,$item);
 
 1658                usort(
$data,
"datecmp");
 
 1664                header(
'Content-Type: text/html; charset=UTF-8');
 
 1665                print file_get_contents($this->logFileName().
".html");
 
 1671                $lng->loadLanguageModule(
"scormdebug");
 
 1683                        $this->tpl = 
new ilTemplate(
"tpl.scorm2004.debug.html", 
false, 
false, 
"./Modules/Scorm2004");
 
 1684                        $this->tpl->setVariable(
'CONSOLE', 
$lng->txt(
"debugwindow_console"));
 
 1685                        $this->tpl->setVariable(
'LOGS', 
$lng->txt(
"debugwindow_logs"));
 
 1686                        $this->tpl->setVariable(
'COMMENT', 
$lng->txt(
"debugwindow_comment"));
 
 1687                        $this->tpl->setVariable(
'COMMENT_ENTER', 
$lng->txt(
"debugwindow_comment_enter"));
 
 1688                        $this->tpl->setVariable(
'START_RECORDING', 
$lng->txt(
"debugwindow_start_recording"));
 
 1689                        $this->tpl->setVariable(
'STOP_RECORDING', 
$lng->txt(
"debugwindow_stop_recording"));
 
 1690                        $this->tpl->setVariable(
'DELETE_LOGFILE', 
$lng->txt(
"debugwindow_delete_logfile"));
 
 1691                        $this->tpl->setVariable(
'SUBMISSION_FAILED', 
$lng->txt(
"debugwindow_submission_failed"));
 
 1692                        $this->tpl->setVariable(
'SUBMIT', 
$lng->txt(
"debugwindow_submit"));
 
 1693                        $this->tpl->setVariable(
'CANCEL', 
$lng->txt(
"debugwindow_cancel"));
 
 1694                        $this->tpl->setVariable(
'FILENAME', 
$lng->txt(
"debugwindow_filename"));
 
 1695                        $this->tpl->setVariable(
'DATE', 
$lng->txt(
"debugwindow_date"));
 
 1696                        $this->tpl->setVariable(
'ACTION', 
$lng->txt(
"debugwindow_action"));
 
 1697                        $this->tpl->setVariable(
'RECORD_IMG', 
ilUtil::getImagePath(
"record.png",
"./Modules/Scorm2004"));        
 
 1699                        $this->tpl->setVariable(
'COMMENT_IMG', 
ilUtil::getImagePath(
"comment.png",
"./Modules/Scorm2004"));      
 
 1700                        $logfile = $this->logFileName().
".html";
 
 1701                        $this->tpl->setVariable(
'LOGFILE',$this->logFileName().
".html");                
 
 1702                        $this->tpl->setVariable(
'FILES_DATA', json_encode($this->getLogFileList(
$lng->txt(
"debugwindow_delete"), 
$lng->txt(
"debugwindow_download"), 
$lng->txt(
"debugwindow_open"))));
 
 1705                        include_once 
"Services/YUI/classes/class.ilYuiUtil.php";
 
 1708                echo $this->tpl->get(
"DEFAULT", 
true);  
 
 1713                return new ilTemplate(
"tpl.scorm2004.debugtxt.txt", 
true, 
true, 
"Modules/Scorm2004");
 
 1732                        $debug_fields = parse_ini_file(
"./Modules/Scorm2004/scripts/rtemain/debug_default.ini",
true);
 
 1735                        $ini_array = $debug_fields[
'test_sco']; 
 
 1737                        $ini_array = $debug_fields[
'normal_sco'];       
 
 1739                foreach ($ini_array as $key => $value) {
 
 1741                                array_push($dvalues,$key);
 
 1750                $lng->loadLanguageModule(
"scormdebug");
 
 1752                $logdata = json_decode(file_get_contents(
'php://input'));
 
 1754                $tmp_name = $this->logTmpName();
 
 1756                $fh_txt = fopen(
$filename.
".html", 
'a') or die(
"can't open txt file");
 
 1757                $fh_csv = fopen(
$filename.
".csv", 
'a') or die(
"can't open csv file");
 
 1758                $fh_tmp = fopen($tmp_name, 
'r') or die(
"can't open tmp file");
 
 1761                if (filesize($tmp_name)>0) {
 
 1762                        $tmp_content = unserialize(fread($fh_tmp,filesize($tmp_name)));
 
 1764                        $tmp_content = 
null;
 
 1770                $fh_tmp2 = fopen($tmp_name, 
'w') or die(
"can't open tmp file");
 
 1774                $tmp_content[$logdata->scoid][$logdata->key][
'value'] = $logdata->value; 
 
 1775                $tmp_content[$logdata->scoid][$logdata->key][
'status'] = $logdata->result; 
 
 1776                $tmp_content[$logdata->scoid][$logdata->key][
'action'] = $logdata->action; 
 
 1778                fwrite($fh_tmp2,serialize($tmp_content));
 
 1784                $errorcode = $logdata->errorcode;
 
 1785                $fixedFailure = 
false;
 
 1786                $toleratedFailure = 
false;
 
 1787                $extraErrorDescription = 
"";
 
 1788                if ($errorcode == 200000) {
 
 1790                        $toleratedFailure = 
true;
 
 1791                        $extraErrorDescription = 
"tolerated failure";
 
 1793                if ($errorcode>99999) {
 
 1795                        $fixedFailure = 
true;
 
 1796                        $extraErrorDescription = 
" failure corrected by ILIAS";
 
 1798                if (strpos($logdata->action,
"ANALYZE")===
false)
 
 1800                        $errorDescriptions = array(
"0" => 
"",
 
 1801                                "101" => 
"General Exeption",
 
 1802                                "102" => 
"General Initialization Failure",
 
 1803                                "103" => 
"Already Initialized",
 
 1804                                "104" => 
"Content Instance Terminated",
 
 1805                                "111" => 
"General Termination Failure",
 
 1806                                "112" => 
"Termination Before Initialization",
 
 1807                                "113" => 
"Termination After Termination",
 
 1808                                "122" => 
"Retrieve Data Before Initialization",
 
 1809                                "123" => 
"Retrieve Data After Termination",
 
 1810                                "132" => 
"Store Data Before Initialization",
 
 1811                                "133" => 
"Store Data After Termination",
 
 1812                                "142" => 
"Commit Before Initialization",
 
 1813                                "143" => 
"Commit After Termination",
 
 1814                                "201" => 
"General Argument Error",
 
 1815                                "301" => 
"General Get Failure",
 
 1816                                "351" => 
"General Set Failure",
 
 1817                                "391" => 
"General Commit Failure",
 
 1818                                "401" => 
"Undefined Data Model Element",
 
 1819                                "402" => 
"Unimplemented Data Model Element",
 
 1820                                "403" => 
"Data Model Element Value Not Initialized",
 
 1821                                "404" => 
"Data Model Element Is Read Only",
 
 1822                                "405" => 
"Data Model Element Is Write Only",
 
 1823                                "406" => 
"Data Model Element Type Mismatch",
 
 1824                                "407" => 
"Data Model Element Value Out Of Range",
 
 1825                                "408" => 
"Data Model Dependency Not Established");
 
 1826                        $csv_string = $this->packageId.
';"' 
 1827                                .$logdata->scoid.
'";"' 
 1828                                .$logdata->scotitle.
'";' 
 1829                                .date(
"d.m.Y H:i",time()).
';"' 
 1830                                .$logdata->action.
'";"' 
 1831                                .$logdata->key.
'";"' 
 1832                                .str_replace(
"\"",
"\"\"",$logdata->value).
'";"' 
 1833                                .str_replace(
"\"",
"\"\"",$logdata->result).
'";' 
 1835                                .$logdata->timespan.
';"' 
 1836                                .$errorDescriptions[$errorcode].$extraErrorDescription.
'"'.
"\n";
 
 1837                        fwrite($fh_csv,$csv_string);
 
 1841                if($logdata->action == 
"Commit" || $logdata->action == 
"Terminate")
 
 1844                        $sql_data = $this->getNodeData($logdata->scoid,$fh_csv);
 
 1845                        foreach ($sql_data as $key => $value) {
 
 1846                                $sql_string =  $this->packageId.
';"' 
 1847                                        .$logdata->scoid.
'";"' 
 1848                                        .$logdata->scotitle.
'";' 
 1849                                        .$timestamp.
';"SQL";"' 
 1851                                        .str_replace(
"\"",
"\"\"",$value).
'";;;;'.
"\n";
 
 1852                                fwrite($fh_csv,$sql_string);
 
 1857                if ($logdata->action == 
"DELETE")
 
 1866                $logtpl = $this->getLogTemplate();
 
 1869                $ArGetValues = array(
'comments_from_lms',
'completion_threshold',
'credit',
'entry',
'launch_data',
'learner_id',
'learner_name',
'max_time_allowed',
'mode',
'scaled_passing_score',
'time_limit_action',
'total_time');
 
 1871                switch ($logdata->action) {
 
 1873                                if ($logdata->result == 
"true" && $errorcode == 0) $color = 
"green";
 
 1874                                if ($color==
"green" && $logdata->key == 
"cmi.exit" && $logdata->value!=
"suspend") $color = 
"orange";
 
 1875                                if ($fixedFailure == 
false && $errorcode!=406) $logdata->value = 
'"'.$logdata->value.
'"';
 
 1876                                if ($toleratedFailure == 
true) $color = 
"fuchsia";
 
 1877                                if ($fixedFailure == 
true) $color = 
"gray";
 
 1880                                if ($errorcode == 0) $color = 
"green";
 
 1883                                if ($errorcode == 0)
 
 1886                                        $logtpl->setCurrentBlock(
"InitializeStart");
 
 1887                                        $logtpl->setVariable(
"SCO-title", 
$lng->txt(
"SCO-title"));
 
 1888                                        $logtpl->setVariable(
"SCO_TITLE", $logdata->scotitle);
 
 1889                                        $logtpl->setVariable(
"SCO-name", 
$lng->txt(
"SCO-name"));
 
 1890                                        $logtpl->setVariable(
"SCO_NAME", $logdata->scoid);
 
 1891                                        $logtpl->setVariable(
"started", 
$lng->txt(
"started"));
 
 1892                                        $logtpl->setVariable(
"TIMESTAMP",  
$timestamp);
 
 1893                                        $logtpl->setVariable(
"milliseconds", 
$lng->txt(
"milliseconds"));
 
 1894                                        $logtpl->setVariable(
"API-call", 
$lng->txt(
"API-call"));
 
 1895                                        $logtpl->setVariable(
"return_value", 
$lng->txt(
"return_value"));
 
 1896                                        $logtpl->setVariable(
"error", 
$lng->txt(
"error"));
 
 1897                                        $logtpl->parseCurrentBlock();
 
 1901                                if ($errorcode == 0) $color = 
"green";
 
 1902                                if ($fixedFailure == 
true) $color = 
"gray";
 
 1905                                if ($errorcode == 0) $color = 
"green";
 
 1907                        case 'GetErrorString':
 
 1909                                if ($errorcode == 0) $color = 
"green";
 
 1911                        case 'GetLastError':
 
 1912                                $logtpl->setCurrentBlock(
"GetLastError");
 
 1913                                $logtpl->setVariable(
"TIMESPAN",  $logdata->timespan);
 
 1914                                $logtpl->setVariable(
"RESULT",  $logdata->result);
 
 1915                                $logtpl->parseCurrentBlock();
 
 1917                        case 'GetDiagnostic':
 
 1918                                $logtpl->setCurrentBlock(
"GetDiagnostic");
 
 1919                                $logtpl->setVariable(
"TIMESPAN",  $logdata->timespan);
 
 1920                                $logtpl->setVariable(
"KEY", $logdata->key);
 
 1921                                $logtpl->setVariable(
"RESULT",  $logdata->result);
 
 1922                                $logtpl->parseCurrentBlock();
 
 1925                                $logtpl->setCurrentBlock(
"INFO");
 
 1926                                $logtpl->setVariable(
"hint", 
$lng->txt(
"hint"));
 
 1927                                $logtpl->setVariable(
"KEY", 
$lng->txt($logdata->key));
 
 1928                                $logtpl->setVariable(
"VALUE", $logdata->value);
 
 1929                                $logtpl->parseCurrentBlock();
 
 1932                                $logtpl->setCurrentBlock(
"COMMENT");
 
 1933                                $logtpl->setVariable(
"comment", 
$lng->txt(
"comment"));
 
 1934                                $logtpl->setVariable(
"generated", 
$lng->txt(
"generated"));
 
 1935                                $logtpl->setVariable(
"TIMESTAMP",  
$timestamp);
 
 1936                                $logtpl->setVariable(
"VALUE",  $logdata->value);
 
 1937                                $logtpl->parseCurrentBlock();
 
 1940                                $logtpl->setCurrentBlock(
"ANALYZE");
 
 1941                                if (count($logdata->value) == 0) {
 
 1943                                        $logtpl->setVariable(
"ANALYZE_SUMMARY", 
$lng->txt(
"no_missing_API-calls"));
 
 1944                                        $logtpl->setVariable(
"VALUE", 
"");
 
 1946                                        $tmpvalue = 
"SetValue(\"".implode(
"\", ... ),<br/>SetValue(\"",$logdata->value).
"\", ... )";
 
 1947                                        for ($i=0; $i <count($ArGetValues); $i++){
 
 1948                                                $tmpvalue = str_replace(
"SetValue(\"cmi.".$ArGetValues[$i].
"\", ... )",
"GetValue(\"cmi.".$ArGetValues[$i].
"\")",$tmpvalue);
 
 1950                                        $logtpl->setVariable(
"ANALYZE_SUMMARY", 
$lng->txt(
"missing_API-calls"));
 
 1951                                        $logtpl->setVariable(
"VALUE", $tmpvalue);
 
 1953                                $logtpl->setVariable(
"summary_for_SCO_without_test", 
$lng->txt(
"summary_for_SCO_without_test"));
 
 1954                                $logtpl->setVariable(
"generated", 
$lng->txt(
"generated"));
 
 1955                                $logtpl->setVariable(
"TIMESTAMP",  
$timestamp);
 
 1956                                $logtpl->setVariable(
"COLOR", $color);
 
 1957                                $logtpl->parseCurrentBlock();
 
 1960                                $logtpl->setCurrentBlock(
"ANALYZETEST");
 
 1961                                if (count($logdata->value) == 0) {
 
 1963                                        $logtpl->setVariable(
"ANALYZE_SUMMARY", 
$lng->txt(
"no_missing_API-calls"));
 
 1964                                        $logtpl->setVariable(
"VALUE", 
"");
 
 1966                                        $tmpvalue = 
"SetValue(\"".implode(
"\", ... ),<br/>SetValue(\"",$logdata->value).
"\", ... )";
 
 1967                                        for ($i=0; $i <count($ArGetValues); $i++){
 
 1968                                                $tmpvalue = str_replace(
"SetValue(\"cmi.".$ArGetValues[$i].
"\", ... )",
"GetValue(\"cmi.".$ArGetValues[$i].
"\")",$tmpvalue);
 
 1970                                        $logtpl->setVariable(
"ANALYZE_SUMMARY", 
$lng->txt(
"missing_API-calls"));
 
 1971                                        $logtpl->setVariable(
"VALUE", $tmpvalue);
 
 1973                                $logtpl->setVariable(
"summary_for_SCO_with_test", 
$lng->txt(
"summary_for_SCO_with_test"));
 
 1974                                $logtpl->setVariable(
"generated", 
$lng->txt(
"generated"));
 
 1975                                $logtpl->setVariable(
"TIMESTAMP",  
$timestamp);
 
 1976                                $logtpl->setVariable(
"COLOR", $color);
 
 1977                                $logtpl->parseCurrentBlock();
 
 1980                                $logtpl->setCurrentBlock(
"SUMMARY");
 
 1981                                $logtpl->setVariable(
"summary_csv", 
$lng->txt(
"summary_csv"));
 
 1982                                $logtpl->setVariable(
"TIMESTAMP",  
$timestamp);
 
 1983                                $logtpl->setVariable(
"summary_download", 
$lng->txt(
"summary_download"));
 
 1984                                $logtpl->parseCurrentBlock();
 
 1991                if ($logdata->action == 
'SetValue' || $logdata->action == 
'GetValue')
 
 1993                        $logtpl->setCurrentBlock($logdata->action);
 
 1994                        $logtpl->setVariable(
"ACTION",  $logdata->action);
 
 1995                        $logtpl->setVariable(
"TIMESPAN",  $logdata->timespan);
 
 1996                        $logtpl->setVariable(
"KEY", $logdata->key);
 
 1997                        $logtpl->setVariable(
"VALUE",  $logdata->value);
 
 1998                        $logtpl->setVariable(
"RESULT",  $logdata->result);
 
 1999                        $logtpl->setVariable(
"ERRORCODE", $errorcode);
 
 2000                        $debugfields=$this->getDebugValues(
true);
 
 2002                        for ($i=0; $i <count($debugfields) ; $i++){
 
 2003                                if ($logdata->key == $debugfields[$i]) $importantkey=1;
 
 2005                        $logtpl->setVariable(
"IMPORTANTKEY", 
"".$importantkey);
 
 2006                        $logtpl->setVariable(
"COLOR", $color);
 
 2007                        $logtpl->parseCurrentBlock();
 
 2009                else if ($logdata->action != 
'INFO' && $logdata->action != 
'ANALYZE' && $logdata->action != 
'ANALYZETEST' && $logdata->action != 
'SUMMARY' && $logdata->action != 
'COMMENT' && $logdata->action != 
'GetDiagnostic' && $logdata->action != 
'GetLastError')
 
 2011                        $logtpl->setCurrentBlock(
"defaultCall");
 
 2012                        $logtpl->setVariable(
"ACTION",  $logdata->action);
 
 2013                        $logtpl->setVariable(
"TIMESPAN",  $logdata->timespan);
 
 2014                        $logtpl->setVariable(
"KEY", $logdata->key);
 
 2015                        $logtpl->setVariable(
"VALUE",  $logdata->value);
 
 2016                        $logtpl->setVariable(
"RESULT",  $logdata->result);
 
 2017                        $logtpl->setVariable(
"ERRORCODE", $errorcode);
 
 2018                        $logtpl->setVariable(
"IMPORTANTKEY", 
"".$importantkey);
 
 2019                        $logtpl->setVariable(
"COLOR", $color);
 
 2020                        $logtpl->parseCurrentBlock();
 
 2033                if ($logdata->action == 
"SUMMARY") {
 
 2034                        $this->createSummary($tmp_content);
 
 2037                fwrite($fh_txt,$logtpl->get());
 
 2044                for ($i=0; $i <count(
$data) ; $i++) { 
 
 2046                        $element[
'title'] = 
$data[$i][
'title'];
 
 2047                        $element[
'id'] = 
$data[$i][
'id'];
 
 2048                        if (
$data[$i][
'sco'] == 1) {
 
 2049                                $element[
'sco'] = 
"sco";
 
 2051                                $element[
'sco'] = 
"assset";
 
 2053                        if ( 
$data[$i][
'href'] !=
null ) {
 
 2054                                array_push($this->flat_structure,$element);
 
 2056                        if (
$data[$i][
'item']!=
null) {
 
 2057                                $this->getStructureFlat(
$data[$i][
'item']);
 
 2068                $columns_fixed = array(
'id',
'title',
'type',
'attempted');
 
 2070                $ini_data = parse_ini_file(
"./Modules/Scorm2004/scripts/rtemain/debug_default.ini",
true);
 
 2071                $ini_array = $ini_data[
'summary'];      
 
 2072                $colums_variable = array();
 
 2073                $api_keys = array();
 
 2075                foreach ($ini_array as $key => $value) {
 
 2077                                array_push($colums_variable,$key);
 
 2078                                array_push($api_keys,$key);
 
 2079                                array_push($colums_variable,
"Status");
 
 2083                $header_array = array_merge($columns_fixed, $colums_variable);
 
 2085                $csv_header = implode(
";",$header_array);
 
 2089                        'SELECT jsdata FROM cp_package WHERE obj_id = %s',
 
 2091                        array($this->packageId)
 
 2096                $structure = json_decode($packageData[
'jsdata'],
true);
 
 2099                $this->flat_structure = array();  
 
 2100                $this->getStructureFlat($structure[
'item'][
'item']);
 
 2102                foreach ($this->flat_structure as $tree_element) {
 
 2104                        $csv_data = $csv_data.$tree_element[
'id'].
";".$tree_element[
'title'].
";".$tree_element[
'sco'].
";";
 
 2105                        if ($api_data[$tree_element[
'id']] != 
null) {
 
 2106                                $csv_data = $csv_data.
"X".
";";
 
 2108                                $csv_data = $csv_data.
";";
 
 2112                        $id = $tree_element[
'id'];
 
 2113                        foreach ($api_keys as $api_element) {
 
 2114                                if ($api_data[$id]!=
null) {
 
 2115                                        if ($api_data[$id][$api_element]!=
null) {
 
 2116                                                $csv_data = $csv_data.$api_data[$id][$api_element][
'value'].
";".$api_data[$id][$api_element][
'status'].
";";
 
 2118                                                $csv_data = $csv_data.
";;";
 
 2122                        $csv_data = $csv_data.
"\n";             
 
 2125                $fh = fopen($this->summaryFileName(),
"w");
 
 2126                fwrite($fh,$csv_header.
"\n".$csv_data);
 
 2128                unlink($this->logTmpName());
 
 2147    if (strtotime($a[
'date']) == strtotime($b[
'date'])) {
 
 2150    return (strtotime($a[
'date']) < strtotime($b[
'date'])) ? 1 :-1;
 
foreach($mandatory_scripts as $file) $timestamp
Class ilObjSCORM2004LearningModule.
getStatus($a_packageId, $a_user_id, $auto_last_visited, $scormType="1.2")
get_max_attempts($a_packageId)
Get max.
static _lookupObjectId($a_ref_id)
lookup object id
normalizeFields($table, &$node)
maps API data structure type to internal datatype on a node   and accepts only valid values,...
getMimetype($filename)
estimate content type for a filename by extension first do it for common static web files from extern...
getCookie()
getting and setting Scorm2004 cookie Cookie contains enrypted associative array of sahs_lm....
readFile($path)
Try to find file, identify content type, write it to buffer, and stop immediatly If no file given,...
getDebugValues($test_sco=false)
increase_attemptAndsave_module_version()
Increases attempts by one and saves module_version for this package.
getInlineCSS()
Get inline css.
getLogFileList($s_delete, $s_download, $s_open)
getNodeData($sco_id, $fh)
getCMIData($userId, $packageId)
writeSharedData($sco_node_id)
readSharedData($sco_node_id)
get_max_attempts()
Get max.
& executeCommand()
execute command
get_actual_attempts()
Get number of actual attempts for the user.
persistCMIData($userId=null, $packageId, $defaultLessonMode, $comments, $interactions, $objectives, $time_from_lms, $data=null)
scormPlayerUnload($userId=null, $packageId, $time_from_lms)
static getIdleValue($fixedMode=false)
Returns the idle time in seconds.
special template class to simplify handling of ITX/PEAR
static getStyleSheetLocation($mode="output", $a_css_name="", $a_css_location="")
get full style sheet file name (path inclusive) of current user
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static makeDir($a_dir)
creates a new directory and inherits all filesystem permissions of the parent directory You may pass ...
static getLocalPath($a_name="")
Get local path of a YUI js file.
getLocaljQueryPath()
Get local path of jQuery file.
redirection script todo: (a better solution should control the processing via a xml file)
if($_REQUEST['ilias_path']) define('ILIAS_HTTP_PATH' $_REQUEST['ilias_path']