Class ilObjSCORMTracking.
More...
|
static | storeJsApi () |
|
static | storeJsApiCmi (int $user_id, int $obj_id, object $data) |
|
static | syncGlobalStatus (int $userId, int $packageId, int $refId, object $data, ?int $new_global_status) |
|
static | _insertTrackData (int $a_sahs_id, string $a_lval, string $a_rval, int $a_obj_id) |
|
static | _getCompleted (object $scorm_item_id, int $a_obj_id) |
| like necessary because of Oracle More...
|
|
static | _getCollectionStatus (?array $a_scos, int $a_obj_id, int $a_user_id) |
|
static | _countCompleted (?array $a_scos, int $a_obj_id, int $a_user_id) |
|
static | lookupLastAccessTimes (int $a_obj_id) |
| Lookup last acccess time for all users of a scorm module. More...
|
|
static | _getTrackedUsers (int $a_obj_id) |
| Get all tracked users. More...
|
|
static | _getFailed (object $scorm_item_id, int $a_obj_id) |
| like necessary because of Oracle More...
|
|
static | _getCountCompletedPerUser (array $a_scorm_item_ids, int $a_obj_id) |
| Get users who have status completed or passed. More...
|
|
static | _getProgressInfo (array $sco_item_ids, int $a_obj_id) |
| Get info about. More...
|
|
static | _getInProgress (array|int $scorm_item_id, int $a_obj_id, ?array $a_blocked_user_ids=null) |
|
static | scorm12PlayerUnload () |
|
static | checkIfAllowed (int $packageId, int $userId, int $hash) |
|
static | _syncReadEvent (int $a_obj_id, int $a_user_id, string $a_type, int $a_ref_id) |
|
◆ _countCompleted()
static ilObjSCORMTracking::_countCompleted |
( |
?array |
$a_scos, |
|
|
int |
$a_obj_id, |
|
|
int |
$a_user_id |
|
) |
| |
|
static |
Definition at line 344 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, and $res.
Referenced by ilLPStatusSCORM\determinePercentage().
347 $ilDB = $DIC->database();
350 if (is_array($a_scos)) {
351 $in =
$ilDB->in(
'sco_id', $a_scos,
false,
'integer');
354 'SELECT sco_id, rvalue FROM scorm_tracking 359 array(
'integer',
'text',
'integer'),
360 array($a_obj_id,
'cmi.core.lesson_status', $a_user_id)
364 if ($rec[
"rvalue"] ===
"completed" || $rec[
"rvalue"] ===
"passed") {
◆ _getCollectionStatus()
static ilObjSCORMTracking::_getCollectionStatus |
( |
?array |
$a_scos, |
|
|
int |
$a_obj_id, |
|
|
int |
$a_user_id |
|
) |
| |
|
static |
Definition at line 299 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, and $res.
Referenced by ilLPStatusSCORM\determineStatus().
302 $ilDB = $DIC->database();
304 $status =
"not_attempted";
306 if (is_array($a_scos)) {
307 $in =
$ilDB->in(
'sco_id', $a_scos,
false,
'integer');
310 'SELECT sco_id, rvalue FROM scorm_tracking 315 array(
'integer',
'text',
'integer'),
316 array($a_obj_id,
'cmi.core.lesson_status', $a_user_id)
323 if ($rec[
"rvalue"] ===
"failed") {
326 if ($rec[
"rvalue"] !==
"completed" && $rec[
"rvalue"] !==
"passed") {
332 $status =
"in_progress";
334 if ($completed && $cnt == count($a_scos)) {
335 $status =
"completed";
◆ _getCompleted()
static ilObjSCORMTracking::_getCompleted |
( |
object |
$scorm_item_id, |
|
|
int |
$a_obj_id |
|
) |
| |
|
static |
like necessary because of Oracle
Definition at line 254 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, and $res.
257 $ilDB = $DIC->database();
261 if (is_array($scorm_item_id)) {
262 $in =
$ilDB->in(
'sco_id', $scorm_item_id,
false,
'integer');
265 'SELECT DISTINCT(user_id) FROM scorm_tracking 269 AND (' .
$ilDB->like(
'rvalue',
'clob',
'completed') .
' OR ' .
$ilDB->like(
274 array(
'integer',
'text'),
275 array($a_obj_id,
'cmi.core.lesson_status')
279 'SELECT DISTINCT(user_id) FROM scorm_tracking 283 AND (' .
$ilDB->like(
'rvalue',
'clob',
'completed') .
' OR ' .
$ilDB->like(
288 array(
'integer',
'integer',
'text'),
289 array($scorm_item_id, $a_obj_id,
'cmi.core.lesson_status')
293 while ($row =
$ilDB->fetchObject(
$res)) {
294 $user_ids[] = $row->user_id;
◆ _getCountCompletedPerUser()
static ilObjSCORMTracking::_getCountCompletedPerUser |
( |
array |
$a_scorm_item_ids, |
|
|
int |
$a_obj_id |
|
) |
| |
|
static |
Get users who have status completed or passed.
- Returns
- array<int|string, mixed>
Definition at line 463 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, and $res.
Referenced by ilLPStatusSCORM\_getStatusInfo().
466 $ilDB = $DIC->database();
469 $in =
$ilDB->in(
'sco_id', $a_scorm_item_ids,
false,
'integer');
475 SELECT user_id, COUNT(user_id) completed FROM scorm_tracking 479 AND (' .
$ilDB->like(
'rvalue',
'clob',
'completed') .
' OR ' .
$ilDB->like(
'rvalue',
'clob',
'passed') .
') 481 array(
'integer',
'text'),
482 array($a_obj_id,
'cmi.core.lesson_status')
484 while ($row =
$ilDB->fetchObject(
$res)) {
485 $users[$row->user_id] = $row->completed;
◆ _getFailed()
static ilObjSCORMTracking::_getFailed |
( |
object |
$scorm_item_id, |
|
|
int |
$a_obj_id |
|
) |
| |
|
static |
like necessary because of Oracle
Definition at line 421 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, and $res.
424 $ilDB = $DIC->database();
427 if (is_array($scorm_item_id)) {
428 $in =
$ilDB->in(
'sco_id', $scorm_item_id,
false,
'integer');
432 SELECT DISTINCT(user_id) FROM scorm_tracking 436 AND ' .
$ilDB->like(
'rvalue',
'clob',
'failed') .
' ',
437 array(
'integer',
'text'),
438 array($a_obj_id,
'cmi.core.lesson_status')
443 SELECT DISTINCT(user_id) FROM scorm_tracking 447 AND ' .
$ilDB->like(
'rvalue',
'clob',
'failed') .
' ',
448 array(
'integer',
'integer',
'text'),
449 array($scorm_item_id, $a_obj_id,
'cmi.core.lesson_status')
453 while ($row =
$ilDB->fetchObject(
$res)) {
454 $user_ids[] = $row->user_id;
◆ _getInProgress()
static ilObjSCORMTracking::_getInProgress |
( |
array|int |
$scorm_item_id, |
|
|
int |
$a_obj_id, |
|
|
?array |
$a_blocked_user_ids = null |
|
) |
| |
|
static |
- Returns
- array<int|string, mixed[]>
Definition at line 537 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, and $res.
Referenced by _getProgressInfo().
540 $ilDB = $DIC->database();
542 if (is_array($scorm_item_id)) {
543 $in =
$ilDB->in(
'sco_id', $scorm_item_id,
false,
'integer');
546 'SELECT user_id,sco_id FROM scorm_tracking 549 GROUP BY user_id, sco_id',
555 'SELECT user_id,sco_id FROM scorm_tracking 558 array(
'integer',
'integer'),
559 array($scorm_item_id, $a_obj_id)
563 $in_progress = array();
565 while ($row =
$ilDB->fetchObject(
$res)) {
567 if (!($a_blocked_user_ids &&
568 isset($a_blocked_user_ids[$row->sco_id]) &&
569 is_array($a_blocked_user_ids[$row->sco_id]) &&
570 in_array($row->user_id, $a_blocked_user_ids[$row->sco_id]))) {
571 $in_progress[$row->sco_id][] = $row->user_id;
◆ _getProgressInfo()
static ilObjSCORMTracking::_getProgressInfo |
( |
array |
$sco_item_ids, |
|
|
int |
$a_obj_id |
|
) |
| |
|
static |
Get info about.
- Returns
- array<string, array>
Definition at line 494 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, $info, $res, and _getInProgress().
Referenced by ilLPStatusSCORM\_getStatusInfo().
497 $ilDB = $DIC->database();
499 $in =
$ilDB->in(
'sco_id', $sco_item_ids,
false,
'integer');
503 SELECT * FROM scorm_tracking 507 array(
'integer',
'text'),
508 array($a_obj_id,
'cmi.core.lesson_status')
511 $info[
'completed'] = array();
512 $info[
'failed'] = array();
515 while ($row =
$ilDB->fetchObject(
$res)) {
516 switch ($row->rvalue) {
519 $info[
'completed'][$row->sco_id][] = $row->user_id;
520 $user_ids[$row->sco_id][] = $row->user_id;
524 $info[
'failed'][$row->sco_id][] = $row->user_id;
525 $user_ids[$row->sco_id][] = $row->user_id;
static _getInProgress(array|int $scorm_item_id, int $a_obj_id, ?array $a_blocked_user_ids=null)
◆ _getTrackedUsers()
static ilObjSCORMTracking::_getTrackedUsers |
( |
int |
$a_obj_id | ) |
|
|
static |
◆ _insertTrackData()
static ilObjSCORMTracking::_insertTrackData |
( |
int |
$a_sahs_id, |
|
|
string |
$a_lval, |
|
|
string |
$a_rval, |
|
|
int |
$a_obj_id |
|
) |
| |
|
static |
Definition at line 230 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, ilLPStatusWrapper\_updateStatus(), and ilUtil\now().
Referenced by ilSCORMItem\insertTrackData().
233 $ilDB = $DIC->database();
234 $ilUser = $DIC->user();
236 $ilDB->insert(
'scorm_tracking', array(
237 'obj_id' => array(
'integer', $a_obj_id),
238 'user_id' => array(
'integer', $ilUser->getId()),
239 'sco_id' => array(
'integer', $a_sahs_id),
240 'lvalue' => array(
'text', $a_lval),
241 'rvalue' => array(
'clob', $a_rval),
245 if ($a_lval ===
"cmi.core.lesson_status") {
static now()
Return current timestamp in Y-m-d H:i:s format.
static _updateStatus(int $a_obj_id, int $a_usr_id, ?object $a_obj=null, bool $a_percentage=false, bool $a_force_raise=false)
◆ _syncReadEvent()
static ilObjSCORMTracking::_syncReadEvent |
( |
int |
$a_obj_id, |
|
|
int |
$a_user_id, |
|
|
string |
$a_type, |
|
|
int |
$a_ref_id |
|
) |
| |
|
static |
Definition at line 627 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, ilChangeEvent\_recordReadEvent(), ilLoggerFactory\getLogger(), ILIAS\Repository\int(), and null.
Referenced by scorm12PlayerUnload().
630 $ilDB = $DIC->database();
632 $val_set =
$ilDB->queryF(
633 'SELECT package_attempts, total_time_sec, sco_total_time_sec, time_from_lms FROM sahs_user, sahs_lm ' 634 .
'WHERE sahs_user.obj_id = %s AND sahs_user.user_id = %s AND sahs_user.obj_id = sahs_lm.id',
635 array(
'integer',
'integer'),
636 array($a_obj_id, $a_user_id)
639 $val_rec =
$ilDB->fetchAssoc($val_set);
641 if ($val_rec[
"package_attempts"] ==
null) {
642 $val_rec[
"package_attempts"] =
"";
644 $attempts = $val_rec[
"package_attempts"];
646 $time = (
int) $val_rec[
"sco_total_time_sec"];
650 $sco_set =
$ilDB->queryF(
652 SELECT sco_id, rvalue FROM scorm_tracking 657 array(
'integer',
'integer',
'text',
'integer'),
658 array($a_obj_id, $a_user_id,
'cmi.core.total_time', 0)
661 while ($sco_rec =
$ilDB->fetchAssoc($sco_set)) {
662 $tarr = explode(
":", $sco_rec[
"rvalue"]);
663 $sec = (
int) $tarr[2] + (
int) $tarr[1] * 60 +
664 (
int) substr($tarr[0], strlen($tarr[0]) - 3) * 60 * 60;
static getLogger(string $a_component_id)
Get component logger.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static _recordReadEvent(string $a_type, int $a_ref_id, int $obj_id, int $usr_id, bool $isCatchupWriteEvents=true, $a_ext_rc=null, $a_ext_time=null)
◆ checkIfAllowed()
static ilObjSCORMTracking::checkIfAllowed |
( |
int |
$packageId, |
|
|
int |
$userId, |
|
|
int |
$hash |
|
) |
| |
|
static |
Definition at line 611 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, and $res.
614 $ilDB = $DIC->database();
616 'select hash from sahs_user where obj_id=%s AND user_id=%s AND hash_end>%s',
617 array(
'integer',
'integer',
'timestamp'),
618 array(
$packageId, $userId, date(
'Y-m-d H:i:s'))
621 if (! ($rowtmp && $rowtmp[
'hash'] == $hash)) {
◆ lookupLastAccessTimes()
static ilObjSCORMTracking::lookupLastAccessTimes |
( |
int |
$a_obj_id | ) |
|
|
static |
Lookup last acccess time for all users of a scorm module.
- Returns
- array<int|string, mixed>
Definition at line 376 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, $res, and ilDBConstants\FETCHMODE_OBJECT.
379 $ilDB = $DIC->database();
382 $query =
'SELECT user_id, MAX(c_timestamp) tst ' .
383 'FROM scorm_tracking ' .
384 'WHERE obj_id = ' .
$ilDB->quote($a_obj_id,
'integer') .
' ' .
389 $users[$row->user_id] = $row->tst;
◆ scorm12PlayerUnload()
static ilObjSCORMTracking::scorm12PlayerUnload |
( |
| ) |
|
|
static |
Definition at line 577 of file class.ilObjSCORMTracking.php.
References $DIC, $GLOBALS, $ilDB, $ref_id, $user_id, _syncReadEvent(), and ILIAS\UI\examples\Symbol\Glyph\Header\header().
580 $ilDB = $DIC->database();
581 $user_id = $DIC->http()->wrapper()->query()->retrieve(
'p', $DIC->refinery()->kindlyTo()->int());
582 $ref_id = $DIC->http()->wrapper()->query()->retrieve(
'ref_id', $DIC->refinery()->kindlyTo()->int());
583 $obj_id = $DIC->http()->wrapper()->query()->retrieve(
'package_id', $DIC->refinery()->kindlyTo()->int());
585 $GLOBALS[
'DIC'][
'ilLog']->write(__METHOD__ .
' no valid obj_id');
588 if ($DIC->http()->wrapper()->query()->has(
'last_visited')) {
589 $last_visited = $DIC->http()->wrapper()->query()->retrieve(
'last_visited', $DIC->refinery()->kindlyTo()->string());
594 mktime((
int) date(
'H'), (
int) date(
'i') + 5, (
int) date(
's'), (
int) date(
'm'), (
int) date(
'd'), (
int) date(
'Y'))
598 SET last_visited = %s, hash_end =%s, last_access = %s 599 WHERE obj_id = %s AND user_id = %s',
600 array(
'text',
'timestamp',
'timestamp',
'integer',
'integer'),
601 array($last_visited, $endDate, date(
'Y-m-d H:i:s'), $obj_id,
$user_id)
607 header(
'Content-Type: text/plain; charset=UTF-8');
static _syncReadEvent(int $a_obj_id, int $a_user_id, string $a_type, int $a_ref_id)
◆ storeJsApi()
static ilObjSCORMTracking::storeJsApi |
( |
| ) |
|
|
static |
◆ storeJsApiCmi()
static ilObjSCORMTracking::storeJsApiCmi |
( |
int |
$user_id, |
|
|
int |
$obj_id, |
|
|
object |
$data |
|
) |
| |
|
static |
Definition at line 53 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, ilSCORMObject\_lookupPresentableItems(), ilLPStatusWrapper\_updateStatus(), ilLoggerFactory\getLogger(), ilLTIAppEventListener\handleOutcomeWithoutLP(), and ilUtil\now().
57 $ilDB = $DIC->database();
59 $b_updateStatus =
false;
69 foreach (
$data->cmi as $value) {
70 $aa_data[] = array(
"sco_id" => (
int) $value[0],
78 $ilLog->write(
"ScormAicc: storeJsApi: Error: No valid obj_id given.");
80 foreach ($aa_data as $a_data) {
83 SELECT rvalue FROM scorm_tracking 88 array(
'integer',
'integer',
'text',
'integer'),
89 array(
$user_id, $a_data[
"sco_id"], $a_data[
"left"], $obj_id)
91 if ($rec =
$ilDB->fetchAssoc($set)) {
92 if ($a_data[
"left"] ===
'cmi.core.lesson_status' && $a_data[
"right"] != $rec[
"rvalue"]) {
93 $b_updateStatus =
true;
98 'rvalue' => array(
'clob', $a_data[
"right"]),
102 'user_id' => array(
'integer',
$user_id),
103 'sco_id' => array(
'integer', $a_data[
"sco_id"]),
104 'lvalue' => array(
'text', $a_data[
"left"]),
105 'obj_id' => array(
'integer', $obj_id)
108 $ilLog->debug(
"ScormAicc: storeJsApi Updated - L:" . $a_data[
"left"] .
",R:" .
109 $a_data[
"right"] .
" for obj_id:" . $obj_id .
",sco_id:" . $a_data[
"sco_id"] .
",user_id:" .
$user_id);
111 if ($a_data[
"left"] ===
'cmi.core.lesson_status') {
112 $b_updateStatus =
true;
114 $ilDB->insert(
'scorm_tracking', array(
115 'obj_id' => array(
'integer', $obj_id),
116 'user_id' => array(
'integer',
$user_id),
117 'sco_id' => array(
'integer', $a_data[
"sco_id"]),
118 'lvalue' => array(
'text', $a_data[
"left"]),
119 'rvalue' => array(
'clob', $a_data[
"right"]),
122 $ilLog->debug(
"ScormAicc: storeJsApi Inserted - L:" . $a_data[
"left"] .
",R:" .
123 $a_data[
"right"] .
" for obj_id:" . $obj_id .
",sco_id:" . $a_data[
"sco_id"] .
",user_id:" .
$user_id);
125 if ($a_data[
"left"] ===
'cmi.core.score.max') {
126 $i_score_max = $a_data[
"right"];
128 if ($a_data[
"left"] ===
'cmi.core.score.raw') {
129 $i_score_raw = $a_data[
"right"];
133 if ($i_score_max > 0 && $i_score_raw > 0) {
138 ($i_score_raw / $i_score_max) * 100
145 if ($b_updateStatus ===
true) {
static getLogger(string $a_component_id)
Get component logger.
static _lookupPresentableItems(int $a_slm_id)
Count number of presentable SCOs/Assets of SCORM learning module.
static now()
Return current timestamp in Y-m-d H:i:s format.
static handleOutcomeWithoutLP(int $a_obj_id, int $a_usr_id, ?float $a_percentage)
static _updateStatus(int $a_obj_id, int $a_usr_id, ?object $a_obj=null, bool $a_percentage=false, bool $a_force_raise=false)
◆ syncGlobalStatus()
static ilObjSCORMTracking::syncGlobalStatus |
( |
int |
$userId, |
|
|
int |
$packageId, |
|
|
int |
$refId, |
|
|
object |
$data, |
|
|
?int |
$new_global_status |
|
) |
| |
|
static |
Definition at line 152 of file class.ilObjSCORMTracking.php.
References $DIC, $ilDB, ilChangeEvent\_recordReadEvent(), ilLPStatusWrapper\_updateStatus(), ilLoggerFactory\getLogger(), ILIAS\Repository\int(), and null.
155 $ilDB = $DIC->database();
157 $saved_global_status =
$data->saved_global_status;
158 $ilLog->write(
"saved_global_status=" . $saved_global_status);
161 if (!isset(
$data->packageAttempts)) {
162 $val_set =
$ilDB->queryF(
163 'SELECT package_attempts FROM sahs_user WHERE obj_id = %s AND user_id = %s',
164 array(
'integer',
'integer'),
167 $val_rec =
$ilDB->fetchAssoc($val_set);
168 $attempts = $val_rec[
"package_attempts"];
170 $attempts =
$data->packageAttempts;
172 if ($attempts ==
null) {
177 $totalTime = (
int)
$data->totalTimeCentisec;
178 $totalTime = round($totalTime / 100);
180 'UPDATE sahs_user SET last_visited=%s, last_access = %s, sco_total_time_sec=%s, status=%s, percentage_completed=%s, package_attempts=%s WHERE obj_id = %s AND user_id = %s',
181 array(
'text',
'timestamp',
'integer',
'integer',
'integer',
'integer',
'integer',
'integer'),
182 array(
$data->last_visited,
186 $data->percentageCompleted,
195 $ilObjDataCache = $DIC[
'ilObjDataCache'];
222 if ($new_global_status !==
null) {
static getLogger(string $a_component_id)
Get component logger.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static _recordReadEvent(string $a_type, int $a_ref_id, int $obj_id, int $usr_id, bool $isCatchupWriteEvents=true, $a_ext_rc=null, $a_ext_time=null)
static _updateStatus(int $a_obj_id, int $a_usr_id, ?object $a_obj=null, bool $a_percentage=false, bool $a_force_raise=false)
The documentation for this class was generated from the following file: