4include_once 
'./Modules/ScormAicc/classes/class.ilSCORMTrackingItems.php';
 
    5include_once 
'./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php';
 
   19                $query = 
'SELECT cp_item.cp_node_id, cp_item.title ' 
   20                        . 
'FROM cp_item, cmi_node, cp_node ' 
   21                        . 
'WHERE cp_node.slm_id = %s ' 
   22                        . 
'AND cp_item.cp_node_id = cmi_node.cp_node_id ' 
   23                        . 
'AND cp_node.cp_node_id = cmi_node.cp_node_id ' 
   24                        . 
'GROUP BY cp_item.cp_node_id, cp_item.title';
 
   28                        array($this->getObjId())
 
   32                        $scoTitles[
$row[
'cp_node_id']] = 
$row[
'title'];
 
   39                $lng->loadLanguageModule(
"scormtrac");
 
   44                        'lm_id,lm_title,cp_node_id,sco_marked_for_learning_progress,sco_title,'.$udh[
"cols"]
 
   45                        .
',audio_captioning,audio_level,completion_status,completion_threshold,credit,delivery_speed' 
   46                        .
',c_entry,c_exit,c_language,c_location,c_mode,progress_measure,c_max,c_min,c_raw,scaled' 
   47                        .
',scaled_passing_score,session_time,session_time_seconds,success_status,total_time,total_time_seconds,c_timestamp,suspend_data,launch_data');
 
   48                $a_true=explode(
',',$udh[
"default"].
",sco_title,success_status,completion_status");
 
   49                for ($i=0;$i<count($a_cols);$i++) {
 
   50                        $cols[$a_cols[$i]] = array(
"txt" => 
$lng->txt($a_cols[$i]),
"default" => 
false);
 
   52                for ($i=0;$i<count($a_true);$i++) {
 
   53                        $cols[$a_true[$i]][
"default"] = 
true;
 
   58        function exportSelectedCore($a_user = array(), $a_sco = array(), $b_orderBySCO=
false, $allowExportPrivacy=
false) {
 
   60                $lng->loadLanguageModule(
"scormtrac");
 
   62                $returnData = array();
 
   70                $query = 
'SELECT user_id, cp_node_id, ' 
   71                        . 
'audio_captioning, audio_level, completion_status, completion_threshold, credit, delivery_speed, ' 
   72                        . 
'c_entry, c_exit, c_language, location as c_location, c_mode, progress_measure, c_max, c_min, c_raw, scaled, ' 
   73                        . 
'scaled_passing_score, session_time, success_status, total_time, c_timestamp, suspend_data, launch_data ' 
   75                        . 
'WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
' ' 
   76                        . 
'AND '.$ilDB->in(
'user_id', $a_user, 
false, 
'integer') .
' ' 
   78                        if ($b_orderBySCO) 
$query.=
'cp_node_id, user_id';
 
   79                        else $query.=
'user_id, cp_node_id';
 
   85                foreach($dbdata as 
$data) {
 
   86                        $data[
"lm_id"] = $this->getObjId();
 
   87                        $data[
"lm_title"] = $this->lmTitle;
 
   88                        $data=array_merge(
$data,self::userDataArrayForExport(
$data[
"user_id"], $allowExportPrivacy));
 
   89                        $data[
"sco_marked_for_learning_progress"] = $scoProgress[
$data[
"cp_node_id"]];
 
   90                        $data[
"sco_title"] = $scoTitles[
$data[
"cp_node_id"]];
 
   91                        $data[
"audio_captioning"] = 
"".$data[
"audio_captioning"];
 
   92                        $data[
"audio_level"] = 
"".$data[
"audio_level"];
 
   93                        $data[
"completion_status"] = 
"".$data[
"completion_status"];
 
   94                        $data[
"completion_threshold"] = 
"".$data[
"completion_threshold"];
 
   95                        $data[
"credit"] = 
"".$data[
"credit"];
 
   96                        $data[
"delivery_speed"] = 
"".$data[
"delivery_speed"];
 
   97                        $data[
"c_entry"] = 
"".$data[
"c_entry"];
 
   98                        $data[
"c_exit"] = 
"".$data[
"c_exit"];
 
   99                        $data[
"c_language"] = 
"".$data[
"c_language"];
 
  100                        $data[
"c_location"] = 
"".str_replace(
'"',
'',
$data[
"c_location"]);
 
  101                        $data[
"c_mode"] = 
"".$data[
"c_mode"];
 
  102                        $data[
"progress_measure"] = 
"".$data[
"progress_measure"];
 
  103                        $data[
"c_max"] = 
"".$data[
"c_max"];
 
  104                        $data[
"c_min"] = 
"".$data[
"c_min"];
 
  105                        $data[
"c_raw"] = 
"".$data[
"c_raw"];
 
  106                        $data[
"scaled"] = 
"".$data[
"scaled"];
 
  107                        $data[
"scaled_passing_score"] = 
"".$data[
"scaled_passing_score"];
 
  108                        $data[
"session_time"] = 
"".$data[
"session_time"];
 
  109                        $data[
"session_time_seconds"] = 
"";
 
  111                        $data[
"success_status"] = 
"".$data[
"success_status"];
 
  112                        $data[
"total_time"] = 
"".$data[
"total_time"];
 
  113                        $data[
"total_time_seconds"] = 
"";
 
  116                        $data[
"suspend_data"] = 
"".$data[
"suspend_data"];
 
  117                        $data[
"launch_data"] = 
"".$data[
"launch_data"];
 
  135                $lng->loadLanguageModule(
"scormtrac");
 
  139                        'lm_id,lm_title,cp_node_id,sco_marked_for_learning_progress,sco_title,'.$udh[
"cols"]
 
  140                        .
',id,description,weighting,c_type,result,latency,latency_seconds,c_timestamp,learner_response');
 
  141                $a_true=explode(
',',$udh[
"default"].
",sco_title,id,result,learner_response");
 
  142                for ($i=0;$i<count($a_cols);$i++) {
 
  143                        $cols[$a_cols[$i]] = array(
"txt" => 
$lng->txt($a_cols[$i]),
"default" => 
false);
 
  145                for ($i=0;$i<count($a_true);$i++) {
 
  146                        $cols[$a_true[$i]][
"default"] = 
true;
 
  153                $lng->loadLanguageModule(
"scormtrac");
 
  155                $returnData = array();
 
  162                $query = 
'SELECT cmi_node.user_id, cmi_node.cp_node_id, 
  163                                cmi_interaction.cmi_interaction_id, 
  165                                cmi_interaction.description,  
  166                                cmi_interaction.weighting,  
  167                                cmi_interaction.c_type,  
  168                                cmi_interaction.result,  
  169                                cmi_interaction.latency,  
  170                                cmi_interaction.c_timestamp,  
  171                                cmi_interaction.learner_response,  
  172                                cmi_interaction.cmi_interaction_id,  
  173                                cmi_interaction.cmi_node_id  
  174                                FROM cmi_interaction, cmi_node  
  175                                WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
'  
  176                                AND '.
$ilDB->in(
'cmi_node.user_id', $a_user, 
false, 
'integer') .
' 
  177                                AND cmi_node.cmi_node_id = cmi_interaction.cmi_node_id 
  179                        if ($b_orderBySCO) 
$query.=
'cmi_node.cp_node_id, cmi_node.user_id';
 
  180                        else $query.=
'cmi_node.user_id, cmi_node.cp_node_id';
 
  181                        $query.=
', cmi_interaction.cmi_interaction_id, cmi_interaction.cmi_node_id';
 
  187                foreach($dbdata as 
$data) {
 
  188                        $data[
"lm_id"] = $this->getObjId();
 
  189                        $data[
"lm_title"] = $this->lmTitle;
 
  190                        $data=array_merge(
$data,self::userDataArrayForExport(
$data[
"user_id"], $allowExportPrivacy));
 
  191                        $data[
"sco_marked_for_learning_progress"] = $scoProgress[
$data[
"cp_node_id"]];
 
  192                        $data[
"sco_title"] = $scoTitles[
$data[
"cp_node_id"]];
 
  193                        $data[
"description"] = 
"".$data[
"description"]; 
 
  194                        $data[
"weighting"] = 
"".$data[
"weighting"];
 
  195                        $data[
"c_type"] = 
"".$data[
"c_type"];
 
  196                        $data[
"result"] = 
"".$data[
"result"];
 
  197                        $data[
"latency"] = 
"".$data[
"latency"];
 
  198                        $data[
"latency_seconds"] = 
"";
 
  200                        $data[
"c_timestamp"] = 
"".$data[
"c_timestamp"];
 
  201                        $data[
"learner_response"] = 
"".str_replace(
'"',
'',
$data[
"learner_response"]);
 
  210                $lng->loadLanguageModule(
"scormtrac");
 
  214                        'lm_id,lm_title,cp_node_id,sco_marked_for_learning_progress,sco_title,'.$udh[
"cols"]
 
  215                        .
',id,description,completion_status,progress_measure,success_status,scaled,c_max,c_min,c_raw,scope');
 
  216                $a_true=explode(
',',$udh[
"default"].
",sco_title,id,completion_status,success_status");
 
  217                for ($i=0;$i<count($a_cols);$i++) {
 
  218                        $cols[$a_cols[$i]] = array(
"txt" => 
$lng->txt($a_cols[$i]),
"default" => 
false);
 
  220                for ($i=0;$i<count($a_true);$i++) {
 
  221                        $cols[$a_true[$i]][
"default"] = 
true;
 
  228                $lng->loadLanguageModule(
"scormtrac");
 
  230                $returnData = array();
 
  237                $query = 
'SELECT cmi_node.user_id, cmi_node.cp_node_id, 
  238                                cmi_objective.cmi_objective_id, 
  240                                cmi_objective.description,  
  241                                cmi_objective.completion_status, 
  242                                cmi_objective.progress_measure, 
  243                                cmi_objective.success_status, 
  244                                cmi_objective.scaled, 
  249                                FROM cmi_objective, cmi_node  
  250                                WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
'  
  251                                AND '.
$ilDB->in(
'cmi_node.user_id', $a_user, 
false, 
'integer') .
' 
  252                                AND cmi_node.cmi_node_id = cmi_objective.cmi_node_id  
  253                                AND cmi_interaction_id is null  
  255                        if ($b_orderBySCO) 
$query.=
'cmi_node.cp_node_id, cmi_node.user_id';
 
  256                        else $query.=
'cmi_node.user_id, cmi_node.cp_node_id';
 
  257                        $query.=
', cmi_objective.cmi_node_id';
 
  263                foreach($dbdata as 
$data) {
 
  264                        $data[
"lm_id"] = $this->getObjId();
 
  265                        $data[
"lm_title"] = $this->lmTitle;
 
  266                        $data=array_merge(
$data,self::userDataArrayForExport(
$data[
"user_id"], $allowExportPrivacy));
 
  267                        $data[
"sco_marked_for_learning_progress"] = $scoProgress[
$data[
"cp_node_id"]];
 
  268                        $data[
"sco_title"] = $scoTitles[
$data[
"cp_node_id"]];
 
  269                        $data[
"description"] = 
"".$data[
"description"]; 
 
  270                        $data[
"completion_status"] = 
"".$data[
"completion_status"];
 
  271                        $data[
"progress_measure"] = 
"".$data[
"progress_measure"];
 
  272                        $data[
"success_status"] = 
"".$data[
"success_status"];
 
  273                        $data[
"scaled"] = 
"".$data[
"scaled"];
 
  274                        $data[
"c_max"] = 
"".$data[
"c_max"];
 
  275                        $data[
"c_min"] = 
"".$data[
"c_min"];
 
  276                        $data[
"c_raw"] = 
"".$data[
"c_raw"];
 
  277                        $data[
"scope"] = 
"".$data[
"scope"];
 
  286                $lng->loadLanguageModule(
"scormtrac");
 
  290                        'lm_id,lm_title,'.$udh[
"cols"]
 
  291                        .
',Status,satisfied,measure,c_raw,c_min,c_max,completion_status,progress_measure');
 
  292                $a_true=explode(
',',$udh[
"default"].
",lm_title,Status,satisfied,completion_status");
 
  293                for ($i=0;$i<count($a_cols);$i++) {
 
  294                        $cols[$a_cols[$i]] = array(
"txt" => 
$lng->txt($a_cols[$i]),
"default" => 
false);
 
  296                for ($i=0;$i<count($a_true);$i++) {
 
  297                        $cols[$a_true[$i]][
"default"] = 
true;
 
  304                $lng->loadLanguageModule(
"scormtrac");
 
  305                $returnData = array();
 
  307                $query = 
'SELECT user_id, scope_id, 
  318                                AND '.$ilDB->in(
'user_id', $a_user, 
false, 
'integer') .
' 
  319                                ORDER BY user_id, scope_id';
 
  320                $res = 
$ilDB->queryF(
$query,array(
'integer'),array($this->getObjId()));
 
  325                foreach($dbdata as 
$data) {
 
  327                        $data[
"lm_title"] = $this->lmTitle;
 
  328                        $data=array_merge(
$data,self::userDataArrayForExport(
$data[
"user_id"], $allowExportPrivacy));
 
  329                        $data[
"Status"] = 
"".$data[
"status"];
 
  330                        $data[
"satisfied"] = 
"".$data[
"satisfied"];
 
  331                        $data[
"measure"] = 
"".$data[
"measure"];
 
  332                        $data[
"c_raw"] = 
"".$data[
"c_raw"];
 
  333                        $data[
"c_min"] = 
"".$data[
"c_min"];
 
  334                        $data[
"c_max"] = 
"".$data[
"c_max"];
 
  335                        $data[
"completion_status"] = 
"".$data[
"completion_status"];
 
  336                        $data[
"progress_measure"] = 
"".$data[
"progress_measure"];
 
  346                $lng->loadLanguageModule(
"scormtrac");
 
  349                        'lm_id,lm_title,cp_node_id,sco_marked_for_learning_progress,sco_title' 
  350                        .
',id,description,counter_all' 
  351                        .
',counter_correct,counter_correct_percent' 
  352                        .
',counter_incorrect,counter_incorrect_percent' 
  353                        .
',counter_other,counter_other_percent');
 
  354                $a_true=explode(
',',
"sco_title,description,counter_correct,counter_incorrect");
 
  355                for ($i=0;$i<count($a_cols);$i++) {
 
  356                        $cols[$a_cols[$i]] = array(
"txt" => 
$lng->txt($a_cols[$i]),
"default" => 
false);
 
  358                for ($i=0;$i<count($a_true);$i++) {
 
  359                        $cols[$a_true[$i]][
"default"] = 
true;
 
  364        function tracInteractionItem($a_user = array(), $a_sco = array(), $b_orderBySCO=
false, $allowExportPrivacy=
false) {
 
  366                $lng->loadLanguageModule(
"scormtrac");
 
  368                $returnData = array();
 
  374                $a_correct = array();
 
  375                $a_incorrect = array();
 
  376                $query = 
'SELECT cmi_node.cp_node_id, cmi_interaction.id, count(*) as counter 
  377                                FROM cmi_interaction, cmi_node  
  378                                WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
'  
  379                                AND '.
$ilDB->in(
'cmi_node.user_id', $a_user, 
false, 
'integer') .
' 
  380                                AND cmi_node.cmi_node_id = cmi_interaction.cmi_node_id  
  381                                AND cmi_interaction.result = %s  
  382                                GROUP BY cmi_node.cp_node_id,cmi_interaction.id';
 
  387                        $a_correct[
$row[
'cp_node_id'].
':'.
$row[
'id']] = 
$row[
'counter'];
 
  393                        $a_incorrect[
$row[
'cp_node_id'].
':'.
$row[
'id']] = 
$row[
'counter'];
 
  397                $query = 
'SELECT cmi_node.cp_node_id, cmi_interaction.id, cmi_interaction.description, count(*) as counter_all 
  398                                FROM cmi_interaction, cmi_node  
  399                                WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
'  
  400                                AND '.
$ilDB->in(
'cmi_node.user_id', $a_user, 
false, 
'integer') .
' 
  401                                AND cmi_node.cmi_node_id = cmi_interaction.cmi_node_id 
  402                                GROUP BY cmi_node.cp_node_id,cmi_interaction.id,cmi_interaction.description';
 
  408                foreach($dbdata as 
$data) {
 
  410                        $all = 
$data[
"counter_all"];
 
  412                        if($a_correct[$skey] != 
null) $correct = $a_correct[$skey];
 
  414                        if($a_incorrect[$skey] != 
null) $incorrect = $a_incorrect[$skey];
 
  415                        $other = $all-($correct+$incorrect);
 
  416                        $data[
"lm_id"] = $this->getObjId();
 
  417                        $data[
"lm_title"] = $this->lmTitle;
 
  418                        $data[
"sco_marked_for_learning_progress"] = $scoProgress[
$data[
"cp_node_id"]];
 
  419                        $data[
"sco_title"] = $scoTitles[
$data[
"cp_node_id"]];
 
  421                        $data[
"description"] = 
"".$data[
"description"];
 
  423                        $data[
"counter_correct"] = $correct;
 
  424                        $data[
"counter_correct_percent"] = $correct*100/$all;
 
  425                        $data[
"counter_incorrect"] = $incorrect;
 
  426                        $data[
"counter_incorrect_percent"] = $incorrect*100/$all;
 
  427                        $data[
"counter_other"] = $other;
 
  428                        $data[
"counter_other_percent"] = $other*100/$all;
 
  436                $lng->loadLanguageModule(
"scormtrac");
 
  441                        'lm_id,lm_title,cp_node_id,sco_marked_for_learning_progress,sco_title,'.$udh[
"cols"]
 
  442                        .
',counter_i_correct,counter_i_correct_percent' 
  443                        .
',counter_i_incorrect,counter_i_incorrect_percent' 
  444                        .
',counter_i_other,counter_i_other_percent' 
  445                        .
',audio_captioning,audio_level,completion_status,completion_threshold,credit,delivery_speed' 
  446                        .
',c_entry,c_exit,c_language,c_location,c_mode,progress_measure,c_max,c_min,c_raw,scaled' 
  447                        .
',scaled_passing_score,session_time,session_time_seconds,success_status,total_time,total_time_seconds,c_timestamp,suspend_data,launch_data');
 
  448                $a_true=explode(
',',$udh[
"default"].
',sco_title' 
  449                        .
',counter_i_correct,counter_i_correct_percent' 
  450                        .
',counter_i_incorrect,counter_i_incorrect_percent' 
  451                        .
',counter_i_other,counter_i_other_percent' 
  453                for ($i=0;$i<count($a_cols);$i++) {
 
  454                        $cols[$a_cols[$i]] = array(
"txt" => 
$lng->txt($a_cols[$i]),
"default" => 
false);
 
  456                for ($i=0;$i<count($a_true);$i++) {
 
  457                        $cols[$a_true[$i]][
"default"] = 
true;
 
  462        function tracInteractionUser($a_user = array(), $a_sco = array(), $b_orderBySCO=
false, $allowExportPrivacy=
false) {
 
  464                $lng->loadLanguageModule(
"scormtrac");
 
  466                $returnData = array();
 
  472                $a_correct = array();
 
  473                $a_incorrect = array();
 
  475                $query = 
'SELECT cmi_node.user_id, cmi_node.cp_node_id, count(*) as counter 
  476                                FROM cmi_interaction, cmi_node  
  477                                WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
'  
  478                                AND '.
$ilDB->in(
'cmi_node.user_id', $a_user, 
false, 
'integer') .
' 
  479                                AND cmi_node.cmi_node_id = cmi_interaction.cmi_node_id  
  480                                AND cmi_interaction.result = %s  
  481                                GROUP BY cmi_node.user_id,cmi_node.cp_node_id';
 
  486                        $a_correct[
$row[
'user_id'].
':'.
$row[
'cp_node_id']] = 
$row[
'counter'];
 
  492                        $a_incorrect[
$row[
'user_id'].
':'.
$row[
'cp_node_id']] = 
$row[
'counter'];
 
  495                $query = 
'SELECT cmi_node.user_id, cmi_node.cp_node_id, count(*) as counter 
  496                                FROM cmi_interaction, cmi_node  
  497                                WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
'  
  498                                AND '.
$ilDB->in(
'cmi_node.user_id', $a_user, 
false, 
'integer') .
' 
  499                                AND cmi_node.cmi_node_id = cmi_interaction.cmi_node_id  
  500                                AND cmi_interaction.result <> %s AND  cmi_interaction.result <> %s 
  501                                GROUP BY cmi_node.user_id,cmi_node.cp_node_id';
 
  502                $res = 
$ilDB->queryF(
$query,array(
'text',
'text'),array(
'correct',
'incorrect'));
 
  505                        $a_other[
$row[
'user_id'].
':'.
$row[
'cp_node_id']] = 
$row[
'counter'];
 
  509                $query = 
'SELECT user_id, cp_node_id, ' 
  510                        . 
'audio_captioning, audio_level, completion_status, completion_threshold, credit, delivery_speed, ' 
  511                        . 
'c_entry, c_exit, c_language, location as c_location, c_mode, progress_measure, c_max, c_min, c_raw, scaled, ' 
  512                        . 
'scaled_passing_score, session_time, success_status, total_time, c_timestamp, suspend_data, launch_data ' 
  514                        . 
'WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
' ' 
  515                        . 
'AND '.$ilDB->in(
'user_id', $a_user, 
false, 
'integer') .
' ' 
  517                        if ($b_orderBySCO) 
$query.=
'cp_node_id, user_id';
 
  518                        else $query.=
'user_id, cp_node_id';
 
  524                foreach($dbdata as 
$data) {
 
  525                        $skey = 
$data[
"user_id"].
':'.
$data[
"cp_node_id"];
 
  527                        if($a_correct[$skey] != 
null) $correct = $a_correct[$skey];
 
  529                        if($a_incorrect[$skey] != 
null) $incorrect = $a_incorrect[$skey];
 
  531                        if($a_other[$skey] != 
null) $other = $a_other[$skey];
 
  532                        $all = $correct+$incorrect+$other;
 
  533                        $data[
"lm_id"] = $this->getObjId();
 
  534                        $data[
"lm_title"] = $this->lmTitle;
 
  535                        $data=array_merge(
$data,self::userDataArrayForExport(
$data[
"user_id"], $allowExportPrivacy));
 
  536                        $data[
"sco_marked_for_learning_progress"] = $scoProgress[
$data[
"cp_node_id"]];
 
  537                        $data[
"sco_title"] = $scoTitles[
$data[
"cp_node_id"]];
 
  538                        $data[
"counter_i_correct"] = $correct;
 
  539                        if ($all > 0) 
$data[
"counter_i_correct_percent"] = $correct*100/$all;
 
  540                        else $data[
"counter_i_correct_percent"] = 0;
 
  541                        $data[
"counter_i_incorrect"] = $incorrect;
 
  542                        if ($all > 0) 
$data[
"counter_i_incorrect_percent"] = $incorrect*100/$all;
 
  543                        else $data[
"counter_i_incorrect_percent"] = 0;
 
  544                        $data[
"counter_i_other"] = $other;
 
  545                        if ($all > 0) 
$data[
"counter_i_other_percent"] = $other*100/$all;
 
  546                        else $data[
"counter_i_other_percent"] = 0;
 
  547                        $data[
"audio_captioning"] = 
"".$data[
"audio_captioning"];
 
  548                        $data[
"audio_level"] = 
"".$data[
"audio_level"];
 
  549                        $data[
"completion_status"] = 
"".$data[
"completion_status"];
 
  550                        $data[
"completion_threshold"] = 
"".$data[
"completion_threshold"];
 
  551                        $data[
"credit"] = 
"".$data[
"credit"];
 
  552                        $data[
"delivery_speed"] = 
"".$data[
"delivery_speed"];
 
  553                        $data[
"c_entry"] = 
"".$data[
"c_entry"];
 
  554                        $data[
"c_exit"] = 
"".$data[
"c_exit"];
 
  555                        $data[
"c_language"] = 
"".$data[
"c_language"];
 
  556                        $data[
"c_location"] = 
"".str_replace(
'"',
'',
$data[
"c_location"]);
 
  557                        $data[
"c_mode"] = 
"".$data[
"c_mode"];
 
  558                        $data[
"progress_measure"] = 
"".$data[
"progress_measure"];
 
  559                        $data[
"c_max"] = 
"".$data[
"c_max"];
 
  560                        $data[
"c_min"] = 
"".$data[
"c_min"];
 
  561                        $data[
"c_raw"] = 
"".$data[
"c_raw"];
 
  562                        $data[
"scaled"] = 
"".$data[
"scaled"];
 
  563                        $data[
"scaled_passing_score"] = 
"".$data[
"scaled_passing_score"];
 
  564                        $data[
"session_time"] = 
"".$data[
"session_time"];
 
  565                        $data[
"session_time_seconds"] = 
"";
 
  567                        $data[
"success_status"] = 
"".$data[
"success_status"];
 
  568                        $data[
"total_time"] = 
"".$data[
"total_time"];
 
  569                        $data[
"total_time_seconds"] = 
"";
 
  572                        $data[
"suspend_data"] = 
"".$data[
"suspend_data"];
 
  573                        $data[
"launch_data"] = 
"".$data[
"launch_data"];
 
  591                $lng->loadLanguageModule(
"scormtrac");
 
  594                $a_interaction=array();
 
  595                $a_interactionDescription=array();
 
  597                $query = 
'SELECT cmi_node.cp_node_id, 
  598                                cmi_interaction.cmi_interaction_id,  
  600                                cmi_interaction.description  
  601                                FROM cmi_interaction, cmi_node  
  602                                WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
'  
  603                                AND '.
$ilDB->in(
'cmi_node.user_id', $a_user, 
false, 
'integer') .
' 
  604                                AND cmi_node.cmi_node_id = cmi_interaction.cmi_node_id 
  606                        if ($b_orderBySCO) 
$query.=
'cmi_node.cp_node_id, cmi_node.user_id';
 
  607                        else $query.=
'cmi_node.user_id, cmi_node.cp_node_id';
 
  608                        $query.=
', cmi_interaction.cmi_interaction_id, cmi_interaction.id';
 
  615                foreach($dbdata as 
$data) {
 
  618                        for ($i=0;$i<count($a_interaction);$i++) {
 
  619                                if ($a_interaction[$i] == $key) $exist=
true;
 
  621                        if ($exist==
false) $a_interaction[] = $key;
 
  622                        if ($a_interactionDescription[$key]==
null) $a_interactionDescription[$key] = 
"".$data[
"description"];
 
  625                $a_cols=explode(
',',
'lm_id,lm_title,cp_node_id,sco_marked_for_learning_progress,sco_title,'.$udh[
"cols"]);
 
  626                $a_true=explode(
',',$udh[
"default"].
",sco_title");
 
  627                for ($i=0;$i<count($a_cols);$i++) {
 
  628                        $cols[$a_cols[$i]] = array(
"txt" => 
$lng->txt($a_cols[$i]),
"default" => 
false);
 
  630                for ($i=0;$i<count($a_true);$i++) {
 
  631                        $cols[$a_true[$i]][
"default"] = 
true;
 
  633                for ($i=0;$i<count($a_interaction);$i++) {
 
  639                        $cols[
"interaction_value".$i.
" ".$a_interactionDescription[$a_interaction[$i]]] = array(
"txt" => sprintf(
$lng->txt(
"interaction_value"),$i).
" ".$a_interactionDescription[$a_interaction[$i]],
"default" => 
true);
 
  646                $lng->loadLanguageModule(
"scormtrac");
 
  648                $returnData = array();
 
  654                $a_interaction=array();
 
  655                $a_interactionId=array();
 
  656                $a_interactionDescription=array();
 
  657                $a_interactionUser=array();
 
  659                $query = 
'SELECT cmi_node.user_id, cmi_node.cp_node_id, 
  660                                cmi_interaction.cmi_interaction_id,  
  662                                cmi_interaction.result,  
  663                                cmi_interaction.description  
  664                                FROM cmi_interaction, cmi_node  
  665                                WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
'  
  666                                AND '.
$ilDB->in(
'cmi_node.user_id', $a_user, 
false, 
'integer') .
' 
  667                                AND cmi_node.cmi_node_id = cmi_interaction.cmi_node_id 
  669                        if ($b_orderBySCO) 
$query.=
'cmi_node.cp_node_id, cmi_node.user_id';
 
  670                        else $query.=
'cmi_node.user_id, cmi_node.cp_node_id';
 
  671                        $query.=
', cmi_interaction.cmi_interaction_id, cmi_interaction.id';
 
  677                foreach($dbdata as 
$data) {
 
  680                        for ($i=0;$i<count($a_interaction);$i++) {
 
  681                                if ($a_interaction[$i] == $key) $exist=
true;
 
  687                                $a_interaction[] = $key;
 
  688                                $a_interactionId[$key] = 
"".$data[
"id"];
 
  689                                $a_interactionDescription[$key] = 
"".$data[
"description"];
 
  691                        $key .= 
':'.$data[
"user_id"];
 
  692                        $a_interactionUser[$key] = 
"".$data[
"result"];
 
  697                $query = 
'SELECT user_id, cp_node_id ' 
  699                        . 
'WHERE '.$ilDB->in(
'cp_node_id', $a_sco, 
false, 
'integer') .
' ' 
  700                        . 
'AND '.$ilDB->in(
'user_id', $a_user, 
false, 
'integer') .
' ' 
  703                        if ($b_orderBySCO) 
$query.=
'cp_node_id, user_id';
 
  704                        else $query.=
'user_id, cp_node_id';
 
  710                foreach($dbdata as 
$data) {
 
  711                        for ($i=0;$i<count($a_interaction);$i++) {
 
  717                                $intdesc = 
"interaction_value".$i.
" ".$a_interactionDescription[$a_interaction[$i]];
 
  718                                $data[$intdesc] = 
"";
 
  719                                $ukey=$a_interaction[$i].
':'.
$data[
"user_id"];
 
  720                                if ($a_interactionUser[$ukey] != 
null) 
$data[$intdesc] = $a_interactionUser[$ukey];
 
  722                        $data[
"lm_id"] = $this->getObjId();
 
  723                        $data[
"lm_title"] = $this->lmTitle;
 
  724                        $data=array_merge(
$data,self::userDataArrayForExport(
$data[
"user_id"], $allowExportPrivacy));
 
  725                        $data[
"sco_marked_for_learning_progress"] = $scoProgress[
$data[
"cp_node_id"]];
 
  726                        $data[
"sco_title"] = $scoTitles[
$data[
"cp_node_id"]];
 
  738                $query = 
'SELECT count(distinct(cp_node.cp_node_id)) counter ' 
  739                        . 
'FROM cp_node, cp_resource, cp_item ' 
  740                        . 
'WHERE cp_item.cp_node_id = cp_node.cp_node_id '  
  741                        . 
'AND cp_item.resourceid = cp_resource.id AND scormtype = %s '  
  742                        . 
'AND nodename = %s AND cp_node.slm_id = %s';
 
  745                        array(
'text', 
'text', 
'integer'),
 
  746                        array(
'sco', 
'item', $this->getObjId())
 
  750                        $scoCounter = 
$row[
'counter'];
 
  753                $u_startedSCO = array();
 
  754                $u_completedSCO = array();
 
  755                $u_passedSCO = array();
 
  756                for($i=0; $i<count($a_user); $i++) {
 
  757                        $u_startedSCO[$a_user[$i]] = 0;
 
  758                        $u_completedSCO[$a_user[$i]] = 0;
 
  759                        $u_passedSCO[$a_user[$i]] = 0;
 
  762                $query = 
'SELECT user_id, count(*) counter ' 
  763                        . 
'FROM cmi_node, cp_node '  
  764                        . 
'WHERE cmi_node.cp_node_id = cp_node.cp_node_id '  
  765                        . 
'AND cp_node.slm_id = %s ' 
  766                        . 
'AND '.$ilDB->in(
'user_id', $a_user, 
false, 
'integer') .
' ' 
  767                        . 
'GROUP BY user_id';
 
  771                        array($this->getObjId())
 
  774                        $u_startedSCO[
$data[
'user_id']] = 
$data[
'counter'];
 
  777                $query = 
'SELECT user_id, count(*) counter ' 
  778                        . 
'FROM cmi_node, cp_node '  
  779                        . 
'WHERE cmi_node.cp_node_id = cp_node.cp_node_id '  
  780                        . 
'AND cp_node.slm_id = %s ' 
  781                        . 
"AND cmi_node.completion_status = 'completed' " 
  782                        . 
'AND '.$ilDB->in(
'user_id', $a_user, 
false, 
'integer') .
' ' 
  783                        . 
'GROUP BY user_id';
 
  787                        array($this->getObjId())
 
  790                        $u_completedSCO[
$data[
'user_id']] = 
$data[
'counter'];
 
  793                $query = 
'SELECT user_id, count(*) counter ' 
  794                        . 
'FROM cmi_node, cp_node '  
  795                        . 
'WHERE cmi_node.cp_node_id = cp_node.cp_node_id '  
  796                        . 
'AND cp_node.slm_id = %s ' 
  797                        . 
"AND cmi_node.success_status = 'passed' " 
  798                        . 
'AND '.$ilDB->in(
'user_id', $a_user, 
false, 
'integer') .
' ' 
  799                        . 
'GROUP BY user_id';
 
  803                        array($this->getObjId())
 
  806                        $u_passedSCO[
$data[
'user_id']] = 
$data[
'counter'];
 
  811                $query = 
'SELECT * FROM sahs_user WHERE obj_id = '.$ilDB->quote($this->getObjId(), 
'integer')
 
  812                        .
' AND '.
$ilDB->in(
'user_id', $a_user, 
false, 
'integer')
 
  813                        .
' ORDER BY user_id';
 
_ISODurationToCentisec($str)
convert ISO 8601 Timeperiods to centiseconds ta
Class ilSCORM2004TrackingItems.
scoTitlesForExportSelected()
tracInteractionItemColumns($b_orderBySCO, $b_allowExportPrivacy)
exportSelectedInteractionsColumns()
tracInteractionUserAnswers($a_user=array(), $a_sco=array(), $b_orderBySCO=false, $allowExportPrivacy=false)
exportSelectedSuccess($a_user=array(), $allowExportPrivacy=false)
exportSelectedCoreColumns($b_orderBySCO, $b_allowExportPrivacy)
exportSelectedCore($a_user=array(), $a_sco=array(), $b_orderBySCO=false, $allowExportPrivacy=false)
tracInteractionUserColumns($b_orderBySCO, $b_allowExportPrivacy)
exportSelectedObjectives($a_user=array(), $a_sco=array(), $b_orderBySCO=false, $allowExportPrivacy=false)
exportObjGlobalToSystem($a_user=array(), $allowExportPrivacy=false)
tracInteractionUserAnswersColumns($a_user=array(), $a_sco=array(), $b_orderBySCO, $b_allowExportPrivacy)
exportSelectedObjectivesColumns()
exportObjGlobalToSystemColumns()
tracInteractionUser($a_user=array(), $a_sco=array(), $b_orderBySCO=false, $allowExportPrivacy=false)
tracInteractionItem($a_user=array(), $a_sco=array(), $b_orderBySCO=false, $allowExportPrivacy=false)
exportSelectedInteractions($a_user=array(), $a_sco=array(), $b_orderBySCO=false, $allowExportPrivacy=false)
Class ilSCORMTrackingItems.
exportSelectedSuccessRows($a_user=array(), $allowExportPrivacy=false, $dbdata=array(), $scoCounter, $u_startedSCO, $u_completedSCO, $u_passedSCO)
markedLearningStatusForExportSelected($a_scos)
userDataHeaderForExport()