• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

course/classes/class.ilObjCourse.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
00007         |                                                                             |
00008         | This program is free software; you can redistribute it and/or               |
00009         | modify it under the terms of the GNU General Public License                 |
00010         | as published by the Free Software Foundation; either version 2              |
00011         | of the License, or (at your option) any later version.                      |
00012         |                                                                             |
00013         | This program is distributed in the hope that it will be useful,             |
00014         | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015         | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016         | GNU General Public License for more details.                                |
00017         |                                                                             |
00018         | You should have received a copy of the GNU General Public License           |
00019         | along with this program; if not, write to the Free Software                 |
00020         | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
00021         +-----------------------------------------------------------------------------+
00022 */
00023 
00024 
00035 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         // SET/GET
00084         function setId($a_id)
00085         {
00086                 parent::setId($a_id);
00087 
00088 //              unset($this->meta_data);
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 //              $this->__initMetaObject();
00102 //              $this->meta_data->setDescription($a_description);
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 //              $this->__initMetaObject();
00114 //              $this->meta_data->setTitle($a_title);
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) // means deactivated
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                 // always call parent ilClone function first!!
00542                 $new_ref_id = parent::ilClone($a_parent_ref);
00543                 
00544                 // put here crs specific stuff
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                 // ... and finally always return new reference ID!!
00583                 return $new_ref_id;
00584         }
00585 
00592         function delete()
00593         {
00594                 // always call parent delete function first!!
00595                 if (!parent::delete())
00596                 {
00597                         return false;
00598                 }
00599 
00600 
00601                 // delete meta data
00602                 $this->deleteMetaData();
00603 
00604                 // put here course specific stuff
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                 // At the beginning of the recursive process it avoids second call of the notify function with the same parameter
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         // META DATA METHODS
00680 /*
00681         function &getMetaData()
00682         {
00683                 // CALLED BY META DATA GUI
00684 
00685                 $this->__initMetaObject();
00686 
00687                 return $this->meta_data;
00688         }
00689 */
00690 
00694 /*
00695         function updateMetaData()
00696         {
00697                 $this->__initMetaObject();
00698 
00699                 $this->meta_data->update();
00700                 if ($this->meta_data->section != "General")
00701                 {
00702                         $meta = $this->meta_data->getElement("Title", "General");
00703                         $this->meta_data->setTitle($meta[0]["value"]);
00704                         $meta = $this->meta_data->getElement("Description", "General");
00705                         $this->meta_data->setDescription($meta[0]["value"]);
00706                 }
00707                 else
00708                 {
00709                         $this->setTitle($this->meta_data->getTitle());
00710                         $this->setDescription($this->meta_data->getDescription());
00711                 }
00712                 parent::update();
00713         }
00714 */
00715 
00719         function update()
00720         {
00721                 $this->updateMetaData();
00722                 $this->updateSettings();
00723                 parent::update();
00724         }
00725 
00726 /*
00727         function __initMetaObject()
00728         {
00729                 include_once "./classes/class.ilMetaData.php";
00730 
00731                 if(is_object($this->meta_data))
00732                 {
00733                         return true;
00734                 }
00735 
00736                 if($this->getId())
00737                 {
00738                         $this->meta_data =& new ilMetaData($this->getType(),$this->getId());
00739                 }
00740                 else
00741                 {
00742                         $this->meta_data =& new ilMetaData();
00743                 }
00744 
00745                 return true;
00746         }
00747 */
00748 
00749         function updateSettings()
00750         {
00751                 global $ilDB;
00752 
00753                 // Due to a bug 3.5.alpha maybe no settings exist. => create default settings
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         // RBAC METHODS
00913         function initDefaultRoles()
00914         {
00915                 global $rbacadmin,$rbacreview;
00916 
00917                 $rolf_obj = $this->createRoleFolder();
00918 
00919                 // CREATE ADMIN ROLE
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                 // SET PERMISSION TEMPLATE OF NEW LOCAL ADMIN ROLE
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                 // SET OBJECT PERMISSIONS OF COURSE OBJECT
00931                 $ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"crs",$rolf_obj->getRefId());
00932                 $rbacadmin->grantPermission($role_obj->getId(),$ops,$this->getRefId());
00933 
00934                 // SET OBJECT PERMISSIONS OF ROLE FOLDER OBJECT
00935                 //$ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"rolf",$rolf_obj->getRefId());
00936                 //$rbacadmin->grantPermission($role_obj->getId(),$ops,$rolf_obj->getRefId());
00937 
00938                 // CREATE TUTOR ROLE
00939                 // CREATE ROLE AND ASSIGN ROLE TO ROLEFOLDER...
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                 // SET PERMISSION TEMPLATE OF NEW LOCAL ROLE
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                 // SET OBJECT PERMISSIONS OF COURSE OBJECT
00950                 $ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"crs",$rolf_obj->getRefId());
00951                 $rbacadmin->grantPermission($role_obj->getId(),$ops,$this->getRefId());
00952 
00953                 // SET OBJECT PERMISSIONS OF ROLE FOLDER OBJECT
00954                 //$ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"rolf",$rolf_obj->getRefId());
00955                 //$rbacadmin->grantPermission($role_obj->getId(),$ops,$rolf_obj->getRefId());
00956 
00957                 // CREATE MEMBER ROLE
00958                 // CREATE ROLE AND ASSIGN ROLE TO ROLEFOLDER...
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                 // SET PERMISSION TEMPLATE OF NEW LOCAL ROLE
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                 // SET OBJECT PERMISSIONS OF COURSE OBJECT
00969                 $ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"crs",$rolf_obj->getRefId());
00970                 $rbacadmin->grantPermission($role_obj->getId(),$ops,$this->getRefId());
00971 
00972                 // SET OBJECT PERMISSIONS OF ROLE FOLDER OBJECT
00973                 //$ops = $rbacreview->getOperationsOfRole($role_obj->getId(),"rolf",$rolf_obj->getRefId());
00974                 //$rbacadmin->grantPermission($role_obj->getId(),$ops,$rolf_obj->getRefId());
00975 
00976                 unset($role_obj);
00977                 unset($rolf_obj);
00978 
00979                 // Break inheritance, create local roles and initialize permission
00980                 // settings depending on course status.
00981                 $this->__setCourseStatus();
00982 
00983                 return true;
00984         }
00985 
01002         function __setCourseStatus()
01003         {
01004                 global $rbacadmin, $rbacreview, $rbacsystem;
01005 
01006                 //get Rolefolder of course
01007                 $rolf_data = $rbacreview->getRoleFolderOfObject($this->getRefId());
01008 
01009                 //define all relevant roles for which rights are needed to be changed
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                 //get defined operations from template
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                         // Delete the linked role for the parent role
01033                         // (just in case if it already exists).
01034                         $rbacadmin->deleteLocalRole($parentRole,$rolf_data["child"]);
01035 
01036                         // Grant permissions on the course object for 
01037                         // the parent role. In the foreach loop we
01038                         // compute the intersection of the role     
01039                         // template il_crs_non_member and the 
01040                         // permission template of the parent role.
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                         // Create a linked role for the parent role and
01056                         // initialize it with the intersection of 
01057                         // il_crs_non_member and the permission
01058                         // template of the parent role
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                 }//END foreach
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                 // GET role_objects of predefined roles
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         // static method for condition handler
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                 // Delete all user related data
01229                 // delete lm_history
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                 // Course objectives
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 } //END class.ilObjCourse
01258 ?>

Generated on Fri Dec 13 2013 11:57:58 for ILIAS Release_3_6_x_branch .rev 46809 by  doxygen 1.7.1