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"]))
 
  181                                $info[
'completed'][] = 
$row[
"user_id"];
 
  183                        if (self::_isInProgress(
$row[
"status"], 
$row[
"satisfied"]))
 
  185                                $info[
'in_progress'][] = 
$row[
"user_id"];
 
  187                        if (self::_isFailed(
$row[
"status"], 
$row[
"satisfied"]))
 
  189                                $info[
'failed'][] = 
$row[
"user_id"];
 
  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();
 
  283                        $info[
'in_progress'][
$row[
"id"]][] = 
$row[
"user_id"];
 
  284                        if (
$row[
"completion"] == 
"completed" || 
$row[
"success"] == 
"passed")
 
  287                                if(!$a_omit_failed || 
$row[
"success"] != 
"failed")
 
  289                                        $info[
'completed'][
$row[
"id"]][] = 
$row[
"user_id"];
 
  292                        if (
$row[
"success"] == 
"failed")
 
  294                                $info[
'failed'][
$row[
"id"]][] = 
$row[
"user_id"];
 
  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";
 
  340                        if ($status == 
"in_progress" && self::_hasMaxAttempts($a_obj_id, $a_user_id))
 
  353                        'SELECT max_attempt FROM sahs_lm WHERE id = %s', 
 
  358                $max_attempts = 
$row[
'max_attempt'];
 
  362                        $val_set = 
$ilDB->queryF(
'SELECT package_attempts FROM sahs_user WHERE obj_id = %s AND user_id = %s',
 
  363                                array(
'integer',
'integer'), array($a_obj_id,$a_user_id));
 
  364                        $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  365                        $attempts = $val_rec[
"package_attempts"];
 
  366                        if ($attempts == 
null) $attempts = 0;
 
  368                        if ($attempts >= $max_attempts)
 
  378                $a_omit_failed = 
false)
 
  382                if (is_array($a_scos))
 
  384                        $in = 
$ilDB->in(
'cp_node.cp_node_id', $a_scos, 
false, 
'integer');
 
  387                                'SELECT cp_node.cp_node_id id, 
  388                                                cmi_node.completion_status completion,  
  389                                                cmi_node.success_status success 
  390                                 FROM cp_node, cmi_node  
  392                                 AND cp_node.cp_node_id = cmi_node.cp_node_id 
  393                                 AND cp_node.slm_id = %s 
  394                                AND cmi_node.user_id = %s',
 
  395                                array(
'integer', 
'integer'),
 
  396                                array($a_obj_id, $a_user_id)
 
  406                                if (($rec[
"completion"] == 
"completed" || $rec[
"success"] == 
"passed")
 
  407                                        && (!$a_omit_failed || $rec[
"success"] != 
"failed"))
 
  423        function _syncReadEvent($a_obj_id, $a_user_id, $a_type, $a_ref_id, $time_from_lms = 
null)
 
  428                $val_set = 
$ilDB->queryF(
 
  429                        'SELECT time_from_lms FROM sahs_lm WHERE id = %s', 
 
  430                        array(
'integer'),array($a_obj_id));
 
  431                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  435                $val_set = 
$ilDB->queryF(
' 
  436                        SELECT package_attempts, sco_total_time_sec, total_time_sec  
  437                        FROM sahs_user WHERE obj_id = %s AND user_id = %s',
 
  438                        array(
'integer',
'integer'), array($a_obj_id,$a_user_id));
 
  439                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  440                if ($time_from_lms == 
false) $time = $val_rec[
"sco_total_time_sec"];
 
  441                else $time = $val_rec[
"total_time_sec"];
 
  442                $attempts = $val_rec[
"package_attempts"];
 
  443                if ($attempts == 
null) $attempts = 
""; 
 
  445                if ($attempts != 
"" && $time == 
null) { 
 
  449                include_once(
"./Services/Tracking/classes/class.ilChangeEvent.php");
 
  451                        $a_obj_id, $a_user_id, 
false, $attempts, $time);
 
  459                if ($a_status == 
"completed" || $a_satisfied == 
"satisfied")
 
  472                if ($a_status != 
"completed")
 
  485                if ($a_status == 
"completed" && $a_satisfied == 
"notSatisfied")
 
  500                $val_set = 
$ilDB->queryF(
 
  501                        'SELECT cp_node_id FROM cp_node  
  503                        AND cp_node.slm_id = %s',
 
  504                        array(
'text', 
'integer'),
 
  505                        array(
'item', $a_obj_id)
 
  507                while($val_rec = 
$ilDB->fetchAssoc($val_set))
 
  509                        array_push($scos,$val_rec[
'cp_node_id']);
 
  512                foreach ($scos as $sco) 
 
  514                        include_once(
"./Modules/Scorm2004/classes/class.ilObjSCORM2004LearningModule.php");
 
  515                        $data_set = 
$ilDB->queryF(
' 
  518                                WHERE cp_node_id = %s 
  520                                array(
'integer',
'integer'),
 
  521                                array($sco, $a_user_id)
 
  524                        while($data_rec = 
$ilDB->fetchAssoc($data_set))
 
  532                if ($a_write && $time>0) {
 
  533                        $ilDB->queryF(
'UPDATE sahs_user SET sco_total_time_sec=%s WHERE obj_id = %s AND user_id = %s',
 
  534                                array(
'integer', 
'integer', 
'integer'), 
 
  535                                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)
static _hasMaxAttempts($a_obj_id, $a_user_id)
_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