ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
ilSCORMOfflineMode Class Reference

Class ilSCORMOfflineMode. More...

+ Collaboration diagram for ilSCORMOfflineMode:

Public Member Functions

 __construct ()
 Constructor. More...
 
 il2sop ()
 
 getClientIdSop ()
 
 il2sopUserData ()
 
 il2sopSahsUser ()
 
 sop2il ()
 
 scormPlayerUnloadForSop2il ($data)
 
 setOfflineMode ($a_mode)
 
 getOfflineMode ()
 
 checkIfAnyoneIsInOfflineMode ($obj_id)
 
 usersInOfflineMode ($obj_id)
 
 stopOfflineModeForUser ($obj_id, $user_id)
 

Data Fields

 $type
 
 $obj_id
 
 $offlineMode
 

Private Member Functions

 read ()
 

Detailed Description

Class ilSCORMOfflineMode.

Class for scorm offline player connection

Author
Uwe Kohnle kohnl.nosp@m.e@in.nosp@m.terne.nosp@m.tleh.nosp@m.rer-g.nosp@m.mbh..nosp@m.de
Version
Id
class.ilSCORMOfflineMode.php

Definition at line 16 of file class.ilSCORMOfflineMode.php.

Constructor & Destructor Documentation

◆ __construct()

ilSCORMOfflineMode::__construct ( )

Constructor.

Parameters
int$a_idObject ID @access public

Definition at line 28 of file class.ilSCORMOfflineMode.php.

29 {
30 global $ilias;
31 $this->ilias =& $ilias;
32 $this->id = $_GET['ref_id'];
33 $this->obj_id = ilObject::_lookupObjectId($_GET['ref_id']);
34 include_once "./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php";
35 $this->type = ilObjSAHSLearningModule::_lookupSubType($this->obj_id);
36 $this->read();
37 }
$_GET["client_id"]
_lookupSubType($a_obj_id)
lookup subtype id (scorm, aicc, hacp)
static _lookupObjectId($a_ref_id)
lookup object id
redirection script todo: (a better solution should control the processing via a xml file)

References $_GET, ilObject\_lookupObjectId(), ilObjSAHSLearningModule\_lookupSubType(), and read().

+ Here is the call graph for this function:

Member Function Documentation

◆ checkIfAnyoneIsInOfflineMode()

ilSCORMOfflineMode::checkIfAnyoneIsInOfflineMode (   $obj_id)

Definition at line 294 of file class.ilSCORMOfflineMode.php.

294 {
295 global $ilDB;
296 $res = $ilDB->queryF("SELECT count(*) cnt FROM sahs_user WHERE obj_id=%s AND offline_mode = 'offline'",
297 array('integer'),
298 array($obj_id)
299 );
300 $val_rec = $ilDB->fetchAssoc($res);
301 if ($val_rec["cnt"] == 0) return false;
302 return true;
303 }
global $ilDB

References $ilDB, $obj_id, and $res.

Referenced by ilObjSCORM2004LearningModuleGUI\initPropertiesForm(), and ilObjSCORMLearningModuleGUI\properties().

+ Here is the caller graph for this function:

◆ getClientIdSop()

ilSCORMOfflineMode::getClientIdSop ( )

Definition at line 110 of file class.ilSCORMOfflineMode.php.

110 {
111 $iliasDomain = substr(ILIAS_HTTP_PATH,7);
112 if (substr($iliasDomain,0,1) == "\/") $iliasDomain = substr($iliasDomain,1);
113 if (substr($iliasDomain,0,4) == "www.") $iliasDomain = substr($iliasDomain,4);
114 return $iliasDomain.';'.CLIENT_ID;
115 }

◆ getOfflineMode()

ilSCORMOfflineMode::getOfflineMode ( )

Definition at line 274 of file class.ilSCORMOfflineMode.php.

References $offlineMode.

◆ il2sop()

ilSCORMOfflineMode::il2sop ( )

Definition at line 39 of file class.ilSCORMOfflineMode.php.

39 {
40 global $ilUser, $ilias;
41 $this->setOfflineMode("il2sop");
42 header('Content-Type: text/javascript; charset=UTF-8');
43
44 include_once "./Modules/ScormAicc/classes/class.ilObjSAHSLearningModule.php";
45 $ob = new ilObjSAHSLearningModule($this->id);
46 $module_version = $ob->getModuleVersion();
47 $sahs_user = $this->il2sopSahsUser();
48 $support_mail = "";//TODO
49 $scorm_version = "1.2";
50 if ($this->type == "scorm2004") $scorm_version = "2004";
51 $tree="";
52
53 $learning_progress_enabled = 1;
54 include_once './Services/Object/classes/class.ilObjectLP.php';
55 $olp = ilObjectLP::getInstance($this->obj_id);
56 if ($olp->getCurrentMode() == 0) $learning_progress_enabled = 0;
57
58 $certificate_enabled = 0;
59
60 $adlact_data = null;
61 $ilias_version = $ilias->getSetting("ilias_version");
62
63 if ($this->type == 'scorm2004') {
64 include_once "./Modules/Scorm2004/classes/ilSCORM13Player.php";
65 $ob2004 = new ilSCORM13Player();
66 $init_data = $ob2004->getConfigForPlayer();
67 $resources = json_decode($ob2004->getCPDataInit());
68 $cmi = $ob2004->getCMIData($ilUser->getID(), $this->obj_id);
69 $max_attempt = $ob2004->get_max_attempts();
70 $adlact_data = json_decode($ob2004->getADLActDataInit());
71 //$globalobj_data = $ob2004->readGObjectiveInit();
72 } else {
73 include_once "./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMInitData.php";
74 $slm_obj =& new ilObjSCORMLearningModule($_GET["ref_id"]);
75 $init_data = ilObjSCORMInitData::getIliasScormVars($slm_obj);
76 $resources = json_decode(ilObjSCORMInitData::getIliasScormResources($this->obj_id));
77 $tree = json_decode(ilObjSCORMInitData::getIliasScormTree($this->obj_id));
78 $cmi = json_decode(ilObjSCORMInitData::getIliasScormData($this->obj_id));
79 $max_attempt = ilObjSCORMInitData::get_max_attempts($this->obj_id);
80 }
81 if ($max_attempt == null) $max_attempt = 0;
82 $result = array(
83 'client_data' => array(
84 $support_mail
85 ),
86 'user_data' => $this->il2sopUserData(),
87 'lm' => array(
88 ilObject::_lookupTitle($this->obj_id),
89 ilObject::_lookupDescription($this->obj_id),
90 $scorm_version,
91 1,//active
92 $init_data,
93 $resources,
94 $tree,
95 $module_version,
96 "", //offline_zip_created!!!!!!!!
97 $learning_progress_enabled,
98 $certificate_enabled,
99 $max_attempt,
100 $adlact_data,
101 $ilias_version
102 ),
103 'sahs_user' => $sahs_user,
104 'cmi' => $cmi
105 );
106
107 print(json_encode($result));
108 }
$result
Class ilObjSCORMLearningModule.
get_max_attempts($a_packageId)
Get max.
Class ilObjSCORMLearningModule.
static getInstance($a_obj_id)
static _lookupTitle($a_id)
lookup object title
static _lookupDescription($a_id)
lookup object description
if(! $in) print
global $ilUser
Definition: imgupload.php:15

References $_GET, $ilUser, $result, ilObject\_lookupDescription(), ilObject\_lookupTitle(), ilObjSCORMInitData\get_max_attempts(), ilObjSCORMInitData\getIliasScormData(), ilObjSCORMInitData\getIliasScormResources(), ilObjSCORMInitData\getIliasScormTree(), ilObjSCORMInitData\getIliasScormVars(), ilObjectLP\getInstance(), il2sopSahsUser(), il2sopUserData(), print, and setOfflineMode().

+ Here is the call graph for this function:

◆ il2sopSahsUser()

ilSCORMOfflineMode::il2sopSahsUser ( )

Definition at line 129 of file class.ilSCORMOfflineMode.php.

129 {
130 global $ilDB,$ilUser;
131 $package_attempts = 0;
132 $module_version = 1;//if module_version in sop is different...
133 $last_visited = "";
134 $first_access = null;
135 $last_access = null;
136 $last_status_change = null;
137 $total_time_sec = null;
138 $sco_total_time_sec = 0;
139 $status = 0;
140 $percentage_completed = 0;
141 $user_data = "";
142
143 global $ilDB,$ilUser;
144 $res = $ilDB->queryF('SELECT * FROM sahs_user WHERE obj_id=%s AND user_id=%s',
145 array('integer','integer'),
146 array($this->obj_id,$ilUser->getID())
147 );
148 while($row = $ilDB->fetchAssoc($res))
149 {
150 $package_attempts = $row['package_attempts'];
151 $module_version = $row['module_version'];
152 $last_visited = $row['last_visited'];
153 if ($row['first_access'] != null) {
154 $first_access = strtotime($row['first_access'])*1000;//check Oracle!
155 }
156 if ($row['last_access'] != null) {
157 $last_access = strtotime($row['last_access'])*1000;//check Oracle!
158 }
159 $total_time_sec = $row['total_time_sec'];
160 $sco_total_time_sec = $row['sco_total_time_sec'];
161 $status = $row['status'];
162 $percentage_completed = $row['percentage_completed'];
163 }
164 if ($first_access == null) {
165 include_once './Services/Tracking/classes/class.ilChangeEvent.php';
166 $all = ilChangeEvent::_lookupReadEvents($this->obj_id,$ilUser->getID());
167 foreach($all as $event)
168 {
169 $first_access = strtotime($event['first_access'])*1000;//
170 }
171 }
172 return array($package_attempts, $module_version, $last_visited, $first_access, $last_access, $last_status_change, $total_time_sec, $sco_total_time_sec, $status, $percentage_completed, $user_data);
173 }
static _lookupReadEvents($obj_id, $usr_id=null)
Reads all read events which occured on the object which happened after the last time the user caught ...

References $ilDB, $ilUser, $res, $row, and ilChangeEvent\_lookupReadEvents().

Referenced by il2sop().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ il2sopUserData()

ilSCORMOfflineMode::il2sopUserData ( )

Definition at line 117 of file class.ilSCORMOfflineMode.php.

117 {
118 global $ilUser;
119 return array(
120 $ilUser->getLogin(),
121 "",
122 $ilUser->getFirstname(),
123 $ilUser->getLastname(),
124 $ilUser->getUTitle(),
125 $ilUser->getGender(),
126 $ilUser->getID()
127 );
128 }

References $ilUser.

Referenced by il2sop().

+ Here is the caller graph for this function:

◆ read()

ilSCORMOfflineMode::read ( )
private

Definition at line 278 of file class.ilSCORMOfflineMode.php.

278 {
279 global $ilDB,$ilUser;
280 $res = $ilDB->queryF('SELECT offline_mode FROM sahs_user WHERE obj_id=%s AND user_id=%s',
281 array('integer','integer'),
282 array($this->obj_id,$ilUser->getId())
283 );
284 while($row = $ilDB->fetchAssoc($res))
285 {
286 if ($row['offline_mode'] != null) {
287 $this->offlineMode = $row['offline_mode'];
288 } else {
289 $this->offlineMode = "online";
290 }
291 }
292 }

References $ilDB, $ilUser, $res, and $row.

Referenced by __construct().

+ Here is the caller graph for this function:

◆ scormPlayerUnloadForSop2il()

ilSCORMOfflineMode::scormPlayerUnloadForSop2il (   $data)

Definition at line 241 of file class.ilSCORMOfflineMode.php.

241 {
242 global $ilDB,$ilUser;
243 $first_access=null;
244 if($data->first_access != null) $first_access=date('Y-m-d H:i:s',round($data->first_access/1000));
245 $last_access=null;
246 $i_last_access=null;
247 if($data->last_access != null) {
248 $i_last_access = round($data->last_access/1000);
249 $last_access=date('Y-m-d H:i:s',$i_last_access);
250 include_once("./Services/Tracking/classes/class.ilChangeEvent.php");
251 ilChangeEvent::_updateAccessForScormOfflinePlayer($this->obj_id,$ilUser->getId(), $i_last_access, $first_access);
252 }
253 $last_status_change=null;
254 if($data->last_status_change != null) $last_status_change=date('Y-m-d H:i:s',round($data->last_status_change/1000));
255 $GLOBALS['ilLog']->write('first_access='.$first_access);
256 $res = $ilDB->queryF('UPDATE sahs_user SET first_access=%s, last_access=%s, last_status_change=%s, last_visited=%s, module_version=%s WHERE obj_id=%s AND user_id=%s',
257 array('timestamp','timestamp','timestamp','text','integer','integer','integer'),
258 array($first_access,$last_access,$last_status_change,$data->last_visited,$data->module_version, $this->obj_id,$ilUser->getId())
259 );
260
261 //populate last_status_change
262 return true;
263 }
_updateAccessForScormOfflinePlayer($obj_id, $usr_id, $i_last_access, $t_first_access)
_updateAccessForScormOfflinePlayer needed to synchronize last_access and first_access when learning m...
$data
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Definition: CAS.php:276

References $data, $GLOBALS, $ilDB, $ilUser, $res, and ilChangeEvent\_updateAccessForScormOfflinePlayer().

+ Here is the call graph for this function:

◆ setOfflineMode()

ilSCORMOfflineMode::setOfflineMode (   $a_mode)

Definition at line 266 of file class.ilSCORMOfflineMode.php.

266 {
267 global $ilDB,$ilUser;
268 $res = $ilDB->queryF('UPDATE sahs_user SET offline_mode=%s WHERE obj_id=%s AND user_id=%s',
269 array('text','integer','integer'),
270 array($a_mode, $this->obj_id,$ilUser->getId())
271 );
272 $this->offlineMode=$a_mode;
273 }

References $ilDB, $ilUser, and $res.

Referenced by il2sop().

+ Here is the caller graph for this function:

◆ sop2il()

ilSCORMOfflineMode::sop2il ( )

Definition at line 175 of file class.ilSCORMOfflineMode.php.

175 {
176// sleep(5);
177 global $ilDB,$ilUser;
178 $in = file_get_contents("php://input");
179 $GLOBALS['ilLog']->write($in);
180 $ret = array('msg'=>array(),'err'=>array());
181
182 if (!$in || $in == "") {
183 $ret['err'][] = "no post data recieved";
184 print(json_encode($ret));
185 exit;
186 }
187 $userId=$ilUser->getID();
188 $result=true;
189
190 if ($this->type == 'scorm2004') {
191 $lm_set = $ilDB->queryF('SELECT default_lesson_mode, interactions, objectives, comments FROM sahs_lm WHERE id = %s', array('integer'),array($this->obj_id));
192 while($lm_rec = $ilDB->fetchAssoc($lm_set))
193 {
194 $defaultLessonMode=($lm_rec["default_lesson_mode"]);
195 $interactions=(ilUtil::yn2tf($lm_rec["interactions"]));
196 $objectives=(ilUtil::yn2tf($lm_rec["objectives"]));
197 $comments=(ilUtil::yn2tf($lm_rec["comments"]));
198 }
199 include_once './Modules/Scorm2004/classes/class.ilSCORM2004StoreData.php';
200 $data = json_decode($in);
201 $GLOBALS['ilLog']->write('cmi_count='.count($data->cmi));
202 for ($i=0; $i<count($data->cmi); $i++) {
203 if($result==true) {
204 //$a_r=array();
205 $cdata=$data->cmi[$i];
207 $userId,
208 $this->obj_id,
209 $data->cmi[$i],//json_decode($data->cmi[$i]),
210 $comments,
211 $interactions,
212 $objectives
213 );
214 if (!is_array($a_r)) $result=false;
215 }
216 }
217 if ($result==true) {
218 $result=ilSCORM2004StoreData::syncGlobalStatus($userId, $this->obj_id, $data, $data->now_global_status);
219 }
220 } else {
221 include_once "./Modules/ScormAicc/classes/SCORM/class.ilObjSCORMTracking.php";
222 $data = json_decode($in);
223 $result=ilObjSCORMTracking::storeJsApiCmi($userId,$this->obj_id,$data);
224 if ($result==true) {
225 $result=ilObjSCORMTracking::syncGlobalStatus($userId, $this->obj_id, $data, $data->now_global_status);
226 }
227 }
228 if ($result==true) {
229 $result=self::scormPlayerUnloadForSOP2il($data);
230 }
231
232 if ($result==false) {
233 $ret['err'][] = "invalid post data recieved";
234 } else {
235 $ret['msg'][] = "post data recieved";
236 }
237 header('Content-Type: text/plain; charset=UTF-8');
238 print json_encode($ret);
239 }
storeJsApiCmi($user_id, $obj_id, $data)
syncGlobalStatus($userId, $packageId, $data, $new_global_status)
setCMIData($userId, $packageId, $data, $getComments, $getInteractions, $getObjectives)
syncGlobalStatus($userId, $packageId, $data, $new_global_status, $time_from_lms)
static yn2tf($a_yn)
convert "y"/"n" to true/false
exit
Definition: login.php:54
$lm_set

References $data, $GLOBALS, $ilDB, $ilUser, $in, $lm_set, $result, $ret, exit, print, ilSCORM2004StoreData\setCMIData(), ilObjSCORMTracking\storeJsApiCmi(), ilObjSCORMTracking\syncGlobalStatus(), ilSCORM2004StoreData\syncGlobalStatus(), and ilUtil\yn2tf().

+ Here is the call graph for this function:

◆ stopOfflineModeForUser()

ilSCORMOfflineMode::stopOfflineModeForUser (   $obj_id,
  $user_id 
)

Definition at line 320 of file class.ilSCORMOfflineMode.php.

320 {
321 global $ilDB;
322 $res = $ilDB->queryF("UPDATE sahs_user SET offline_mode='online' WHERE obj_id=%s AND user_id=%s",
323 array('integer','integer'),
324 array($obj_id,$user_id)
325 );
326 }

References $ilDB, $obj_id, and $res.

Referenced by ilObjSCORMLearningModuleGUI\confirmedStopUserOfflineMode().

+ Here is the caller graph for this function:

◆ usersInOfflineMode()

ilSCORMOfflineMode::usersInOfflineMode (   $obj_id)

Definition at line 305 of file class.ilSCORMOfflineMode.php.

305 {
306 global $ilDB;
307 $users = array();
308 $res = $ilDB->queryF("SELECT user_id, lastname, firstname FROM sahs_user, usr_data "
309 ."WHERE sahs_user.obj_id=%s AND sahs_user.offline_mode = 'offline' AND sahs_user.user_id=usr_data.usr_id",
310 array('integer'),
311 array($obj_id)
312 );
313 while($row = $ilDB->fetchAssoc($res))
314 {
315 $users[] = $row;
316 }
317 return $users;
318 }

References $ilDB, $obj_id, $res, and $row.

Referenced by ilSCORMOfflineModeUsersTableGUI\parse().

+ Here is the caller graph for this function:

Field Documentation

◆ $obj_id

ilSCORMOfflineMode::$obj_id

◆ $offlineMode

ilSCORMOfflineMode::$offlineMode

Definition at line 20 of file class.ilSCORMOfflineMode.php.

Referenced by getOfflineMode().

◆ $type

ilSCORMOfflineMode::$type

Definition at line 18 of file class.ilSCORMOfflineMode.php.


The documentation for this class was generated from the following file: