• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

Modules/Course/classes/class.ilCourseParticipants.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2006 ILIAS open source, University of Cologne            |
00007         |                                                                             |
00008         | This program is free software; you can redistribute it and/or               |
00009         | modify it under the terms of the GNU General Public License                 |
00010         | as published by the Free Software Foundation; either version 2              |
00011         | of the License, or (at your option) any later version.                      |
00012         |                                                                             |
00013         | This program is distributed in the hope that it will be useful,             |
00014         | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015         | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016         | GNU General Public License for more details.                                |
00017         |                                                                             |
00018         | You should have received a copy of the GNU General Public License           |
00019         | along with this program; if not, write to the Free Software                 |
00020         | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
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                 // Used for membership limitations -> check membership by given field
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                 // METHODS FOR NEW REGISTRATIONS
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          * Static method
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                         // DELETE SUBSCRIPTION IF USER HAS BEEN DELETED
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         // Subscription
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 ?>

Generated on Fri Dec 13 2013 17:56:49 for ILIAS Release_3_9_x_branch .rev 46835 by  doxygen 1.7.1