00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00033 define("IL_CRS_ADMIN",1);
00034 define("IL_CRS_TUTOR",3);
00035 define("IL_CRS_MEMBER",2);
00036
00037 class ilCourseParticipants
00038 {
00039 private static $instances = array();
00040
00041 protected $ilDB = null;
00042 protected $lng = null;
00043
00044 protected $course_id = 0;
00045 protected $course_ref_id = 0;
00046 protected $course_roles = array();
00047 protected $course_role_data = array();
00048
00049 protected $participants = array();
00050 protected $participants_status = array();
00051 protected $members = array();
00052 protected $tutors = array();
00053 protected $admins = array();
00054
00055 protected $subscribers = array();
00056
00064 private function __construct($a_course_id)
00065 {
00066 global $ilDB,$lng;
00067
00068 $this->NOTIFY_DISMISS_SUBSCRIBER = 1;
00069 $this->NOTIFY_ACCEPT_SUBSCRIBER = 2;
00070 $this->NOTIFY_DISMISS_MEMBER = 3;
00071 $this->NOTIFY_BLOCK_MEMBER = 4;
00072 $this->NOTIFY_UNBLOCK_MEMBER = 5;
00073 $this->NOTIFY_ACCEPT_USER = 6;
00074 $this->NOTIFY_ADMINS = 7;
00075 $this->NOTIFY_STATUS_CHANGED = 8;
00076 $this->NOTIFY_SUBSCRIPTION_REQUEST = 9;
00077
00078
00079 $this->ilDB = $ilDB;
00080 $this->lng = $lng;
00081
00082 $this->course_id = $a_course_id;
00083 $ref_ids = ilObject::_getAllReferences($this->course_id);
00084 $this->course_ref_id = current($ref_ids);
00085
00086
00087 $this->readParticipants();
00088 $this->readParticipantsStatus();
00089 }
00090
00099 public static function _getInstanceByObjId($a_course_id)
00100 {
00101 if(isset(self::$instances[$a_course_id]) and self::$instances[$a_course_id])
00102 {
00103 return self::$instances[$a_course_id];
00104 }
00105 return self::$instances[$a_course_id] = new ilCourseParticipants($a_course_id);
00106 }
00107
00116 public function _isParticipant($a_ref_id,$a_usr_id)
00117 {
00118 global $rbacreview,$ilObjDataCache,$ilDB,$ilLog;
00119
00120 $rolf = $rbacreview->getRoleFolderOfObject($a_ref_id);
00121 if(!isset($rolf['ref_id']) or !$rolf['ref_id'])
00122 {
00123 $course_title = $ilObjDataCache->lookupTitle($ilObjDataCache->lookupObjId($a_ref_id));
00124 $ilLog->write(__METHOD__.': Found course without role folder. Course ref_id: '.$a_ref_id.', course title: '.$course_title);
00125 $ilLog->logStack();
00126
00127 return false;
00128 }
00129 $local_roles = $rbacreview->getRolesOfRoleFolder($rolf["ref_id"],false);
00130 $user_roles = $rbacreview->assignedRoles($a_usr_id);
00131
00132 return count(array_intersect((array) $local_roles,(array) $user_roles)) ? true : false;
00133 }
00134
00144 public static function _isBlocked($a_course_id,$a_usr_id)
00145 {
00146 global $ilDB;
00147
00148 $query = "SELECT * FROM crs_members ".
00149 "WHERE obj_id = ".$ilDB->quote($a_course_id)." ".
00150 "AND usr_id = ".$ilDB->quote($a_usr_id)." ".
00151 "AND blocked = '1'";
00152 $res = $ilDB->query($query);
00153 return $res->numRows() ? true : false;
00154 }
00155
00165 public static function _hasPassed($a_course_id,$a_usr_id)
00166 {
00167 global $ilDB;
00168
00169 $query = "SELECT * FROM crs_members ".
00170 "WHERE obj_id = ".$ilDB->quote($a_course_id)." ".
00171 "AND usr_id = ".$ilDB->quote($a_usr_id)." ".
00172 "AND passed = '1'";
00173 $res = $ilDB->query($query);
00174 return $res->numRows() ? true : false;
00175 }
00176
00186 public static function _deleteAllEntries($a_course_id)
00187 {
00188 global $ilDB;
00189
00190 $query = "DELETE FROM crs_members ".
00191 "WHERE obj_id = ".$ilDB->quote($a_course_id)." ";
00192
00193 $ilDB->query($query);
00194
00195 $query = "DELETE FROM crs_subscribers ".
00196 "WHERE obj_id = ".$ilDB->quote($a_course_id)."";
00197
00198 $ilDB->query($query);
00199
00200 return true;
00201 }
00202
00211 public static function _deleteUser($a_usr_id)
00212 {
00213 global $ilDB;
00214
00215 $query = "DELETE FROM crs_members WHERE usr_id = ".$ilDB->quote($a_usr_id)."";
00216 $ilDB->query($query);
00217
00218 $query = "DELETE FROM crs_subscribers WHERE usr_id = ".$ilDB->quote($a_usr_id)."";
00219 $ilDB->query($query);
00220
00221 include_once './Modules/Course/classes/class.ilCourseWaitingList.php';
00222 ilCourseWaitingList::_deleteUser($a_usr_id);
00223 }
00224
00232 public function isGroupingMember($a_usr_id,$a_field = '')
00233 {
00234 global $rbacreview,$ilObjDataCache,$ilDB;
00235
00236
00237 if($a_field)
00238 {
00239 include_once './Services/User/classes/class.ilObjUser.php';
00240
00241 $tmp_user =& ilObjectFactory::getInstanceByObjId($a_usr_id);
00242 switch($a_field)
00243 {
00244 case 'login':
00245 $and = "AND login = ".$ilDB->quote($tmp_user->getLogin())." ";
00246 break;
00247 case 'email':
00248 $and = "AND email = ".$ilDB->quote($tmp_user->getEmail())." ";
00249 break;
00250 case 'matriculation':
00251 $and = "AND matriculation = ".$ilDB->quote($tmp_user->getMatriculation())." ";
00252 break;
00253
00254 default:
00255 $and = "AND usr_id = '".$a_usr_id."'";
00256 break;
00257 }
00258
00259 if(!$this->getParticipants())
00260 {
00261 return false;
00262 }
00263
00264 $query = "SELECT * FROM usr_data as ud ".
00265 "WHERE usr_id IN (".implode(",",ilUtil::quoteArray($this->getParticipants())).") ".
00266 $and;
00267 $res = $ilDB->query($query);
00268 return $res->numRows() ? true : false;
00269 }
00270 }
00271
00272
00273
00281 public function isAssigned($a_usr_id)
00282 {
00283 return in_array($a_usr_id,$this->participants);
00284 }
00285
00293 public function getRoles()
00294 {
00295 return $this->course_roles ? $this->course_roles : array();
00296 }
00297
00305 public function getAssignedRoles($a_usr_id)
00306 {
00307 global $rbacreview;
00308
00309 foreach($this->course_roles as $role)
00310 {
00311 if($rbacreview->isAssigned($a_usr_id,$role))
00312 {
00313 $assigned[] = $role;
00314 }
00315 }
00316 return $assigned ? $assigned : array();
00317 }
00318
00327 public function updateRoleAssignments($a_usr_id,$a_roles)
00328 {
00329 global $rbacreview,$rbacadmin;
00330
00331 $roles = $a_roles ? $a_roles : array();
00332
00333 foreach($this->getRoles() as $role_id)
00334 {
00335 if($rbacreview->isAssigned($a_usr_id,$role_id))
00336 {
00337 if(!in_array($role_id,$roles))
00338 {
00339 $rbacadmin->deassignUser($role_id,$a_usr_id);
00340 }
00341 }
00342 else
00343 {
00344 if(in_array($role_id,$roles))
00345 {
00346 $rbacadmin->assignUser($role_id,$a_usr_id);
00347 }
00348 }
00349 }
00350 $this->readParticipants();
00351 $this->readParticipantsStatus();
00352 }
00353
00361 public function checkLastAdmin($a_usr_ids)
00362 {
00363 foreach($this->getAdmins() as $admin_id)
00364 {
00365 if(!in_array($admin_id,$a_usr_ids))
00366 {
00367 return true;
00368 }
00369 }
00370 return false;
00371 }
00372
00380 public function isBlocked($a_usr_id)
00381 {
00382 if(isset($this->participants_status[$a_usr_id]))
00383 {
00384 return $this->participants_status[$a_usr_id]['blocked'] ? true : false;
00385 }
00386 return false;
00387 }
00388
00396 public function hasPassed($a_usr_id)
00397 {
00398 if(isset($this->participants_status[$a_usr_id]))
00399 {
00400 return $this->participants_status[$a_usr_id]['passed'] ? true : false;
00401 }
00402 return false;
00403 }
00404
00412 public function isNotificationEnabled($a_usr_id)
00413 {
00414 if(isset($this->participants_status[$a_usr_id]))
00415 {
00416 return $this->participants_status[$a_usr_id]['notification'] ? true : false;
00417 }
00418 return false;
00419 }
00420
00427 public function getNotificationRecipients()
00428 {
00429 global $ilDB;
00430
00431 $query = "SELECT * FROM crs_members ".
00432 "WHERE notification = 1 ".
00433 "AND obj_id = ".$ilDB->quote($this->course_id)." ";
00434 $res = $ilDB->query($query);
00435 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00436 {
00437 if($this->isAdmin($row->usr_id) or $this->isTutor($row->usr_id))
00438 {
00439 $recp[] = $row->usr_id;
00440 }
00441 }
00442 return $recp ? $recp : array();
00443 }
00444
00451 public function getCountMembers()
00452 {
00453 return count($this->members);
00454 }
00455
00462 public function getCountParticipants()
00463 {
00464 return count($this->participants);
00465 }
00466
00467
00468
00469
00476 public function getParticipants()
00477 {
00478 return $this->participants ? $this->participants : array();
00479 }
00480
00488 public function getMembers()
00489 {
00490 return $this->members ? $this->members : array();
00491 }
00498 public function getAdmins()
00499 {
00500 return $this->admins ? $this->admins : array();
00501 }
00508 public function getTutors()
00509 {
00510 return $this->tutors ? $this->tutors : array();
00511 }
00512
00520 public function isAdmin($a_usr_id)
00521 {
00522 return in_array($a_usr_id,$this->admins) ? true : false;
00523 }
00524
00532 public function isTutor($a_usr_id)
00533 {
00534 return in_array($a_usr_id,$this->tutors) ? true : false;
00535 }
00536
00544 public function isMember($a_usr_id)
00545 {
00546 return in_array($a_usr_id,$this->members) ? true : false;
00547 }
00548
00557 public function updatePassed($a_usr_id,$a_passed)
00558 {
00559 global $ilDB;
00560
00561 $this->participants_status[$a_usr_id]['passed'] = (int) $a_passed;
00562
00563 $query = "SELECT * FROM crs_members ".
00564 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ".
00565 "AND usr_id = ".$ilDB->quote($a_usr_id);
00566 $res = $ilDB->query($query);
00567 if($res->numRows())
00568 {
00569 $query = "UPDATE crs_members SET ".
00570 "passed = ".$ilDB->quote((int) $a_passed)." ".
00571 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ".
00572 "AND usr_id = ".$ilDB->quote($a_usr_id);
00573 }
00574 else
00575 {
00576 $query = "INSERT INTO crs_members SET ".
00577 "passed = ".$ilDB->quote((int) $a_passed).", ".
00578 "obj_id = ".$ilDB->quote($this->course_id).", ".
00579 "usr_id = ".$ilDB->quote($a_usr_id);
00580
00581 }
00582 $res = $ilDB->query($query);
00583 return true;
00584
00585 }
00586
00595 public function updateNotification($a_usr_id,$a_notification)
00596 {
00597 global $ilDB;
00598
00599 $this->participants_status[$a_usr_id]['notification'] = (int) $a_notification;
00600
00601 $query = "SELECT * FROM crs_members ".
00602 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ".
00603 "AND usr_id = ".$ilDB->quote($a_usr_id);
00604 $res = $ilDB->query($query);
00605 if($res->numRows())
00606 {
00607 $query = "UPDATE crs_members SET ".
00608 "notification = ".$ilDB->quote((int) $a_notification)." ".
00609 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ".
00610 "AND usr_id = ".$ilDB->quote($a_usr_id);
00611 }
00612 else
00613 {
00614 $query = "INSERT INTO crs_members SET ".
00615 "notification = ".$ilDB->quote((int) $a_notification).", ".
00616 "obj_id = ".$ilDB->quote($this->course_id).", ".
00617 "usr_id = ".$ilDB->quote($a_usr_id);
00618
00619 }
00620 $res = $ilDB->query($query);
00621 return true;
00622
00623 }
00624
00633 public function updateBlocked($a_usr_id,$a_blocked)
00634 {
00635 global $ilDB;
00636
00637 $this->participants_status[$a_usr_id]['blocked'] = (int) $a_blocked;
00638
00639 $query = "SELECT * FROM crs_members ".
00640 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ".
00641 "AND usr_id = ".$ilDB->quote($a_usr_id);
00642 $res = $ilDB->query($query);
00643 if($res->numRows())
00644 {
00645 $query = "UPDATE crs_members SET ".
00646 "blocked = ".$ilDB->quote((int) $a_blocked)." ".
00647 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ".
00648 "AND usr_id = ".$ilDB->quote($a_usr_id);
00649 }
00650 else
00651 {
00652 $query = "INSERT INTO crs_members SET ".
00653 "blocked = ".$ilDB->quote((int) $a_blocked).", ".
00654 "obj_id = ".$ilDB->quote($this->course_id).", ".
00655 "usr_id = ".$ilDB->quote($a_usr_id);
00656
00657 }
00658 $res = $ilDB->query($query);
00659 return true;
00660 }
00661
00670 public function add($a_usr_id,$a_role)
00671 {
00672 global $rbacadmin;
00673
00674 if($this->isAssigned($a_usr_id))
00675 {
00676 return false;
00677 }
00678
00679 switch($a_role)
00680 {
00681 case IL_CRS_ADMIN:
00682 $this->admins[] = $a_usr_id;
00683 break;
00684 case IL_CRS_TUTOR:
00685 $this->tutors[] = $a_usr_id;
00686 break;
00687 case IL_CRS_MEMBER:
00688 $this->members[] = $a_usr_id;
00689 break;
00690 }
00691 $this->participants[] = $a_usr_id;
00692 $rbacadmin->assignUser($this->course_role_data[$a_role],$a_usr_id);
00693 $this->addDesktopItem($a_usr_id);
00694 return true;
00695 }
00696
00704 public function delete($a_usr_id)
00705 {
00706 global $rbacadmin,$ilDB;
00707
00708 $this->dropDesktopItem($a_usr_id);
00709 foreach($this->course_roles as $role_id)
00710 {
00711 $rbacadmin->deassignUser($role_id,$a_usr_id);
00712 }
00713
00714 $query = "DELETE FROM crs_members ".
00715 "WHERE usr_id = ".$ilDB->quote($a_usr_id)." ".
00716 "AND obj_id = ".$ilDB->quote($this->course_id);
00717 $ilDB->query($query);
00718
00719 $this->readParticipants();
00720 $this->readParticipantsStatus();
00721
00722 return true;
00723 }
00724
00732 public function deleteParticipants($a_user_ids)
00733 {
00734 foreach($a_user_ids as $user_id)
00735 {
00736 $this->delete($user_id);
00737 }
00738 return true;
00739 }
00740
00741
00742
00750 public function addDesktopItem($a_usr_id)
00751 {
00752 if(!ilObjUser::_isDesktopItem($a_usr_id, $this->course_ref_id,'crs'))
00753 {
00754 ilObjUser::_addDesktopItem($a_usr_id, $this->course_ref_id,'crs');
00755 }
00756 return true;
00757 }
00758
00759
00767 function dropDesktopItem($a_usr_id)
00768 {
00769 if(ilObjUser::_isDesktopItem($a_usr_id, $this->course_ref_id,'crs'))
00770 {
00771 ilObjUser::_dropDesktopItem($a_usr_id, $this->course_ref_id,'crs');
00772 }
00773
00774 return true;
00775 }
00776
00777
00778
00779
00787 private function readParticipants()
00788 {
00789 global $rbacreview,$ilObjDataCache,$ilLog;
00790
00791 $rolf = $rbacreview->getRoleFolderOfObject($this->course_ref_id);
00792 if(!isset($rolf['ref_id']) or !$rolf['ref_id'])
00793 {
00794 $course_title = $ilObjDataCache->lookupTitle($ilObjDataCache->lookupObjId($this->course_ref_id));
00795 $ilLog->write(__METHOD__.': Found course without role folder. Course ref_id: '.$this->course_ref_id.', course title: '.$course_title);
00796 $ilLog->logStack();
00797 return false;
00798 }
00799
00800 $this->course_roles = $rbacreview->getRolesOfRoleFolder($rolf['ref_id'],false);
00801
00802 $users = array();
00803 $this->participants = array();
00804 $this->members = $this->admins = $this->tutors = array();
00805 foreach($this->course_roles as $role_id)
00806 {
00807 $title = $ilObjDataCache->lookupTitle($role_id);
00808 switch(substr($title,0,8))
00809 {
00810 case 'il_crs_m':
00811 $this->course_role_data[IL_CRS_MEMBER] = $role_id;
00812 $this->participants = array_unique(array_merge($assigned = $rbacreview->assignedUsers($role_id),$this->participants));
00813 $this->members = array_unique(array_merge($assigned,$this->members));
00814 break;
00815
00816 case 'il_crs_a':
00817 $this->course_role_data[IL_CRS_ADMIN] = $role_id;
00818 $this->participants = array_unique(array_merge($assigned = $rbacreview->assignedUsers($role_id),$this->participants));
00819 $this->admins = $rbacreview->assignedUsers($role_id);
00820 break;
00821
00822 case 'il_crs_t':
00823 $this->course_role_data[IL_CRS_TUTOR] = $role_id;
00824 $this->participants = array_unique(array_merge($assigned = $rbacreview->assignedUsers($role_id),$this->participants));
00825 $this->tutors = $rbacreview->assignedUsers($role_id);
00826 break;
00827
00828 default:
00829 $this->participants = array_unique(array_merge($assigned = $rbacreview->assignedUsers($role_id),$this->participants));
00830 $this->members = array_unique(array_merge($assigned,$this->members));
00831 break;
00832 }
00833 }
00834 }
00835
00843 private function readParticipantsStatus()
00844 {
00845 global $ilDB;
00846
00847 $query = "SELECT * FROM crs_members ".
00848 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ";
00849 $res = $ilDB->query($query);
00850 $this->participants_status = array();
00851 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00852 {
00853 $this->participants_status[$row->usr_id]['blocked'] = $row->blocked;
00854 $this->participants_status[$row->usr_id]['notification'] = $row->notification;
00855 $this->participants_status[$row->usr_id]['passed'] = $row->passed;
00856 }
00857 }
00858
00859
00860
00861 function getSubscribers()
00862 {
00863 $this->__readSubscribers();
00864
00865 return $this->subscribers;
00866 }
00867
00868 function getCountSubscribers()
00869 {
00870 return count($this->getSubscribers());
00871 }
00872
00873 function getSubscriberData($a_usr_id)
00874 {
00875 return $this->__readSubscriberData($a_usr_id);
00876 }
00877
00878
00879
00880 function assignSubscribers($a_usr_ids)
00881 {
00882 if(!is_array($a_usr_ids) or !count($a_usr_ids))
00883 {
00884 return false;
00885 }
00886 foreach($a_usr_ids as $id)
00887 {
00888 if(!$this->assignSubscriber($id))
00889 {
00890 return false;
00891 }
00892 }
00893 return true;
00894 }
00895
00896 function assignSubscriber($a_usr_id)
00897 {
00898 global $ilErr;
00899
00900 $ilErr->setMessage("");
00901 if(!$this->isSubscriber($a_usr_id))
00902 {
00903 $ilErr->appendMessage($this->lng->txt("crs_user_notsubscribed"));
00904
00905 return false;
00906 }
00907 if($this->isAssigned($a_usr_id))
00908 {
00909 $tmp_obj = ilObjectFactory::getInstanceByObjId($a_usr_id);
00910 $ilErr->appendMessage($tmp_obj->getLogin().": ".$this->lng->txt("crs_user_already_assigned"));
00911
00912 return false;
00913 }
00914
00915 if(!$tmp_obj =& ilObjectFactory::getInstanceByObjId($a_usr_id))
00916 {
00917 $ilErr->appendMessage($this->lng->txt("crs_user_not_exists"));
00918
00919 return false;
00920 }
00921
00922 $this->add($tmp_obj->getId(),IL_CRS_MEMBER);
00923 $this->deleteSubscriber($a_usr_id);
00924
00925 return true;
00926 }
00927
00928 function autoFillSubscribers()
00929 {
00930 $this->__readSubscribers();
00931
00932 $counter = 0;
00933 foreach($this->subscribers as $subscriber)
00934 {
00935 if(!$this->assignSubscriber($subscriber))
00936 {
00937 continue;
00938 }
00939 else
00940 {
00941 $this->sendNotification($this->NOTIFY_ACCEPT_SUBSCRIBER,$subscriber);
00942 }
00943 ++$counter;
00944 }
00945
00946 return $counter;
00947 }
00948
00949 function addSubscriber($a_usr_id)
00950 {
00951 global $ilDB;
00952
00953 $query = "INSERT INTO crs_subscribers ".
00954 " VALUES (".$ilDB->quote($a_usr_id).",".$ilDB->quote($this->course_id).",".$ilDB->quote(time()).")";
00955 $res = $this->ilDB->query($query);
00956
00957 return true;
00958 }
00959
00960 function updateSubscriptionTime($a_usr_id,$a_subtime)
00961 {
00962 global $ilDB;
00963
00964 $query = "UPDATE crs_subscribers ".
00965 "SET sub_time = ".$ilDB->quote($a_subtime)." ".
00966 "WHERE usr_id = ".$ilDB->quote($a_usr_id)." ".
00967 "AND obj_id = ".$ilDB->quote($this->course_id)." ";
00968
00969 $this->db->query($query);
00970
00971 return true;
00972 }
00973
00974 function deleteSubscriber($a_usr_id)
00975 {
00976 global $ilDB;
00977
00978 $query = "DELETE FROM crs_subscribers ".
00979 "WHERE usr_id = ".$a_usr_id." ".
00980 "AND obj_id = ".$ilDB->quote($this->course_id)." ";
00981
00982 $res = $ilDB->query($query);
00983
00984 return true;
00985 }
00986
00987 function deleteSubscribers($a_usr_ids)
00988 {
00989 global $ilErr;
00990
00991 if(!is_array($a_usr_ids) or !count($a_usr_ids))
00992 {
00993 $ilErr->setMessage('');
00994 $ilErr->appendMessage($this->lng->txt("no_usr_ids_given"));
00995
00996 return false;
00997 }
00998 foreach($a_usr_ids as $id)
00999 {
01000 if(!$this->deleteSubscriber($id))
01001 {
01002 $ilErr->appendMessage($this->lng->txt("error_delete_subscriber"));
01003
01004 return false;
01005 }
01006 }
01007 return true;
01008 }
01009 function isSubscriber($a_usr_id)
01010 {
01011 global $ilDB;
01012
01013 $query = "SELECT * FROM crs_subscribers ".
01014 "WHERE usr_id = ".$ilDB->quote($a_usr_id)." ".
01015 "AND obj_id = ".$ilDB->quote($this->course_id)."";
01016
01017 $res = $ilDB->query($query);
01018
01019 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
01020 {
01021 return true;
01022 }
01023 return false;
01024 }
01025
01026
01027
01028
01029 function _isSubscriber($a_obj_id,$a_usr_id)
01030 {
01031 global $ilDB;
01032
01033 $query = "SELECT * FROM crs_subscribers ".
01034 "WHERE usr_id = ".$ilDB->quote($a_usr_id)." ".
01035 "AND obj_id = ".$ilDB->quote($a_obj_id)."";
01036
01037 $res = $ilDB->query($query);
01038
01039 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
01040 {
01041 return true;
01042 }
01043 return false;
01044 }
01045 function __readSubscribers()
01046 {
01047 global $ilDB;
01048
01049 $this->subscribers = array();
01050
01051 $query = "SELECT usr_id FROM crs_subscribers ".
01052 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ".
01053 "ORDER BY sub_time ";
01054
01055 $res = $this->ilDB->query($query);
01056 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
01057 {
01058
01059 if(!ilObjectFactory::getInstanceByObjId($row->usr_id,false))
01060 {
01061 $this->deleteSubscriber($row->usr_id);
01062 }
01063 $this->subscribers[] = $row->usr_id;
01064 }
01065 return true;
01066 }
01067
01068 function __readSubscriberData($a_usr_id)
01069 {
01070 global $ilDB;
01071
01072 $query = "SELECT * FROM crs_subscribers ".
01073 "WHERE obj_id = ".$ilDB->quote($this->course_id)." ".
01074 "AND usr_id = ".$ilDB->quote($a_usr_id)."";
01075
01076 $res = $this->ilDB->query($query);
01077 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
01078 {
01079 $data["time"] = $row->sub_time;
01080 $data["usr_id"] = $row->usr_id;
01081 }
01082 return $data ? $data : array();
01083 }
01084
01085
01086
01087 function sendNotification($a_type, $a_usr_id)
01088 {
01089 global $ilObjDataCache,$ilUser;
01090
01091 $tmp_user =& ilObjectFactory::getInstanceByObjId($a_usr_id,false);
01092
01093 $link = ("\n\n".$this->lng->txt('crs_mail_permanent_link'));
01094 $link .= ("\n\n".ILIAS_HTTP_PATH."/goto.php?target=crs_".$this->course_ref_id."&client_id=".CLIENT_ID);
01095
01096 switch($a_type)
01097 {
01098 case $this->NOTIFY_DISMISS_SUBSCRIBER:
01099 $subject = $this->lng->txt("crs_reject_subscriber");
01100 $body = $this->lng->txt("crs_reject_subscriber_body");
01101 break;
01102
01103 case $this->NOTIFY_ACCEPT_SUBSCRIBER:
01104 $subject = $this->lng->txt("crs_accept_subscriber");
01105 $body = $this->lng->txt("crs_accept_subscriber_body");
01106 $body .= $link;
01107 break;
01108 case $this->NOTIFY_DISMISS_MEMBER:
01109 $subject = $this->lng->txt("crs_dismiss_member");
01110 $body = $this->lng->txt("crs_dismiss_member_body");
01111 break;
01112 case $this->NOTIFY_BLOCK_MEMBER:
01113 $subject = $this->lng->txt("crs_blocked_member");
01114 $body = $this->lng->txt("crs_blocked_member_body");
01115 break;
01116 case $this->NOTIFY_UNBLOCK_MEMBER:
01117 $subject = $this->lng->txt("crs_unblocked_member");
01118 $body = $this->lng->txt("crs_unblocked_member_body");
01119 $body .= $link;
01120 break;
01121 case $this->NOTIFY_ACCEPT_USER:
01122 $subject = $this->lng->txt("crs_added_member");
01123 $body = $this->lng->txt("crs_added_member_body");
01124 $body .= $link;
01125 break;
01126 case $this->NOTIFY_STATUS_CHANGED:
01127 $subject = $this->lng->txt("crs_status_changed");
01128 $body = $this->__buildStatusBody($tmp_user);
01129 $body .= $link;
01130 break;
01131
01132 case $this->NOTIFY_SUBSCRIPTION_REQUEST:
01133 $this->sendSubscriptionRequestToAdmins($a_usr_id);
01134 return true;
01135 break;
01136
01137 case $this->NOTIFY_ADMINS:
01138 $this->sendNotificationToAdmins($a_usr_id);
01139
01140 return true;
01141 break;
01142 }
01143 $subject = sprintf($subject,$ilObjDataCache->lookupTitle($this->course_id));
01144 $body = sprintf($body,$ilObjDataCache->lookupTitle($this->course_id));
01145
01146 include_once("Services/Mail/classes/class.ilMail.php");
01147 $mail = new ilMail($ilUser->getId());
01148 $mail->sendMail($tmp_user->getLogin(),'','',$subject,$body,array(),array('system'));
01149
01150 unset($tmp_user);
01151 return true;
01152 }
01153
01154 function sendUnsubscribeNotificationToAdmins($a_usr_id)
01155 {
01156 global $ilDB,$ilObjDataCache;
01157
01158 if(!ilObjCourse::_isSubscriptionNotificationEnabled($this->course_id))
01159 {
01160 return true;
01161 }
01162
01163 include_once("Services/Mail/classes/class.ilFormatMail.php");
01164
01165 $mail =& new ilFormatMail($a_usr_id);
01166 $subject = sprintf($this->lng->txt("crs_cancel_subscription"),$ilObjDataCache->lookupTitle($this->course_id));
01167 $body = sprintf($this->lng->txt("crs_cancel_subscription_body"),$ilObjDataCache->lookupTitle($this->course_id));
01168 $body .= ("\n\n".$this->lng->txt('crs_mail_permanent_link'));
01169 $body .= ("\n\n".ILIAS_HTTP_PATH."/goto.php?target=crs_".$this->course_ref_id."&client_id=".CLIENT_ID);
01170
01171
01172 foreach($this->getNotificationRecipients() as $usr_id)
01173 {
01174 $tmp_user =& ilObjectFactory::getInstanceByObjId($usr_id,false);
01175 $message = $mail->sendMail($tmp_user->getLogin(),'','',$subject,$body,array(),array('system'));
01176 unset($tmp_user);
01177 }
01178 return true;
01179 }
01180
01181
01182 function sendSubscriptionRequestToAdmins($a_usr_id)
01183 {
01184 global $ilDB,$ilObjDataCache,$ilUser;
01185
01186 if(!ilObjCourse::_isSubscriptionNotificationEnabled($this->course_id))
01187 {
01188 return true;
01189 }
01190
01191 include_once("Services/Mail/classes/class.ilMail.php");
01192
01193 $mail = new ilMail($ilUser->getId());
01194 $subject = sprintf($this->lng->txt("crs_new_subscription_request"),$ilObjDataCache->lookupTitle($this->course_id));
01195 $body = sprintf($this->lng->txt("crs_new_subscription_request_body"),$ilObjDataCache->lookupTitle($this->course_id));
01196 $body .= ("\n\n".$this->lng->txt('crs_new_subscription_request_body2'));
01197 $body .= ("\n\n".ILIAS_HTTP_PATH."/goto.php?target=crs_".$this->course_ref_id."&client_id=".CLIENT_ID);
01198
01199 foreach($this->getNotificationRecipients() as $usr_id)
01200 {
01201 $tmp_user =& ilObjectFactory::getInstanceByObjId($usr_id,false);
01202 $message = $mail->sendMail($tmp_user->getLogin(),'','',$subject,$body,array(),array('system'));
01203 }
01204 return true;
01205 }
01206
01207
01208 function sendNotificationToAdmins($a_usr_id)
01209 {
01210 global $ilDB,$ilObjDataCache;
01211
01212 if(!ilObjCourse::_isSubscriptionNotificationEnabled($this->course_id))
01213 {
01214 return true;
01215 }
01216
01217 include_once("Services/Mail/classes/class.ilFormatMail.php");
01218
01219 $mail =& new ilFormatMail($a_usr_id);
01220 $subject = sprintf($this->lng->txt("crs_new_subscription"),$ilObjDataCache->lookupTitle($this->course_id));
01221 $body = sprintf($this->lng->txt("crs_new_subscription_body"),$ilObjDataCache->lookupTitle($this->course_id));
01222 $body .= ("\n\n".ILIAS_HTTP_PATH."/goto.php?target=crs_".$this->course_ref_id."&client_id=".CLIENT_ID);
01223
01224 $query = "SELECT usr_id FROM crs_members ".
01225 "WHERE notification = '1' ".
01226 "AND obj_id = ".$ilDB->quote($this->course_id)."";
01227
01228 $res = $this->ilDB->query($query);
01229 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
01230 {
01231 if($this->isAdmin($row->usr_id) or $this->isTutor($row->usr_id))
01232 {
01233 $tmp_user =& ilObjectFactory::getInstanceByObjId($row->usr_id,false);
01234 $message = $mail->sendMail($tmp_user->getLogin(),'','',$subject,$body,array(),array('system'));
01235 unset($tmp_user);
01236 }
01237 }
01238 unset($mail);
01239
01240 return true;
01241 }
01242
01243 function __buildStatusBody(&$user_obj)
01244 {
01245 global $ilDB;
01246
01247 $body = $this->lng->txt('crs_status_changed_body').':<br />';
01248 $body .= $this->lng->txt('login').': '.$user_obj->getLogin().'<br />';
01249 $body .= $this->lng->txt('role').': ';
01250
01251 if($this->isAdmin($user_obj->getId()))
01252 {
01253 $body .= $this->lng->txt('crs_member').'<br />';
01254 }
01255 if($this->isTutor($user_obj->getId()))
01256 {
01257 $body .= $this->lng->txt('crs_tutor').'<br />';
01258 }
01259 if($this->isMember($user_obj->getId()))
01260 {
01261 $body .= $this->lng->txt('crs_member').'<br />';
01262 }
01263 $body .= $this->lng->txt('status').': ';
01264
01265 if($this->isNotificationEnabled($user_obj->getId()))
01266 {
01267 $body .= $this->lng->txt("crs_notify").'<br />';
01268 }
01269 else
01270 {
01271 $body .= $this->lng->txt("crs_no_notify").'<br />';
01272 }
01273 if($this->isBlocked($user_obj->getId()))
01274 {
01275 $body .= $this->lng->txt("crs_blocked").'<br />';
01276 }
01277 else
01278 {
01279 $body .= $this->lng->txt("crs_unblocked").'<br />';
01280 }
01281 $passed = $this->hasPassed($user_obj->getId()) ? $this->lng->txt('yes') : $this->lng->txt('no');
01282 $body .= $this->lng->txt('crs_passed').': '.$passed.'<br />';
01283
01284 return $body;
01285 }
01286
01287
01288 }
01289 ?>