ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
class.ilLPStatusCollectionTLT.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once './Services/Tracking/classes/class.ilLPStatus.php';
5
16{
17 public static function _getInProgress($a_obj_id)
18 {
19 $status_info = ilLPStatusWrapper::_getStatusInfo($a_obj_id);
20
21 $users = array();
22 if (is_array($status_info['in_progress'])) {
23 foreach ($status_info['in_progress'] as $in_progress) {
24 $users = array_merge($users, $in_progress);
25 }
26 $users = array_unique($users);
27 }
28
29 $users = array_diff($users, ilLPStatusWrapper::_getCompleted($a_obj_id));
30
31 return $users;
32 }
33
34 public static function _getCompleted($a_obj_id)
35 {
36 $status_info = ilLPStatusWrapper::_getStatusInfo($a_obj_id);
37
38 $counter = 0;
39 $users = array();
40 foreach ($status_info['items'] as $item_id) {
41 $tmp_users = $status_info['completed'][$item_id];
42
43 if (!$counter++) {
44 $users = $tmp_users;
45 } else {
46 $users = array_intersect($users, $tmp_users);
47 }
48 }
49 $users = array_unique($users);
50
51 return $users;
52 }
53
54 public static function _getStatusInfo($a_obj_id, $a_include_tlt_data = false)
55 {
56 global $ilDB;
57
58 $status_info = array();
59
60 include_once "Services/Object/classes/class.ilObjectLP.php";
61 $olp = ilObjectLP::getInstance($a_obj_id);
62 $collection = $olp->getCollectionInstance();
63 if ($collection) {
64 $status_info["items"] = $collection->getItems($a_obj_id);
65
66 include_once './Services/MetaData/classes/class.ilMDEducational.php';
67 foreach ($status_info["items"] as $item_id) {
68 $status_info["in_progress"][$item_id] = array();
69 $status_info["completed"][$item_id] = array();
70
71 $status_info["tlt"][$item_id] = ilMDEducational::_getTypicalLearningTimeSeconds($a_obj_id, $item_id);
72 }
73
74 $ref_ids = ilObject::_getAllReferences($a_obj_id);
75 $ref_id = end($ref_ids);
76 $possible_items = $collection->getPossibleItems($ref_id);
77 $chapter_ids = array_intersect(
78 array_keys($possible_items),
79 $status_info["items"]
80 );
81
82 // fix order (adapt from possible items)
83 $status_info["items"] = $chapter_ids;
84
85 if ($chapter_ids) {
86 foreach ($chapter_ids as $item_id) {
87 $status_info["item_titles"][$item_id] = $possible_items[$item_id]["title"];
88 }
89
90 $set = $ilDB->query("SELECT obj_id,usr_id,spent_seconds" .
91 " FROM lm_read_event" .
92 " WHERE " . $ilDB->in("obj_id", $chapter_ids, "", "integer"));
93 while ($row = $ilDB->fetchAssoc($set)) {
94 if ($row["spent_seconds"] < $status_info["tlt"][$row["obj_id"]]) {
95 $status_info["in_progress"][$row["obj_id"]][] = $row["usr_id"];
96 } else {
97 $status_info["completed"][$row["obj_id"]][] = $row["usr_id"];
98 }
99
100 if ($a_include_tlt_data) {
101 $status_info["tlt_users"][$row["obj_id"]][$row["usr_id"]] = $row["spent_seconds"];
102 }
103 }
104 }
105 }
106
107 if (!$a_include_tlt_data) {
108 unset($status_info["tlt"]);
109 }
110
111 return $status_info;
112 }
113
114 public function determineStatus($a_obj_id, $a_user_id, $a_obj = null)
115 {
116 $info = self::_getStatusInfo($a_obj_id);
117
118 $completed_once = false;
119
120 if (is_array($info["completed"])) {
121 $completed = true;
122 foreach ($info["completed"] as $user_ids) {
123 // must have completed all items to complete collection
124 if (!in_array($a_user_id, $user_ids)) {
125 $completed = false;
126 break;
127 } else {
128 $completed_once = true;
129 }
130 }
131 if ($completed) {
133 }
134 }
135
136 // #14997
137 if ($completed_once) {
139 }
140
141 if (is_array($info["in_progress"])) {
142 foreach ($info["in_progress"] as $user_ids) {
143 if (in_array($a_user_id, $user_ids)) {
145 }
146 }
147 }
148
150 }
151}
$users
Definition: authpage.php:44
An exception for terminatinating execution or to throw for unit testing.
static _getStatusInfo($a_obj_id, $a_include_tlt_data=false)
determineStatus($a_obj_id, $a_user_id, $a_obj=null)
Determine status.
static _getStatusInfo($a_obj_id)
Reads informations about the object e.g test results, tlt, number of visits.
static _getCompleted($a_obj_id)
Static function to read the users who have the status 'completed'.
Abstract class ilLPStatus for all learning progress modes E.g ilLPStatusManual, ilLPStatusObjectives ...
const LP_STATUS_COMPLETED_NUM
const LP_STATUS_IN_PROGRESS_NUM
const LP_STATUS_NOT_ATTEMPTED_NUM
static _getTypicalLearningTimeSeconds($a_rbac_id, $a_obj_id=0)
static getInstance($a_obj_id)
static _getAllReferences($a_id)
get all reference ids of object
$counter
$info
Definition: index.php:5
global $ilDB