25die(
"Not Implemented: ilSCORM2004Tracking_getInProgress");
 
   62die(
"Not Implemented: ilSCORM2004Tracking_getCompleted");
 
   92die(
"Not Implemented: ilSCORM2004Tracking_getFailed");
 
  128                $in = 
$ilDB->in(
'cp_node.cp_node_id', $a_scorm_item_ids, 
false, 
'integer');
 
  134                        $omit_failed = 
' AND success_status <> '.$ilDB->quote(
'failed', 
'text');
 
  138                        SELECT cmi_node.user_id user_id, COUNT(user_id) completed FROM cp_node, cmi_node  
  139                        WHERE '.
$in.$omit_failed.
' 
  140                        AND cp_node.cp_node_id = cmi_node.cp_node_id 
  141                        AND cp_node.slm_id = %s 
  142                        AND completion_status = %s  
  143                        GROUP BY cmi_node.user_id',
 
  144                        array(
'integer', 
'text'),
 
  145                        array($a_obj_id, 
'completed')
 
  149                        $users[
$row->user_id] = 
$row->completed;
 
  152                return $users ? $users : array();
 
  166                        SELECT user_id, status, satisfied FROM cmi_gobjective 
  167                        WHERE objective_id = %s 
  169                        array(
'text', 
'integer'), 
 
  170                        array(
'-course_overall_status-', $a_obj_id)
 
  173                $info[
'completed'] = array();
 
  174                $info[
'failed'] = array();
 
  175                $info[
'in_progress'] = array();
 
  179                        if (self::_isCompleted(
$row[
"status"], 
$row[
"satisfied"]))
 
  183                        if (self::_isInProgress(
$row[
"status"], 
$row[
"satisfied"]))
 
  185                                $info[
'in_progress'][] = 
$row[
"user_id"];
 
  187                        if (self::_isFailed(
$row[
"status"], 
$row[
"satisfied"]))
 
  206                        SELECT status, satisfied FROM cmi_gobjective 
  207                        WHERE objective_id = %s 
  208                        AND scope_id = %s AND user_id = %s', 
 
  209                        array(
'text', 
'integer', 
'integer'), 
 
  210                        array(
'-course_overall_status-', $a_obj_id, $a_user_id)
 
  213                $status = 
"not_attempted";
 
  216                        if (self::_isInProgress(
$row[
"status"], 
$row[
"satisfied"]))
 
  218                                $status = 
"in_progress";
 
  220                        if (self::_isCompleted(
$row[
"status"], 
$row[
"satisfied"]))
 
  222                                $status = 
"completed";
 
  224                        if (self::_isFailed(
$row[
"status"], 
$row[
"satisfied"]))
 
  242                        SELECT DISTINCT user_id FROM cmi_gobjective 
  243                        WHERE objective_id = %s 
  245                        array(
'text', 
'integer'), 
 
  246                        array(
'-course_overall_status-', $a_obj_id)
 
  252                        $users[] = 
$row[
"user_id"];
 
  261                $in = 
$ilDB->in(
'cp_node.cp_node_id', $a_scorm_item_ids, 
false, 
'integer');
 
  264                        'SELECT cp_node.cp_node_id id,  
  265                                        cmi_node.user_id user_id, 
  266                                        cmi_node.completion_status completion,  
  267                                        cmi_node.success_status success 
  268                         FROM cp_node, cmi_node  
  270                         AND cp_node.cp_node_id = cmi_node.cp_node_id 
  271                         AND cp_node.slm_id = %s',
 
  276                $info[
'completed'] = array();
 
  277                $info[
'failed'] = array();
 
  278                $info[
'in_progress'] = array();
 
  284                        if (
$row[
"completion"] == 
"completed" || 
$row[
"success"] == 
"passed")
 
  287                                if(!$a_omit_failed || 
$row[
"success"] != 
"failed")
 
  292                        if (
$row[
"success"] == 
"failed")
 
  304                $status = 
"not_attempted";
 
  306                if (is_array($a_scos))
 
  308                        $in = 
$ilDB->in(
'cp_node.cp_node_id', $a_scos, 
false, 
'integer');
 
  311                                'SELECT cp_node.cp_node_id id, 
  312                                                cmi_node.completion_status completion,  
  313                                                cmi_node.success_status success 
  314                                 FROM cp_node, cmi_node  
  316                                 AND cp_node.cp_node_id = cmi_node.cp_node_id 
  317                                 AND cp_node.slm_id = %s 
  318                                AND cmi_node.user_id = %s',
 
  319                                array(
'integer', 
'integer'),
 
  320                                array($a_obj_id, $a_user_id)
 
  328                                if ($rec[
"completion"] == 
"completed" || $rec[
"success"] == 
"passed")
 
  332                                if ($rec[
"success"] == 
"failed") 
$failed = 
true;
 
  335                        if ($started == 
true) $status = 
"in_progress";
 
  336                        if (
$failed == 
true) $status = 
"failed";
 
  337                        else if ($cntcompleted == count($a_scos)) $status = 
"completed";
 
  344                $a_omit_failed = 
false)
 
  348                if (is_array($a_scos))
 
  350                        $in = 
$ilDB->in(
'cp_node.cp_node_id', $a_scos, 
false, 
'integer');
 
  353                                'SELECT cp_node.cp_node_id id, 
  354                                                cmi_node.completion_status completion,  
  355                                                cmi_node.success_status success 
  356                                 FROM cp_node, cmi_node  
  358                                 AND cp_node.cp_node_id = cmi_node.cp_node_id 
  359                                 AND cp_node.slm_id = %s 
  360                                AND cmi_node.user_id = %s',
 
  361                                array(
'integer', 
'integer'),
 
  362                                array($a_obj_id, $a_user_id)
 
  372                                if (($rec[
"completion"] == 
"completed" || $rec[
"success"] == 
"passed")
 
  373                                        && (!$a_omit_failed || $rec[
"success"] != 
"failed"))
 
  389        function _syncReadEvent($a_obj_id, $a_user_id, $a_type, $a_ref_id, $time_from_lms = 
null)
 
  394                $val_set = 
$ilDB->queryF(
 
  395                        'SELECT time_from_lms FROM sahs_lm WHERE id = %s', 
 
  396                        array(
'integer'),array($a_obj_id));
 
  397                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  401                $val_set = 
$ilDB->queryF(
' 
  402                        SELECT package_attempts, sco_total_time_sec, total_time_sec  
  403                        FROM sahs_user WHERE obj_id = %s AND user_id = %s',
 
  404                        array(
'integer',
'integer'), array($a_obj_id,$a_user_id));
 
  405                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  406                if ($time_from_lms == 
false) $time = $val_rec[
"sco_total_time_sec"];
 
  407                else $time = $val_rec[
"total_time_sec"];
 
  408                $attempts = $val_rec[
"package_attempts"];
 
  409                if ($attempts == 
null) $attempts = 
""; 
 
  411                if ($attempts != 
"" && $time == 
null) { 
 
  415                include_once(
"./Services/Tracking/classes/class.ilChangeEvent.php");
 
  417                        $a_obj_id, $a_user_id, 
false, $attempts, $time);
 
  425                if ($a_status == 
"completed" || $a_satisfied == 
"satisfied")
 
  438                if ($a_status != 
"completed")
 
  451                if ($a_status == 
"completed" && $a_satisfied == 
"notSatisfied")
 
  466                $val_set = 
$ilDB->queryF(
 
  467                        'SELECT cp_node_id FROM cp_node  
  469                        AND cp_node.slm_id = %s',
 
  470                        array(
'text', 
'integer'),
 
  471                        array(
'item', $a_obj_id)
 
  473                while($val_rec = 
$ilDB->fetchAssoc($val_set))
 
  475                        array_push($scos,$val_rec[
'cp_node_id']);
 
  478                foreach ($scos as $sco) 
 
  480                        include_once(
"./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php");
 
  481                        $data_set = 
$ilDB->queryF(
' 
  484                                WHERE cp_node_id = %s 
  486                                array(
'integer',
'integer'),
 
  487                                array($sco, $a_user_id)
 
  490                        while($data_rec = 
$ilDB->fetchAssoc($data_set))
 
  498                if ($a_write && $time>0) {
 
  499                        $ilDB->queryF(
'UPDATE sahs_user SET sco_total_time_sec=%s WHERE obj_id = %s AND user_id = %s',
 
  500                                array(
'integer', 
'integer', 
'integer'), 
 
  501                                array($time, $a_obj_id, $a_user_id));
 
_recordReadEvent($a_type, $a_ref_id, $obj_id, $usr_id, $isCatchupWriteEvents=true, $a_ext_rc=false, $a_ext_time=false)
Records a read event and catches up with write events.
_ISODurationToCentisec($str)
convert ISO 8601 Timeperiods to centiseconds ta
Class ilSCORM2004Tracking.
_getProgressInfo($a_obj_id)
Get overall scorm status.
static _countCompleted($a_scos, $a_obj_id, $a_user_id, $a_omit_failed=false)
_getCountCompletedPerUser($a_scorm_item_ids, $a_obj_id, $a_omit_failed=false)
Get progress of selected scos.
_getProgressInfoOfUser($a_obj_id, $a_user_id)
Get overall scorm status.
static _getCollectionStatus($a_scos, $a_obj_id, $a_user_id)
static _isFailed($a_status, $a_satisfied)
_getCompleted($scorm_item_id, $a_obj_id)
_getTrackedUsers($a_obj_id)
Get all tracked users.
static _isInProgress($a_status, $a_satisfied)
_syncReadEvent($a_obj_id, $a_user_id, $a_type, $a_ref_id, $time_from_lms=null)
Synch read event table.
_getInProgress($scorm_item_id, $a_obj_id)
getSumTotalTimeSecondsFromScos($a_obj_id, $a_user_id, $a_write=false)
should be avoided; store value to increase performance for further requests
ilObjSCORM2004Tracking()
Constructor @access public.
static _isCompleted($a_status, $a_satisfied)
_getItemProgressInfo($a_scorm_item_ids, $a_obj_id, $a_omit_failed=false)
_getFailed($scorm_item_id, $a_obj_id)
static yn2tf($a_yn)
convert "y"/"n" to true/false