ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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 {
14  var $ref_id;
15  var $obj_id;
16  var $members;
17  var $status;
18 // var $status_feedback;
19 // var $status_sent;
20 // var $status_returned;
21 // var $notice;
22 
23  function __construct($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  static 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  static 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  static 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  static 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  static 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  static 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  static 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  static 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 deleteUser($a_exc_id, $a_user_id)
Delete all delivered files of user.
Class ilExerciseMembers.
getMembers()
Get members array.
getRefId()
Get exercise ref id.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
static _getReturned($a_obj_id)
Get returned status for all members (if they have anything returned for any assignment) ...
getObjId()
Get exercise id.
static _refreshStatus($a_obj_id, $a_users=null)
Set dirty.
static _writeStatus($a_obj_id, $a_user_id, $a_status)
Write user status.
static _writeReturned($a_obj_id, $a_user_id, $a_status)
Write returned status.
static _hasReturned($a_obj_id, $a_user_id)
Has user returned anything in any assignment?
static _lookupStatus($a_obj_id, $a_user_id)
Lookup current status (notgraded|passed|failed)
static _getFailedUsers($a_obj_id)
Get all users that failed the exercise.
setObjId($a_obj_id)
Set exercise id.
deassignMember($a_usr_id)
Detaches a user from an exercise.
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Create styles array
The data for the language used.
deassignMembers($a_members)
Deassign members.
assignMembers($a_members)
Assign members to exercise.
read()
Read all members.
static _getPassedUsers($a_obj_id)
Get all users that passed the exercise.
global $ilDB
static createNewUserRecords($a_user_id, $a_exc_id)
Create member status record for a new participant for all assignments.
setMembers($a_members)
Set members array.
static _getMembers($a_obj_id)
isAssigned($a_id)
Is user assigned to exercise?
assignMember($a_usr_id)
Assign a user to the exercise.