ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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 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 {
24 foreach($status_info['in_progress'] as $in_progress)
25 {
26 $users = array_merge($users,$in_progress);
27 }
28 $users = array_unique($users);
29 }
30
31 $users = array_diff($users,ilLPStatusWrapper::_getCompleted($a_obj_id));
32
33 return $users;
34 }
35
36 function _getCompleted($a_obj_id)
37 {
38 $status_info = ilLPStatusWrapper::_getStatusInfo($a_obj_id);
39
40 $counter = 0;
41 $users = array();
42 foreach($status_info['items'] as $item_id)
43 {
44 $tmp_users = $status_info['completed'][$item_id];
45
46 if(!$counter++)
47 {
48 $users = $tmp_users;
49 }
50 else
51 {
52 $users = array_intersect($users,$tmp_users);
53 }
54 }
55 $users = array_unique($users);
56
57 return $users;
58 }
59
60 function _getStatusInfo($a_obj_id, $a_include_tlt_data = false)
61 {
62 global $ilDB;
63
64 $status_info = array();
65
66 include_once "Services/Object/classes/class.ilObjectLP.php";
67 $olp = ilObjectLP::getInstance($a_obj_id);
68 $collection = $olp->getCollectionInstance();
69 if($collection)
70 {
71 $status_info["items"] = $collection->getItems($a_obj_id);
72
73 include_once './Services/MetaData/classes/class.ilMDEducational.php';
74 foreach($status_info["items"] as $item_id)
75 {
76 $status_info["in_progress"][$item_id] = array();
77 $status_info["completed"][$item_id] = array();
78
79 $status_info["tlt"][$item_id] = ilMDEducational::_getTypicalLearningTimeSeconds($a_obj_id, $item_id);
80 }
81
82 $ref_ids = ilObject::_getAllReferences($a_obj_id);
83 $ref_id = end($ref_ids);
84 $possible_items = $collection->getPossibleItems($ref_id);
85 $chapter_ids = array_intersect(array_keys($possible_items),
86 $status_info["items"]);
87
88 // fix order (adapt from possible items)
89 $status_info["items"] = $chapter_ids;
90
91 if($chapter_ids)
92 {
93 foreach($chapter_ids as $item_id)
94 {
95 $status_info["item_titles"][$item_id] = $possible_items[$item_id]["title"];
96 }
97
98 $set = $ilDB->query("SELECT obj_id,usr_id,spent_seconds".
99 " FROM lm_read_event".
100 " WHERE ".$ilDB->in("obj_id", $chapter_ids, "", "integer"));
101 while($row = $ilDB->fetchAssoc($set))
102 {
103 if($row["spent_seconds"] < $status_info["tlt"][$row["obj_id"]])
104 {
105 $status_info["in_progress"][$row["obj_id"]][] = $row["usr_id"];
106 }
107 else
108 {
109 $status_info["completed"][$row["obj_id"]][] = $row["usr_id"];
110 }
111
112 if($a_include_tlt_data)
113 {
114 $status_info["tlt_users"][$row["obj_id"]][$row["usr_id"]] = $row["spent_seconds"];
115 }
116 }
117 }
118 }
119
120 if(!$a_include_tlt_data)
121 {
122 unset($status_info["tlt"]);
123 }
124
125 return $status_info;
126 }
127
128 function determineStatus($a_obj_id, $a_user_id, $a_obj = null)
129 {
130 $info = self::_getStatusInfo($a_obj_id);
131
132 $completed_once = false;
133
134 if(is_array($info["completed"]))
135 {
136 $completed = true;
137 foreach($info["completed"] as $user_ids)
138 {
139 // must have completed all items to complete collection
140 if(!in_array($a_user_id, $user_ids))
141 {
142 $completed = false;
143 break;
144 }
145 else
146 {
147 $completed_once = true;
148 }
149 }
150 if($completed)
151 {
153 }
154 }
155
156 // #14997
157 if($completed_once)
158 {
160 }
161
162 if(is_array($info["in_progress"]))
163 {
164 foreach($info["in_progress"] as $user_ids)
165 {
166 if(in_array($a_user_id, $user_ids))
167 {
169 }
170 }
171 }
172
174 }
175}
176
177?>
determineStatus($a_obj_id, $a_user_id, $a_obj=null)
Determine status.
_getStatusInfo($a_obj_id, $a_include_tlt_data=false)
_getCompleted($a_obj_id)
Static function to read the users who have the status 'completed'.
_getStatusInfo($a_obj_id)
Reads informations about the object e.g test results, tlt, number of visits.
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
_getTypicalLearningTimeSeconds($a_rbac_id, $a_obj_id=0)
static getInstance($a_obj_id)
static _getAllReferences($a_id)
get all reference ids of object
$info
Definition: example_052.php:80
$ref_id
Definition: sahs_server.php:39
global $ilDB