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

Generated on Fri Dec 13 2013 09:06:36 for ILIAS Release_3_4_x_branch .rev 46804 by  doxygen 1.7.1