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)