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
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
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
00211
00212
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
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
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
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
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
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
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
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
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 ?>