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