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 require_once "./classes/class.ilContainer.php";
00036
00037 class ilObjCourse extends ilContainer
00038 {
00039 var $members_obj;
00040 var $archives_obj;
00041 var $items_obj;
00042
00049 function ilObjCourse($a_id = 0,$a_call_by_reference = true)
00050 {
00051 #define("ILIAS_MODULE","course");
00052 #define("KEEP_IMAGE_PATH",1);
00053
00054 $this->SUBSCRIPTION_DEACTIVATED = 1;
00055 $this->SUBSCRIPTION_CONFIRMATION = 2;
00056 $this->SUBSCRIPTION_DIRECT = 3;
00057 $this->SUBSCRIPTION_PASSWORD = 4;
00058 $this->SUBSCRIPTION_AUTOSUBSCRIPTION = 5;
00059 $this->SORT_MANUAL = 1;
00060 $this->SORT_TITLE = 2;
00061 $this->SORT_ACTIVATION = 3;
00062 $this->ARCHIVE_DISABLED = 1;
00063 $this->ARCHIVE_READ = 2;
00064 $this->ARCHIVE_DOWNLOAD = 3;
00065 $this->ABO_ENABLED = 1;
00066 $this->ABO_DISABLED = 0;
00067
00068 $this->type = "crs";
00069 $this->ilObject($a_id,$a_call_by_reference);
00070
00071 if($a_id)
00072 {
00073 #$this->__initMetaObject();
00074 $this->initCourseMemberObject();
00075 }
00076 else
00077 {
00078
00079 }
00080
00081 }
00082
00083
00084 function setId($a_id)
00085 {
00086 parent::setId($a_id);
00087
00088
00089 #$this->__initMetaObject();
00090 }
00091
00092
00093 function getDescription()
00094 {
00095 return parent::getDescription();
00096 }
00097 function setDescription($a_description)
00098 {
00099 parent::setDescription($a_description);
00100
00101
00102
00103
00104 return true;
00105 }
00106 function getTitle()
00107 {
00108 return parent::getTitle();
00109 }
00110 function setTitle($a_title)
00111 {
00112 parent::setTitle($a_title);
00113
00114
00115 }
00116 function getSyllabus()
00117 {
00118 return $this->syllabus;
00119 }
00120 function setSyllabus($a_syllabus)
00121 {
00122 $this->syllabus = $a_syllabus;
00123 }
00124 function getContactName()
00125 {
00126 return $this->contact_name;
00127 }
00128 function setContactName($a_cn)
00129 {
00130 $this->contact_name = $a_cn;
00131 }
00132 function getContactConsultation()
00133 {
00134 return $this->contact_consultation;
00135 }
00136 function setContactConsultation($a_value)
00137 {
00138 $this->contact_consultation = $a_value;
00139 }
00140 function getContactPhone()
00141 {
00142 return $this->contact_phone;
00143 }
00144 function setContactPhone($a_value)
00145 {
00146 $this->contact_phone = $a_value;
00147 }
00148 function getcontactEmail()
00149 {
00150 return $this->contact_email;
00151 }
00152 function setContactEmail($a_value)
00153 {
00154 $this->contact_email = $a_value;
00155 }
00156 function getContactResponsibility()
00157 {
00158 return $this->contact_responsibility;
00159 }
00160 function setContactResponsibility($a_value)
00161 {
00162 $this->contact_responsibility = $a_value;
00163 }
00164 function getActivationUnlimitedStatus()
00165 {
00166 return $this->activation_unlimited ? true : false;
00167 }
00168 function setActivationUnlimitedStatus($a_unlimited)
00169 {
00170 $this->activation_unlimited = (bool) $a_unlimited;
00171 }
00172 function getActivationStart()
00173 {
00174 return $this->activation_start ? $this->activation_start : time();
00175 }
00176 function setActivationStart($a_value)
00177 {
00178 $this->activation_start = $a_value;
00179 }
00180 function getActivationEnd()
00181 {
00182 return $this->activation_end ? $this->activation_end : mktime(0,0,0,12,12,date("Y",time())+2);
00183 }
00184 function setActivationEnd($a_value)
00185 {
00186 $this->activation_end = $a_value;
00187 }
00188 function getOfflineStatus()
00189 {
00190 return $this->offline_status ? true : false;
00191 }
00192 function setOfflineStatus($a_value)
00193 {
00194 $this->offline_status = $a_value ? true : false;
00195 }
00196 function getSubscriptionUnlimitedStatus()
00197 {
00198 return $this->subscription_unlimited ? true : false;
00199 }
00200 function setSubscriptionUnlimitedStatus($a_unlimited)
00201 {
00202 $this->subscription_unlimited = (bool) $a_unlimited;
00203 }
00204 function getSubscriptionStart()
00205 {
00206 return $this->subscription_start ? $this->subscription_start : time();
00207 }
00208 function setSubscriptionStart($a_value)
00209 {
00210 $this->subscription_start = $a_value;
00211 }
00212 function getSubscriptionEnd()
00213 {
00214 return $this->subscription_end ? $this->subscription_end : mktime(0,0,0,12,12,date("Y",time())+2);
00215 }
00216 function getSubscriptionType()
00217 {
00218 return $this->subscription_type ? $this->subscription_type : $this->SUBSCRIPTION_DEACTIVATED;
00219 }
00220 function setSubscriptionType($a_value)
00221 {
00222 $this->subscription_type = $a_value;
00223 }
00224 function setSubscriptionEnd($a_value)
00225 {
00226 $this->subscription_end = $a_value;
00227 }
00228 function getSubscriptionPassword()
00229 {
00230 return $this->subscription_password;
00231 }
00232 function setSubscriptionPassword($a_value)
00233 {
00234 $this->subscription_password = $a_value;
00235 }
00236 function setObjectiveViewStatus($a_status)
00237 {
00238 $this->objective_view = $a_status;
00239 }
00240 function enabledObjectiveView()
00241 {
00242 return (bool) $this->objective_view;
00243 }
00244
00245 function enabledWaitingList()
00246 {
00247 return (bool) $this->waiting_list;
00248 }
00249
00250 function enableWaitingList($a_status)
00251 {
00252 $this->waiting_list = (bool) $a_status;
00253 }
00254
00255 function inSubscriptionTime()
00256 {
00257 if($this->getSubscriptionUnlimitedStatus())
00258 {
00259 return true;
00260 }
00261 if(time() > $this->getSubscriptionStart() and time() < $this->getSubscriptionEnd())
00262 {
00263 return true;
00264 }
00265 return false;
00266 }
00267
00268 function getSubscriptionMaxMembers()
00269 {
00270 return $this->subscription_max_members;
00271 }
00272 function setSubscriptionMaxMembers($a_value)
00273 {
00274 $this->subscription_max_members = $a_value;
00275 }
00276 function getSubscriptionNotify()
00277 {
00278 return $this->subscription_notify ? true : false;
00279 }
00280 function setSubscriptionNotify($a_value)
00281 {
00282 $this->subscription_notify = $a_value ? true : false;
00283 }
00284 function getOrderType()
00285 {
00286 return $this->order_type ? $this->order_type : $this->SORT_TITLE;
00287 }
00288 function setOrderType($a_value)
00289 {
00290 $this->order_type = $a_value;
00291 }
00292 function getArchiveStart()
00293 {
00294 return $this->archive_start ? $this->archive_start : time();
00295 }
00296 function setArchiveStart($a_value)
00297 {
00298 $this->archive_start = $a_value;
00299 }
00300 function getArchiveEnd()
00301 {
00302 return $this->archive_end ? $this->archive_end : mktime(0,0,0,12,12,date("Y",time())+2);
00303 }
00304 function setArchiveEnd($a_value)
00305 {
00306 $this->archive_end = $a_value;
00307 }
00308 function getArchiveType()
00309 {
00310 return $this->archive_type ? $this->archive_type : $this->ARCHIVE_DISABLED;
00311 }
00312 function setArchiveType($a_value)
00313 {
00314 $this->archive_type = $a_value;
00315 }
00316 function setAboStatus($a_status)
00317 {
00318 $this->abo = $a_status;
00319 }
00320 function getAboStatus()
00321 {
00322 return $this->abo;
00323 }
00324
00325 function getMessage()
00326 {
00327 return $this->message;
00328 }
00329 function setMessage($a_message)
00330 {
00331 $this->message = $a_message;
00332 }
00333 function appendMessage($a_message)
00334 {
00335 if($this->getMessage())
00336 {
00337 $this->message .= "<br /> ";
00338 }
00339 $this->message .= $a_message;
00340 }
00341
00342 function getMembers()
00343 {
00344 return $this->members_obj->getMembers();
00345 }
00346
00347
00348 function isActivated($a_check_archive = false)
00349 {
00350 if($a_check_archive)
00351 {
00352 if($this->isArchived())
00353 {
00354 return true;
00355 }
00356 }
00357 if($this->getOfflineStatus())
00358 {
00359 return false;
00360 }
00361 if($this->getActivationUnlimitedStatus())
00362 {
00363 return true;
00364 }
00365 if(time() < $this->getActivationStart() or
00366 time() > $this->getActivationEnd())
00367 {
00368 return false;
00369 }
00370 return true;
00371 }
00372
00379 function _isActivated($a_obj_id)
00380 {
00381 global $ilDB;
00382
00383 $query = "SELECT * FROM crs_settings ".
00384 "WHERE obj_id = '".$a_obj_id."'";
00385
00386 $res = $ilDB->query($query);
00387 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00388 {
00389 $offline = $row->activation_offline;
00390 $unlimited = $row->activation_unlimited;
00391 $start = $row->activation_start;
00392 $end = $row->activation_end;
00393 }
00394 if($offline)
00395 {
00396 return false;
00397 }
00398 if($unlimited)
00399 {
00400 return true;
00401 }
00402 if(time() < $start or
00403 time() > $end)
00404 {
00405 return false;
00406 }
00407 return true;
00408 }
00409
00410 function _registrationEnabled($a_obj_id)
00411 {
00412 global $ilDB;
00413
00414 $query = "SELECT * FROM crs_settings ".
00415 "WHERE obj_id = '".$a_obj_id."'";
00416
00417 $res = $ilDB->query($query);
00418 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00419 {
00420 $reg_unlimited = $row->subscription_unlimited;
00421 $reg_start = $row->subscription_start;
00422 $reg_end = $row->subscription_end;
00423 $reg_type = $row->subscription_type;
00424 }
00425
00426 if($reg_type == 1)
00427 {
00428 return false;
00429 }
00430 if($reg_unlimited)
00431 {
00432 return true;
00433 }
00434 if(time() > $reg_start and time() < $reg_end)
00435 {
00436 return true;
00437 }
00438 return false;
00439 }
00440
00441 function isArchived()
00442 {
00443 if($this->getArchiveType() == $this->ARCHIVE_DISABLED)
00444 {
00445 return false;
00446 }
00447 if(time() < $this->getArchiveStart() or time() > $this->getArchiveEnd())
00448 {
00449 return false;
00450 }
00451 return true;
00452 }
00453
00454 function allowAbo()
00455 {
00456 return $this->ABO == $this->ABO_ENABLED;
00457 }
00458
00459 function read($a_force_db = false)
00460 {
00461 parent::read($a_force_db);
00462
00463 $this->__readSettings();
00464 }
00465 function create($a_upload = false)
00466 {
00467 parent::create($a_upload);
00468
00469 if(!$a_upload)
00470 {
00471 $this->createMetaData();
00472 }
00473 $this->__createDefaultSettings();
00474 }
00475
00476 function validate()
00477 {
00478 $this->initCourseMemberObject();
00479
00480 $this->setMessage('');
00481
00482 if(!$this->getSubscriptionType())
00483 {
00484 $this->appendMessage($this->lng->txt('crs_select_registration_type'));
00485 }
00486
00487 if(!$this->getActivationUnlimitedStatus() and $this->getActivationEnd() < $this->getActivationStart())
00488 {
00489 $this->appendMessage($this->lng->txt("activation_times_not_valid"));
00490 }
00491 if(!$this->getSubscriptionUnlimitedStatus() and $this->getSubscriptionStart() > $this->getSubscriptionEnd())
00492 {
00493 $this->appendMessage($this->lng->txt("subscription_times_not_valid"));
00494 }
00495 #if((!$this->getActivationUnlimitedStatus() and
00496 # !$this->getSubscriptionUnlimitedStatus()) and
00497 # ($this->getSubscriptionStart() > $this->getActivationEnd() or
00498 # $this->getSubscriptionStart() < $this->getActivationStart() or
00499 # $this->getSubscriptionEnd() > $this->getActivationEnd() or
00500 # $this->getSubscriptionEnd() < $this->getActivationStart()))
00501 #
00502 #{
00503 # $this->appendMessage($this->lng->txt("subscription_time_not_within_activation"));
00504 #}
00505 if($this->getSubscriptionType() == $this->SUBSCRIPTION_PASSWORD and !$this->getSubscriptionPassword())
00506 {
00507 $this->appendMessage($this->lng->txt("crs_password_required"));
00508 }
00509 if($this->getSubscriptionMaxMembers() and !is_numeric($this->getSubscriptionMaxMembers()))
00510 {
00511 $this->appendMessage($this->lng->txt("max_members_not_numeric"));
00512 }
00513 #if($this->getSubscriptionMaxMembers() and
00514 # $this->getSubscriptionMaxMembers() < $this->members_obj->getCountMembers())
00515 #{
00516 # $this->appendMessage($this->lng->txt("crs_max_members_smaller_members"));
00517 #}
00518 if($this->getArchiveStart() > $this->getArchiveEnd())
00519 {
00520 $this->appendMessage($this->lng->txt("archive_times_not_valid"));
00521 }
00522 if($this->getContactEmail() and
00523 !(ilUtil::is_email($this->getContactEmail()) or
00524 ilObjUser::getUserIdByLogin($this->getContactEmail())))
00525 {
00526 $this->appendMessage($this->lng->txt("contact_email_not_valid"));
00527 }
00528 return $this->getMessage() ? false : true;
00529 }
00530
00537 function ilClone($a_parent_ref)
00538 {
00539 global $rbacadmin;
00540
00541
00542 $new_ref_id = parent::ilClone($a_parent_ref);
00543
00544
00545 $new_course =& ilObjectFactory::getInstanceByRefId($new_ref_id);
00546
00547 $new_course->initDefaultRoles();
00548 $new_course->initCourseMemberObject();
00549 $new_course->members_obj->add($this->ilias->account,$new_course->members_obj->ROLE_ADMIN);
00550 $new_course->__createDefaultSettings();
00551
00552
00553 $new_course->setSyllabus($this->getSyllabus());
00554 $new_course->setContactName($this->getContactName());
00555 $new_course->setContactConsultation($this->getContactConsultation());
00556 $new_course->setContactPhone($this->getContactPhone());
00557 $new_course->setContactEmail($this->getContactEmail());
00558 $new_course->setContactResponsibility($this->getContactResponsibility());
00559
00560 $new_course->setActivationUnlimitedStatus($this->getActivationUnlimitedStatus());
00561 $new_course->setActivationStart($this->getActivationStart());
00562 $new_course->setActivationEnd($this->getActivationEnd());
00563 $new_course->setOfflineStatus($this->getOfflineStatus());
00564
00565 $new_course->setSubscriptionUnlimitedStatus($this->getSubscriptionUnlimitedStatus());
00566 $new_course->setSubscriptionStart($this->getSubscriptionStart());
00567 $new_course->setSubscriptionEnd($this->getSubscriptionEnd());
00568 $new_course->setSubscriptionType($this->getSubscriptionType());
00569 $new_course->setSubscriptionPassword($this->getSubscriptionPassword());
00570 $new_course->setSubscriptionMaxMembers($this->getSubscriptionMaxMembers());
00571 $new_course->setSubscriptionNotify($this->getSubscriptionNotify());
00572 $new_course->enableWaitingList($this->enableWaitingList());
00573 $new_course->setOrderType($this->getOrderType());
00574 $new_course->setArchiveStart($this->getArchiveStart());
00575 $new_course->setArchiveEnd($this->getArchiveEnd());
00576 $new_course->setArchiveType($this->getArchiveType());
00577 $new_course->setAboStatus($this->getAboStatus());
00578 $new_course->setObjectiveViewStatus($this->enabledObjectiveView());
00579
00580 $new_course->update();
00581
00582
00583 return $new_ref_id;
00584 }
00585
00592 function delete()
00593 {
00594
00595 if (!parent::delete())
00596 {
00597 return false;
00598 }
00599
00600
00601
00602 $this->deleteMetaData();
00603
00604
00605
00606 $this->__deleteSettings();
00607
00608 $this->initCourseItemObject();
00609 $this->items_obj->deleteAllEntries();
00610
00611 $this->initCourseMemberObject();
00612 $this->members_obj->deleteAllEntries();
00613
00614 $this->initCourseArchiveObject();
00615 $this->archives_obj->deleteAll();
00616
00617 include_once './course/classes/class.ilCourseObjective.php';
00618
00619 ilCourseObjective::_deleteAll($this->getId());
00620
00621 include_once './course/classes/class.ilObjCourseGrouping.php';
00622
00623 ilObjCourseGrouping::_deleteAll($this->getId());
00624
00625 return true;
00626 }
00627
00638 function notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params = 0)
00639 {
00640 global $tree;
00641
00642 switch ($a_event)
00643 {
00644 case "link":
00645
00646 break;
00647
00648 case "cut":
00649
00650 break;
00651
00652 case "copy":
00653
00654 break;
00655
00656 case "paste":
00657
00658 break;
00659
00660 case "new":
00661
00662 break;
00663 }
00664
00665
00666 if ($a_node_id==$_GET["ref_id"])
00667 {
00668 $parent_obj =& $this->ilias->obj_factory->getInstanceByRefId($a_node_id);
00669 $parent_type = $parent_obj->getType();
00670 if($parent_type == $this->getType())
00671 {
00672 $a_node_id = (int) $tree->getParentId($a_node_id);
00673 }
00674 }
00675
00676 parent::notify($a_event,$a_ref_id,$a_parent_non_rbac_id,$a_node_id,$a_params);
00677 }
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00719 function update()
00720 {
00721 $this->updateMetaData();
00722 $this->updateSettings();
00723 parent::update();
00724 }
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749 function updateSettings()
00750 {
00751 global $ilDB;
00752
00753
00754
00755 $query = "SELECT * FROM crs_settings WHERE obj_id = '".$this->getId()."'";
00756 $res = $ilDB->query($query);
00757
00758 if(!$res->numRows())
00759 {
00760 $this->__createDefaultSettings();
00761 }
00762
00763 $query = "UPDATE crs_settings SET ".
00764 "syllabus = '".ilUtil::prepareDBString($this->getSyllabus())."', ".
00765 "contact_name = '".ilUtil::prepareDBString($this->getContactName())."', ".
00766 "contact_responsibility = '".ilUtil::prepareDBString($this->getContactResponsibility())."', ".
00767 "contact_phone = '".ilUtil::prepareDBString($this->getContactPhone())."', ".
00768 "contact_email = '".ilUtil::prepareDBString($this->getContactEmail())."', ".
00769 "contact_consultation = '".ilUtil::prepareDBString($this->getContactConsultation())."', ".
00770 "activation_unlimited = '".(int) $this->getActivationUnlimitedStatus()."', ".
00771 "activation_start = '".$this->getActivationStart()."', ".
00772 "activation_end = '".$this->getActivationEnd()."', ".
00773 "activation_offline = '".(int) $this->getOfflineStatus()."', ".
00774 "subscription_unlimited = '".(int) $this->getSubscriptionUnlimitedStatus()."', ".
00775 "subscription_start = '".$this->getSubscriptionStart()."', ".
00776 "subscription_end = '".$this->getSubscriptionEnd()."', ".
00777 "subscription_type = '".(int) $this->getSubscriptionType()."', ".
00778 "subscription_password = '".ilUtil::prepareDBString($this->getSubscriptionPassword())."', ".
00779 "subscription_max_members = '".(int) $this->getSubscriptionMaxMembers()."', ".
00780 "subscription_notify = '".(int) $this->getSubscriptionNotify()."', ".
00781 "sortorder = '".(int) $this->getOrderType()."', ".
00782 "archive_start = '".$this->getArchiveStart()."', ".
00783 "archive_end = '".$this->getArchiveEnd()."', ".
00784 "archive_type = '".(int) $this->getArchiveType()."', ".
00785 "abo = '".(int) $this->getAboStatus()."', ".
00786 "objective_view = '".(int) $this->enabledObjectiveView()."', ".
00787 "waiting_list = '".(int) $this->enabledWaitingList()."' ".
00788 "WHERE obj_id = '".$this->getId()."'";
00789
00790 $res = $ilDB->query($query);
00791 }
00792
00793 function __createDefaultSettings()
00794 {
00795 global $ilDB;
00796
00797 $query = "INSERT INTO crs_settings SET ".
00798 "obj_id = '".$this->getId()."', ".
00799 "syllabus = '".ilUtil::prepareDBString($this->getSyllabus())."', ".
00800 "contact_name = '".ilUtil::prepareDBString($this->getContactName())."', ".
00801 "contact_responsibility = '".ilUtil::prepareDBString($this->getContactResponsibility())."', ".
00802 "contact_phone = '".ilUtil::prepareDBString($this->getContactPhone())."', ".
00803 "contact_email = '".ilUtil::prepareDBString($this->getContactEmail())."', ".
00804 "contact_consultation = '".ilUtil::prepareDBString($this->getContactConsultation())."', ".
00805 "activation_unlimited = '1', ".
00806 "activation_start = '".$this->getActivationStart()."', ".
00807 "activation_end = '".$this->getActivationEnd()."', ".
00808 "activation_offline = '1', ".
00809 "subscription_unlimited = '1', ".
00810 "subscription_start = '".$this->getSubscriptionStart()."', ".
00811 "subscription_end = '".$this->getSubscriptionEnd()."', ".
00812 "subscription_type = '".(int) $this->SUBSCRIPTION_DEACTIVATED."', ".
00813 "subscription_password = '".ilUtil::prepareDBString($this->getSubscriptionPassword())."', ".
00814 "subscription_max_members = '".(int) $this->getSubscriptionMaxMembers()."', ".
00815 "subscription_notify = '1', ".
00816 "sortorder = '".(int) $this->SORT_MANUAL."', ".
00817 "archive_start = '".$this->getArchiveStart()."', ".
00818 "archive_end = '".$this->getArchiveEnd()."', ".
00819 "archive_type = '".(int) $this->ARCHIVE_DISABLED."', ".
00820 "abo = '".(int) $this->ABO_ENABLED."', ".
00821 "objective_view = '0', ".
00822 "waiting_list = '1'";
00823
00824 $res = $ilDB->query($query);
00825 }
00826
00827
00828 function __readSettings()
00829 {
00830 global $ilDB;
00831
00832 $query = "SELECT * FROM crs_settings WHERE obj_id = '".$this->getId()."'";
00833
00834 $res = $ilDB->query($query);
00835 while($row = $res->fetchRow(DB_FETCHMODE_OBJECT))
00836 {
00837 $this->setSyllabus($row->syllabus);
00838 $this->setContactName($row->contact_name);
00839 $this->setContactResponsibility($row->contact_responsibility);
00840 $this->setContactPhone($row->contact_phone);
00841 $this->setContactEmail($row->contact_email);
00842 $this->setContactConsultation($row->contact_consultation);
00843 $this->setActivationUnlimitedStatus($row->activation_unlimited);
00844 $this->setActivationStart($row->activation_start);
00845 $this->setActivationEnd($row->activation_end);
00846 $this->setOfflineStatus($row->activation_offline);
00847 $this->setSubscriptionUnlimitedStatus($row->subscription_unlimited);
00848 $this->setSubscriptionStart($row->subscription_start);
00849 $this->setSubscriptionEnd($row->subscription_end);
00850 $this->setSubscriptionType($row->subscription_type);
00851 $this->setSubscriptionPassword($row->subscription_password);
00852 $this->setSubscriptionMaxMembers($row->subscription_max_members);
00853 $this->setSubscriptionNotify($row->subscription_notify);
00854 $this->setOrderType($row->sortorder);
00855 $this->setArchiveStart($row->archive_start);
00856 $this->setArchiveEnd($row->archive_end);
00857 $this->setArchiveType($row->archive_type);
00858 $this->setAboStatus($row->abo);
00859 $this->setObjectiveViewStatus($row->objective_view);
00860 $this->enableWaitingList($row->waiting_list);
00861 }
00862 return true;
00863 }
00864
00865 function initWaitingList()
00866 {
00867 include_once "./course/classes/class.ilCourseWaitingList.php";
00868
00869 if(!is_object($this->waiting_list_obj))
00870 {
00871 $this->waiting_list_obj =& new ilCourseWaitingList($this->getId());
00872 }
00873 return true;
00874 }
00875
00876
00877 function initCourseMemberObject()
00878 {
00879 include_once "./course/classes/class.ilCourseMembers.php";
00880
00881 if(!is_object($this->members_obj))
00882 {
00883 $this->members_obj =& new ilCourseMembers($this);
00884 }
00885 return true;
00886 }
00887
00888 function initCourseItemObject($a_child_id = 0)
00889 {
00890 include_once "./course/classes/class.ilCourseItems.php";
00891
00892 if(!is_object($this->items_obj))
00893 {
00894 $this->items_obj =& new ilCourseItems($this,$a_child_id);
00895 }
00896 return true;
00897 }
00898
00899 function initCourseArchiveObject()
00900 {
00901 include_once "./course/classes/class.ilCourseArchives.php";
00902
00903 if(!is_object($this->archives_obj))
00904 {
00905 $this->archives_obj =& new ilCourseArchives($this);
00906 }
00907 return true;
00908 }
00909
00910
00911
00912
00913 function initDefaultRoles()
00914 {
00915 global $rbacadmin,$rbacreview;
00916
00917 $rolf_obj = $this->createRoleFolder();
00918
00919
00920 $role_obj = $rolf_obj->createRole("il_crs_admin_".$this->getRefId(),"Admin of course obj_no.".$this->getId());
00921 $admin_id = $role_obj->getId();
00922
00923
00924 $query = "SELECT obj_id FROM object_data ".
00925 " WHERE type='rolt' AND title='il_crs_admin'";
00926
00927 $res = $this->ilias->db->getRow($query, DB_FETCHMODE_OBJECT);
00928 $rbacadmin->copyRolePermission($res->obj_id,ROLE_FOLDER_ID,$rolf_obj->getRefId(),$role_obj->getId());
00929
00930
00931 $ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"crs",$rolf_obj->getRefId());
00932 $rbacadmin->grantPermission($role_obj->getId(),$ops,$this->getRefId());
00933
00934
00935
00936
00937
00938
00939
00940 $role_obj = $rolf_obj->createRole("il_crs_tutor_".$this->getRefId(),"Tutors of course obj_no.".$this->getId());
00941 $member_id = $role_obj->getId();
00942
00943
00944 $query = "SELECT obj_id FROM object_data ".
00945 " WHERE type='rolt' AND title='il_crs_tutor'";
00946 $res = $this->ilias->db->getRow($query, DB_FETCHMODE_OBJECT);
00947 $rbacadmin->copyRolePermission($res->obj_id,ROLE_FOLDER_ID,$rolf_obj->getRefId(),$role_obj->getId());
00948
00949
00950 $ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"crs",$rolf_obj->getRefId());
00951 $rbacadmin->grantPermission($role_obj->getId(),$ops,$this->getRefId());
00952
00953
00954
00955
00956
00957
00958
00959 $role_obj = $rolf_obj->createRole("il_crs_member_".$this->getRefId(),"Member of course obj_no.".$this->getId());
00960 $member_id = $role_obj->getId();
00961
00962
00963 $query = "SELECT obj_id FROM object_data ".
00964 " WHERE type='rolt' AND title='il_crs_member'";
00965 $res = $this->ilias->db->getRow($query, DB_FETCHMODE_OBJECT);
00966 $rbacadmin->copyRolePermission($res->obj_id,ROLE_FOLDER_ID,$rolf_obj->getRefId(),$role_obj->getId());
00967
00968
00969 $ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"crs",$rolf_obj->getRefId());
00970 $rbacadmin->grantPermission($role_obj->getId(),$ops,$this->getRefId());
00971
00972
00973
00974
00975
00976 unset($role_obj);
00977 unset($rolf_obj);
00978
00979
00980
00981 $this->__setCourseStatus();
00982
00983 return true;
00984 }
00985
01002 function __setCourseStatus()
01003 {
01004 global $rbacadmin, $rbacreview, $rbacsystem;
01005
01006
01007 $rolf_data = $rbacreview->getRoleFolderOfObject($this->getRefId());
01008
01009
01010 $arr_parentRoles = $rbacreview->getParentRoleIds($this->getRefId());
01011 $arr_relevantParentRoleIds = array_diff(array_keys($arr_parentRoles),$this->__getDefaultCourseRoles());
01012
01013 $template_id = $this->__getCrsNonMemberTemplateId();
01014
01015
01016 if (is_null($template_id))
01017 {
01018 $template_ops = array();
01019 } else {
01020 $template_ops = $rbacreview->getOperationsOfRole($template_id, 'crs', ROLE_FOLDER_ID);
01021 }
01022
01023 foreach ($arr_relevantParentRoleIds as $parentRole)
01024 {
01025 if ($rbacreview->isProtected($arr_parentRoles[$parentRole]['parent'],$parentRole))
01026 {
01027 continue;
01028 }
01029
01030 $granted_permissions = array();
01031
01032
01033
01034 $rbacadmin->deleteLocalRole($parentRole,$rolf_data["child"]);
01035
01036
01037
01038
01039
01040
01041 $current_ops = $rbacreview->getRoleOperationsOnObject($parentRole, $this->getRefId());
01042 $rbacadmin->revokePermission($this->getRefId(), $parentRole);
01043 foreach ($template_ops as $template_op)
01044 {
01045 if (in_array($template_op,$current_ops))
01046 {
01047 array_push($granted_permissions,$template_op);
01048 }
01049 }
01050 if (!empty($granted_permissions))
01051 {
01052 $rbacadmin->grantPermission($parentRole, $granted_permissions, $this->getRefId());
01053 }
01054
01055
01056
01057
01058
01059 if (! is_null($template_id))
01060 {
01061 $rbacadmin->copyRolePermissionIntersection(
01062 $template_id, ROLE_FOLDER_ID,
01063 $parentRole, $arr_parentRoles[$parentRole]['parent'],
01064 $rolf_data["child"], $parentRole
01065 );
01066 }
01067 $rbacadmin->assignRoleToFolder($parentRole,$rolf_data["child"],"false");
01068 }
01069 }
01070
01077 function __getCrsNonMemberTemplateId()
01078 {
01079 $q = "SELECT obj_id FROM object_data WHERE type='rolt' AND title='il_crs_non_member'";
01080 $res = $this->ilias->db->query($q);
01081 $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
01082
01083 return $row["obj_id"];
01084 }
01085
01086
01096 function __getDefaultCourseRoles($a_crs_id="")
01097 {
01098 global $rbacadmin, $rbacreview;
01099
01100 if (strlen($a_crs_id) > 0)
01101 {
01102 $crs_id = $a_crs_id;
01103 }
01104 else
01105 {
01106 $crs_id = $this->getRefId();
01107 }
01108
01109 $rolf = $rbacreview->getRoleFolderOfObject($crs_id);
01110 $role_arr = $rbacreview->getRolesOfRoleFolder($rolf["ref_id"]);
01111
01112 foreach ($role_arr as $role_id)
01113 {
01114 $role_Obj =& $this->ilias->obj_factory->getInstanceByObjId($role_id);
01115
01116 $crs_Member ="il_crs_member_".$crs_id;
01117 $crs_Admin ="il_crs_admin_".$crs_id;
01118 $crs_Tutor ="il_crs_tutor_".$crs_id;
01119
01120 if (strcmp($role_Obj->getTitle(), $crs_Member) == 0 )
01121 {
01122 $arr_crsDefaultRoles["crs_member_role"] = $role_Obj->getId();
01123 }
01124
01125 if (strcmp($role_Obj->getTitle(), $crs_Admin) == 0)
01126 {
01127 $arr_crsDefaultRoles["crs_admin_role"] = $role_Obj->getId();
01128 }
01129
01130 if (strcmp($role_Obj->getTitle(), $crs_Tutor) == 0)
01131 {
01132 $arr_crsDefaultRoles["crs_tutor_role"] = $role_Obj->getId();
01133 }
01134 }
01135
01136 return $arr_crsDefaultRoles;
01137 }
01138
01139 function __getLocalRoles()
01140 {
01141 global $rbacreview;
01142
01143
01144
01145 $rolf = $rbacreview->getRoleFolderOfObject($this->getRefId());
01146
01147 return $rbacreview->getRolesOfRoleFolder($rolf["ref_id"],false);
01148 }
01149
01150 function __deleteSettings()
01151 {
01152 $query = "DELETE FROM crs_settings ".
01153 "WHERE obj_id = '".$this->getId()."'";
01154
01155 $this->ilias->db->query($query);
01156
01157 return true;
01158 }
01159
01160 function getDefaultMemberRole()
01161 {
01162 $local_roles = $this->__getLocalRoles();
01163
01164 foreach($local_roles as $role_id)
01165 {
01166 if($tmp_role =& ilObjectFactory::getInstanceByObjId($role_id,false))
01167 {
01168 if(!strcmp($tmp_role->getTitle(),"il_crs_member_".$this->getRefId()))
01169 {
01170 return $role_id;
01171 }
01172 }
01173 }
01174 return false;
01175 }
01176 function getDefaultTutorRole()
01177 {
01178 $local_roles = $this->__getLocalRoles();
01179
01180 foreach($local_roles as $role_id)
01181 {
01182 if($tmp_role =& ilObjectFactory::getInstanceByObjId($role_id,false))
01183 {
01184 if(!strcmp($tmp_role->getTitle(),"il_crs_tutor_".$this->getRefId()))
01185 {
01186 return $role_id;
01187 }
01188 }
01189 }
01190 return false;
01191 }
01192 function getDefaultAdminRole()
01193 {
01194 $local_roles = $this->__getLocalRoles();
01195
01196 foreach($local_roles as $role_id)
01197 {
01198 if($tmp_role =& ilObjectFactory::getInstanceByObjId($role_id,false))
01199 {
01200 if(!strcmp($tmp_role->getTitle(),"il_crs_admin_".$this->getRefId()))
01201 {
01202 return $role_id;
01203 }
01204 }
01205 }
01206 return false;
01207 }
01208
01209
01210 function _checkCondition($a_obj_id,$a_operator,$a_value)
01211 {
01212 global $ilias;
01213
01214 include_once "./course/classes/class.ilCourseMembers.php";
01215
01216 switch($a_operator)
01217 {
01218 case 'passed':
01219 return ilCourseMembers::_hasPassed($a_obj_id,$ilias->account->getId());
01220
01221 default:
01222 return true;
01223 }
01224 }
01225
01226 function _deleteUser($a_usr_id)
01227 {
01228
01229
01230 include_once './course/classes/class.ilCourseLMHistory.php';
01231 ilCourseLMHistory::_deleteUser($a_usr_id);
01232
01233 include_once './course/classes/class.ilCourseMembers.php';
01234 ilCourseMembers::_deleteUser($a_usr_id);
01235
01236
01237 include_once './course/classes/class.ilCourseObjectiveResult.php';
01238 ilCourseObjectiveResult::_deleteUser($a_usr_id);
01239 }
01240
01241 function _goto($a_target)
01242 {
01243 global $ilAccess, $ilErr, $lng;
01244
01245 if ($ilAccess->checkAccess("read", "", $a_target))
01246 {
01247 $_GET["cmd"] = "frameset";
01248 $_GET["ref_id"] = $a_target;
01249 }
01250 else
01251 {
01252 $ilErr->raiseError($lng->txt("msg_no_perm_read"), $ilErr->FATAL);
01253 }
01254 }
01255
01256
01257 }
01258 ?>