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

Generated on Fri Dec 13 2013 10:18:30 for ILIAS Release_3_5_x_branch .rev 46805 by  doxygen 1.7.1