ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilExerciseMembers.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
13{
18// var $status_feedback;
19// var $status_sent;
20// var $status_returned;
21// var $notice;
22
23 function ilExerciseMembers($a_exc)
24 {
25 $this->exc = $a_exc;
26 $this->obj_id = $a_exc->getId();
27 $this->ref_id = $a_exc->getRefId();
28 $this->read();
29 }
30
34 function getRefId()
35 {
36 return $this->ref_id;
37 }
38
42 function getObjId()
43 {
44 return $this->obj_id;
45 }
46
50 function setObjId($a_obj_id)
51 {
52 $this->obj_id = $a_obj_id;
53 }
54
58 function getMembers()
59 {
60 return $this->members ? $this->members : array();
61 }
62
66 function setMembers($a_members)
67 {
68 $this->members = $a_members;
69 }
70
76 function assignMember($a_usr_id)
77 {
78 global $ilDB;
79
80 if($this->exc->hasAddToDesktop())
81 {
82 $tmp_user = ilObjectFactory::getInstanceByObjId($a_usr_id);
83 $tmp_user->addDesktopItem($this->getRefId(),"exc");
84 }
85
86 $ilDB->manipulate("DELETE FROM exc_members ".
87 "WHERE obj_id = ".$ilDB->quote($this->getObjId(), "integer")." ".
88 "AND usr_id = ".$ilDB->quote($a_usr_id, "integer")." ");
89
90// @todo: some of this fields may not be needed anymore
91 $ilDB->manipulateF("INSERT INTO exc_members (obj_id, usr_id, status, sent, feedback) ".
92 " VALUES (%s,%s,%s,%s,%s)",
93 array("integer", "integer", "text", "integer", "integer"),
94 array($this->getObjId(), $a_usr_id, 'notgraded', 0, 0));
95
96 include_once("./Modules/Exercise/classes/class.ilExAssignment.php");
98
99 $this->read();
100
101 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
102 ilLPStatusWrapper::_updateStatus($this->getObjId(), $a_usr_id);
103
104 return true;
105 }
106
110 function isAssigned($a_id)
111 {
112 return in_array($a_id,$this->getMembers());
113 }
114
118 function assignMembers($a_members)
119 {
120 $assigned = 0;
121 if(is_array($a_members))
122 {
123 foreach($a_members as $member)
124 {
125 if(!$this->isAssigned($member))
126 {
127 $this->assignMember($member);
128 }
129 else
130 {
131 ++$assigned;
132 }
133 }
134 }
135 if($assigned == count($a_members))
136 {
137 return false;
138 }
139 else
140 {
141 return true;
142 }
143 }
144
150 function deassignMember($a_usr_id)
151 {
152 global $ilDB;
153
154 $tmp_user = ilObjectFactory::getInstanceByObjId($a_usr_id);
155 $tmp_user->dropDesktopItem($this->getRefId(),"exc");
156
157 $query = "DELETE FROM exc_members ".
158 "WHERE obj_id = ".$ilDB->quote($this->getObjId(), "integer")." ".
159 "AND usr_id = ".$ilDB->quote($a_usr_id, "integer")." ";
160
161 $ilDB->manipulate($query);
162
163 $this->read();
164
165 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
166 ilLPStatusWrapper::_updateStatus($this->getObjId(), $a_usr_id);
167
168 // delete all delivered files of the member
169 include_once("./Modules/Exercise/classes/class.ilExSubmission.php");
170 ilExSubmission::deleteUser($this->exc->getId(), $a_usr_id);
171
172// @todo: delete all assignment associations (and their files)
173
174 return false;
175 }
176
180 function deassignMembers($a_members)
181 {
182 if(is_array($a_members))
183 {
184 foreach($a_members as $member)
185 {
186 $this->deassignMember($member);
187 }
188 }
189 else
190 {
191 return false;
192 }
193 }
194
198 function read()
199 {
200 global $ilDB;
201
202 $tmp_arr_members = array();
203
204 $query = "SELECT * FROM exc_members ".
205 "WHERE obj_id = ".$ilDB->quote($this->getObjId(), "integer");
206
207 $res = $ilDB->query($query);
208 while($row = $ilDB->fetchObject($res))
209 {
210 $tmp_arr_members[] = $row->usr_id;
211 }
212 $this->setMembers($tmp_arr_members);
213
214 return true;
215 }
216
217// @todo: clone also assignments
218 function ilClone($a_new_id)
219 {
220 global $ilDB;
221
222 $data = array();
223
224 $query = "SELECT * FROM exc_members ".
225 "WHERE obj_id = ".$ilDB->quote($this->getObjId(), "integer");
226
227 $res = $ilDB->query($query);
228 while($row = $ilDB->fetchObject($res))
229 {
230 $data[] = array("usr_id" => $row->usr_id,
231 "notice" => $row->notice,
232 "returned" => $row->returned,
233 "status" => $row->status,
234 "sent" => $row->sent,
235 "feedback" => $row->feedback
236 );
237 }
238 foreach($data as $row)
239 {
240 $ilDB->manipulateF("INSERT INTO exc_members ".
241 " (obj_id, usr_id, notice, returned, status, feedback, sent) VALUES ".
242 " (%s,%s,%s,%s,%s,%s,%s)",
243 array ("integer", "integer", "text", "integer", "text", "integer", "integer"),
244 array ($a_new_id, $row["usr_id"], $row["notice"], (int) $row["returned"],
245 $row["status"], (int) $row["feedback"], (int) $row["sent"])
246 );
247
248 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
249 ilLPStatusWrapper::_updateStatus($a_new_id, $row["usr_id"]);
250 }
251 return true;
252 }
253
254// @todo: delete also assignments
255 function delete()
256 {
257 global $ilDB;
258
259 $query = "DELETE FROM exc_members WHERE obj_id = ".
260 $ilDB->quote($this->getObjId(), "integer");
261 $ilDB->manipulate($query);
262
263 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
265
266 return true;
267 }
268
269 function _getMembers($a_obj_id)
270 {
271 global $ilDB;
272
273 // #14963 - see ilExAssignment::getMemberListData()
274 $query = "SELECT DISTINCT(excm.usr_id) ud".
275 " FROM exc_members excm".
276 " JOIN object_data od ON (od.obj_id = excm.usr_id)".
277 " WHERE excm.obj_id = ".$ilDB->quote($a_obj_id, "integer").
278 " AND od.type = ".$ilDB->quote("usr", "text");
279
280 $res = $ilDB->query($query);
281 while($row = $ilDB->fetchObject($res))
282 {
283 $usr_ids[] = $row->ud;
284 }
285
286 return $usr_ids ? $usr_ids : array();
287 }
288
299 function _lookupStatus($a_obj_id, $a_user_id)
300 {
301 global $ilDB;
302
303 $query = "SELECT status FROM exc_members ".
304 "WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer").
305 " AND usr_id = ".$ilDB->quote($a_user_id, "integer");
306
307 $res = $ilDB->query($query);
308 if($row = $ilDB->fetchAssoc($res))
309 {
310 return $row["status"];
311 }
312
313 return false;
314 }
315
327 function _writeStatus($a_obj_id, $a_user_id, $a_status)
328 {
329 global $ilDB;
330
331 $ilDB->manipulate("UPDATE exc_members SET ".
332 " status = ".$ilDB->quote($a_status, "text").
333 " WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer").
334 " AND usr_id = ".$ilDB->quote($a_user_id, "integer")
335 );
336
337 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
338 ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id);
339 }
340
353 function _writeReturned($a_obj_id, $a_user_id, $a_status)
354 {
355 global $ilDB;
356
357 $ilDB->manipulate("UPDATE exc_members SET ".
358 " returned = ".$ilDB->quote($a_status, "integer").
359 " WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer").
360 " AND usr_id = ".$ilDB->quote($a_user_id, "integer")
361 );
362
363 include_once("./Services/Tracking/classes/class.ilLPStatusWrapper.php");
364 ilLPStatusWrapper::_updateStatus($a_obj_id, $a_user_id);
365 }
366
367
368 //
369 // LP
370 //
371
376 function _getReturned($a_obj_id)
377 {
378 global $ilDB;
379
380 $query = "SELECT DISTINCT(usr_id) as ud FROM exc_members ".
381 "WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer")." ".
382 "AND returned = 1";
383
384 $res = $ilDB->query($query);
385 while($row = $ilDB->fetchObject($res))
386 {
387 $usr_ids[] = $row->ud;
388 }
389
390 return $usr_ids ? $usr_ids : array();
391 }
392
400 function _hasReturned($a_obj_id, $a_user_id)
401 {
402 global $ilDB;
403
404 $set = $ilDB->query("SELECT DISTINCT(usr_id) FROM exc_members WHERE ".
405 " obj_id = ".$ilDB->quote($a_obj_id, "integer")." AND ".
406 " returned = ".$ilDB->quote(1, "integer")." AND ".
407 " usr_id = ".$ilDB->quote($a_user_id, "integer")
408 );
409 if ($rec = $ilDB->fetchAssoc($set))
410 {
411 return true;
412 }
413 return false;
414 }
415
419 function _getPassedUsers($a_obj_id)
420 {
421 global $ilDB;
422
423 $query = "SELECT DISTINCT(usr_id) FROM exc_members ".
424 "WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer")." ".
425 "AND status = ".$ilDB->quote("passed", "text");
426 $res = $ilDB->query($query);
427 while($row = $ilDB->fetchObject($res))
428 {
429 $usr_ids[] = $row->usr_id;
430 }
431 return $usr_ids ? $usr_ids : array();
432 }
433
437 function _getFailedUsers($a_obj_id)
438 {
439 global $ilDB;
440
441 $query = "SELECT DISTINCT(usr_id) FROM exc_members ".
442 "WHERE obj_id = ".$ilDB->quote($a_obj_id, "integer")." ".
443 "AND status = ".$ilDB->quote("failed", "text");
444 $res = $ilDB->query($query);
445 while($row = $ilDB->fetchObject($res))
446 {
447 $usr_ids[] = $row->usr_id;
448 }
449 return $usr_ids ? $usr_ids : array();
450 }
451
452} //END class.ilObjExercise
453?>
static createNewUserRecords($a_user_id, $a_exc_id)
Create member status record for a new participant for all assignments.
static deleteUser($a_exc_id, $a_user_id)
Delete all delivered files of user.
Class ilExerciseMembers.
deassignMember($a_usr_id)
Detaches a user from an exercise.
_getFailedUsers($a_obj_id)
Get all users that failed the exercise.
_getReturned($a_obj_id)
Get returned status for all members (if they have anything returned for any assignment)
_hasReturned($a_obj_id, $a_user_id)
Has user returned anything in any assignment?
setMembers($a_members)
Set members array.
getRefId()
Get exercise ref id.
getObjId()
Get exercise id.
assignMember($a_usr_id)
Assign a user to the exercise.
_writeReturned($a_obj_id, $a_user_id, $a_status)
Write returned status.
_writeStatus($a_obj_id, $a_user_id, $a_status)
Write user status.
_getPassedUsers($a_obj_id)
Get all users that passed the exercise.
deassignMembers($a_members)
Deassign members.
setObjId($a_obj_id)
Set exercise id.
isAssigned($a_id)
Is user assigned to exercise?
_lookupStatus($a_obj_id, $a_user_id)
Lookup current status (notgraded|passed|failed)
getMembers()
Get members array.
assignMembers($a_members)
Assign members to exercise.
_refreshStatus($a_obj_id, $a_users=null)
Set dirty.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
$data
global $ilDB