예제 #1
0
 function Finish($idUser, $idReference, $idscorm_item, $environment = 'course_lo')
 {
     soap__dbgOut("+Finish({$idUser}, {$idReference}, {$idscorm_item} )");
     $status = "success";
     $error = "";
     $errorString = "";
     $lesson_status = "";
     $scormVersion = getScormVersion('idscorm_item', $idscorm_item);
     require_once dirname(__FILE__) . '/scorm-' . $scormVersion . '.php';
     $dbconn = $GLOBALS['dbConn'];
     $itemtrack = new Scorm_ItemsTrack($dbconn, $GLOBALS['prefix_lms']);
     $rs = $itemtrack->getItemTrack($idUser, $idReference, $idscorm_item);
     $arrItemTrackData = mysql_fetch_assoc($rs);
     $trackobj = new Scorm_Tracking(NULL, NULL, $arrItemTrackData['idscorm_tracking'], NULL, $dbconn, FALSE, FALSE);
     if ($trackobj->getErrorCode() != 0) {
         soap__dbgOut("Finish error: " . $trackobj->getErrorText());
     }
     /* if it's not for credit don't evaluate lesson_staus/completion_status */
     if ($trackobj->getParam(SCORM_RTE_CREDIT, false) == 'credit') {
         soap__dbgOut("Finish: evaluate " . SCORM_RTE_COMPLETIONSTATUS);
         $itemobj = new Scorm_Item(NULL, FALSE, NULL, $dbconn, false, $arrItemTrackData['idscorm_item']);
         if ($itemobj) {
             /* remember in 1.3 masteryscore = completionthreshold */
             if (strlen($itemobj->adlcp_masteryscore) > 0) {
                 $lesson_status = computeCompletionStatus($trackobj, $itemobj->adlcp_masteryscore);
             } else {
                 $lesson_status = $trackobj->getParam(SCORM_RTE_LESSONSTATUS, false);
                 if ($scormVersion == '1.3') {
                     $success_status = $trackobj->getParam(SCORM_RTE_SUCCESSSTATUS, false);
                     if ($success_status == 'failed') {
                         $lesson_status = 'failed';
                     }
                 }
                 if ($lesson_status == 'passed' || $lesson_status == 'completed') {
                     $trackobj->setParam(SCORM_RTE_CREDIT, 'no-credit', false, true);
                 }
             }
         }
         $itemtrack->setStatus($idUser, $idReference, $idscorm_item, $lesson_status, $environment);
     }
     soap__dbgOut("Finish: evaluate " . SCORM_RTE_ENTRY);
     $exitVal = $trackobj->getParam(SCORM_RTE_EXIT, false);
     /* logout is only in 1.3 scorm version */
     if ($exitVal == "suspend" || $exitVal == "logout") {
         $trackobj->setParam(SCORM_RTE_ENTRY, 'resume', false, true);
     } else {
         $trackobj->setParam(SCORM_RTE_ENTRY, '', false, true);
     }
     soap__dbgOut("Finish: evaluate " . SCORM_RTE_TOTALTIME);
     $sessTime = $trackobj->getParam(SCORM_RTE_SESSIONTIME, false);
     $totTime = $trackobj->getParam(SCORM_RTE_TOTALTIME, false);
     if (strlen($sessTime) > 0) {
         $totTime = sumScormTime($sessTime, $totTime);
         $trackobj->setParam(SCORM_RTE_TOTALTIME, $totTime, false, true);
     }
     //update history
     if ($arr = $trackobj->getTrackData($trackobj->idtrack)) {
         if (!$trackobj->saveHistory($trackobj->idtrack, $arr['score_raw'], $arr['score_max'], $sessTime, $arr['lesson_status'])) {
         }
         // if is a game we update the score result
     }
     if ($environment == 'games' && $arr['score_raw'] !== false && $arr['score_raw'] !== NULL) {
         require_once _lms_ . '/class.module/track.scorm.php';
         Track_ScormOrg::setEnvGamesData($idUser, $idReference, $arr['score_raw'], 'scormorg');
     }
     //end update
     soap__dbgOut("Finish return status = {$status}");
     return $this->makeResponse($status, $error, $errorString);
 }
예제 #2
0
 $scormVersion = getScormVersion('idscorm_organization', $idscorm_organization);
 /* get object title */
 list($lo_title) = sql_fetch_row(sql_query("SELECT title" . " FROM " . $GLOBALS['prefix_lms'] . "_organization" . " WHERE idResource = '{$idResource}'" . "   AND objectType = 'scormorg'"));
 $itemtrack = new Scorm_ItemsTrack(null, $GLOBALS['prefix_lms']);
 $rsItemTrack = $itemtrack->getItemTrack($idUser, $idReference, NULL, $idscorm_organization);
 if ($rsItemTrack === FALSE) {
     // The first time for this user in this organization
     $itemtrack->createItemsTrack($idUser, $idReference, $idscorm_organization);
     // Now should be present
     $rsItemTrack = $itemtrack->getItemTrack($idUser, $idReference, NULL, $idscorm_organization);
 }
 $arrItemTrack = mysql_fetch_assoc($rsItemTrack);
 // with id_item_track of organization|user|reference create an entry in commontrack table
 require_once _lms_ . '/class.module/track.object.php';
 require_once _lms_ . '/class.module/track.scorm.php';
 $track_so = new Track_ScormOrg($arrItemTrack['idscorm_item_track'], false, false, NULL, $environment);
 if ($track_so->idReference === NULL) {
     $track_so->createTrack($idReference, $arrItemTrack['idscorm_item_track'], $idUser, date("Y-m-d H:i:s"), 'ab-initio', 'scormorg');
 }
 /* info on number of items and setting of variables for tree hide/show */
 $nItem = $arrItemTrack['nDescendant'];
 if (!empty($GLOBALS['chapter'])) {
     $isshow_tree = 'false';
     $class_extension = '_hiddentree';
 } else {
     $isshow_tree = $nItem > 1 ? 'true' : 'false';
     $class_extension = $nItem > 1 ? '' : '_hiddentree';
 }
 $lms_base_url = 'http' . ((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' or isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https' or isset($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) == 'on') ? 's' : '') . '://' . (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']) . (strlen(dirname($_SERVER['SCRIPT_NAME'])) != 1 ? dirname($_SERVER['SCRIPT_NAME']) : '') . '/';
 $lms_url = $lms_base_url . $scormws;
 $xmlTreeUrl = $lms_base_url . $scormxmltree . '?idscorm_organization=' . $idscorm_organization . '&idReference=' . $idReference . '&environment=' . $environment;
예제 #3
0
 /**
  * Scorm_ItemsTrack::forwardCompleted
  *	forward completition back to ancestors items.
  *	change the nChildCompleted and nDescendantCompleted fields
  *	
  *	@param $idUser
  *	@param $idReference
  *	@param $idscorm_item
  *	@param $isChild
  **/
 function forwardCompleted($idUser, $idReference, $idscorm_item, $isChild, $environment)
 {
     $rs = $this->getParentItemTrack($idUser, $idReference, $idscorm_item);
     if ($rs === FALSE) {
         return FALSE;
     }
     $record = mysql_fetch_assoc($rs);
     $status = 'incomplete';
     if ($isChild) {
         $record['nChildCompleted']++;
         $updates[] = "nChildCompleted='" . (int) $record['nChildCompleted'] . "'";
         if ($record['nChildCompleted'] >= $record['nChild']) {
             $status = 'completed';
             if ($record['nChildCompleted'] > $record['nChild']) {
                 // is possible?
                 $record['nChildCompleted'] = $record['nChild'];
             }
         }
     }
     $record['nDescendantCompleted']++;
     if ($record['nDescendantCompleted'] > $record['nDescendant']) {
         $record['nDescendantCompleted'] = $record['nDescendant'];
     }
     $updates[] = "nDescendantCompleted='" . (int) $record['nDescendantCompleted'] . "'";
     if (strcmp($status, $record['status']) != 0) {
         $updates[] = "status='{$status}'";
     }
     $query = "UPDATE " . $this->main_table . " SET " . implode(', ', $updates) . " WHERE idscorm_item_track=" . $record['idscorm_item_track'];
     if (sql_query($query, $this->dbconn) === FALSE) {
         $textOut = "Scorm_ItemsTrack::forwardCompleted error in update [{$query}] " . mysql_error($this->dbconn) . print_r($record);
         soap__dbgOut($textOut, 1);
         die($textOut);
     }
     if (isset($record['idscorm_item'])) {
         if ($record['idscorm_item'] !== NULL) {
             if (strcmp($status, 'completed') == 0 || strcmp($status, 'passed') == 0) {
                 $this->forwardCompleted($idUser, $idReference, $record['idscorm_item'], TRUE, $environment);
             } else {
                 $this->forwardCompleted($idUser, $idReference, $record['idscorm_item'], FALSE, $environment);
             }
         }
     } else {
         // org item! set commontrack
         //print_r($record);
         if (strcmp($status, 'completed') == 0 || strcmp($status, 'passed') == 0) {
             soap__dbgOut("update commontrack");
             require_once _lms_ . "/class.module/track.object.php";
             require_once _lms_ . "/class.module/track.scorm.php";
             soap__dbgOut("create Track_ScormOrg object");
             $track_so = new Track_ScormOrg($record['idscorm_item_track'], false, false, NULL, $environment);
             soap__dbgOut("idscorm_item_track" . $record['idscorm_item_track']);
             soap__dbgOut("idReference = " . $track_so->idReference);
             $track_so->setStatus('completed');
             $track_so->setDate(date("Y-m-d H:i:s"));
             $track_so->update();
             soap__dbgOut("mysql error = " . mysql_error());
         }
     }
 }