ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilCourseParticipants.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
24 include_once('./Services/Membership/classes/class.ilParticipants.php');
25 
36 {
37  const COMPONENT_NAME = 'Modules/Course';
38 
39  protected static $instances = array();
40 
41 
48  public function __construct($a_obj_id)
49  {
50  $this->type = 'crs';
51 
52  $this->NOTIFY_DISMISS_SUBSCRIBER = 1;
53  $this->NOTIFY_ACCEPT_SUBSCRIBER = 2;
54  $this->NOTIFY_DISMISS_MEMBER = 3;
55  $this->NOTIFY_BLOCK_MEMBER = 4;
56  $this->NOTIFY_UNBLOCK_MEMBER = 5;
57  $this->NOTIFY_ACCEPT_USER = 6;
58  $this->NOTIFY_ADMINS = 7;
59  $this->NOTIFY_STATUS_CHANGED = 8;
60  $this->NOTIFY_SUBSCRIPTION_REQUEST = 9;
61 
62  $this->NOTIFY_REGISTERED = 10;
63  $this->NOTIFY_UNSUBSCRIBE = 11;
64  $this->NOTIFY_WAITING_LIST = 12;
65 
66  parent::__construct(self::COMPONENT_NAME,$a_obj_id);
67  }
68 
77  public static function _getInstanceByObjId($a_obj_id)
78  {
79  if(isset(self::$instances[$a_obj_id]) and self::$instances[$a_obj_id])
80  {
81  return self::$instances[$a_obj_id];
82  }
83  return self::$instances[$a_obj_id] = new ilCourseParticipants($a_obj_id);
84  }
85 
90  public static function getMemberRoles($a_ref_id)
91  {
92  global $rbacreview;
93 
94  $lrol = $rbacreview->getRolesOfRoleFolder($a_ref_id,false);
95 
96  $roles = array();
97  foreach($lrol as $role)
98  {
99  $title = ilObject::_lookupTitle($role);
100  switch(substr($title,0,8))
101  {
102  case 'il_crs_a':
103  case 'il_crs_t':
104  case 'il_crs_m':
105  continue;
106 
107  default:
108  $roles[$role] = $role;
109  }
110  }
111  return $roles;
112  }
113 
114  public function addSubscriber($a_usr_id)
115  {
116  global $ilAppEventHandler, $ilLog;
117 
118  parent::addSubscriber($a_usr_id);
119 
120  $ilLog->write(__METHOD__.': Raise new event: Modules/Course addSubscriber');
121  $ilAppEventHandler->raise(
122  "Modules/Course",
123  'addSubscriber',
124  array(
125  'obj_id' => $this->getObjId(),
126  'usr_id' => $a_usr_id
127  )
128  );
129  }
130 
140  public function updatePassed($a_usr_id, $a_passed, $a_manual = false, $a_no_origin = false)
141  {
142  $this->participants_status[$a_usr_id]['passed'] = (int) $a_passed;
143 
144  return self::_updatePassed($this->obj_id, $a_usr_id, $a_passed, $a_manual, $a_no_origin);
145  }
146 
157  public static function _updatePassed($a_obj_id, $a_usr_id, $a_passed, $a_manual = false, $a_no_origin = false)
158  {
159  global $ilDB, $ilUser;
160 
161  // #11600
162  $origin = -1;
163  if($a_manual)
164  {
165  $origin = $ilUser->getId();
166  }
167 
168  $query = "SELECT passed FROM obj_members ".
169  "WHERE obj_id = ".$ilDB->quote($a_obj_id,'integer')." ".
170  "AND usr_id = ".$ilDB->quote($a_usr_id,'integer');
171  $res = $ilDB->query($query);
172  if($res->numRows())
173  {
174  // #9284 - only needs updating when status has changed
175  $old = $ilDB->fetchAssoc($res);
176  if((int)$old["passed"] != (int)$a_passed)
177  {
178  $query = "UPDATE obj_members SET ".
179  "passed = ".$ilDB->quote((int) $a_passed,'integer').", ".
180  "origin = ".$ilDB->quote($origin,'integer').", ".
181  "origin_ts = ".$ilDB->quote(time(),'integer')." ".
182  "WHERE obj_id = ".$ilDB->quote($a_obj_id,'integer')." ".
183  "AND usr_id = ".$ilDB->quote($a_usr_id,'integer');
184  }
185  }
186  else
187  {
188  // when member is added we should not set any date
189  // see ilObjCourse::checkLPStatusSync()
190  if($a_no_origin && !$a_passed)
191  {
192  $origin = 0;
193  $origin_ts = 0;
194  }
195  else
196  {
197  $origin_ts = time();
198  }
199 
200  $query = "INSERT INTO obj_members (passed,obj_id,usr_id,notification,blocked,origin,origin_ts) ".
201  "VALUES ( ".
202  $ilDB->quote((int) $a_passed,'integer').", ".
203  $ilDB->quote($a_obj_id,'integer').", ".
204  $ilDB->quote($a_usr_id,'integer').", ".
205  $ilDB->quote(0,'integer').", ".
206  $ilDB->quote(0,'integer').", ".
207  $ilDB->quote($origin,'integer').", ".
208  $ilDB->quote($origin_ts,'integer').")";
209  }
210  $res = $ilDB->manipulate($query);
211  return true;
212  }
213 
220  function getPassedInfo($a_usr_id)
221  {
222  global $ilDB;
223 
224  $sql = "SELECT origin, origin_ts".
225  " FROM obj_members".
226  " WHERE obj_id = ".$ilDB->quote($this->obj_id, "integer").
227  " AND usr_id = ".$ilDB->quote($a_usr_id, "integer");
228  $set = $ilDB->query($sql);
229  $row = $ilDB->fetchAssoc($set);
230  if($row["origin"])
231  {
232  return array("user_id" => $row["origin"],
233  "timestamp" => new ilDateTime($row["origin_ts"], IL_CAL_UNIX));
234  }
235  }
236 
237  // Subscription
238  function sendNotification($a_type, $a_usr_id)
239  {
240  include_once './Modules/Course/classes/class.ilCourseMembershipMailNotification.php';
241 
242  global $ilObjDataCache,$ilUser;
243 
244  switch($a_type)
245  {
246  case $this->NOTIFY_DISMISS_SUBSCRIBER:
249  $mail->setRefId($this->ref_id);
250  $mail->setRecipients(array($a_usr_id));
251  $mail->send();
252  break;
253 
254  case $this->NOTIFY_ACCEPT_SUBSCRIBER:
257  $mail->setRefId($this->ref_id);
258  $mail->setRecipients(array($a_usr_id));
259  $mail->send();
260  break;
261 
262  case $this->NOTIFY_DISMISS_MEMBER:
265  $mail->setRefId($this->ref_id);
266  $mail->setRecipients(array($a_usr_id));
267  $mail->send();
268  break;
269 
270  case $this->NOTIFY_BLOCK_MEMBER:
273  $mail->setRefId($this->ref_id);
274  $mail->setRecipients(array($a_usr_id));
275  $mail->send();
276  break;
277 
278  case $this->NOTIFY_UNBLOCK_MEMBER:
281  $mail->setRefId($this->ref_id);
282  $mail->setRecipients(array($a_usr_id));
283  $mail->send();
284  break;
285 
286  case $this->NOTIFY_ACCEPT_USER:
289  $mail->setRefId($this->ref_id);
290  $mail->setRecipients(array($a_usr_id));
291  $mail->send();
292  break;
293 
294  case $this->NOTIFY_STATUS_CHANGED:
297  $mail->setRefId($this->ref_id);
298  $mail->setRecipients(array($a_usr_id));
299  $mail->send();
300  break;
301 
302  case $this->NOTIFY_UNSUBSCRIBE:
305  $mail->setRefId($this->ref_id);
306  $mail->setRecipients(array($a_usr_id));
307  $mail->send();
308  break;
309 
310  case $this->NOTIFY_REGISTERED:
313  $mail->setRefId($this->ref_id);
314  $mail->setRecipients(array($a_usr_id));
315  $mail->send();
316  break;
317 
318  case $this->NOTIFY_WAITING_LIST:
319  include_once('./Modules/Course/classes/class.ilCourseWaitingList.php');
320  $wl = new ilCourseWaitingList($this->obj_id);
321  $pos = $wl->getPosition($a_usr_id);
322 
325  $mail->setRefId($this->ref_id);
326  $mail->setRecipients(array($a_usr_id));
327  $mail->setAdditionalInformation(array('position' => $pos));
328  $mail->send();
329  break;
330 
331  case $this->NOTIFY_SUBSCRIPTION_REQUEST:
332  $this->sendSubscriptionRequestToAdmins($a_usr_id);
333  break;
334 
335  case $this->NOTIFY_ADMINS:
336  $this->sendNotificationToAdmins($a_usr_id);
337  return true;
338  break;
339  }
340  return true;
341  }
342 
344  {
345  global $ilDB,$ilObjDataCache;
346 
347  include_once './Modules/Course/classes/class.ilCourseMembershipMailNotification.php';
350  $mail->setAdditionalInformation(array('usr_id' => $a_usr_id));
351  $mail->setRefId($this->ref_id);
352  $mail->setRecipients($this->getNotificationRecipients());
353  $mail->send();
354  return true;
355  }
356 
357 
358  public function sendSubscriptionRequestToAdmins($a_usr_id)
359  {
360  global $ilDB,$ilObjDataCache;
361 
362  include_once './Modules/Course/classes/class.ilCourseMembershipMailNotification.php';
365  $mail->setAdditionalInformation(array('usr_id' => $a_usr_id));
366  $mail->setRefId($this->ref_id);
367  $mail->setRecipients($this->getNotificationRecipients());
368  $mail->send();
369  return true;
370  }
371 
372 
373  public function sendNotificationToAdmins($a_usr_id)
374  {
375  global $ilDB,$ilObjDataCache;
376 
377  include_once './Modules/Course/classes/class.ilCourseMembershipMailNotification.php';
380  $mail->setAdditionalInformation(array('usr_id' => $a_usr_id));
381  $mail->setRefId($this->ref_id);
382  $mail->setRecipients($this->getNotificationRecipients());
383  $mail->send();
384  return true;
385  }
386 
387 
388  function __buildStatusBody(&$user_obj)
389  {
390  global $ilDB;
391 
392  $body = $this->lng->txt('crs_status_changed_body')."\n";
393  $body .= $this->lng->txt('login').': '.$user_obj->getLogin()."\n";
394  $body .= $this->lng->txt('role').': ';
395 
396  if($this->isAdmin($user_obj->getId()))
397  {
398  $body .= $this->lng->txt('crs_admin')."\n";
399  }
400  if($this->isTutor($user_obj->getId()))
401  {
402  $body .= $this->lng->txt('crs_tutor')."\n";
403  }
404  if($this->isMember($user_obj->getId()))
405  {
406  $body .= $this->lng->txt('crs_member')."\n";
407  }
408  $body .= $this->lng->txt('status').': ';
409 
410  if($this->isNotificationEnabled($user_obj->getId()))
411  {
412  $body .= $this->lng->txt("crs_notify")."\n";
413  }
414  else
415  {
416  $body .= $this->lng->txt("crs_no_notify")."\n";
417  }
418  if($this->isBlocked($user_obj->getId()))
419  {
420  $body .= $this->lng->txt("crs_blocked")."\n";
421  }
422  else
423  {
424  $body .= $this->lng->txt("crs_unblocked")."\n";
425  }
426  $passed = $this->hasPassed($user_obj->getId()) ? $this->lng->txt('yes') : $this->lng->txt('no');
427  $body .= $this->lng->txt('crs_passed').': '.$passed."\n";
428 
429  return $body;
430  }
431 
432  public static function getDateTimeOfPassed($a_obj_id, $a_usr_id)
433  {
434  global $ilDB;
435 
436  $sql = "SELECT origin_ts FROM obj_members".
437  " WHERE usr_id = ".$ilDB->quote($a_usr_id, "integer").
438  " AND obj_id = ".$ilDB->quote($a_obj_id, "integer").
439  " AND passed = ".$ilDB->quote(1, "integer");
440  $res = $ilDB->query($sql);
441  $res = $ilDB->fetchAssoc($res);
442  if($res["origin_ts"])
443  {
444  return date("Y-m-d H:i:s", $res["origin_ts"]);
445  }
446  }
447 
448  public static function getPassedUsersForObjects(array $a_obj_ids, array $a_usr_ids)
449  {
450  global $ilDB;
451 
452  $res = array();
453 
454  $sql = "SELECT usr_id,obj_id FROM obj_members".
455  " WHERE ".$ilDB->in("usr_id", $a_usr_ids, "", "integer").
456  " AND ".$ilDB->in("obj_id", $a_obj_ids, "", "integer").
457  " AND passed = ".$ilDB->quote(1, "integer");
458  $set = $ilDB->query($sql);
459  while($row = $ilDB->fetchAssoc($set))
460  {
461  $res[] = $row;
462  }
463 
464  return $res;
465  }
466 }
467 
468 ?>