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

course/classes/class.ilCourseMembers.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2001 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 
00024 
00035 class ilCourseMembers
00036 {
00037         var $course_obj;
00038         var $ilErr;
00039         var $ilDB;
00040         var $lng;
00041 
00042         var $member_data;
00043         var $subscribers;
00044 
00045         function ilCourseMembers(&$course_obj)
00046         {
00047                 global $ilErr,$lng,$ilDB;
00048 
00049                 $this->STATUS_NOTIFY = 1;
00050                 $this->STATUS_NO_NOTIFY = 2;
00051                 $this->STATUS_BLOCKED = 3;
00052                 $this->STATUS_UNBLOCKED = 4;
00053 
00054                 $this->NOTIFY_DISMISS_SUBSCRIBER = 1;
00055                 $this->NOTIFY_ACCEPT_SUBSCRIBER = 2;
00056                 $this->NOTIFY_DISMISS_MEMBER = 3;
00057                 $this->NOTIFY_BLOCK_MEMBER = 4;
00058                 $this->NOTIFY_UNBLOCK_MEMBER = 5;
00059                 $this->NOTIFY_ACCEPT_USER = 6;
00060                 $this->NOTIFY_ADMINS = 7;
00061                 $this->NOTIFY_STATUS_CHANGED = 8;
00062                 $this->NOTIFY_SUBSCRIPTION_REQUEST = 9;
00063 
00064 
00065                 $this->ROLE_ADMIN = 1;
00066                 $this->ROLE_MEMBER = 2;
00067                 $this->ROLE_TUTOR = 3;
00068 
00069                 $this->ilErr =& $ilErr;
00070                 $this->ilDB =& $ilDB;
00071 
00072                 $this->lng =& $lng;
00073                 $this->lng->loadLanguageModule("search");
00074 
00075                 $this->course_obj =& $course_obj;
00076 
00077         }
00078 
00079         function addDesktopItem($a_usr_id)
00080         {
00081                 $user_obj =& ilObjectFactory::getInstanceByObjId($a_usr_id);
00082 
00083                 if(!$user_obj->isDesktopItem($this->course_obj->getRefId(),'crs'))
00084                 {
00085                         $user_obj->addDesktopItem($this->course_obj->getRefId(),'crs');
00086                 }
00087                 unset($user_obj);
00088 
00089                 return true;
00090         }
00091         function dropDesktopItem($a_usr_id)
00092         {
00093                 $user_obj =& ilObjectFactory::getInstanceByObjId($a_usr_id);
00094 
00095                 if($user_obj->isDesktopItem($this->course_obj->getRefId(),'crs'))
00096                 {
00097                         $user_obj->dropDesktopItem($this->course_obj->getRefId(),'crs');
00098                 }
00099                 unset($user_obj);
00100 
00101                 return true;
00102         }
00103 
00104         function add(&$user_obj,$a_role,$a_status = 0,$a_passed = 0)
00105         {
00106                 global $rbacadmin;
00107 
00108                 switch($a_role)
00109                 {
00110                         case $this->ROLE_MEMBER:
00111                                 if($a_status and ($a_status == $this->STATUS_BLOCKED or $a_status == $this->STATUS_UNBLOCKED))
00112                                 {
00113                                         $status = $a_status;
00114                                 }
00115                                 else if($a_status)
00116                                 {
00117                                         $this->ilErr->raiseError($this->lng->txt("crs_status_not_allowed",$this->ilErr->MESSAGE));
00118                                 }
00119                                 else
00120                                 {
00121                                         $status = $this->__getDefaultMemberStatus();
00122                                 }
00123                                 $role = $this->course_obj->getDefaultMemberRole();
00124                                 $passed = $a_passed;
00125 
00126                                 $this->addDesktopItem($user_obj->getId());
00127                                 break;
00128 
00129                         case $this->ROLE_ADMIN:
00130                                 if($a_status and ($a_status == $this->STATUS_NOTIFY or $a_status == $this->STATUS_NO_NOTIFY))
00131                                 {
00132                                         $status = $a_status;
00133                                 }
00134                                 else if($a_status)
00135                                 {
00136                                         $this->ilErr->raiseError($this->lng->txt("crs_status_not_allowed",$this->ilErr->MESSAGE));
00137                                 }
00138                                 else
00139                                 {
00140                                         $status = $this->__getDefaultAdminStatus();
00141                                 }
00142                                 $role = $this->course_obj->getDefaultAdminRole();
00143                                 $passed = $a_passed;
00144                                 $this->addDesktopItem($user_obj->getId());
00145                                 break;
00146 
00147                         case $this->ROLE_TUTOR:
00148                                 if($a_status and ($a_status == $this->STATUS_NOTIFY or $a_status == $this->STATUS_NO_NOTIFY))
00149                                 {
00150                                         $status = $a_status;
00151                                 }
00152                                 else if($a_status)
00153                                 {
00154                                         $this->ilErr->raiseError($this->lng->txt("crs_status_not_allowed",$this->ilErr->MESSAGE));
00155                                 }
00156                                 else
00157                                 {
00158                                         $status = $this->__getDefaultTutorStatus();
00159                                 }
00160                                 $role = $this->course_obj->getDefaultTutorRole();
00161                                 $passed = $a_passed;
00162                                 $this->addDesktopItem($user_obj->getId());
00163                                 break;
00164                                 
00165                 }
00166                 // 1. create entry
00167                 $this->__createMemberEntry($user_obj->getId(),$a_role,$status,$passed);
00168 
00169                 $rbacadmin->assignUser($role,$user_obj->getId());
00170                 ilObjUser::updateActiveRoles($user_obj->getId());
00171 
00172                 return true;
00173         }
00174 
00175         function update($a_usr_id,$a_role,$a_status,$a_passed)
00176         {
00177                 global $rbacadmin;
00178 
00179                 $this->__read($a_usr_id);
00180 
00181                 switch($a_role)
00182                 {
00183                         case $this->ROLE_ADMIN:
00184                                 if($a_status != $this->STATUS_NOTIFY or $a_status != $this->STATUS_NO_NOTIFY)
00185                                 {
00186                                         $this->ilErr->raiseError($this->lng->txt("crs_status_not_allowed",$this->ilErr->MESSAGE));
00187                                 }
00188                                 break;
00189 
00190                         case $this->ROLE_TUTOR:
00191                                 if($a_status != $this->STATUS_NOTIFY or $a_status != $this->STATUS_NO_NOTIFY)
00192                                 {
00193                                         $this->ilErr->raiseError($this->lng->txt("crs_status_not_allowed",$this->ilErr->MESSAGE));
00194                                 }
00195                                 break;
00196 
00197                         case $this->ROLE_MEMBER:
00198                                 if($a_status != $this->STATUS_BLOCKED or $a_status != $this->STATUS_UNBLOCKED)
00199                                 {
00200                                         $this->ilErr->raiseError($this->lng->txt("crs_status_not_allowed",$this->ilErr->MESSAGE));
00201                                 }
00202                                 $this->addDesktopItem($a_usr_id);
00203 
00204                         default:
00205                                 $this->ilErr->raiseError($this->lng->txt("crs_role_not_allowed",$this->ilErr->MESSAGE));
00206                                 break;
00207                 }
00208 
00209                 // UPDATE RBAC ROLES
00210 
00211                 // deassign old roles
00212                 switch($this->member_data["role"])
00213                 {
00214                         case $this->ROLE_ADMIN:
00215                                 $rbacadmin->deassignUser($this->course_obj->getDefaultAdminRole(),$a_usr_id);
00216                                 break;
00217 
00218                         case $this->ROLE_TUTOR:
00219                                 $rbacadmin->deassignUser($this->course_obj->getDefaultTutorRole(),$a_usr_id);
00220                                 break;
00221 
00222                         case $this->ROLE_MEMBER:
00223                                 $rbacadmin->deassignUser($this->course_obj->getDefaultMemberRole(),$a_usr_id);
00224                                 break;
00225                 }
00226                 // assign new role
00227                 switch($a_role)
00228                 {
00229                         case $this->ROLE_ADMIN:
00230                                 $rbacadmin->assignUser($this->course_obj->getDefaultAdminRole(),$a_usr_id);
00231                                 break;
00232 
00233                         case $this->ROLE_TUTOR:
00234                                 $rbacadmin->assignUser($this->course_obj->getDefaultTutorRole(),$a_usr_id);
00235                                 break;
00236                                 
00237                         case $this->ROLE_MEMBER:
00238                                 if($a_status != $this->STATUS_BLOCKED)
00239                                 {
00240                                         $rbacadmin->assignUser($this->course_obj->getDefaultMemberRole(),$a_usr_id);
00241                                 }
00242                                 break;
00243                 }
00244 
00245                 // Update active roles
00246                 ilObjUser::updateActiveRoles($a_usr_id);
00247 
00248                 $query = "UPDATE crs_members ".
00249                         "SET role = '".$a_role."', ".
00250                         "status = '".$a_status."', ".
00251                         "passed = '".$a_passed."' ".
00252                         "WHERE obj_id = '".$this->course_obj->getId()."' ".
00253                         "AND usr_id = '".$a_usr_id."'";
00254                 $res = $this->ilDB->query($query);
00255 
00256                 return true;
00257         }
00258 
00259 
00260         function deleteAllEntries()
00261         {
00262                 $query = "DELETE FROM crs_members ".
00263                         "WHERE obj_id = '".$this->course_obj->getId()."'";
00264 
00265                 $this->ilDB->query($query);
00266 
00267                 $query = "DELETE FROM crs_subscribers ".
00268                         "WHERE obj_id = '".$this->course_obj->getId()."'";
00269 
00270                 $this->ilDB->query($query);
00271 
00272                 return true;
00273         }
00274 
00275         function deleteMembers($a_usr_ids)
00276         {
00277                 if(!is_array($a_usr_ids) or !count($a_usr_ids))
00278                 {
00279                         $this->course_obj->setMessage("");
00280                         $this->course_obj->appendMessage($this->lng->txt("no_usr_ids_given"));
00281                         
00282                         return false;
00283                 }
00284                 foreach($a_usr_ids as $id)
00285                 {
00286                         if(!$this->delete($id))
00287                         {
00288                                 $this->course_obj->appendMessage($this->lng->txt("error_delete_member"));
00289                                         
00290                                 return false;
00291                         }
00292                 }
00293                 return true;
00294         }
00295 
00296         function delete($a_usr_id)
00297         {
00298                 global $rbacadmin;
00299 
00300                 $this->__read($a_usr_id);
00301 
00302                 switch($this->member_data["role"])
00303                 {
00304                         case $this->ROLE_ADMIN:
00305                                 $role = $this->course_obj->getDefaultAdminRole();
00306                                 break;
00307 
00308 
00309                         case $this->ROLE_TUTOR:
00310                                 $role = $this->course_obj->getDefaultTutorRole();
00311                                 break;
00312                                 
00313                         case $this->ROLE_MEMBER:
00314                                 $role = $this->course_obj->getDefaultMemberRole();
00315                                 break;
00316                 }
00317 
00318                 $this->dropDesktopItem($a_usr_id);
00319                 $rbacadmin->deassignUser($role,$a_usr_id);
00320                 ilObjUser::updateActiveRoles($a_usr_id);
00321 
00322                 
00323                 $query = "DELETE FROM crs_members ".
00324                         "WHERE usr_id = '".$a_usr_id."' ".
00325                         "AND obj_id = '".$this->course_obj->getId()."'";
00326 
00327                 $res = $this->ilDB->query($query);
00328 
00329                 return true;
00330         }
00331 
00332 
00333         /* 
00334          * Delete user entries called from ilObjUser->delete() 
00335          */
00336         function _deleteUser($a_usr_id)
00337         {
00338                 global $ilDB;
00339 
00340                 $query = "DELETE FROM crs_members WHERE usr_id = '".$a_usr_id."'";
00341                 $ilDB->query($query);
00342 
00343                 $query = "DELETE FROM crs_subscribers WHERE usr_id = '".$a_usr_id."'";
00344                 $ilDB->query($query);
00345 
00346                 include_once './course/classes/class.ilCourseWaitingList.php';
00347                 ilCourseWaitingList::_deleteUser($a_usr_id);
00348         }
00349                 
00350         function getAssignedUsers()
00351         {
00352                 // ALL MEMBERS AND ADMINS
00353                 return array_merge($this->getMembers(),$this->getAdmins(),$this->getTutors());
00354         }
00355         function getUserData($a_usr_id)
00356         {
00357                 $this->__read($a_usr_id);
00358 
00359                 return $this->member_data;
00360         }
00361 
00362         function getCountMembers()
00363         {
00364                 return count($this->getMembers(false));
00365         }
00366 
00367         function getMembers($a_all = true)
00368         {
00369                 $query = "SELECT usr_id FROM crs_members ".
00370                         "WHERE obj_id = '".$this->course_obj->getId()."' ".
00371                         "AND role = '".$this->ROLE_MEMBER."'";
00372 
00373                 if(!$a_all)
00374                 {
00375                         $query .= " AND status = '".$this->STATUS_UNBLOCKED."'";
00376                 }
00377 
00378                 $res = $this->ilDB->query($query);
00379                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00380                 {
00381                         $usr_ids[] = $row->usr_id;
00382                 }
00383                 return $usr_ids ? $usr_ids : array();
00384         }
00385         function getAdmins()
00386         {
00387                 $query = "SELECT usr_id FROM crs_members ".
00388                         "WHERE obj_id = '".$this->course_obj->getId()."' ".
00389                         "AND role = '".$this->ROLE_ADMIN."'";
00390 
00391                 $res = $this->ilDB->query($query);
00392                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00393                 {
00394                         $usr_ids[] = $row->usr_id;
00395                 }
00396                 return $usr_ids ? $usr_ids : array();
00397         }
00398         function getTutors()
00399         {
00400                 $query = "SELECT usr_id FROM crs_members ".
00401                         "WHERE obj_id = '".$this->course_obj->getId()."' ".
00402                         "AND role = '".$this->ROLE_TUTOR."'";
00403 
00404                 $res = $this->ilDB->query($query);
00405                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00406                 {
00407                         $usr_ids[] = $row->usr_id;
00408                 }
00409                 return $usr_ids ? $usr_ids : array();
00410         }
00411 
00412         function isAdmin($a_usr_id)
00413         {
00414                 $this->__read($a_usr_id);
00415 
00416                 return $this->member_data["role"] == $this->ROLE_ADMIN ? true : false;
00417         }
00418         function isMember($a_usr_id)
00419         {
00420                 $this->__read($a_usr_id);
00421 
00422                 return $this->member_data["role"] == $this->ROLE_MEMBER ? true : false;
00423         }
00424         function isTutor($a_usr_id)
00425         {
00426                 $this->__read($a_usr_id);
00427 
00428                 return $this->member_data["role"] == $this->ROLE_TUTOR ? true : false;
00429         }
00430         function isAssigned($a_usr_id)
00431         {
00432                 return $this->isAdmin($a_usr_id) || $this->isMember($a_usr_id) || $this->isTutor($a_usr_id);
00433         }
00434         function isBlocked($a_usr_id)
00435         {
00436                 $this->__read($a_usr_id);
00437                 
00438                 return $this->member_data["status"] == $this->STATUS_BLOCKED ? true : false;
00439         }
00446         function _isBlocked($a_obj_id,$a_usr_id)
00447         {
00448                 global $ilDB;
00449 
00450                 $query = "SELECT * FROM crs_members ".
00451                         "WHERE usr_id = '".$a_usr_id."' ".
00452                         "AND obj_id = '".$a_obj_id."'";
00453 
00454                 $res = $ilDB->query($query);
00455                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00456                 {
00457                         return $row->status == 3 ? true : false;
00458                 }
00459                 return false;
00460         }
00461         
00462 
00463         function hasAccess($a_usr_id)
00464         {
00465                 global $rbacsystem;
00466 
00467                 #if($rbacsystem->checkAccess('write',$this->course_obj->getRefId()))
00468                 #{
00469                 #       return true;
00470                 #}
00471 
00472                 return $this->isAssigned($a_usr_id) && !$this->isBlocked($a_usr_id) ? true : false;
00473         }
00474 
00475         function getCountPassed()
00476         {
00477                 $query = "SELECT * FROM crs_members ".
00478                         "WHERE obj_id = '".$this->course_obj->getId()."' ".
00479                         "AND passed = 1";
00480 
00481                 $res = $this->ilDB->query($query);
00482                 
00483                 return $res->numRows() ? $res->numRows() : 0;
00484         }
00485 
00486         function checkLastAdmin($a_usr_ids)
00487         {
00488                 foreach($this->getAdmins() as $admin_id)
00489                 {
00490                         if(!in_array($admin_id,$a_usr_ids))
00491                         {
00492                                 return true;
00493                         }
00494                 }
00495                 return false;
00496         }
00497 
00498         // METHODS FOR NEW REGISTRATIONS
00499         function getSubscribers()
00500         {
00501                 $this->__readSubscribers();
00502 
00503                 return $this->subscribers;
00504         }
00505 
00506         function getSubscriberData($a_usr_id)
00507         {
00508                 return $this->__readSubscriberData($a_usr_id);
00509         }
00510         
00511 
00512 
00513         function assignSubscribers($a_usr_ids)
00514         {
00515                 if(!is_array($a_usr_ids) or !count($a_usr_ids))
00516                 {
00517                         return false;
00518                 }
00519                 foreach($a_usr_ids as $id)
00520                 {
00521                         if(!$this->assignSubscriber($id))
00522                         {
00523                                 return false;
00524                         }
00525                 }
00526                 return true;
00527         }
00528 
00529         function assignSubscriber($a_usr_id,$a_role = 0,$a_status = 0)
00530         {
00531                 $a_role = $a_role ? $a_role : $this->ROLE_MEMBER;
00532                 $a_status = $a_status ? $a_status : $this->STATUS_UNBLOCKED;
00533 
00534                 $this->course_obj->setMessage("");
00535 
00536 
00537                 if(!$this->isSubscriber($a_usr_id))
00538                 {
00539                         $this->course_obj->appendMessage($this->lng->txt("crs_user_notsubscribed"));
00540 
00541                         return false;
00542                 }
00543                 if($this->isAssigned($a_usr_id))
00544                 {
00545                         $tmp_obj = ilObjectFactory::getInstanceByObjId($a_usr_id);
00546                         $this->course_obj->appendMessage($tmp_obj->getLogin().": ".$this->lng->txt("crs_user_already_assigned"));
00547                         
00548                         return false;
00549                 }
00550 
00551                 if(!$tmp_obj =& ilObjectFactory::getInstanceByObjId($a_usr_id))
00552                 {
00553                         $this->course_obj->appendMessage($this->lng->txt("crs_user_not_exists"));
00554 
00555                         return false;
00556                 }
00557 
00558                 $this->add($tmp_obj,$a_role,$a_status);
00559                 $this->deleteSubscriber($a_usr_id);
00560 
00561                 return true;
00562         }
00563 
00564         function autoFillSubscribers()
00565         {
00566                 $this->__readSubscribers();
00567 
00568                 $counter = 0;
00569                 foreach($this->subscribers as $subscriber)
00570                 {
00571                         if($this->course_obj->getSubscriptionMaxMembers() and
00572                            $this->course_obj->getSubscriptionMaxMembers() <= $this->getCountMembers())
00573                         {
00574                                 return $counter;
00575                         }
00576                         if(!$this->assignSubscriber($subscriber))
00577                         {
00578                                 continue;
00579                         }
00580                         else
00581                         {
00582                                 $this->sendNotification($this->NOTIFY_ACCEPT_SUBSCRIBER,$subscriber);
00583                         }
00584                         ++$counter;
00585                 }
00586                 
00587                 return $counter;
00588         }
00589 
00590         function addSubscriber($a_usr_id)
00591         {
00592                 $query = "INSERT INTO crs_subscribers ".
00593                         " VALUES ('".$a_usr_id."','".$this->course_obj->getId()."','".time()."')";
00594 
00595                 $res = $this->ilDB->query($query);
00596 
00597                 return true;
00598         }
00599 
00600         function updateSubscriptionTime($a_usr_id,$a_subtime)
00601         {
00602                 $query = "UPDATE crs_subscribers ".
00603                         "SET sub_time = '".ilUtil::prepareDBString($a_subtime)."' ".
00604                         "WHERE usr_id = '".ilUtil::prepareDBString($a_usr_id)."' ".
00605                         "AND obj_id = '".$this->course_obj->getId()."'";
00606 
00607                 $this->db->query($query);
00608 
00609                 return true;
00610         }
00611 
00612         function deleteSubscriber($a_usr_id)
00613         {
00614                 $query = "DELETE FROM crs_subscribers ".
00615                         "WHERE usr_id = '".$a_usr_id."' ".
00616                         "AND obj_id = '".$this->course_obj->getId()."'";
00617 
00618                 $res = $this->ilDB->query($query);
00619 
00620                 return true;
00621         }
00622 
00623         function deleteSubscribers($a_usr_ids)
00624         {
00625                 if(!is_array($a_usr_ids) or !count($a_usr_ids))
00626                 {
00627                         $this->course_obj->setMessage("");
00628                         $this->course_obj->appendMessage($this->lng->txt("no_usr_ids_given"));
00629                         
00630                         return false;
00631                 }
00632                 foreach($a_usr_ids as $id)
00633                 {
00634                         if(!$this->deleteSubscriber($id))
00635                         {
00636                                 $this->course_obj->appendMessage($this->lng->txt("error_delete_subscriber"));
00637                                         
00638                                 return false;
00639                         }
00640                 }
00641                 return true;
00642         }
00643         function isSubscriber($a_usr_id)
00644         {
00645                 $query = "SELECT * FROM crs_subscribers ".
00646                         "WHERE usr_id = '".$a_usr_id."' ".
00647                         "AND obj_id = '".$this->course_obj->getId()."'";
00648 
00649                 $res = $this->ilDB->query($query);
00650 
00651                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00652                 {
00653                         return true;
00654                 }
00655                 return false;
00656         }
00657 
00658         /*
00659          * Static method
00660          */
00661         function _isSubscriber($a_obj_id,$a_usr_id)
00662         {
00663                 global $ilDB;
00664 
00665                 $query = "SELECT * FROM crs_subscribers ".
00666                         "WHERE usr_id = '".$a_usr_id."' ".
00667                         "AND obj_id = '".$a_obj_id."'";
00668 
00669                 $res = $ilDB->query($query);
00670 
00671                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00672                 {
00673                         return true;
00674                 }
00675                 return false;
00676         }
00677 
00678         function sendNotification($a_type, $a_usr_id)
00679         {
00680                 $tmp_user =& ilObjectFactory::getInstanceByObjId($a_usr_id,false);
00681 
00682                 switch($a_type)
00683                 {
00684                         case $this->NOTIFY_DISMISS_SUBSCRIBER:
00685                                 $subject = $this->lng->txt("crs_reject_subscriber");
00686                                 $body = $this->lng->txt("crs_reject_subscriber_body");
00687                                 break;
00688                                 
00689                         case $this->NOTIFY_ACCEPT_SUBSCRIBER:
00690                                 $subject = $this->lng->txt("crs_accept_subscriber");
00691                                 $body = $this->lng->txt("crs_accept_subscriber_body");
00692                                 break;
00693                         case $this->NOTIFY_DISMISS_MEMBER:
00694                                 $subject = $this->lng->txt("crs_dismiss_member");
00695                                 $body = $this->lng->txt("crs_dismiss_member_body");
00696                                 break;
00697                         case $this->NOTIFY_BLOCK_MEMBER:
00698                                 $subject = $this->lng->txt("crs_blocked_member");
00699                                 $body = $this->lng->txt("crs_blocked_member_body");
00700                                 break;
00701                         case $this->NOTIFY_UNBLOCK_MEMBER:
00702                                 $subject = $this->lng->txt("crs_unblocked_member");
00703                                 $body = $this->lng->txt("crs_unblocked_member_body");
00704                                 break;
00705                         case $this->NOTIFY_ACCEPT_USER:
00706                                 $subject = $this->lng->txt("crs_added_member");
00707                                 $body = $this->lng->txt("crs_added_member_body");
00708                                 break;
00709                         case $this->NOTIFY_STATUS_CHANGED:
00710                                 $subject = $this->lng->txt("crs_status_changed");
00711                                 $body = $this->__buildStatusBody($tmp_user);
00712                                 break;
00713 
00714                         case $this->NOTIFY_SUBSCRIPTION_REQUEST:
00715                                 $this->sendSubscriptionRequestToAdmins($a_usr_id);
00716                                 return true;
00717                                 break;
00718 
00719                         case $this->NOTIFY_ADMINS:
00720                                 $this->sendNotificationToAdmins($a_usr_id);
00721 
00722                                 return true;
00723                                 break;
00724                 }
00725                 $subject = sprintf($subject, $this->course_obj->getTitle());
00726                 $body = sprintf($body, $this->course_obj->getTitle());
00727 
00728                 include_once("./classes/class.ilFormatMail.php");
00729 
00730                 $mail = new ilFormatMail($_SESSION["AccountId"]);
00731                 $mail->sendMail($tmp_user->getLogin(),'','',$subject,$body,array(),array('normal'));
00732 
00733                 unset($tmp_user);
00734                 return true;
00735         }
00736 
00737         function sendNotificationToAdmins($a_usr_id)
00738         {
00739                 if(!$this->course_obj->getSubscriptionNotify())
00740                 {
00741                         return true;
00742                 }
00743 
00744 
00745                 include_once("./classes/class.ilFormatMail.php");
00746 
00747                 $mail =& new ilFormatMail($a_usr_id);
00748                 $subject = sprintf($this->lng->txt("crs_new_subscription"),$this->course_obj->getTitle());
00749                 $body = sprintf($this->lng->txt("crs_new_subscription_body"),$this->course_obj->getTitle());
00750 
00751                 $query = "SELECT usr_id FROM crs_members ".
00752                         "WHERE status = '".$this->STATUS_NOTIFY."' ".
00753                         "AND obj_id = '".$this->course_obj->getId()."'";
00754 
00755                 $res = $this->ilDB->query($query);
00756                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00757                 {
00758                         $tmp_user =& ilObjectFactory::getInstanceByObjId($row->usr_id,false);
00759 
00760                         $message = $mail->sendMail($tmp_user->getLogin(),'','',$subject,$body,array(),array('normal'));
00761                         unset($tmp_user);
00762                 }
00763                 unset($mail);
00764 
00765                 return true;
00766         }
00767         function sendSubscriptionRequestToAdmins($a_usr_id)
00768         {
00769                 if(!$this->course_obj->getSubscriptionNotify())
00770                 {
00771                         return true;
00772                 }
00773 
00774 
00775                 include_once("./classes/class.ilFormatMail.php");
00776 
00777                 $mail =& new ilFormatMail($a_usr_id);
00778                 $subject = sprintf($this->lng->txt("crs_new_subscription_request"),$this->course_obj->getTitle());
00779                 $body = sprintf($this->lng->txt("crs_new_subscription_request_body"),$this->course_obj->getTitle());
00780 
00781                 $query = "SELECT usr_id FROM crs_members ".
00782                         "WHERE status = '".$this->STATUS_NOTIFY."' ".
00783                         "AND obj_id = '".$this->course_obj->getId()."'";
00784 
00785                 $res = $this->ilDB->query($query);
00786                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00787                 {
00788                         $tmp_user =& ilObjectFactory::getInstanceByObjId($row->usr_id,false);
00789 
00790                         $message = $mail->sendMail($tmp_user->getLogin(),'','',$subject,$body,array(),array('normal'));
00791                         unset($tmp_user);
00792                 }
00793                 unset($mail);
00794 
00795                 return true;
00796         }
00797         function sendUnsubscribeNotificationToAdmins($a_usr_id)
00798         {
00799                 if(!$this->course_obj->getSubscriptionNotify())
00800                 {
00801                         return true;
00802                 }
00803 
00804                 include_once("./classes/class.ilFormatMail.php");
00805 
00806                 $mail =& new ilFormatMail($a_usr_id);
00807                 $subject = sprintf($this->lng->txt("crs_cancel_subscription"), $this->course_obj->getTitle());
00808                 $body = sprintf($this->lng->txt("crs_cancel_subscription_body"), $this->course_obj->getTitle());
00809 
00810                 $query = "SELECT usr_id FROM crs_members ".
00811                         "WHERE status = '".$this->STATUS_NOTIFY."' ".
00812                         "AND obj_id = '".$this->course_obj->getId()."'";
00813 
00814                 $res = $this->ilDB->query($query);
00815                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00816                 {
00817                         $tmp_user =& ilObjectFactory::getInstanceByObjId($row->usr_id,false);
00818 
00819                         $message = $mail->sendMail($tmp_user->getLogin(),'','',$subject,$body,array(),array('normal'));
00820                         unset($tmp_user);
00821                 }
00822                 unset($mail);
00823 
00824                 return true;
00825         }
00826 
00827         // PRIVATE METHODS
00828         function __getDefaultAdminStatus()
00829         {
00830                 return $this->STATUS_NOTIFY;
00831         }
00832         function __getDefaultMemberStatus()
00833         {
00834                 return $this->STATUS_UNBLOCKED;
00835         }
00836         function __getDefaultTutorStatus()
00837         {
00838                 return $this->STATUS_NO_NOTIFY;
00839         }
00840 
00841         function __createMemberEntry($a_usr_id,$a_role,$a_status,$a_passed)
00842         {
00843                 $query = "INSERT INTO crs_members ".
00844                         "SET usr_id = '".$a_usr_id."', ".
00845                         "obj_id = '".$this->course_obj->getId()."', ".
00846                         "status = '".$a_status."', ".
00847                         "role = '".$a_role."', ".
00848                         "passed = '".$a_passed."'";
00849 
00850                 $res = $this->ilDB->query($query);
00851 
00852                 return true;
00853         }
00854 
00855         function __read($a_usr_id)
00856         {
00857                 $query = "SELECT * FROM crs_members ".
00858                         "WHERE usr_id = '".$a_usr_id."' ".
00859                         "AND obj_id = '".$this->course_obj->getId()."'";
00860 
00861                 $res = $this->ilDB->query($query);
00862 
00863                 $this->member_data = array();
00864                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00865                 {
00866                         $this->member_data["usr_id"]    = $row->usr_id;
00867                         $this->member_data["role"]              = $row->role;
00868                         $this->member_data["status"]    = $row->status;
00869                         $this->member_data['passed']    = $row->passed;
00870                 }
00871                 return true;
00872         }
00873 
00874 
00875         function __readSubscribers()
00876         {
00877                 $this->subscribers = array();
00878 
00879                 $query = "SELECT usr_id FROM crs_subscribers ".
00880                         "WHERE obj_id = '".$this->course_obj->getId()."' ".
00881                         "ORDER BY sub_time ";
00882 
00883                 $res = $this->ilDB->query($query);
00884                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00885                 {
00886                         // DELETE SUBSCRIPTION IF USER HAS BEEN DELETED
00887                         if(!ilObjectFactory::getInstanceByObjId($a_usr_id,false))
00888                         {
00889                                 $this->deleteSubscriber($a_usr_id);
00890                         }
00891                         $this->subscribers[] = $row->usr_id;
00892                 }
00893                 return true;
00894         }
00895 
00896         function __readSubscriberData($a_usr_id)
00897         {
00898                 $query = "SELECT * FROM crs_subscribers ".
00899                         "WHERE obj_id = '".$this->course_obj->getId()."' ".
00900                         "AND usr_id = '".$a_usr_id."'";
00901 
00902                 $res = $this->ilDB->query($query);
00903                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00904                 {
00905                         $data["time"] = $row->sub_time;
00906                         $data["usr_id"] = $row->usr_id;
00907                 }
00908                 return $data ? $data : array();
00909         }
00910 
00911         function _hasPassed($a_obj_id,$a_usr_id)
00912         {
00913                 global $ilDB;
00914 
00915                 $query = "SELECT * FROM crs_members ".
00916                         "WHERE obj_id = '".$a_obj_id."' ".
00917                         "AND usr_id = '".$a_usr_id."' ".
00918                         "AND passed = 1";
00919 
00920                 
00921                 $res = $ilDB->query($query);
00922                 
00923                 return $res->numRows() ? true : false;
00924         }
00925 
00926         function _setPassed($a_obj_id,$a_usr_id)
00927         {
00928                 global $ilDB;
00929 
00930                 if(!ilCourseMembers::_hasPassed($a_obj_id,$a_usr_id))
00931                 {
00932                         $query = "UPDATE crs_members ".
00933                                 "SET passed = 1 WHERE usr_id = '".$a_usr_id."' ".
00934                                 "AND obj_id = '".$a_obj_id."'";
00935                         
00936                         $ilDB->query($query);
00937                         
00938                         return true;
00939                 }
00940                 return false;
00941         }
00942 
00943 
00944         function __buildStatusBody(&$user_obj)
00945         {
00946                 $this->__read($user_obj->getId());
00947 
00948                 $body = $this->lng->txt('crs_status_changed_body').':<br />';
00949                 $body .= $this->lng->txt('login').': '.$user_obj->getLogin().'<br />';
00950                 $body .= $this->lng->txt('role').': ';
00951 
00952                 switch($this->member_data['role'])
00953                 {
00954                         case $this->ROLE_MEMBER:
00955                                 $body .= $this->lng->txt('crs_member').'<br />';
00956                                 break;
00957 
00958                         case $this->ROLE_TUTOR:
00959                                 $body .= $this->lng->txt('crs_tutor').'<br />';
00960                                 break;
00961 
00962                         case $this->ROLE_ADMIN:
00963                                 $body .= $this->lng->txt('crs_admin').'<br />';
00964                                 break;
00965                 }
00966                 $body .= $this->lng->txt('status').': ';
00967                 switch($this->member_data['status'])
00968                 {
00969                         case $this->STATUS_NOTIFY:
00970                                 $body .= $this->lng->txt("crs_notify").'<br />';
00971                                 break;
00972 
00973                         case $this->STATUS_NO_NOTIFY:
00974                                 $body .= $this->lng->txt("crs_no_notify").'<br />';
00975                                 break;
00976 
00977                         case $this->STATUS_BLOCKED:
00978                                 $body .= $this->lng->txt("crs_blocked").'<br />';
00979                                 break;
00980 
00981                         case $this->STATUS_UNBLOCKED:
00982                                 $body .= $this->lng->txt("crs_unblocked").'<br />';
00983                                 break;
00984                 }
00985                 $passed = $this->member_data['passed'] ? $this->lng->txt('yes') : $this->lng->txt('no');
00986                 $body .= $this->lng->txt('crs_passed').': '.$passed.'<br />';
00987 
00988                 return $body;
00989         }
00990 
00999         function _isMember($a_usr_id,$a_course_id,$a_field = '')
01000         {
01001                 global $ilUser,$ilDB;
01002 
01003                 // get specific user data
01004                 $tmp_user =& ilObjectFactory::getInstanceByObjId($a_usr_id);
01005                 switch($a_field)
01006                 {
01007                         case 'login':
01008                                 $and = "AND login = '".$tmp_user->getLogin()."' ";
01009                                 break;
01010                         case 'email':
01011                                 $and = "AND email = '".$tmp_user->getEmail()."' ";
01012                                 break;
01013                         case 'matriculation':
01014                                 $and = "AND matriculation = '".$tmp_user->getMatriculation()."' ";
01015                                 break;
01016 
01017                         default:
01018                                 $and = "AND cm.usr_id = '".$a_usr_id."'";
01019                                 break;
01020                 }
01021 
01022                 // check if entry exists
01023                 $query = "SELECT * FROM crs_members as cm, usr_data as ud ".
01024                         "WHERE cm.usr_id = ud.usr_id ".
01025                         "AND cm.obj_id = '".$a_course_id."' ".
01026                         $and;
01027 
01028 
01029                 $res = $ilDB->query($query);
01030 
01031                 return $res->numRows() ? true : false;
01032         }
01033 
01034         function _getMembers($a_obj_id)
01035         {
01036                 global $ilDB;
01037                 // In the moment all users that have entries in crs_members
01038                 
01039                 $query = "SELECT DISTINCT(crs_members.usr_id) AS usr_id FROM crs_members JOIN usr_data ".
01040                         "WHERE crs_members.usr_id = usr_data.usr_id ".
01041                         "AND obj_id = '".$a_obj_id."'";
01042 
01043                 $res = $ilDB->query($query);
01044                 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
01045                 {
01046                         $usr_ids[] = $row->usr_id;
01047                 }
01048                 return $usr_ids ? $usr_ids : array();
01049         }
01050 
01051 }
01052 ?>

Generated on Fri Dec 13 2013 11:57:58 for ILIAS Release_3_6_x_branch .rev 46809 by  doxygen 1.7.1