19                $revert = array(
'%21'=>
'!', 
'%2A'=>
'*', 
'%27'=>
"'", 
'%28'=>
'(', 
'%29'=>
')', 
'%7E'=>
'~');
 
   20                return strtr(rawurlencode($str), $revert);
 
   28                $b_storeObjectives=
'false';
 
   29                if ($slm_obj->getObjectives()) $b_storeObjectives=
'true';
 
   30                $b_storeInteractions=
'false';
 
   31                if ($slm_obj->getInteractions()) $b_storeInteractions=
'true';
 
   32                $b_readInteractions=
'false';
 
   33                $c_storeSessionTime=
's';
 
   34                if ($slm_obj->getTime_from_lms()) $c_storeSessionTime=
'i';
 
   35                $i_lessonScoreMax=
'-1';
 
   36                $i_lessonMasteryScore=
'-1';
 
   39                $b_messageLog=
'false';
 
   40                if (
$ilLog->current_log_level == 30) $b_messageLog=
'true';
 
   42                if (
$_GET[
"autolaunch"] != 
"") $launchId=
$_GET[
"autolaunch"];
 
   44                if ($slm_obj->getSession()) {
 
   45                        $session_timeout = (int)($ilias->ini->readVariable(
"session",
"expire"))/2;
 
   47                $b_autoReview=
'false';
 
   48                if ($slm_obj->getAutoReview()) $b_autoReview=
'true';
 
   50                if ($slm_obj->getDebug()) $b_debug=
'true';
 
   51                $b_autoContinue=
'false';
 
   52                if ($slm_obj->getAutoContinue()) $b_autoContinue=
'true';
 
   53                $b_checkSetValues=
'false';
 
   54                if ($slm_obj->getCheck_values()) $b_checkSetValues=
'true';
 
   55                $b_autoLastVisited=
'false';
 
   56                if ($slm_obj->getAuto_last_visited()) {
 
   57                        $b_autoLastVisited=
'true';
 
   58                        if ($launchId == 
'0') $launchId=$slm_obj->getLastVisited(
$ilUser->getID());
 
   64                $val_set = 
$ilDB->queryF(
' 
   65                        SELECT sc_item.obj_id,prereq_type,prerequisites,maxtimeallowed,timelimitaction,datafromlms,masteryscore  
   66                        FROM sc_item, scorm_object  
   67                        WHERE scorm_object.obj_id=sc_item.obj_id 
   68                        AND scorm_object.c_type = %s 
   69                        AND scorm_object.slm_id = %s',
 
   70                        array(
'text',
'integer'),
 
   71                        array(
'sit',$slm_obj->getId())
 
   73                while($val_rec = 
$ilDB->fetchAssoc($val_set)) {
 
   74                        if($val_rec[
"prereq_type"]!=
null || $val_rec[
"prerequisites"]!=
null || $val_rec[
"maxtimeallowed"]!=
null || $val_rec[
"timelimitaction"]!=
null || $val_rec[
"datafromlms"]!=
null || $val_rec[
"masteryscore"]!=
null) {
 
   75                                $tmp_man=array((
int)$val_rec[
"obj_id"],
null,
null,
null,
null,
null,
null);
 
   87                        .
'"refId":'.
$_GET[
"ref_id"].
',' 
   88                        .
'"objId":'.$slm_obj->getId().
',' 
   89                        .
'"launchId":'.$launchId.
',' 
   91                        .
'"pingSession":'. $session_timeout.
',' 
   92                        .
'"studentId":'.$ilias->account->getId().
',' 
   93                        .
'"studentName":"'.
self::encodeURIComponent($ilias->account->getLastname().
', '.$ilias->account->getFirstname()).
'",' 
   96                        .
'"credit":"'.str_replace(
"_", 
"-", $slm_obj->getCreditMode()).
'",' 
   97                        .
'"lesson_mode":"'.$slm_obj->getDefaultLessonMode().
'",' 
   98                        .
'"b_autoReview":'.$b_autoReview.
',' 
   99                        .
'"b_messageLog":'.$b_messageLog.
',' 
  100                        .
'"b_checkSetValues":'.$b_checkSetValues.
',' 
  101                        .
'"b_storeObjectives":'.$b_storeObjectives.
',' 
  102                        .
'"b_storeInteractions":'.$b_storeInteractions.
',' 
  103                        .
'"b_readInteractions":'.$b_readInteractions.
',' 
  104                        .
'"c_storeSessionTime":"'.$c_storeSessionTime.
'",' 
  105                        .
'"b_autoContinue":'.$b_autoContinue.
',' 
  106                        .
'"b_autoLastVisited":'.$b_autoLastVisited.
',' 
  107                        .
'"i_lessonScoreMax":'.$i_lessonScoreMax.
',' 
  108                        .
'"i_lessonMasteryScore":'.$i_lessonMasteryScore.
',' 
  109                        .
'"b_debug":'.$b_debug.
',' 
  110                        .
'"a_itemParameter":'.json_encode($a_man).
',' 
  111                        .
'"status":'.json_encode(self::getStatus($slm_obj->getId(), 
$ilUser->getID(), $slm_obj->getAuto_last_visited())).
',' 
  140                $b_readInteractions=
'false';
 
  142                $tquery = 
'SELECT sco_id,lvalue,rvalue FROM scorm_tracking ' 
  143                                .
'WHERE user_id = %s AND obj_id = %s ' 
  144                                .
"AND sco_id > 0 AND lvalue != 'cmi.core.entry' AND lvalue != 'cmi.core.session_time'";
 
  145                if ($b_readInteractions == 
'false') $tquery.=
" AND SUBSTR(lvalue, 1, 16) != 'cmi.interactions'";
 
  146                $val_set = 
$ilDB->queryF($tquery,
 
  147                        array(
'integer',
'integer'),
 
  148                        array(
$ilUser->getId(),$a_packageId)
 
  150                while($val_rec = 
$ilDB->fetchAssoc($val_set)) {
 
  151                        if (!strpos($val_rec[
"lvalue"],
"._count"))
 
  152                                $a_out[]=array( (
int)$val_rec[
"sco_id"], $val_rec[
"lvalue"], self::encodeURIComponent($val_rec[
"rvalue"]) );
 
  154                return json_encode($a_out);
 
  158                global $ilias, 
$ilDB;
 
  162                $val_set = 
$ilDB->queryF(
" 
  163                        SELECT sc_resource.obj_id 
  164                        FROM scorm_tree, sc_resource 
  165                        WHERE scorm_tree.slm_id=%s  
  166                        AND sc_resource.obj_id=scorm_tree.child",
 
  170                while($val_rec = 
$ilDB->fetchAssoc($val_set)) {
 
  171                        $s_resourceIds .= 
",".$val_rec[
"obj_id"];
 
  173                $s_resourceIds = substr($s_resourceIds,1);
 
  175                $tquery=
"SELECT scorm_tree.lft, scorm_tree.child,  
  176                        CASE WHEN sc_resource.scormtype = 'asset' THEN 1 ELSE 0 END AS asset, 
  178                        FROM scorm_tree, sc_resource, sc_item 
  179                        WHERE scorm_tree.slm_id=%s  
  180                        AND sc_item.obj_id=scorm_tree.child  
  181                        AND sc_resource.import_id=sc_item.identifierref  
  182                        AND sc_resource.obj_id in (".$s_resourceIds.
")  
  183                        ORDER BY scorm_tree.lft";
 
  184                $val_set = 
$ilDB->queryF($tquery,
 
  188                while($val_rec = 
$ilDB->fetchAssoc($val_set)) {
 
  190                        $a_out[]=array( (
int)$val_rec[
"lft"], (
int)$val_rec[
"child"], (
int)$val_rec[
"asset"], self::encodeURIComponent($val_rec[
"href"]) );
 
  194                return json_encode($a_out);
 
  198                global $ilias, 
$ilDB;
 
  200                $tquery=
"SELECT scorm_tree.child, scorm_tree.depth-3 depth, scorm_object.title, scorm_object.c_type 
  201                        FROM scorm_tree, scorm_object 
  202                        WHERE scorm_object.obj_id=scorm_tree.child 
  203                        AND scorm_tree.slm_id=%s 
  204                        AND (scorm_object.c_type='sor' OR scorm_object.c_type='sit') 
  205                        ORDER BY scorm_tree.lft";
 
  206                $val_set = 
$ilDB->queryF($tquery,
 
  210                while($val_rec = 
$ilDB->fetchAssoc($val_set)) {
 
  211                        $a_out[]=array((
int)$val_rec[
"child"],(
int)$val_rec[
"depth"],self::encodeURIComponent($val_rec[
"title"]),$val_rec[
"c_type"]);
 
  213                return json_encode($a_out);
 
  216        function getStatus($a_packageId,$a_user_id,$auto_last_visited,$scormType=
"1.2") {
 
  218                include_once 
'./Services/Tracking/classes/class.ilLPStatus.php';
 
  220                $status[
'saved_global_status']=(int) $oldStatus;
 
  221                include_once 
'./Services/Object/classes/class.ilObjectLP.php';
 
  223                $status[
'lp_mode'] = $olp->getCurrentMode();
 
  224                $collection = $olp->getCollectionInstance();
 
  227                        $status[
'scos'] = $collection->getItems();
 
  229                else $status[
'scos'] = array();
 
  231                $status[
'p'] = $a_user_id;
 
  233                $status[
'last_visited'] = 
null;
 
  234                $status[
'total_time_sec'] = 0;
 
  235                $val_set = 
$ilDB->queryF(
 
  236                        'SELECT last_visited, sco_total_time_sec, total_time_sec FROM sahs_user WHERE obj_id = %s AND user_id = %s',
 
  237                        array(
'integer',
'integer'),
 
  238                        array($a_packageId,$a_user_id));
 
  239                $val_rec = 
$ilDB->fetchAssoc($val_set);
 
  240                if($auto_last_visited) $status[
'last_visited'] = $val_rec[
"last_visited"];
 
  241                if ($val_rec[
"total_time_sec"]==
null) {
 
  242                        if ($val_rec[
"sco_total_time_sec"]==
null) {
 
  244                                if ($scormType == 
"2004") {
 
  245                                        include_once 
'./Modules/Scorm2004/classes/class.ilSCORM2004Tracking.php';
 
  249                                $status[
'total_time_sec'] = (int) $val_rec[
"sco_total_time_sec"];
 
  252                        $status[
'total_time_sec'] = (int) $val_rec[
"total_time_sec"];
 
  257        private function setHash($a_packageId,$a_user_id) {
 
  259                $hash = mt_rand(1000000000,9999999999);
 
  260                $endDate = date(
'Y-m-d H:i:s', mktime(date(
'H'), date(
'i'), date(
's'), date(
'm'), date(
'd')+1, date(
'Y')));
 
  262                $res = 
$ilDB->queryF(
'SELECT count(*) cnt FROM sahs_user WHERE obj_id = %s AND user_id = %s',
 
  263                        array(
'integer', 
'integer'),
 
  264                        array($a_packageId,$a_user_id)
 
  267                if ($val_rec[
"cnt"] == 0) { 
 
  268                        $ilDB->manipulateF(
'INSERT INTO sahs_user (obj_id, user_id, hash, hash_end) VALUES(%s, %s, %s, %s)',  
 
  269                                array(
'integer', 
'integer', 
'text', 
'timestamp'),
 
  270                                array($a_packageId, $a_user_id, 
"".$hash, $endDate)
 
  275                        $ilDB->manipulateF(
'UPDATE sahs_user SET hash = %s, hash_end = %s WHERE obj_id = %s AND user_id = %s',
 
  276                                array(
'text', 
'timestamp', 
'integer', 
'integer'),
 
  277                                array(
"".$hash, $endDate, $a_packageId, $a_user_id)
 
  300                        'SELECT max_attempt FROM sahs_lm WHERE id = %s', 
 
  306                return $row[
'max_attempt']; 
 
static _lookupStatus($a_obj_id, $a_user_id, $a_create=true)
Lookup status.
Class ilObjSCORMInitData.
getIliasScormVars($slm_obj)
getStatus($a_packageId, $a_user_id, $auto_last_visited, $scormType="1.2")
get_max_attempts($a_packageId)
Get max.
setHash($a_packageId, $a_user_id)
getIliasScormTree($a_packageId)
getIliasScormData($a_packageId)
getIliasScormResources($a_packageId)
static getInstance($a_obj_id)
getSumTotalTimeSecondsFromScos($a_obj_id, $a_user_id, $a_write=false)
should be avoided; store value to increase performance for further requests
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)