00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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
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
00210
00211
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
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
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
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
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
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
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
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
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
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
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
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 ?>