ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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
24include_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?>
const IL_CAL_UNIX
sendNotification($a_type, $a_usr_id)
updatePassed($a_usr_id, $a_passed, $a_manual=false, $a_no_origin=false)
Update passed status.
static _updatePassed($a_obj_id, $a_usr_id, $a_passed, $a_manual=false, $a_no_origin=false)
Update passed status (static)
getPassedInfo($a_usr_id)
Get info about passed status.
addSubscriber($a_usr_id)
Add subscriber.
static getDateTimeOfPassed($a_obj_id, $a_usr_id)
static _getInstanceByObjId($a_obj_id)
Get singleton instance.
__construct($a_obj_id)
Singleton constructor.
static getPassedUsersForObjects(array $a_obj_ids, array $a_usr_ids)
static getMemberRoles($a_ref_id)
Get member roles.
@classDescription Date and time handling
static _lookupTitle($a_id)
lookup object title
isTutor($a_usr_id)
is user tutor
isMember($a_usr_id)
is user member
isAdmin($a_usr_id)
is user admin
getNotificationRecipients()
Get admin, tutor which have notification enabled.
isNotificationEnabled($a_usr_id)
check if notification is enabled
getObjId()
get current obj_id
hasPassed($a_usr_id)
Check if user has passed course.
isBlocked($a_usr_id)
Check if user is blocked.
global $ilUser
Definition: imgupload.php:15