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

course/classes/class.ilObjCourseGUI.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2005 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 
00041 require_once "./classes/class.ilContainerGUI.php";
00042 require_once "./course/classes/class.ilCourseRegisterGUI.php";
00043 
00044 
00045 class ilObjCourseGUI extends ilContainerGUI
00046 {
00051         function ilObjCourseGUI()
00052         {
00053                 global $ilCtrl;
00054 
00055                 // CONTROL OPTIONS
00056                 $this->ctrl =& $ilCtrl;
00057                 $this->ctrl->saveParameter($this,array("ref_id","cmdClass"));
00058 
00059                 $this->type = "crs";
00060                 $this->ilContainerGUI('',(int) $_GET['ref_id'],true,false);
00061 
00062                 $this->lng->loadLanguageModule('crs');
00063 
00064                 $this->SEARCH_USER = 1;
00065                 $this->SEARCH_GROUP = 2;
00066                 $this->SEARCH_COURSE = 3;
00067         }
00068 
00069         function gatewayObject()
00070         {
00071                 switch($_POST["action"])
00072                 {
00073                         case "deleteMembersObject":
00074                                 $this->deleteMembers();
00075                                 break;
00076 
00077                         case "deleteSubscribers":
00078                                 $this->deleteSubscribers();
00079                                 break;
00080 
00081                         case "addSubscribers":
00082                                 $this->addSubscribers();
00083                                 break;
00084 
00085                         case "addFromWaitingList":
00086                                 $this->addFromWaitingList();
00087                                 break;
00088 
00089                         case "removeFromWaitingList":
00090                                 $this->removeFromWaitingList();
00091                                 break;
00092 
00093                         case 'sendMail':
00094                                 $this->sendMailToSelectedUsers();
00095                                 break;
00096 
00097                         default:
00098                                 $this->viewObject();
00099                                 break;
00100                 }
00101                 return true;
00102         }
00103 
00104         function sendMailToSelectedUsers()
00105         {
00106                 $_POST['member'] = array_merge((array) $_POST['member_ids'],(array) $_POST['tutor_ids'],(array) $_POST['admin_ids']);
00107 
00108                 if (!count($_POST["member"]))
00109                 {
00110                         sendInfo($this->lng->txt("no_checkbox"));
00111                         $this->membersObject();
00112                         return false;
00113                 }
00114                 foreach($_POST["member"] as $usr_id)
00115                 {
00116                         $rcps[] = ilObjUser::_lookupLogin($usr_id);
00117                 }
00118                 ilUtil::redirect("mail_new.php?type=new&rcp_to=".implode(',',$rcps));
00119         }
00124         function cancelMemberObject()
00125         {
00126                 $this->__unsetSessionVariables();
00127 
00128                 $return_location = "members";
00129 
00130                 sendInfo($this->lng->txt("action_aborted"),true);
00131                 ilUtil::redirect($this->ctrl->getLinkTarget($this,$return_location));
00132         }
00133 
00134         function createObject()
00135         {
00136                 global $rbacsystem;
00137 
00138                 // CHECK ACCESS
00139                 if(!$rbacsystem->checkAccess("create",$_GET["ref_id"],'crs'))
00140                 {
00141                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_create"),$this->ilias->error_obj->MESSAGE);
00142                 }
00143                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_create.html","course");
00144                 $this->tpl->setVariable("FORMACTION",'repository.php?ref_id='.$_GET["ref_id"].'&cmd=post&new_type=crs');
00145                 $this->tpl->setVariable("TXT_HEADER", $this->lng->txt("crs_new"));
00146                 $this->tpl->setVariable("TYPE_IMG",
00147                         ilUtil::getImagePath("icon_crs.gif"));
00148                 $this->tpl->setVariable("ALT_IMG", $this->lng->txt("obj_crs"));
00149                 $this->tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
00150                 $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("crs_add"));
00151                 $this->tpl->setVariable("CMD_SUBMIT", "save");
00152                 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00153                 $this->tpl->setVariable("TXT_TITLE",$this->lng->txt('title'));
00154                 $this->tpl->setVariable("TXT_DESC",$this->lng->txt('desc'));
00155 
00156 
00157                 // IMPORT
00158                 $this->tpl->setVariable("TXT_IMPORT_CRS", $this->lng->txt("import_crs"));
00159                 $this->tpl->setVariable("TXT_CRS_FILE", $this->lng->txt("file"));
00160                 $this->tpl->setVariable("TXT_IMPORT", $this->lng->txt("import"));
00161 
00162                 // get the value for the maximal uploadable filesize from the php.ini (if available)
00163                 $umf=get_cfg_var("upload_max_filesize");
00164                 // get the value for the maximal post data from the php.ini (if available)
00165                 $pms=get_cfg_var("post_max_size");
00166 
00167                 // use the smaller one as limit
00168                 $max_filesize=min($umf, $pms);
00169                 if (!$max_filesize) 
00170                         $max_filesize=max($umf, $pms);
00171         
00172                 // gives out the limit as a littel notice :)
00173                 $this->tpl->setVariable("TXT_FILE_INFO", $this->lng->txt("file_notice").$max_filesize);
00174 
00175                 return true;
00176         }
00177 
00178         function importFileObject()
00179         {
00180                 global $_FILES, $rbacsystem, $ilDB;
00181 
00182                 // check if file was uploaded
00183                 if($_FILES['xmldoc']['tmp_name'] == 'none' or !$_FILES['xmldoc']['tmp_name'])
00184                 {
00185                         $this->ilias->raiseError("No file selected!",$this->ilias->error_obj->MESSAGE);
00186                 }
00187 
00188                 // check correct file type
00189                 $info = pathinfo($_FILES["xmldoc"]["name"]);
00190                 if (strtolower($info["extension"]) != "zip")
00191                 {
00192                         $this->ilias->raiseError("File must be a zip file!",$this->ilias->error_obj->MESSAGE);
00193                 }
00194 
00195                 // Create new object
00196                 include_once("course/classes/class.ilObjCourse.php");
00197 
00198                 $newObj = new ilObjCourse();
00199                 $newObj->setType('crs');
00200                 $newObj->setTitle($_FILES["xmldoc"]["name"]);
00201                 $newObj->setDescription("");
00202                 $newObj->create(true); // true for upload
00203                 $newObj->createReference();
00204                 $newObj->putInTree($_GET["ref_id"]);
00205                 $newObj->setPermissions($_GET["ref_id"]);
00206                 $newObj->initDefaultRoles();
00207 
00208                 // Copy xml file
00209                 include_once 'course/classes/class.ilFileDataCourse.php';
00210 
00211                 $course_files = new ilFileDataCourse($newObj);
00212 
00213                 $course_files->createImportFile($_FILES["xmldoc"]["tmp_name"],$_FILES['xmldoc']['name']);
00214                 $course_files->unpackImportFile();
00215                 $course_files->validateImportFile();
00216 
00217                 include_once 'course/classes/class.ilCourseXMLParser.php';
00218 
00219                 $xml_parser = new ilCourseXMLParser($newObj,$course_files->getImportFile());
00220 
00221                 $xml_parser->startParsing();
00222 
00223                 // Update title description
00224                 $newObj->MDUpdateListener('General');
00225                 
00226                 // delete import file
00227                 #$course_files->deleteImportFile();
00228 
00229                 sendInfo($this->lng->txt('crs_added'),true);
00230                 
00231                 $this->ctrl->setParameter($this, "ref_id", $newObj->getRefId());
00232                 ilUtil::redirect($this->getReturnLocation("save",
00233                         $this->ctrl->getLinkTarget($this, "edit")));
00234 
00235                 //ilUtil::redirect($this->getReturnLocation("save","adm_object.php?".$this->link_params));
00236 
00237         }
00238 
00239         function viewObject()
00240         {
00241                 global $rbacsystem,$ilUser;
00242 
00243                 // CHECK ACCESS
00244                 if(!$rbacsystem->checkAccess("read",$this->object->getRefId()))
00245                 {
00246                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_read"),$this->ilias->error_obj->MESSAGE);
00247                 }
00248                 if (strtolower($_GET["baseClass"]) == "iladministrationgui")
00249                 {
00250                         parent::viewObject();
00251                         return true;
00252                 }
00253         
00254                 // Trac access
00255                 include_once 'Services/Tracking/classes/class.ilLearningProgress.php';
00256                 ilLearningProgress::_tracProgress($ilUser->getId(),$this->object->getId(),'crs');
00257 
00258                 include_once './course/classes/class.ilCourseContentGUI.php';
00259                 $course_content_obj = new ilCourseContentGUI($this);
00260 
00261                 $this->ctrl->setCmdClass(get_class($course_content_obj));
00262                 $this->ctrl->forwardCommand($course_content_obj);
00263 
00264                 return true;
00265                 
00266 
00267                 // else disabled
00268                 {
00269                         if($rbacsystem->checkAccess("write", $this->ref_id) or
00270                            ($this->object->isActivated() and !$this->object->isArchived()))
00271                         {
00272                                 $this->initCourseContentInterface();
00273                                 $this->cci_obj->cci_setContainer($this);
00274                                 $this->cci_obj->cci_view();
00275                         }
00276                         elseif(ilObjCourse::_registrationEnabled($this->object->getId()))
00277                         {
00278                                 $this->infoScreenObject();
00279                         }
00280                         else
00281                         {
00282                                 $this->archiveObject();
00283                         }
00284                 }
00285         }
00286 
00292         function infoScreenObject()
00293         {
00294                 $this->ctrl->setCmd("showSummary");
00295                 $this->ctrl->setCmdClass("ilinfoscreengui");
00296                 $this->infoScreen();
00297         }
00298         
00302         function infoScreen()
00303         {
00304                 global $ilErr,$ilAccess;
00305 
00306                 if(!$ilAccess->checkAccess('visible','',$this->object->getRefId()))
00307                 {
00308                         $ilErr->raiseError($this->lng->txt('msg_no_perm_read'),$ilErr->MESSAGE);
00309                 }
00310                 
00311                 $this->tabs_gui->setTabActive('info_short');
00312 
00313                 include_once("classes/class.ilInfoScreenGUI.php");
00314                 include_once 'course/classes/class.ilCourseFile.php';
00315 
00316                 $files =& ilCourseFile::_readFilesByCourse($this->object->getId());
00317 
00318                 $info = new ilInfoScreenGUI($this);
00319                 $info->enablePrivateNotes();
00320                 $info->enableFeedback();
00321                 
00322                 if(strlen($this->object->getImportantInformation()) or
00323                    strlen($this->object->getSyllabus()) or
00324                    count($files))
00325                 {
00326                         $info->addSection($this->lng->txt('crs_general_informations'));
00327                 }
00328                 if(strlen($this->object->getImportantInformation()))
00329                 {
00330                         $info->addProperty($this->lng->txt('crs_important_info'),
00331                                                            "<strong>".nl2br($this->object->getImportantInformation())."</strong>");
00332                 }
00333                 if(strlen($this->object->getSyllabus()))
00334                 {
00335                         $info->addProperty($this->lng->txt('crs_syllabus'), 
00336                                                            nl2br($this->object->getSyllabus()));
00337                 }
00338                 // files
00339                 if(count($files))
00340                 {
00341                         $tpl = new ilTemplate('tpl.event_info_file.html',true,true,'course');
00342                         
00343                         foreach($files as $file)
00344                         {
00345                                 $tpl->setCurrentBlock("files");
00346                                 $this->ctrl->setParameter($this,'file_id',$file->getFileId());
00347                                 $tpl->setVariable("DOWN_LINK",$this->ctrl->getLinkTarget($this,'sendfile'));
00348                                 $tpl->setVariable("DOWN_NAME",$file->getFileName());
00349                                 $tpl->setVariable("DOWN_INFO_TXT",$this->lng->txt('crs_file_size_info'));
00350                                 $tpl->setVariable("DOWN_SIZE",$file->getFileSize());
00351                                 $tpl->setVariable("TXT_BYTES",$this->lng->txt('bytes'));
00352                                 $tpl->parseCurrentBlock();
00353                         }
00354                         $info->addProperty($this->lng->txt('crs_file_download'),
00355                                                            $tpl->get());
00356                 }
00357                          
00358                 // contact
00359                 if($this->object->hasContactData())
00360                 {
00361                         $info->addSection($this->lng->txt("crs_contact"));
00362                 }
00363                 if(strlen($this->object->getContactName()))
00364                 {
00365                         $info->addProperty($this->lng->txt("crs_contact_name"),
00366                                                            $this->object->getContactName());
00367                 }
00368                 if(strlen($this->object->getContactResponsibility()))
00369                 {
00370                         $info->addProperty($this->lng->txt("crs_contact_responsibility"),
00371                                                            $this->object->getContactResponsibility());
00372                 }
00373                 if(strlen($this->object->getContactPhone()))
00374                 {
00375                         $info->addProperty($this->lng->txt("crs_contact_phone"),
00376                                                            $this->object->getContactPhone());
00377                 }
00378                 if($this->object->getContactEmail())
00379                 {
00380                         $etpl = new ilTemplate("tpl.crs_contact_email.html", true, true , "course");
00381                         $etpl->setVariable("EMAIL_LINK","mail_new.php?type=new&rcp_to=".$this->object->getContactEmail());
00382                         $etpl->setVariable("CONTACT_EMAIL",$this->object->getContactEmail());
00383                         $info->addProperty($this->lng->txt("crs_contact_email"),
00384                                 $etpl->get());
00385                 }
00386                 if(strlen($this->object->getContactConsultation()))
00387                 {
00388                         $info->addProperty($this->lng->txt("crs_contact_consultation"),
00389                                                            nl2br($this->object->getContactConsultation()));
00390                 }               
00391                 //      
00392                 // access
00393                 //
00394                 $info->addSection($this->lng->txt("access"));
00395                 
00396                 // activation
00397                 if($this->object->getOfflineStatus())
00398                 {
00399                         $info->addProperty($this->lng->txt('crs_visibility'),
00400                                                            $this->lng->txt('crs_visibility_unvisible'));
00401                 }
00402                 elseif($this->object->getActivationUnlimitedStatus())
00403                 {
00404                         $info->addProperty($this->lng->txt("crs_visibility"),
00405                                 $this->lng->txt('crs_unlimited'));
00406                 }
00407                 else
00408                 {
00409                         $info->addProperty($this->lng->txt("crs_visibility"),
00410                                                            ilFormat::formatUnixTime($this->object->getActivationStart(),true)." - ".
00411                                                            ilFormat::formatUnixTime($this->object->getActivationEnd(),true));
00412                 }
00413                 switch($this->object->getSubscriptionLimitationType())
00414                 {
00415                         case IL_CRS_SUBSCRIPTION_DEACTIVATED:
00416                                 $txt = $this->lng->txt("crs_info_reg_deactivated");
00417                                 break;
00418 
00419                         default:
00420                                 switch($this->object->getSubscriptionType())
00421                                 {
00422                                         case IL_CRS_SUBSCRIPTION_CONFIRMATION:
00423                                                 $txt = $this->lng->txt("crs_info_reg_confirmation");
00424                                                 break;
00425                                         case IL_CRS_SUBSCRIPTION_DIRECT:
00426                                                 $txt = $this->lng->txt("crs_info_reg_direct");
00427                                                 break;
00428                                         case IL_CRS_SUBSCRIPTION_PASSWORD:
00429                                                 $txt = $this->lng->txt("crs_info_reg_password");
00430                                                 break;
00431                                 }
00432                 }
00433                 // subscription
00434                 $info->addProperty($this->lng->txt("crs_info_reg"),$txt);
00435 
00436 
00437                 if($this->object->getSubscriptionLimitationType() != IL_CRS_SUBSCRIPTION_DEACTIVATED)
00438                 {
00439                         if($this->object->getSubscriptionUnlimitedStatus())
00440                         {
00441                                 $info->addProperty($this->lng->txt("crs_reg_until"),
00442                                                                    $this->lng->txt('crs_unlimited'));
00443                         }
00444                         elseif($this->object->getSubscriptionStart() < time())
00445                         {
00446                                 $info->addProperty($this->lng->txt("crs_reg_until"),
00447                                                                    $this->lng->txt('crs_to').' '.
00448                                                                    ilFormat::formatUnixTime($this->object->getSubscriptionEnd(),true));
00449                         }
00450                         elseif($this->object->getSubscriptionStart() > time())
00451                         {
00452                                 $info->addProperty($this->lng->txt("crs_reg_until"),
00453                                                                    $this->lng->txt('crs_from').' '.
00454                                                                    ilFormat::formatUnixTime($this->object->getSubscriptionStart(),true));
00455                         }
00456                 }
00457                 
00458                 // archive
00459                 if($this->object->getArchiveType() != IL_CRS_ARCHIVE_NONE)
00460                 {
00461                         $info->addProperty($this->lng->txt("crs_archive"),
00462                                                            ilFormat::formatUnixTime($this->object->getArchiveStart(),true)." - ".
00463                                                            ilFormat::formatUnixTime($this->object->getArchiveEnd(),true));
00464                 }
00465                 
00466                 $info->enableLearningProgress(true);
00467 
00468                 // forward the command
00469                 $this->ctrl->forwardCommand($info);
00470         }
00471 
00472         function listStructureObject()
00473         {
00474                 include_once './course/classes/class.ilCourseStart.php';
00475 
00476                 global $rbacsystem;
00477 
00478                 if(!$rbacsystem->checkAccess("write", $this->ref_id))
00479                 {
00480                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
00481                 }
00482                 
00483                 $this->setSubTabs("properties");
00484                 $this->tabs_gui->setTabActive('settings');
00485                 $this->tabs_gui->setSubTabActive('crs_start_objects');
00486 
00487 
00488                 $crs_start =& new ilCourseStart($this->object->getRefId(),$this->object->getId());
00489 
00490                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_list_starter.html","course");
00491                 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00492 
00493                 if(!count($starter = $crs_start->getStartObjects()))
00494                 {
00495                         $this->tpl->setCurrentBlock("btn_cell");
00496                         $this->tpl->setVariable("BTN_LINK",$this->ctrl->getLinkTarget($this,'selectStarter'));
00497                         $this->tpl->setVariable("BTN_TXT",$this->lng->txt('crs_add_starter'));
00498                         $this->tpl->parseCurrentBlock();
00499 
00500                         sendInfo($this->lng->txt('crs_no_starter_created'));
00501 
00502                         return true;
00503                 }
00504 
00505                 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00506                 $this->tpl->setVariable("TYPE_IMG",ilUtil::getImagePath('icon_crs.gif'));
00507                 $this->tpl->setVariable("ALT_IMG",$this->lng->txt('obj_crs'));
00508                 $this->tpl->setVariable("TBL_TITLE",$this->lng->txt('crs_edit_start_objects'));
00509                 $this->tpl->setVariable("HEADER_DESC",$this->lng->txt('description'));
00510                 $this->tpl->setVariable("HEADER_OPT",$this->lng->txt('options'));
00511                 $this->tpl->setVariable("BTN_ADD",$this->lng->txt('crs_add_starter'));
00512 
00513                 $counter = 0;
00514                 foreach($starter as $start_id => $data)
00515                 {
00516                         $tmp_obj =& ilObjectFactory::getInstanceByRefId($data['item_ref_id']);
00517 
00518                         if(strlen($tmp_obj->getDescription()))
00519                         {
00520                                 $this->tpl->setCurrentBlock("description");
00521                                 $this->tpl->setVariable("DESCRIPTION_STARTER",$tmp_obj->getDescription());
00522                                 $this->tpl->parseCurrentBlock();
00523                         }
00524 
00525                         $this->tpl->setCurrentBlock("starter_row");
00526                         $this->tpl->setVariable("ROW_CLASS",ilUtil::switchColor(++$counter,'tblrow1','tblrow2'));
00527                         $this->tpl->setVariable("STARTER_TITLE",$tmp_obj->getTitle());
00528 
00529                         $this->ctrl->setParameter($this,'del_starter',$start_id);
00530                         $this->tpl->setVariable("DELETE_LINK",$this->ctrl->getLinkTarget($this,'deleteStarter'));
00531                         $this->tpl->setVariable("DELETE_ALT",$this->lng->txt('delete'));
00532                         $this->tpl->parseCurrentBlock();
00533                 }
00534         }
00535 
00536         function deleteStarterObject()
00537         {
00538                 include_once './course/classes/class.ilCourseStart.php';
00539 
00540                 global $rbacsystem;
00541 
00542                 if(!$rbacsystem->checkAccess("write", $this->ref_id))
00543                 {
00544                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
00545                 }
00546 
00547                 $crs_start =& new ilCourseStart($this->object->getRefId(),$this->object->getId());
00548                 $crs_start->delete((int) $_GET['del_starter']);
00549         
00550                 sendInfo($this->lng->txt('crs_starter_deleted'));
00551                 $this->listStructureObject();
00552                 
00553                 return true;
00554         }
00555                 
00556 
00557         function selectStarterObject()
00558         {
00559                 include_once './course/classes/class.ilCourseStart.php';
00560 
00561                 $this->setSubTabs("properties");
00562                 $this->tabs_gui->setTabActive('settings');
00563                 $this->tabs_gui->setSubTabActive('crs_start_objects');
00564 
00565                 global $rbacsystem;
00566 
00567                 if(!$rbacsystem->checkAccess("write", $this->ref_id))
00568                 {
00569                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
00570                 }
00571 
00572                 $crs_start =& new ilCourseStart($this->object->getRefId(),$this->object->getId());
00573 
00574                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_add_starter.html","course");
00575 
00576                 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00577                 $this->tpl->setVariable("TYPE_IMG",ilUtil::getImagePath('icon_crs.gif'));
00578                 $this->tpl->setVariable("ALT_IMG",$this->lng->txt('obj_crs'));
00579                 $this->tpl->setVariable("TBL_TITLE",$this->lng->txt('crs_select_starter'));
00580                 $this->tpl->setVariable("HEADER_DESC",$this->lng->txt('description'));
00581                 $this->tpl->setVariable("BTN_ADD",$this->lng->txt('crs_add_starter'));
00582                 $this->tpl->setVariable("BTN_CANCEL",$this->lng->txt('cancel'));
00583 
00584                 
00585                 $this->object->initCourseItemObject();
00586                 $counter = 0;
00587                 foreach($crs_start->getPossibleStarters($this->object->items_obj) as $item_ref_id)
00588                 {
00589                         $tmp_obj =& ilObjectFactory::getInstanceByRefId($item_ref_id);
00590 
00591                         if(strlen($tmp_obj->getDescription()))
00592                         {
00593                                 $this->tpl->setCurrentBlock("description");
00594                                 $this->tpl->setVariable("DESCRIPTION_STARTER",$tmp_obj->getDescription());
00595                                 $this->tpl->parseCurrentBlock();
00596                         }
00597 
00598                         $this->tpl->setCurrentBlock("starter_row");
00599                         $this->tpl->setVariable("ROW_CLASS",ilUtil::switchColor(++$counter,'tblrow1','tblrow2'));
00600                         $this->tpl->setVariable("CHECK_STARTER",ilUtil::formCheckbox(0,'starter[]',$item_ref_id));
00601                         $this->tpl->setVariable("STARTER_TITLE",$tmp_obj->getTitle());
00602                         $this->tpl->parseCurrentBlock();
00603                 }
00604         }
00605 
00606         function addStarterObject()
00607         {
00608                 include_once './course/classes/class.ilCourseStart.php';
00609 
00610                 global $rbacsystem;
00611 
00612                 if(!$rbacsystem->checkAccess("write", $this->ref_id))
00613                 {
00614                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
00615                 }
00616                 if(!count($_POST['starter']))
00617                 {
00618                         sendInfo($this->lng->txt('crs_select_one_object'));
00619                         $this->selectStarterObject();
00620 
00621                         return false;
00622                 }
00623 
00624                 $crs_start =& new ilCourseStart($this->object->getRefId(),$this->object->getId());
00625                 $added = 0;
00626                 foreach($_POST['starter'] as $item_ref_id)
00627                 {
00628                         if(!$crs_start->exists($item_ref_id))
00629                         {
00630                                 ++$added;
00631                                 $crs_start->add($item_ref_id);
00632                         }
00633                 }
00634                 if($added)
00635                 {
00636                         sendInfo($this->lng->txt('crs_added_starters'));
00637                         $this->listStructureObject();
00638 
00639                         return true;
00640                 }
00641                 else
00642                 {
00643                         sendInfo($this->lng->txt('crs_starters_already_assigned'));
00644                         $this->selectStarterObject();
00645 
00646                         return false;
00647                 }
00648         }
00649         
00650         function editInfoObject()
00651         {
00652                 include_once 'course/classes/class.ilCourseFile.php';
00653 
00654                 global $ilErr,$ilAccess;
00655 
00656                 if(!$ilAccess->checkAccess('write','',$this->object->getRefId()))
00657                 {
00658                         $ilErr->raiseError($this->lng->txt('msg_no_perm_read'),$ilErr->MESSAGE);
00659                 }
00660                 $this->setSubTabs('properties');
00661                 $this->tabs_gui->setTabActive('settings');
00662                 $this->tabs_gui->setSubTabActive('crs_info_settings');
00663 
00664                 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.edit_info.html','course');
00665 
00666                 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00667                 $this->tpl->setVariable("TXT_GENERAL_INFO",$this->lng->txt('crs_general_info'));
00668                 $this->tpl->setVariable("TXT_IMPORTANT",$this->lng->txt('crs_important_info'));
00669                 $this->tpl->setVariable("TXT_SYLLABUS",$this->lng->txt('crs_syllabus'));
00670                 $this->tpl->setVariable("TXT_DOWNLOAD",$this->lng->txt('crs_info_download'));
00671                 $this->tpl->setVariable("TXT_FILENAME",$this->lng->txt('crs_file_name'));
00672                 $this->tpl->setVariable("TXT_FILE",$this->lng->txt('crs_file'));
00673                 $this->tpl->setVariable("TXT_FILE_NAME",$this->lng->txt('crs_filename'));
00674                 $this->tpl->setVariable("TXT_FILESIZE",ilUtil::getFileSizeInfo());
00675                 
00676                 $this->tpl->setVariable("TXT_CONTACT",$this->lng->txt('crs_contact'));
00677                 $this->tpl->setVariable("TXT_CONTACT_NAME",$this->lng->txt("crs_contact_name"));
00678                 $this->tpl->setVariable("TXT_CONTACT_RESPONSIBILITY",$this->lng->txt("crs_contact_responsibility"));
00679                 $this->tpl->setVariable("TXT_CONTACT_EMAIL",$this->lng->txt("crs_contact_email"));
00680                 $this->tpl->setVariable("TXT_CONTACT_PHONE",$this->lng->txt("crs_contact_phone"));
00681                 $this->tpl->setVariable("TXT_CONTACT_CONSULTATION",$this->lng->txt("crs_contact_consultation"));
00682 
00683                 
00684                 foreach($file_objs =& ilCourseFile::_readFilesByCourse($this->object->getId()) as $file_obj)
00685                 {
00686                         $this->tpl->setCurrentBlock("file");
00687                         $this->tpl->setVariable("FILE_ID",$file_obj->getFileId());
00688                         $this->tpl->setVariable("DEL_FILE",$file_obj->getFileName());
00689                         $this->tpl->setVariable("TXT_DEL_FILE",$this->lng->txt('crs_delete_file'));
00690                         $this->tpl->parseCurrentBlock();
00691                 }
00692                 if(count($file_objs))
00693                 {
00694                         $this->tpl->setCurrentBlock("files");
00695                         $this->tpl->setVariable("TXT_EXISTING_FILES",$this->lng->txt('crs_existing_files'));
00696                         $this->tpl->parseCurrentBlock();
00697                 }
00698 
00699 
00700                 $this->tpl->setVariable("IMPORTANT",$this->object->getImportantInformation());
00701                 $this->tpl->setVariable("SYLLABUS",$this->object->getSyllabus());
00702                 $this->tpl->setVariable("CONTACT_NAME",$this->object->getContactName());
00703                 $this->tpl->setVariable("CONTACT_RESPONSIBILITY",$this->object->getContactResponsibility());
00704                 $this->tpl->setVariable("CONTACT_PHONE",$this->object->getContactPhone());
00705                 $this->tpl->setVariable("CONTACT_EMAIL",$this->object->getContactEmail());
00706                 $this->tpl->setVariable("CONTACT_CONSULTATION",$this->object->getContactConsultation());
00707 
00708                 $this->tpl->setVariable("TXT_BTN_UPDATE",$this->lng->txt('save'));
00709                 $this->tpl->setVariable("TXT_CANCEL",$this->lng->txt('cancel'));
00710 
00711                 return true;
00712         }
00713 
00714 
00715         function updateInfoObject()
00716         {
00717                 global $ilErr,$ilAccess;
00718 
00719                 if(!$ilAccess->checkAccess('write','',$this->object->getRefId()))
00720                 {
00721                         $ilErr->raiseError($this->lng->txt('msg_no_perm_read'),$ilErr->MESSAGE);
00722                 }
00723                 
00724                 include_once 'course/classes/class.ilCourseFile.php';
00725                 $file_obj = new ilCourseFile();
00726                 $file_obj->setCourseId($this->object->getId());
00727                 $file_obj->setFileName(strlen($_POST['file_name']) ?
00728                                                            ilUtil::stripSlashes($_POST['file_name']) :
00729                                                            $_FILES['file']['name']);
00730                 $file_obj->setFileSize($_FILES['file']['size']);
00731                 $file_obj->setFileType($_FILES['file']['type']);
00732                 $file_obj->setTemporaryName($_FILES['file']['tmp_name']);
00733                 $file_obj->setErrorCode($_FILES['file']['error']);
00734 
00735                 $this->object->setImportantInformation(ilUtil::stripSlashes($_POST['important']));
00736                 $this->object->setSyllabus(ilUtil::stripSlashes($_POST['syllabus']));
00737                 $this->object->setContactName(ilUtil::stripSlashes($_POST['contact_name']));
00738                 $this->object->setContactResponsibility(ilUtil::stripSlashes($_POST['contact_responsibility']));
00739                 $this->object->setContactPhone(ilUtil::stripSlashes($_POST['contact_phone']));
00740                 $this->object->setContactEmail(ilUtil::stripSlashes($_POST['contact_email']));
00741                 $this->object->setContactConsultation(ilUtil::stripSlashes($_POST['contact_consultation']));
00742 
00743                 // Validate
00744                 $ilErr->setMessage('');
00745                 $file_obj->validate();
00746                 $this->object->validateInfoSettings();
00747 
00748                 if(strlen($ilErr->getMessage()))
00749                 {
00750                         sendInfo($ilErr->getMessage());
00751                         $this->editInfoObject();
00752                         return false;
00753                 }
00754                 $this->object->update();
00755                 $file_obj->create();
00756 
00757                 // Delete files
00758                 if(count($_POST['del_files']))
00759                 {
00760                         foreach($file_objs =& ilCourseFile::_readFilesByCourse($this->object->getId()) as $file_obj)
00761                         {
00762                                 if(in_array($file_obj->getFileId(),$_POST['del_files']))
00763                                 {
00764                                         $file_obj->delete();
00765                                 }
00766                         }
00767                 }
00768                 sendInfo($this->lng->txt("crs_settings_saved"));
00769                 $this->editInfoObject();
00770                 return true;
00771         }
00772 
00773         function updateObject()
00774         {
00775                 $this->object->setActivationType((int) $_POST['activation_type']);
00776                 $this->object->setActivationStart($this->toUnix($_POST['activation_start'],$_POST['activation_start_time']));
00777                 $this->object->setActivationEnd($this->toUnix($_POST['activation_end'],$_POST['activation_end_time']));
00778                 $this->object->setSubscriptionLimitationType((int) $_POST['subscription_limitation_type']);
00779                 $this->object->setSubscriptionType((int) $_POST['subscription_type']);
00780                 $this->object->setSubscriptionPassword(ilUtil::stripSlashes($_POST['subscription_password']));
00781                 $this->object->setSubscriptionStart($this->toUnix($_POST['subscription_start'],$_POST['subscription_start_time']));
00782                 $this->object->setSubscriptionEnd($this->toUnix($_POST['subscription_end'],$_POST['subscription_end_time']));
00783                 $this->object->setSubscriptionMaxMembers((int) $_POST['subscription_max']);
00784                 $this->object->enableWaitingList((int) $_POST['waiting_list']);
00785                 $this->object->setSubscriptionNotify((int) $_POST['subscription_notification']);
00786                 $this->object->setViewMode((int) $_POST['view_mode']);
00787 
00788                 if($this->object->getViewMode() == IL_CRS_VIEW_TIMING)
00789                 {
00790                         $this->object->setOrderType(IL_CRS_SORT_ACTIVATION);
00791                 }
00792                 else
00793                 {
00794                         $this->object->setOrderType((int) $_POST['order_type']);
00795                 }
00796                 $this->object->setArchiveStart($this->toUnix($_POST['archive_start'],$_POST['archive_start_time']));
00797                 $this->object->setArchiveEnd($this->toUnix($_POST['archive_end'],$_POST['archive_end_time']));
00798                 $this->object->setArchiveType($_POST['archive_type']);
00799                 $this->object->setAboStatus((int) $_POST['abo']);
00800                 $this->object->setShowMembers((int) $_POST['show_members']);
00801 
00802                 if($this->object->validate())
00803                 {
00804                         $this->object->update();
00805                         sendInfo($this->lng->txt('settings_saved'));
00806                 }
00807                 else
00808                 {
00809                         sendInfo($this->object->getMessage());
00810                 }
00811                 $this->editObject();
00812         }
00813 
00814         function editObject()
00815         {
00816                 global $ilAccess,$ilErr;
00817 
00818                 if(!$ilAccess->checkAccess('write','',$this->ref_id))
00819                 {
00820                         $ilErr->raiseError($this->lng->txt('msg_no_perm_read'),$ilErr->MESSAGE);
00821                 }
00822                 $this->setSubTabs('properties');
00823                 $this->tabs_gui->setTabActive('settings');
00824                 $this->tabs_gui->setSubTabActive('crs_settings');
00825                 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.crs_settings.html','course');
00826                 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
00827 
00828                 // Visibility
00829                 $this->tpl->setVariable("TXT_VISIBILITY",$this->lng->txt('crs_visibility'));
00830                 $this->tpl->setVariable("TXT_VISIBILITY_UNVISIBLE",$this->lng->txt('crs_visibility_unvisible'));
00831                 $this->tpl->setVariable("TXT_VISIBILITY_LIMITLESS",$this->lng->txt('crs_visibility_limitless'));
00832                 $this->tpl->setVariable("TXT_VISIBILITY_UNTIL",$this->lng->txt('crs_visibility_until'));
00833                 $this->tpl->setVariable("ACTIVATION_UNV_INFO",$this->lng->txt('crs_availability_unvisible_info'));
00834                 $this->tpl->setVariable("ACTIVATION_UNL_INFO",$this->lng->txt('crs_availability_limitless_info'));
00835                 $this->tpl->setVariable("ACTIVATION_LIM_INFO",$this->lng->txt('crs_availability_until_info'));
00836 
00837                 $this->tpl->setVariable("ACTIVATION_OFFLINE",
00838                                                                 ilUtil::formRadioButton(($this->object->getActivationType() == IL_CRS_ACTIVATION_OFFLINE) ? 1 : 0,
00839                                                                                                                 'activation_type',
00840                                                                                                                 IL_CRS_ACTIVATION_OFFLINE));
00841                 
00842                 $this->tpl->setVariable("ACTIVATION_UNLIMITED",
00843                                                                 ilUtil::formRadioButton(($this->object->getActivationType() == IL_CRS_ACTIVATION_UNLIMITED) ? 1 : 0,
00844                                                                                                                 'activation_type',
00845                                                                                                                 IL_CRS_ACTIVATION_UNLIMITED));
00846                 
00847                 $this->tpl->setVariable("ACTIVATION_UNTIL",
00848                                                                 ilUtil::formRadioButton(($this->object->getActivationType() == IL_CRS_ACTIVATION_LIMITED) ? 1 : 0,
00849                                                                                                                 'activation_type',
00850                                                                                                                 IL_CRS_ACTIVATION_LIMITED));
00851                 $this->tpl->setVariable("TXT_BEGIN",$this->lng->txt('crs_start'));
00852                 $this->tpl->setVariable("TXT_END",$this->lng->txt('crs_end'));
00853                 $this->tpl->setVariable("TXT_TIME",$this->lng->txt('time'));
00854                 
00855                 $date = $this->__prepareDateSelect($this->object->getActivationStart());
00856                 $this->tpl->setVariable("ACTIVATION_START_DATE_SELECT",
00857                                                                 ilUtil::makeDateSelect('activation_start',$date['y'],$date['m'],$date['d'],date('Y',time())));
00858 
00859                 $date = $this->__prepareTimeSelect($this->object->getActivationStart());
00860                 $this->tpl->setVariable("ACTIVATION_START_TIME_SELECT",
00861                                                                 ilUtil::makeTimeSelect('activation_start_time',true,$date['h'],$date['m'],0,false));
00862 
00863                 $date = $this->__prepareDateSelect($this->object->getActivationEnd());
00864                 $this->tpl->setVariable("ACTIVATION_END_DATE_SELECT",
00865                                                                 ilUtil::makeDateSelect('activation_end',$date['y'],$date['m'],$date['d'],date('Y',time())));
00866 
00867                 $date = $this->__prepareTimeSelect($this->object->getActivationEnd());
00868                 $this->tpl->setVariable("ACTIVATION_END_TIME_SELECT",
00869                                                                 ilUtil::makeTimeSelect('activation_end_time',true,$date['h'],$date['m'],0,false));
00870 
00871                 // Registration
00872                 $this->tpl->setVariable("TXT_REGISTRATION_DEACTIVATED",$this->lng->txt('crs_reg_deactivated'));
00873                 $this->tpl->setVariable("TXT_REGISTRATION_UNLIMITED",$this->lng->txt('crs_registration_unlimited'));
00874                 $this->tpl->setVariable("TXT_REGISTRATION_LIMITED",$this->lng->txt('crs_registration_limited'));
00875                 $this->tpl->setVariable("TXT_REGISTRATION_TYPE",$this->lng->txt('crs_registration_type'));
00876 
00877                 $this->tpl->setVariable("REG_DEAC_INFO",$this->lng->txt('crs_registration_deactivated'));
00878                 $this->tpl->setVariable("REG_UNLIM_INFO",$this->lng->txt('crs_reg_unlim_info'));
00879                 $this->tpl->setVariable("REG_LIM_INFO",$this->lng->txt('crs_reg_lim_info'));
00880                 $this->tpl->setVariable("REG_MAX_INFO",$this->lng->txt('crs_reg_max_info'));
00881                 $this->tpl->setVariable("REG_NOTY_INFO",$this->lng->txt('crs_reg_notify_info'));
00882                 $this->tpl->setVariable("REG_WAIT_INFO",$this->lng->txt('crs_wait_info'));
00883                 $this->tpl->setVariable('REG_TYPE_INFO',$this->lng->txt('crs_reg_type_info'));
00884                 
00885 
00886                 $this->tpl->setVariable("TXT_SUBSCRIPTION",$this->lng->txt("crs_reg"));
00887                 $this->tpl->setVariable("TXT_SUBSCRIPTION_UNLIMITED",$this->lng->txt("crs_unlimited"));
00888                 $this->tpl->setVariable("TXT_SUBSCRIPTION_START",$this->lng->txt("crs_start"));
00889                 $this->tpl->setVariable("TXT_SUBSCRIPTION_END",$this->lng->txt("crs_end"));
00890 
00891                 $this->tpl->setVariable("TXT_SUBSCRIPTION_OPTIONS",$this->lng->txt("crs_subscription_type"));
00892                 $this->tpl->setVariable("TXT_SUBSCRIPTION_MAX_MEMBERS",$this->lng->txt("crs_subscription_max_members"));
00893                 $this->tpl->setVariable("TXT_SUBSCRIPTION_NOTIFY",$this->lng->txt("crs_subscription_notify"));
00894                 $this->tpl->setVariable("TXT_DEACTIVATED",$this->lng->txt("crs_subscription_options_deactivated"));
00895                 $this->tpl->setVariable("TXT_CONFIRMATION",$this->lng->txt("crs_subscription_options_confirmation"));
00896                 $this->tpl->setVariable("TXT_DIRECT",$this->lng->txt("crs_subscription_options_direct"));
00897                 $this->tpl->setVariable("TXT_PASSWORD",$this->lng->txt("crs_subscription_options_password"));
00898                 $this->tpl->setVariable("TXT_WAIT",$this->lng->txt('crs_waiting_list'));
00899                 $this->tpl->setVariable("TXT_NOTIFY",$this->lng->txt('crs_notification'));
00900 
00901                 $this->tpl->setVariable("REGISTRATION_DEACTIVATED",
00902                                                                 ilUtil::formRadioButton(($this->object->getSubscriptionLimitationType() == 
00903                                                                                                                  IL_CRS_SUBSCRIPTION_DEACTIVATED) ? 1 : 0,
00904                                                                                                                 'subscription_limitation_type',
00905                                                                                                                 IL_CRS_SUBSCRIPTION_DEACTIVATED));
00906                 
00907                 $this->tpl->setVariable("REGISTRATION_UNLIMITED",
00908                                                                 ilUtil::formRadioButton(($this->object->getSubscriptionLimitationType() == 
00909                                                                                                                  IL_CRS_SUBSCRIPTION_UNLIMITED) ? 1 : 0,
00910                                                                                                                 'subscription_limitation_type',
00911                                                                                                                 IL_CRS_SUBSCRIPTION_UNLIMITED));
00912                 
00913                 $this->tpl->setVariable("REGISTRATION_LIMITED",
00914                                                                 ilUtil::formRadioButton(($this->object->getSubscriptionLimitationType() == 
00915                                                                                                                  IL_CRS_SUBSCRIPTION_LIMITED) ? 1 : 0,
00916                                                                                                                 'subscription_limitation_type',
00917                                                                                                                 IL_CRS_SUBSCRIPTION_LIMITED));
00918 
00919                 $this->tpl->setVariable("RADIO_SUB_CONFIRMATION",
00920                                                                 ilUtil::formRadioButton(($this->object->getSubscriptionType() == 
00921                                                                                                                  IL_CRS_SUBSCRIPTION_CONFIRMATION) ? 1 : 0,
00922                                                                                                                 'subscription_type',
00923                                                                                                                 IL_CRS_SUBSCRIPTION_CONFIRMATION));
00924                 
00925                 $this->tpl->setVariable("RADIO_SUB_DIRECT",
00926                                                                 ilUtil::formRadioButton(($this->object->getSubscriptionType() == 
00927                                                                                                                  IL_CRS_SUBSCRIPTION_DIRECT) ? 1 : 0,
00928                                                                                                                 'subscription_type',
00929                                                                                                                 IL_CRS_SUBSCRIPTION_DIRECT));
00930                 
00931                 $this->tpl->setVariable("RADIO_SUB_PASSWORD",
00932                                                                 ilUtil::formRadioButton(($this->object->getSubscriptionType() == 
00933                                                                                                                  IL_CRS_SUBSCRIPTION_PASSWORD) ? 1 : 0,
00934                                                                                                                 'subscription_type',
00935                                                                                                                 IL_CRS_SUBSCRIPTION_PASSWORD));
00936                 $this->tpl->setVariable("SUBSCRIPTION_PASSWORD",$this->object->getSubscriptionPassword());
00937 
00938                 $date = $this->__prepareDateSelect($this->object->getSubscriptionStart());
00939                 $this->tpl->setVariable("SUBSCRIPTION_START_DATE_SELECT",
00940                                                                 ilUtil::makeDateSelect('subscription_start',$date['y'],$date['m'],$date['d'],date('Y',time())));
00941 
00942                 $date = $this->__prepareTimeSelect($this->object->getSubscriptionStart());
00943                 $this->tpl->setVariable("SUBSCRIPTION_START_TIME_SELECT",
00944                                                                 ilUtil::makeTimeSelect('subscription_start_time',true,$date['h'],$date['m'],0,false));
00945 
00946                 $date = $this->__prepareDateSelect($this->object->getSubscriptionEnd());
00947                 $this->tpl->setVariable("SUBSCRIPTION_END_DATE_SELECT",
00948                                                                 ilUtil::makeDateSelect('subscription_end',$date['y'],$date['m'],$date['d'],date('Y',time())));
00949 
00950                 $date = $this->__prepareTimeSelect($this->object->getSubscriptionEnd());
00951                 $this->tpl->setVariable("SUBSCRIPTION_END_TIME_SELECT",
00952                                                                 ilUtil::makeTimeSelect('subscription_end_time',true,$date['h'],$date['m'],0,false));
00953 
00954                 $this->tpl->setVariable("SUBSCRIPTION_MAX_MEMBERS",$this->object->getSubscriptionMaxMembers());
00955                 $this->tpl->setVariable("CHECK_WAIT",ilUtil::formCheckbox($this->object->enabledWaitingList(),
00956                                                                                                                                   'waiting_list',
00957                                                                                                                                   1));
00958                 $this->tpl->setVariable("CHECK_SUBSCRIPTION_NOTIFY",ilUtil::formCheckbox($this->object->getSubscriptionNotify(),
00959                                                                                                                                                                  'subscription_notification',
00960                                                                                                                                                                  1));
00961                 
00962                 // Viewmode
00963                 $this->tpl->setVariable("TXT_VIEWMODE",$this->lng->txt('crs_view_mode'));
00964                 $this->tpl->setVariable("TXT_STANDARD_VIEW",$this->lng->txt('crs_view_standard'));
00965                 $this->tpl->setVariable("TXT_OBJ_VIEW",$this->lng->txt('crs_view_objective'));
00966                 $this->tpl->setVariable("TXT_TIMING_VIEW",$this->lng->txt('crs_view_timing'));
00967                 $this->tpl->setVariable("TXT_ARCHIVE_VIEW",$this->lng->txt('crs_view_archive'));
00968                 $this->tpl->setVariable("TXT_DOWNLOAD",$this->lng->txt('crs_archive_download'));
00969 
00970                 $this->tpl->setVariable("VIEW_STANDARD_INFO",$this->lng->txt('crs_view_info_standard'));
00971                 $this->tpl->setVariable("VIEW_OBJECTIVE_INFO",$this->lng->txt('crs_view_info_objective'));
00972                 $this->tpl->setVariable("VIEW_TIMING_INFO",$this->lng->txt('crs_view_info_timing'));
00973                 $this->tpl->setVariable("VIEW_ARCHIVE_INFO",$this->lng->txt('crs_archive_info'));
00974 
00975                 $this->tpl->setVariable("VIEW_STANDARD",ilUtil::formRadioButton(
00976                                                                         ($this->object->getViewMode() == IL_CRS_VIEW_STANDARD) ? true : false,
00977                                                                         'view_mode',
00978                                                                         IL_CRS_VIEW_STANDARD));
00979                 $this->tpl->setVariable("VIEW_OBJECTIVE",ilUtil::formRadioButton(
00980                                                                         ($this->object->getViewMode() == IL_CRS_VIEW_OBJECTIVE) ? true : false,
00981                                                                         'view_mode',
00982                                                                         IL_CRS_VIEW_OBJECTIVE));
00983                 $this->tpl->setVariable("VIEW_TIMING",ilUtil::formRadioButton(
00984                                                                         ($this->object->getViewMode() == IL_CRS_VIEW_TIMING) ? true : false,
00985                                                                         'view_mode',
00986                                                                         IL_CRS_VIEW_TIMING));
00987                 $this->tpl->setVariable("VIEW_ARCHIVE",ilUtil::formRadioButton(
00988                                                                         ($this->object->getViewMode() == IL_CRS_VIEW_ARCHIVE) ? true : false,
00989                                                                         'view_mode',
00990                                                                         IL_CRS_VIEW_ARCHIVE));
00991 
00992                 $date = $this->__prepareDateSelect($this->object->getArchiveStart());
00993                 $this->tpl->setVariable("ARCHIVE_START_DATE_SELECT",
00994                                                                 ilUtil::makeDateSelect('archive_start',$date['y'],$date['m'],$date['d'],date('Y',time())));
00995 
00996                 $date = $this->__prepareTimeSelect($this->object->getArchiveStart());
00997                 $this->tpl->setVariable("ARCHIVE_START_TIME_SELECT",
00998                                                                 ilUtil::makeTimeSelect('archive_start_time',true,$date['h'],$date['m'],0,false));
00999 
01000                 $date = $this->__prepareDateSelect($this->object->getArchiveEnd());
01001                 $this->tpl->setVariable("ARCHIVE_END_DATE_SELECT",
01002                                                                 ilUtil::makeDateSelect('archive_end',$date['y'],$date['m'],$date['d'],date('Y',time())));
01003 
01004                 $date = $this->__prepareTimeSelect($this->object->getArchiveEnd());
01005                 $this->tpl->setVariable("ARCHIVE_END_TIME_SELECT",
01006                                                                 ilUtil::makeTimeSelect('archive_end_time',true,$date['h'],$date['m'],0,false));
01007 
01008                 $this->tpl->setVariable("CHECK_ARCHIVE_DOWNLOAD",ilUtil::formCheckbox(
01009                                                                         $this->object->getArchiveType() == IL_CRS_ARCHIVE_DOWNLOAD ? true : false,
01010                                                                         'archive_type',
01011                                                                         IL_CRS_ARCHIVE_DOWNLOAD));
01012 
01013                 // Sorting
01014                 $this->tpl->setVariable("TXT_SORT",$this->lng->txt('crs_sortorder_abo'));
01015                 $this->tpl->setVariable("TXT_MANUAL",$this->lng->txt("crs_sort_manual"));
01016                 $this->tpl->setVariable("TXT_TITLE",$this->lng->txt("crs_sort_title"));
01017                 $this->tpl->setVariable("TXT_SORT_ACTIVATION",$this->lng->txt("crs_sort_activation"));
01018 
01019                 $this->tpl->setVariable("SORT_TITLE",ilUtil::formRadioButton(
01020                                                                         $this->object->getOrderType() == IL_CRS_SORT_TITLE ? true : false,
01021                                                                         'order_type',
01022                                                                         IL_CRS_SORT_TITLE));
01023                 $this->tpl->setVariable("SORT_MANUAL",ilUtil::formRadioButton(
01024                                                                         $this->object->getOrderType() == IL_CRS_SORT_MANUAL ? true : false,
01025                                                                         'order_type',
01026                                                                         IL_CRS_SORT_MANUAL));
01027                 $this->tpl->setVariable("SORT_TIMING",ilUtil::formRadioButton(
01028                                                                         $this->object->getOrderType() == IL_CRS_SORT_ACTIVATION ? true : false,
01029                                                                         'order_type',
01030                                                                         IL_CRS_SORT_ACTIVATION));
01031 
01032                 $this->tpl->setVariable("SORT_TITLE_INFO",$this->lng->txt('crs_sort_title_info'));
01033                 $this->tpl->setVariable("SORT_MANUAL_INFO",$this->lng->txt('crs_sort_manual_info'));
01034                 $this->tpl->setVariable("SORT_TIMING_INFO",$this->lng->txt('crs_sort_timing_info'));
01035 
01036                 // Further settings
01037                 $this->tpl->setVariable("TXT_FURTHER_SETTINGS",$this->lng->txt('crs_further_settings'));
01038                 $this->tpl->setVariable("TXT_ADD_REMOVE_DESKTOP_ITEMS",$this->lng->txt('crs_add_remove_from_desktop'));
01039                 $this->tpl->setVariable("TXT_ADD_DESKTOP_INFO",$this->lng->txt('crs_add_remove_from_desktop_info'));
01040 
01041                 $this->tpl->setVariable("CHECK_DESKTOP",ilUtil::formCheckbox($this->object->getAboStatus(),
01042                                                                                                                                          'abo',
01043                                                                                                                                          1));
01044                 
01045                 $this->tpl->setVariable("TXT_SHOW_MEMBERS",$this->lng->txt('crs_show_members'));
01046                 $this->tpl->setVariable("TXT_SHOW_MEMBERS_INFO",$this->lng->txt('crs_show_members_info'));
01047 
01048                 $this->tpl->setVariable("SHOW_MEMBERS",ilUtil::formCheckbox($this->object->getShowMembers(),
01049                                                                                                                                          'show_members',
01050                                                                                                                                          1));
01051 
01052                 // Footer
01053                 $this->tpl->setVariable("TXT_BTN_UPDATE",$this->lng->txt('save'));
01054                 $this->tpl->setVariable("TXT_CANCEL",$this->lng->txt('cancel'));
01055         }
01056 
01057                                 
01058 
01062         function editCourseIconsObject()
01063         {
01064                 global $rbacsystem;
01065 
01066                 if(!$rbacsystem->checkAccess("write", $this->ref_id))
01067                 {
01068                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_read"),$this->ilias->error_obj->MESSAGE);
01069                 }
01070                 
01071                 $this->setSubTabs("properties");
01072 
01073                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_edit_icons.html","course");
01074                 $this->showCustomIconsEditing();
01075                 $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
01076                 $this->tpl->setVariable("TXT_CANCEL", $this->lng->txt("cancel"));
01077                 $this->tpl->setVariable("TXT_SUBMIT", $this->lng->txt("save"));
01078                 $this->tpl->setVariable("CMD_CANCEL", "cancel");
01079                 $this->tpl->setVariable("CMD_SUBMIT", "updateCourseIcons");
01080                 $this->tpl->parseCurrentBlock();
01081         }
01082 
01083         function sendFileObject()
01084         {
01085                 include_once 'course/classes/class.ilCourseFile.php';
01086                 $file = new ilCourseFile((int) $_GET['file_id']);
01087                 
01088                 ilUtil::deliverFile($file->getAbsolutePath(),$file->getFileName(),$file->getFileType());
01089                 return true;
01090         }
01091         
01095         function updateCourseIconsObject()
01096         {
01097                 global $rbacsystem;
01098                 
01099                 if (!$rbacsystem->checkAccess("write",$_GET["ref_id"]) )
01100                 {
01101                         $this->ilErr->raiseError($this->lng->txt("permission_denied"),$this->ilErr->MESSAGE);
01102                 }
01103                 
01104                 //save custom icons
01105                 if ($this->ilias->getSetting("custom_icons"))
01106                 {
01107                         $this->object->saveIcons($_FILES["cont_big_icon"],
01108                                 $_FILES["cont_small_icon"]);
01109                 }
01110 
01111                 sendInfo($this->lng->txt("msg_obj_modified"),true);
01112                 $this->ctrl->redirect($this,"editCourseIcons");
01113 
01114         }
01115 
01116 
01120         function setSubTabs($a_tab)
01121         {
01122                 global $rbacsystem,$ilUser,$ilAccess;
01123                 
01124                 switch ($a_tab)
01125                 {
01126                         case "properties":
01127                                 $this->tabs_gui->addSubTabTarget("crs_settings",
01128                                                                                                  $this->ctrl->getLinkTarget($this,'edit'),
01129                                                                                                  "edit", get_class($this));
01130 
01131                                 $this->tabs_gui->addSubTabTarget("crs_info_settings",
01132                                                                                                  $this->ctrl->getLinkTarget($this,'editInfo'),
01133                                                                                                  "editInfo", get_class($this));
01134 
01135                                 $this->tabs_gui->addSubTabTarget("preconditions",
01136                                                                                                  $this->ctrl->getLinkTargetByClass('ilConditionHandlerInterface','listConditions'),
01137                                                                                                  "", "ilConditionHandlerInterface");
01138                                 $this->tabs_gui->addSubTabTarget("crs_start_objects",
01139                                                                                                  $this->ctrl->getLinkTarget($this,'listStructure'),
01140                                                                                                  "listStructure", get_class($this));
01141                                 $this->tabs_gui->addSubTabTarget('groupings',
01142                                                                                                  $this->ctrl->getLinkTargetByClass('ilobjcoursegroupinggui','listGroupings'),
01143                                                                                                  'listGroupings',
01144                                                                                                  get_class($this));
01145 
01146                                 if ($this->ilias->getSetting("custom_icons"))
01147                                 {
01148                                         $this->tabs_gui->addSubTabTarget("icon_settings",
01149                                                                                                          $this->ctrl->getLinkTarget($this,'editCourseIcons'),
01150                                                                                                          "editCourseIcons", get_class($this));
01151                                 }
01152                                 break;
01153                                 
01154                         case "item_activation":
01155                                 $this->tabs_gui->addSubTabTarget("activation",
01156                                                                                                  $this->ctrl->getLinkTargetByClass('ilCourseItemAdministrationGUI','edit'),
01157                                                                                                  "edit", get_class($this));
01158                                 $this->ctrl->setParameterByClass('ilconditionhandlerinterface','item_id',(int) $_GET['item_id']);
01159                                 $this->tabs_gui->addSubTabTarget("preconditions",
01160                                                                                                  $this->ctrl->getLinkTargetByClass('ilConditionHandlerInterface','listConditions'),
01161                                                                                                  "", "ilConditionHandlerInterface");
01162                                 break;
01163                                 
01164                         case 'members':
01165                                 if($ilAccess->checkAccess('write','',$this->object->getRefId()))
01166                                 {
01167                                         $this->tabs_gui->addSubTabTarget("crs_member_administration",
01168                                                                                                          $this->ctrl->getLinkTarget($this,'members'),
01169                                                                                                          "members", get_class($this));
01170                                 }
01171                                 $this->tabs_gui->addSubTabTarget("crs_members_gallery",
01172                                                                                                  $this->ctrl->getLinkTarget($this,'membersGallery'),
01173                                                                                                  "membersGallery", get_class($this));
01174                                 
01175                                 include_once 'classes/class.ilMail.php';
01176                                 $mail =& new ilMail($ilUser->getId());
01177                                 if($rbacsystem->checkAccess('mail_visible',$mail->getMailObjectReferenceId()))
01178                                 {
01179                                         $this->tabs_gui->addSubTabTarget("mail_members",
01180                                                                                                          $this->ctrl->getLinkTarget($this,'mailMembers'),
01181                                                                                                          "mailMembers", get_class($this));
01182                                 }
01183                                 break;
01184 
01185                                 
01186                 }
01187         }
01188 
01194         function removeSmallIconObject()
01195         {
01196                 $this->object->removeSmallIcon();
01197                 ilUtil::redirect($this->ctrl->getLinkTarget($this, "editCourseIcons"));
01198         }
01199 
01205         function removeBigIconObject()
01206         {
01207                 $this->object->removeBigIcon();
01208                 ilUtil::redirect($this->ctrl->getLinkTarget($this, "editCourseIcons"));
01209         }
01210 
01211 
01216         function saveObject()
01217         {
01218                 global $rbacadmin;
01219 
01220                 $newObj =& parent::saveObject();
01221                 $newObj->initDefaultRoles();
01222                 $newObj->initCourseMemberObject();
01223                 $newObj->members_obj->add($this->ilias->account,$newObj->members_obj->ROLE_ADMIN);
01224                 
01225                 // always send a message
01226                 sendInfo($this->lng->txt("crs_added"),true);
01227                 
01228                 $this->ctrl->setParameter($this, "ref_id", $newObj->getRefId());
01229                 ilUtil::redirect($this->getReturnLocation("save",
01230                         $this->ctrl->getLinkTarget($this, "edit")));
01231                 //ilUtil::redirect($this->getReturnLocation("save",$this->ctrl->getLinkTarget($this,"")));
01232         }
01233 
01234 
01235 
01236         
01237         function downloadArchivesObject()
01238         {
01239                 global $rbacsystem;
01240 
01241                 $_POST["archives"] = $_POST["archives"] ? $_POST["archives"] : array();
01242 
01243                 // MINIMUM ACCESS LEVEL = 'write'
01244                 if(!$rbacsystem->checkAccess("read", $this->object->getRefId()))
01245                 {
01246                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_read"),$this->ilias->error_obj->MESSAGE);
01247                 }
01248                 if(!count($_POST['archives']))
01249                 {
01250                         sendInfo($this->lng->txt('crs_no_archive_selected'));
01251                         $this->archiveObject();
01252 
01253                         return false;
01254                 }
01255                 if(count($_POST['archives']) > 1)
01256                 {
01257                         sendInfo($this->lng->txt('crs_select_one_archive'));
01258                         $this->archiveObject();
01259 
01260                         return false;
01261                 }
01262 
01263                 $this->object->initCourseArchiveObject();
01264                 
01265                 $abs_path = $this->object->archives_obj->getArchiveFile((int) $_POST['archives'][0]);
01266                 $basename = basename($abs_path);
01267 
01268                 ilUtil::deliverFile($abs_path,$basename);
01269         }
01270 
01271 
01272         function __readMemberData($ids)
01273         {
01274                 if($this->show_tracking)
01275                 {
01276                         include_once 'Services/Tracking/classes/class.ilLPStatusWrapper.php';
01277                         $completed = ilLPStatusWrapper::_getCompleted($this->object->getId());
01278                         $in_progress = ilLPStatusWrapper::_getInProgress($this->object->getId());
01279                         $not_attempted = ilLPStatusWrapper::_getNotAttempted($this->object->getId());
01280                 }
01281 
01282                 foreach($ids as $usr_id)
01283                 {
01284                         $name = ilObjUser::_lookupName($usr_id);
01285                         $data = $this->object->members_obj->getUserData($usr_id);
01286                         $tmp_data['firstname'] = $name['firstname'];
01287                         $tmp_data['lastname'] = $name['lastname'];
01288                         $tmp_data['login'] = ilObjUser::_lookupLogin($usr_id);
01289                         $tmp_data['passed'] = $data['passed'] ? 1 : 0;
01290                         $tmp_data['notification'] = $data['status'] == $this->object->members_obj->STATUS_NOTIFY ? 1 : 0;
01291                         $tmp_data['blocked'] = $data['status'] == $this->object->members_obj->STATUS_BLOCKED ? 1 : 0;
01292                         $tmp_data['usr_id'] = $data['usr_id'];
01293                         $tmp_data['login'] = ilObjUser::_lookupLogin($usr_id);
01294 
01295                         if($this->show_tracking)
01296                         {
01297                                 if(in_array($usr_id,$completed))
01298                                 {
01299                                         $tmp_data['progress'] = $this->lng->txt('trac_completed');
01300                                 }
01301                                 elseif(in_array($usr_id,$in_progress))
01302                                 {
01303                                         $tmp_data['progress'] = $this->lng->txt('trac_in_progress');
01304                                 }
01305                                 else
01306                                 {
01307                                         $tmp_data['progress'] = $this->lng->txt('trac_not_attempted');
01308                                 }
01309                         }
01310                                         
01311                         $members[] = $tmp_data;
01312                 }
01313                 return $members ? $members : array();
01314         }
01315 
01316         function membersObject()
01317         {
01318                 include_once './classes/class.ilTableGUI.php';
01319                 include_once './Services/Tracking/classes/class.ilObjUserTracking.php';
01320                 include_once './course/classes/class.ilCourseItems.php';
01321                 
01322                 $_SESSION['crs_print_sort'] = $_GET['sort_by'] ? $_GET['sort_by'] : 'lastname';
01323                 $_SESSION['crs_print_order'] = $_GET['sort_order'] ? $_GET['sort_order'] : 'asc';
01324                 
01325                 $this->lng->loadLanguageModule('trac');
01326                 $this->show_tracking = (ilObjUserTracking::_enabledLearningProgress() and ilObjUserTracking::_enabledUserRelatedData());
01327 
01328                 $_SESSION['crs_admin_hide'] = isset($_GET['admin_show_details']) ? !$_GET['admin_show_details'] : 
01329                         $_SESSION['crs_admin_hide'];
01330                 $_SESSION['crs_tutor_hide'] = isset($_GET['tutor_show_details']) ? !$_GET['tutor_show_details'] : 
01331                         $_SESSION['crs_tutor_hide'];
01332                 $_SESSION['crs_member_hide'] = isset($_GET['member_show_details']) ? !$_GET['member_show_details'] : 
01333                         $_SESSION['crs_member_hide'];
01334 
01335                 global $ilAccess,$ilErr,$ilUser;
01336 
01337                 if(!$ilAccess->checkAccess('write','',$this->object->getRefId()))
01338                 {
01339                         $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
01340                 }
01341 
01342                 $this->timings_enabled = (ilCourseItems::_hasChangeableTimings($this->object->getRefId()) and 
01343                         ($this->object->getViewMode() == IL_CRS_VIEW_TIMING));
01344 
01345                 $this->setSubTabs('members');
01346                 $this->tabs_gui->setTabActive('members');
01347                 $this->tabs_gui->setSubTabActive('crs_member_administration');
01348 
01349                 // Waitinglist
01350                 $this->__showWaitingList();
01351                 $this->__showSubscribers();
01352 
01353                 // add members
01354                 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
01355                 $this->tpl->setCurrentBlock("btn_cell");
01356                 $this->tpl->setVariable("BTN_LINK",$this->ctrl->getLinkTargetByClass('ilRepositorySearchGUI','start'));
01357                 $this->tpl->setVariable("BTN_TXT",$this->lng->txt("crs_add_member"));
01358                 $this->tpl->parseCurrentBlock();
01359                 
01360                 // print
01361                 $this->__showButton("printMembers",$this->lng->txt("crs_print_list"),"target=\"_blank\"");
01362 
01363                 $this->tpl->addBlockfile('ADM_CONTENT','adm_content','tpl.edit_members.html','course');
01364                 $this->tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
01365                 $this->tpl->setVariable("HEADER_IMG",ilUtil::getImagePath('icon_usr.gif'));
01366                 $this->tpl->setVariable("HEADER_ALT",$this->lng->txt('crs_members_table'));
01367                 $this->tpl->setVariable("MEMBER_TABLE_TITLE",$this->lng->txt('crs_members_table'));
01368 
01369 
01371                 // Admins
01373                 $this->__renderAdminsTable();
01374                 
01376                 // Tutors
01378                 $this->__renderTutorsTable();
01379                         
01381                 // Members
01383                 $this->__renderMembersTable();
01384 
01385                 $actions = array("deleteMembersObject"  => $this->lng->txt("crs_delete_member"),
01386                                                  "sendMail" => $this->lng->txt('crs_mem_send_mail'));
01387                 $this->tpl->setVariable("SELECT_ACTION",ilUtil::formSelect(1,"action",$actions,false,true));
01388                 $this->tpl->setVariable("ARROW_DOWNRIGHT",ilUtil::getImagePath("arrow_downright.gif"));
01389                 $this->tpl->setVariable("TXT_BTN_EXECUTE",$this->lng->txt('execute'));
01390                 $this->tpl->setVariable("TXT_BTN_UPDATE",$this->lng->txt('save'));
01391 
01392         }
01393 
01394         function updateMembersObject()
01395         {
01396                 global $ilAccess,$ilErr,$ilUser,$rbacadmin;
01397 
01398                 if(!$ilAccess->checkAccess('write','',$this->object->getRefId()))
01399                 {
01400                         $ilErr->raiseError($this->lng->txt("msg_no_perm_write"),$ilErr->MESSAGE);
01401                 }
01402                 if(!is_array($_POST['visible_member_ids']))
01403                 {
01404                         sendInfo($this->lng->txt('no_checkbox'));
01405                         $this->membersObject();
01406                         return false;
01407                 }
01408                 $passed = is_array($_POST['passed']) ? $_POST['passed'] : array();
01409                 $blocked = is_array($_POST['blocked']) ? $_POST['blocked'] : array();
01410                 $notification = is_array($_POST['notification']) ? $_POST['notification'] : array();
01411 
01412                 foreach($_POST['visible_member_ids'] as $member_id)
01413                 {
01414                         $member_data = $this->object->members_obj->getUserData($member_id);
01415                         
01416                         ilCourseMembers::_updatePassed($this->object->getId(),$member_id,in_array($member_id,$passed));
01417 
01418                         switch($member_data['role'])
01419                         {
01420                                 case $this->object->members_obj->ROLE_MEMBER:
01421                                         if(in_array($member_id,$blocked))
01422                                         {
01423                                                 ilCourseMembers::_updateStatus($this->object->getId(),$member_id,$this->object->members_obj->STATUS_BLOCKED);
01424                                                 $rbacadmin->deassignUser($this->object->getDefaultMemberRole(),$member_id);
01425                                         }
01426                                         else
01427                                         {
01428                                                 ilCourseMembers::_updateStatus($this->object->getId(),$member_id,$this->object->members_obj->STATUS_UNBLOCKED);
01429                                                 $rbacadmin->assignUser($this->object->getDefaultMemberRole(),$member_id);
01430                                         }
01431                                         break;
01432                                         
01433                                 default:
01434                                         if(in_array($member_id,$notification))
01435                                         {
01436                                                 ilCourseMembers::_updateStatus($this->object->getId(),$member_id,$this->object->members_obj->STATUS_NOTIFY);
01437                                         }
01438                                         else
01439                                         {
01440                                                 ilCourseMembers::_updateStatus($this->object->getId(),$member_id,$this->object->members_obj->STATUS_NO_NOTIFY);
01441                                         }
01442                                         break;
01443                         }
01444                                         
01445 
01446                                         
01447                         // Set Passed
01448                 }
01449                         
01450 
01451                 sendInfo($this->lng->txt('settings_saved'));
01452                 $this->membersObject();
01453         }
01454 
01455         function __renderAdminsTable()
01456         {
01457                 $this->tpl->setVariable("TXT_ADMINISTRATORS",$this->lng->txt('crs_administrators'));
01458 
01459                 if($_SESSION['crs_admin_hide'])
01460                 {
01461                         $this->tpl->setVariable("ADMIN_HIDE_TEXT",$this->lng->txt('show_details'));
01462                         $this->ctrl->setParameter($this,'admin_show_details',1);
01463                         $this->tpl->setVariable("ADMIN_HIDE",$this->ctrl->getLinkTarget($this,'members'));
01464                         $this->ctrl->clearParameters($this);
01465                         return true;
01466                 }
01467                 
01468                 $this->tpl->setVariable("ADMIN_HIDE_TEXT",$this->lng->txt('hide_details'));
01469                 $this->ctrl->setParameter($this,'admin_show_details',0);
01470                 $this->tpl->setVariable("ADMIN_HIDE",$this->ctrl->getLinkTarget($this,'members'));
01471                 $this->ctrl->clearParameters($this);
01472                         
01473 
01474                 $admin_tpl = new ilTemplate('tpl.table.html',true,true);
01475                 $admin_tpl->addBlockfile('TBL_CONTENT','tbl_content','tpl.member_admin_row.html','course');
01476 
01477 
01478                 $all_admins_data = $this->__readMemberData($admins = $this->object->members_obj->getAdmins());
01479                 $sorted_admins = ilUtil::sortArray($all_admins_data,$_GET["admin_sort_by"],$_GET["admin_sort_order"]);
01480                 #$sliced_admins = array_slice($sorted_admins,$_GET['admin_offset'],$_GET['limit']); 
01481                 $sliced_admins = $sorted_admins;
01482                 $counter = 0;
01483                 foreach($sliced_admins as $admin)
01484                 {
01485                         $admin_tpl->setCurrentBlock("link");
01486                         $this->ctrl->setParameter($this,'member_id',$admin['usr_id']);
01487                         $admin_tpl->setVariable('LINK_NAME',$this->ctrl->getLinkTarget($this,'editMember'));
01488                         $admin_tpl->setVariable("LINK_TXT",$this->lng->txt('edit'));
01489                         $admin_tpl->parseCurrentBlock();
01490                         $this->ctrl->clearParameters($this);
01491 
01492                         if($this->timings_enabled)
01493                         {
01494                                 $admin_tpl->setCurrentBlock("link");
01495                                 $this->ctrl->setParameterByClass('ilcoursecontentgui','member_id',$admin['usr_id']);
01496                                 $admin_tpl->setVariable('LINK_NAME',$this->ctrl->getLinkTargetByClass('ilcoursecontentgui','showUserTimings'));
01497                                 $admin_tpl->setVariable("LINK_TXT",$this->lng->txt('timings_timings'));
01498                                 $admin_tpl->parseCurrentBlock();
01499                                 $this->ctrl->clearParametersByClass('ilcoursecontentgui');
01500                         }
01501                                 
01502 
01503                         $admin_tpl->setCurrentBlock("tbl_content");
01504 
01505                         if($admin['passed'])
01506                         {
01507                                 $admin_tpl->setVariable("CHECKED_PASSED",'checked="checked"');
01508                         }
01509                         if($admin['notification'])
01510                         {
01511                                 $admin_tpl->setVariable("CHECKED_NOTIFICATION",'checked="checked"');
01512                         }
01513                         if($this->show_tracking)
01514                         {
01515                                 $admin_tpl->setVariable("VAL_PROGRESS",$admin['progress']);
01516                         }
01517 
01518                         $admin_tpl->setVariable("CSS_ROW",ilUtil::switchColor(++$couter,'tblrow1','tblrow2'));
01519                         $admin_tpl->setVariable("USER_ID",$admin['usr_id']);
01520                         $admin_tpl->setVariable("LASTNAME",$admin['lastname']);
01521                         $admin_tpl->setVariable("FIRSTNAME",$admin['firstname']);
01522                         $admin_tpl->setVariable("LOGIN",$admin['login']);
01523                         $admin_tpl->parseCurrentBlock();
01524                 }
01525                 $admin_tpl->setCurrentBlock("select_row");
01526                 $admin_tpl->setVariable("ROWCLASS",ilUtil::switchColor(++$couter,'tblrow1','tblrow2'));
01527                 $admin_tpl->setVariable("SELECT_ALL",$this->lng->txt('select_all'));
01528                 $admin_tpl->parseCurrentBlock();
01529 
01530                 $tbl = new ilTableGUI($admins,false);
01531                 $tbl->setTemplate($admin_tpl);
01532                 
01533                 if($this->show_tracking)
01534                 {
01535                         $tbl->setHeaderNames(array('',
01536                                                                            $this->lng->txt('name'),
01537                                                                            $this->lng->txt('login'),
01538                                                                            $this->lng->txt('learning_progress'),
01539                                                                            $this->lng->txt('crs_passed'),
01540                                                                            $this->lng->txt('crs_notification'),''));
01541                         $tbl->setHeaderVars(array("",
01542                                                                           "lastname",
01543                                                                           "login",
01544                                                                           "progress",
01545                                                                           "passed",
01546                                                                           "notification",''),
01547                                                                 $this->ctrl->getParameterArray($this,'members'));
01548                 }
01549                 else
01550                 {
01551                         $tbl->setHeaderNames(array('',
01552                                                                            $this->lng->txt('name'),
01553                                                                            $this->lng->txt('login'),
01554                                                                            $this->lng->txt('crs_passed'),
01555                                                                            $this->lng->txt('crs_notification'),''));
01556                         $tbl->setHeaderVars(array("",
01557                                                                           "lastname",
01558                                                                           "login",
01559                                                                           "passed",
01560                                                                           "notification",''),
01561                                                                 $this->ctrl->getParameterArray($this,'members'));
01562                 }               
01563                 $tbl->setOrderColumn($_GET["admin_sort_by"]);
01564                 $tbl->setOrderDirection($_GET["admin_sort_order"]);
01565                 $tbl->setOffset($_GET["admin_offset"]);
01566                 $tbl->setMaxCount(count($admins));
01567                 $tbl->setPrefix('admin_');
01568                 $tbl->disable('table');
01569                 $tbl->disable('form');
01570                 $tbl->disable('title');
01571                 $tbl->disable('icon');
01572                 $tbl->disable('content');
01573 
01574                 $this->tpl->setVariable("ADMINISTRATORS",$tbl->render());
01575         }
01576 
01577         function __renderTutorsTable()
01578         {
01579                 $all_tutors_data = $this->__readMemberData($tutors = $this->object->members_obj->getTutors());
01580                 if(!count($all_tutors_data))
01581                 {
01582                         return false;
01583                 }
01584                 
01585                 $this->tpl->setVariable("TXT_TUTORS",$this->lng->txt('crs_tutors'));
01586 
01587                 if($_SESSION['crs_tutor_hide'])
01588                 {
01589                         $this->tpl->setVariable("TUTOR_HIDE_TEXT",$this->lng->txt('show_details'));
01590                         $this->ctrl->setParameter($this,'tutor_show_details',1);
01591                         $this->tpl->setVariable("TUTOR_HIDE",$this->ctrl->getLinkTarget($this,'members'));
01592                         $this->ctrl->clearParameters($this);
01593                         return true;
01594                 }
01595                 
01596                 $this->tpl->setVariable("TUTOR_HIDE_TEXT",$this->lng->txt('hide_details'));
01597                 $this->ctrl->setParameter($this,'tutor_show_details',0);
01598                 $this->tpl->setVariable("TUTOR_HIDE",$this->ctrl->getLinkTarget($this,'members'));
01599                 $this->ctrl->clearParameters($this);
01600 
01601                 $tutor_tpl = new ilTemplate('tpl.table.html',true,true);
01602                 $tutor_tpl->addBlockfile('TBL_CONTENT','tbl_content','tpl.member_tutor_row.html','course');
01603 
01604 
01605                 $sorted_tutors = ilUtil::sortArray($all_tutors_data,$_GET["tutor_sort_by"],$_GET["tutor_sort_order"]);
01606                 #$sliced_tutors = array_slice($sorted_tutors,$_GET['tutor_offset'],$_GET['limit']);
01607                 $sliced_tutors = $sorted_tutors; 
01608                 $counter = 0;
01609                 foreach($sliced_tutors as $tutor)
01610                 {
01611                         $tutor_tpl->setCurrentBlock("link");
01612                         $this->ctrl->setParameter($this,'member_id',$tutor['usr_id']);
01613                         $tutor_tpl->setVariable('LINK_NAME',$this->ctrl->getLinkTarget($this,'editMember'));
01614                         $tutor_tpl->setVariable("LINK_TXT",$this->lng->txt('edit'));
01615                         $tutor_tpl->parseCurrentBlock();
01616                         $this->ctrl->clearParameters($this);
01617 
01618                         if($this->timings_enabled)
01619                         {
01620                                 $tutor_tpl->setCurrentBlock("link");
01621                                 $this->ctrl->setParameterByClass('ilcoursecontentgui','member_id',$tutor['usr_id']);
01622                                 $tutor_tpl->setVariable('LINK_NAME',$this->ctrl->getLinkTargetByClass('ilcoursecontentgui','showUserTimings'));
01623                                 $tutor_tpl->setVariable("LINK_TXT",$this->lng->txt('timings_timings'));
01624                                 $tutor_tpl->parseCurrentBlock();
01625                                 $this->ctrl->clearParametersByClass('ilcoursecontentgui');
01626                         }
01627 
01628                         $tutor_tpl->setCurrentBlock("tbl_content");
01629 
01630                         if($tutor['passed'])
01631                         {
01632                                 $tutor_tpl->setVariable("CHECKED_PASSED",'checked="checked"');
01633                         }
01634                         if($tutor['notification'])
01635                         {
01636                                 $tutor_tpl->setVariable("CHECKED_NOTIFICATION",'checked="checked"');
01637                         }
01638                         if($this->show_tracking)
01639                         {
01640                                 $tutor_tpl->setVariable("VAL_PROGRESS",$tutor['progress']);
01641                         }
01642 
01643                         $tutor_tpl->setVariable("CSS_ROW",ilUtil::switchColor(++$couter,'tblrow1','tblrow2'));
01644                         $tutor_tpl->setVariable("USER_ID",$tutor['usr_id']);
01645                         $tutor_tpl->setVariable("LASTNAME",$tutor['lastname']);
01646                         $tutor_tpl->setVariable("FIRSTNAME",$tutor['firstname']);
01647                         $tutor_tpl->setVariable("LOGIN",$tutor['login']);
01648                         $tutor_tpl->parseCurrentBlock();
01649                 }
01650 
01651                 $tutor_tpl->setCurrentBlock("select_row");
01652                 $tutor_tpl->setVariable("ROWCLASS",ilUtil::switchColor(++$couter,'tblrow1','tblrow2'));
01653                 $tutor_tpl->setVariable("SELECT_ALL",$this->lng->txt('select_all'));
01654                 $tutor_tpl->parseCurrentBlock();
01655 
01656 
01657                 $tbl = new ilTableGUI($tutors,false);
01658                 $tbl->setTemplate($tutor_tpl);
01659                 
01660                 if($this->show_tracking)
01661                 {
01662                         $tbl->setHeaderNames(array('',
01663                                                                            $this->lng->txt('name'),
01664                                                                            $this->lng->txt('login'),
01665                                                                            $this->lng->txt('learning_progress'),
01666                                                                            $this->lng->txt('crs_passed'),
01667                                                                            $this->lng->txt('crs_notification'),''));
01668                         $tbl->setHeaderVars(array("",
01669                                                                           "lastname",
01670                                                                           "login",
01671                                                                           "progress",
01672                                                                           "passed",
01673                                                                           "notification",''),
01674                                                                 $this->ctrl->getParameterArray($this,'members'));
01675                 }
01676                 else
01677                 {
01678                         $tbl->setHeaderNames(array('',
01679                                                                            $this->lng->txt('name'),
01680                                                                            $this->lng->txt('login'),
01681                                                                            $this->lng->txt('crs_passed'),
01682                                                                            $this->lng->txt('crs_notification'),''));
01683                         $tbl->setHeaderVars(array("",
01684                                                                           "lastname",
01685                                                                           "login",
01686                                                                           "passed",
01687                                                                           "notification",''),
01688                                                                 $this->ctrl->getParameterArray($this,'members'));
01689                 }               
01690                 $tbl->setOrderColumn($_GET["tutor_sort_by"]);
01691                 $tbl->setOrderDirection($_GET["tutor_sort_order"]);
01692                 $tbl->setOffset($_GET["tutor_offset"]);
01693                 $tbl->setMaxCount(count($tutors));
01694                 $tbl->setPrefix('tutor_');
01695                 $tbl->disable('table');
01696                 $tbl->disable('form');
01697                 $tbl->disable('title');
01698                 $tbl->disable('icon');
01699                 $tbl->disable('content');
01700 
01701                 $this->tpl->setVariable("TUTORS",$tbl->render());
01702         }
01703         function __renderMembersTable()
01704         {
01705                 $all_members_data = $this->__readMemberData($members = $this->object->members_obj->getMembers());
01706                 if(!count($all_members_data))
01707                 {
01708                         return false;
01709                 }
01710                 $this->tpl->setVariable("TXT_MEMBERS",$this->lng->txt('crs_members'));
01711 
01712                 if($_SESSION['crs_member_hide'])
01713                 {
01714                         $this->tpl->setVariable("MEMBER_HIDE_TEXT",$this->lng->txt('show_details'));
01715                         $this->ctrl->setParameter($this,'member_show_details',1);
01716                         $this->tpl->setVariable("MEMBER_HIDE",$this->ctrl->getLinkTarget($this,'members'));
01717                         $this->ctrl->clearParameters($this);
01718                         return true;
01719                 }
01720                 
01721                 $this->tpl->setVariable("MEMBER_HIDE_TEXT",$this->lng->txt('hide_details'));
01722                 $this->ctrl->setParameter($this,'member_show_details',0);
01723                 $this->tpl->setVariable("MEMBER_HIDE",$this->ctrl->getLinkTarget($this,'members'));
01724                 $this->ctrl->clearParameters($this);
01725 
01726 
01727                 $member_tpl = new ilTemplate('tpl.table.html',true,true);
01728                 $member_tpl->addBlockfile('TBL_CONTENT','tbl_content','tpl.member_member_row.html','course');
01729 
01730                 $sorted_members = ilUtil::sortArray($all_members_data,$_GET["sort_by"],$_GET["sort_order"]);
01731                 $sliced_members = array_slice($sorted_members,$_GET['offset'],$_GET['limit']); 
01732                 $counter = 0;
01733                 foreach($sliced_members as $member)
01734                 {
01735                         $member_tpl->setCurrentBlock("link");
01736                         $this->ctrl->setParameter($this,'member_id',$member['usr_id']);
01737                         $member_tpl->setVariable('LINK_NAME',$this->ctrl->getLinkTarget($this,'editMember'));
01738                         $member_tpl->setVariable("LINK_TXT",$this->lng->txt('edit'));
01739                         $member_tpl->parseCurrentBlock();
01740                         $this->ctrl->clearParameters($this);
01741 
01742                         if($this->timings_enabled)
01743                         {
01744                                 $member_tpl->setCurrentBlock("link");
01745                                 $this->ctrl->setParameterByClass('ilcoursecontentgui','member_id',$member['usr_id']);
01746                                 $member_tpl->setVariable('LINK_NAME',$this->ctrl->getLinkTargetByClass('ilcoursecontentgui','showUserTimings'));
01747                                 $member_tpl->setVariable("LINK_TXT",$this->lng->txt('timings_timings'));
01748                                 $member_tpl->parseCurrentBlock();
01749                                 $this->ctrl->clearParametersByClass('ilcoursecontentgui');
01750                         }
01751 
01752                         $member_tpl->setCurrentBlock("tbl_content");
01753 
01754                         if($member['passed'])
01755                         {
01756                                 $member_tpl->setVariable("CHECKED_PASSED",'checked="checked"');
01757                         }
01758                         if($member['blocked'])
01759                         {
01760                                 $member_tpl->setVariable("CHECKED_BLOCKED",'checked="checked"');
01761                         }
01762                         if($this->show_tracking)
01763                         {
01764                                 $member_tpl->setVariable("VAL_PROGRESS",$member['progress']);
01765                         }
01766 
01767                         $member_tpl->setVariable("CSS_ROW",ilUtil::switchColor(++$couter,'tblrow1','tblrow2'));
01768                         $member_tpl->setVariable("USER_ID",$member['usr_id']);
01769                         $member_tpl->setVariable("LASTNAME",$member['lastname']);
01770                         $member_tpl->setVariable("FIRSTNAME",$member['firstname']);
01771                         $member_tpl->setVariable("LOGIN",$member['login']);
01772                         $member_tpl->parseCurrentBlock();
01773                 }
01774 
01775                 $member_tpl->setCurrentBlock("select_row");
01776                 $member_tpl->setVariable("ROWCLASS",ilUtil::switchColor(++$couter,'tblrow1','tblrow2'));
01777                 $member_tpl->setVariable("SELECT_ALL",$this->lng->txt('select_all'));
01778                 $member_tpl->parseCurrentBlock();
01779                 
01780                 
01781                 $tbl = new ilTableGUI($members,false);
01782                 $tbl->setTemplate($member_tpl);
01783                 
01784                 if($this->show_tracking)
01785                 {
01786                         $tbl->setHeaderNames(array('',
01787                                                                            $this->lng->txt('name'),
01788                                                                            $this->lng->txt('login'),
01789                                                                            $this->lng->txt('learning_progress'),
01790                                                                            $this->lng->txt('crs_passed'),
01791                                                                            $this->lng->txt('crs_blocked'),''));
01792                         $tbl->setHeaderVars(array("",
01793                                                                           "lastname",
01794                                                                           "login",
01795                                                                           "progress",
01796                                                                           "passed",
01797                                                                           "blocked",''),
01798                                                                 $this->ctrl->getParameterArray($this,'members'));
01799                 }
01800                 else
01801                 {
01802                         $tbl->setHeaderNames(array('',
01803                                                                            $this->lng->txt('name'),
01804                                                                            $this->lng->txt('login'),
01805                                                                            $this->lng->txt('crs_passed'),
01806                                                                            $this->lng->txt('crs_blocked'),''));
01807                         $tbl->setHeaderVars(array("",
01808                                                                           "lastname",
01809                                                                           "login",
01810                                                                           "passed",
01811                                                                           "blocked",''),
01812                                                                 $this->ctrl->getParameterArray($this,'members'));
01813                 }               
01814                 $tbl->setOrderColumn($_GET["sort_by"]);
01815                 $tbl->setOrderDirection($_GET["sort_order"]);
01816                 $tbl->setLimit($_GET['limit']);
01817                 $tbl->setOffset($_GET["offset"]);
01818                 $tbl->setMaxCount(count($members));
01819                 $tbl->disable('table');
01820                 $tbl->disable('form');
01821                 $tbl->disable('title');
01822                 $tbl->disable('icon');
01823                 $tbl->disable('content');
01824                 $this->tpl->setVariable("MEMBERS",$tbl->render());
01825         }
01826 
01827 
01828 
01829         function __showWaitingList()
01830         {
01831                 include_once './course/classes/class.ilObjCourseGrouping.php';
01832 
01833                 $this->object->initWaitingList();
01834                 if($this->object->waiting_list_obj->getCountUsers())
01835                 {
01836                         $counter = 0;
01837                         $f_result = array();
01838                         foreach($this->object->waiting_list_obj->getAllUsers() as $waiting_data)
01839                         {
01840                                 // GET USER OBJ
01841                                 if($tmp_obj = ilObjectFactory::getInstanceByObjId($waiting_data['usr_id'],false))
01842                                 {
01843                                         $waiting_list_ids[] = $waiting_data['usr_id'];
01844                                         
01845                                         $f_result[$counter][]   = ilUtil::formCheckbox(0,"waiting_list[]",$waiting_data['usr_id']);
01846 
01847                                         $message = '';
01848                                         // Check if user is member in course grouping
01849                                         foreach(ilObjCourseGrouping::_getGroupingCourseIds($this->object->getId()) as $course_data)
01850                                         {
01851                                                 if($course_data['id'] != $this->object->getId() and
01852                                                    ilCourseMembers::_isMember($tmp_obj->getId(),$course_data['id'],$course_data['unique']))
01853                                                 {
01854                                                         $message .= ('<br /><font class="alert">'.$this->lng->txt('crs_member_of').' ');
01855                                                         $message .= (ilObject::_lookupTitle($course_data['id'])."</font>");
01856                                                 }
01857                                         }
01858                                         $f_result[$counter][]   = $tmp_obj->getLogin().$message;
01859                                         $f_result[$counter][]   = $tmp_obj->getFirstname();
01860                                         $f_result[$counter][]   = $tmp_obj->getLastname();
01861                                         #$f_result[$counter][]   = strftime("%Y-%m-%d %R",$waiting_data["time"]);
01862                                         $f_result[$counter][]   = ilFormat::formatUnixTime($waiting_data["time"],true);
01863 
01864 
01865                                         unset($tmp_obj);
01866                                         ++$counter;
01867                                 }
01868                         }
01869                         $this->__showWaitingListTable($f_result,$waiting_list_ids);
01870 
01871                 } // END waiting list
01872         }
01873 
01874         function __showSubscribers()
01875         {
01876                 if(count($this->object->members_obj->getSubscribers()))
01877                 {
01878                         $counter = 0;
01879                         $f_result = array();
01880                         foreach($this->object->members_obj->getSubscribers() as $member_id)
01881                         {
01882                                 $member_data = $this->object->members_obj->getSubscriberData($member_id);
01883 
01884                                 // GET USER OBJ
01885                                 if($tmp_obj = ilObjectFactory::getInstanceByObjId($member_id,false))
01886                                 {
01887                                         $subscriber_ids[$counter] = $member_id;
01888                                         
01889                                         $f_result[$counter][]   = ilUtil::formCheckbox(0,"subscriber[]",$member_id);
01890                                         $f_result[$counter][]   = $tmp_obj->getLogin();
01891                                         $f_result[$counter][]   = $tmp_obj->getFirstname();
01892                                         $f_result[$counter][]   = $tmp_obj->getLastname();
01893                                         #$f_result[$counter][]   = strftime("%Y-%m-%d %R",$member_data["time"]);
01894                                         $f_result[$counter][]   = ilFormat::formatUnixTime($member_data["time"],true);
01895 
01896                                         unset($tmp_obj);
01897                                         ++$counter;
01898                                 }
01899                         }
01900                         $this->__showSubscribersTable($f_result,$subscriber_ids);
01901 
01902                 } // END SUBSCRIBERS
01903         }
01904 
01905         function editMemberObject()
01906         {
01907                 global $rbacsystem;
01908 
01909                 $this->tabs_gui->setTabActive('members');
01910 
01911                 $this->object->initCourseMemberObject();
01912 
01913                 // MINIMUM ACCESS LEVEL = 'administrate'
01914                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
01915                 {
01916                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
01917                 }
01918                 // CHECK MEMBER_ID
01919                 if(!isset($_GET["member_id"]) or !$this->object->members_obj->isAssigned((int) $_GET["member_id"]))
01920                 {
01921                         $this->ilias->raiseError($this->lng->txt("crs_no_valid_member_id_given"),$this->ilias->error_obj->MESSAGE);
01922                 }
01923                 
01924                 $member_data = $this->object->members_obj->getUserData((int) $_GET["member_id"]);
01925 
01926                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_editMembers.html","course");
01927 
01928 
01929                 $f_result = array();
01930 
01931                 // GET USER OBJ
01932                 $tmp_obj = ilObjectFactory::getInstanceByObjId($member_data["usr_id"],false);
01933 
01934                 $f_result[0][]  = $tmp_obj->getLogin();
01935                 $f_result[0][]  = $tmp_obj->getFirstname();
01936                 $f_result[0][]  = $tmp_obj->getLastname();
01937 
01938                 $f_result[0][]  = ilUtil::formCheckbox($member_data['passed'] ? 1 : 0,'passed',1);
01939 
01940                 $actions = array(0      => $this->lng->txt("crs_member_unblocked"),
01941                                                  1      => $this->lng->txt("crs_member_blocked"),
01942                                                  2      => $this->lng->txt("crs_tutor_notify"),
01943                                                  3      => $this->lng->txt("crs_tutor_no_notify"),
01944                                                  4      => $this->lng->txt("crs_admin_notify"),
01945                                                  5      => $this->lng->txt("crs_admin_no_notify"));
01946 
01947                 // GET SELECTED
01948                 switch($member_data["role"])
01949                 {
01950                         case $this->object->members_obj->ROLE_ADMIN:
01951                                 if($member_data["status"] == $this->object->members_obj->STATUS_NOTIFY)
01952                                 {
01953                                         $selected = 4;
01954                                 }
01955                                 else
01956                                 {
01957                                         $selected = 5;
01958                                 }
01959                                 break;
01960 
01961                         case $this->object->members_obj->ROLE_TUTOR:
01962                                 if($member_data["status"] == $this->object->members_obj->STATUS_NOTIFY)
01963                                 {
01964                                         $selected = 2;
01965                                 }
01966                                 else
01967                                 {
01968                                         $selected = 3;
01969                                 }
01970                                 break;
01971 
01972                         case $this->object->members_obj->ROLE_MEMBER:
01973                                 if($member_data["status"] == $this->object->members_obj->STATUS_UNBLOCKED)
01974                                 {
01975                                         $selected = 0;
01976                                 }
01977                                 else
01978                                 {
01979                                         $selected = 1;
01980                                 }
01981                                 break;
01982                 }
01983                 $f_result[0][]  = ilUtil::formSelect($selected,"role_status",$actions,false,true);
01984 
01985                 unset($tmp_obj);
01986                 
01987                 $this->__showEditMemberTable($f_result);
01988 
01989                 return true;
01990         }
01991 
01992         function updateMemberObject()
01993         {
01994                 global $rbacsystem;
01995 
01996                 $this->object->initCourseMemberObject();
01997 
01998                 // USED FOR NOTIFICATION
01999                 $user_data = $this->object->members_obj->getUserData($_GET["member_id"]);
02000 
02001                 // MINIMUM ACCESS LEVEL = 'administrate'
02002                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02003                 {
02004                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02005                 }
02006                 // CHECK MEMBER_ID
02007                 if(!isset($_GET["member_id"]) or !$this->object->members_obj->isAssigned((int) $_GET["member_id"]))
02008                 {
02009                         $this->ilias->raiseError($this->lng->txt("crs_no_valid_member_id_given"),$this->ilias->error_obj->MESSAGE);
02010                 }
02011                 // CHECK LAST ADMIN
02012 
02013                 if((int) $_POST['role_status'] != 4 and (int) $_POST['role_status'] != 5)
02014                 {
02015                         if(!$this->object->members_obj->checkLastAdmin(array((int) $_GET['member_id'])))
02016                         {
02017                                 $this->ilias->raiseError($this->lng->txt("crs_at_least_one_admin"),$this->ilias->error_obj->MESSAGE);
02018                         }
02019                 }
02020                 
02021                 // UPDATE MEMBER
02022                 switch((int) $_POST["role_status"])
02023                 {
02024                         case 0:
02025                                 // CHECK IF LIMIT MAX MEMBERS IS REACHED
02026                                 if($this->object->getSubscriptionMaxMembers() and
02027                                    $this->object->members_obj->getCountMembers() >= $this->object->getSubscriptionMaxMembers())
02028                                 {
02029                                         sendInfo($this->lng->txt("crs_max_members_reached"));
02030                                         $this->membersObject();
02031 
02032                                         return false;
02033                                 }
02034                                 $status = $this->object->members_obj->STATUS_UNBLOCKED;;
02035                                 $role = $this->object->members_obj->ROLE_MEMBER;
02036                                 break;
02037 
02038                         case 1:
02039                                 $status = $this->object->members_obj->STATUS_BLOCKED;;
02040                                 $role = $this->object->members_obj->ROLE_MEMBER;
02041                                 break;
02042 
02043 
02044                         case 2:
02045                                 $status = $this->object->members_obj->STATUS_NOTIFY;
02046                                 $role = $this->object->members_obj->ROLE_TUTOR;
02047                                 break;
02048 
02049                         case 3:
02050                                 $status = $this->object->members_obj->STATUS_NO_NOTIFY;
02051                                 $role = $this->object->members_obj->ROLE_TUTOR;
02052                                 break;
02053 
02054                         case 4:
02055                                 $status = $this->object->members_obj->STATUS_NOTIFY;
02056                                 $role = $this->object->members_obj->ROLE_ADMIN;
02057                                 break;
02058 
02059                         case 5:
02060                                 $status = $this->object->members_obj->STATUS_NO_NOTIFY;
02061                                 $role = $this->object->members_obj->ROLE_ADMIN;
02062                                 break;
02063 
02064                         default:
02065                                 $this->ilias->raiseError("No valid status given",$this->ilias->error_obj->MESSAGE);
02066                 }
02067                 $this->object->members_obj->update((int) $_GET["member_id"],$role,$status,(int) $_POST['passed']);
02068 
02069                 // NOTIFICATION
02070                 if($user_data["role"] != $role or 
02071                    $user_data["status"] != $status or 
02072                    $user_data['passed'] != (bool) $_POST['passed'])
02073                 {
02074                         $this->object->members_obj->sendNotification($this->object->members_obj->NOTIFY_STATUS_CHANGED,$_GET["member_id"]);
02075                 }
02076                 
02077 
02078                 sendInfo($this->lng->txt("crs_member_updated"));
02079                 $this->membersObject();
02080         }
02081         function assignMembersObject()
02082         {
02083                 global $rbacsystem;
02084 
02085                 // MINIMUM ACCESS LEVEL = 'administrate'
02086                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02087                 {
02088                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02089                 }
02090                 if(!is_array($_POST["user"]))
02091                 {
02092                         sendInfo($this->lng->txt("crs_no_users_selected"));
02093                         #$this->searchObject();
02094                         
02095                         return false;
02096                 }
02097                 $this->object->initCourseMemberObject();
02098 
02099                 $added_users = 0;
02100                 #$limit_reached = false;
02101                 foreach($_POST["user"] as $user_id)
02102                 {
02103                         if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($user_id))
02104                         {
02105                                 continue;
02106                         }
02107                         if($this->object->members_obj->isAssigned($user_id))
02108                         {
02109                                 continue;
02110                         }
02111                         #if($this->object->getSubscriptionMaxMembers() and
02112                         #   $this->object->getSubscriptionMaxMembers() <= $this->object->members_obj->getCountMembers())
02113                         #{
02114                         #       $limit_reached = true;
02115                         #       break;
02116                         #}
02117                         $this->object->members_obj->add($tmp_obj,$this->object->members_obj->ROLE_MEMBER);
02118                         $this->object->members_obj->sendNotification($this->object->members_obj->NOTIFY_ACCEPT_USER,$user_id);
02119 
02120                         ++$added_users;
02121                 }
02122                 #if($limit_reached)
02123                 #{
02124                 #       sendInfo($this->lng->txt("crs_max_members_reached"));
02125                 #       #$this->membersObject();
02126                 #       $this->ctrl->redirect($this,'members');
02127                 #}
02128                 if($added_users)
02129                 {
02130                         sendInfo($this->lng->txt("crs_users_added"),true);
02131                         unset($_SESSION["crs_search_str"]);
02132                         unset($_SESSION["crs_search_for"]);
02133                         unset($_SESSION['crs_usr_search_result']);
02134                         #$this->membersObject();
02135                         $this->ctrl->redirect($this,'members');
02136                         #return true;
02137                 }
02138                 sendInfo($this->lng->txt("crs_users_already_assigned"));
02139                 #$this->searchObject();
02140                 
02141                 return false;
02142         }
02143 
02144         function addFromWaitingList()
02145         {
02146                 global $rbacsystem;
02147 
02148                 // MINIMUM ACCESS LEVEL = 'administrate'
02149                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02150                 {
02151                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02152                 }
02153                 if(!is_array($_POST["waiting_list"]))
02154                 {
02155                         sendInfo($this->lng->txt("crs_no_users_selected"));
02156                         $this->membersObject();
02157 
02158                         return false;
02159                 }
02160                 $this->object->initCourseMemberObject();
02161                 $this->object->initWaitingList();
02162 
02163                 $added_users = 0;
02164                 foreach($_POST["waiting_list"] as $user_id)
02165                 {
02166                         if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($user_id))
02167                         {
02168                                 continue;
02169                         }
02170                         if($this->object->members_obj->isAssigned($user_id))
02171                         {
02172                                 continue;
02173                         }
02174                         $this->object->members_obj->add($tmp_obj,$this->object->members_obj->ROLE_MEMBER);
02175                         $this->object->members_obj->sendNotification($this->object->members_obj->NOTIFY_ACCEPT_USER,$user_id);
02176                         $this->object->waiting_list_obj->removeFromList($user_id);
02177 
02178                         ++$added_users;
02179                 }
02180                 if($added_users)
02181                 {
02182                         sendInfo($this->lng->txt("crs_users_added"));
02183                         $this->membersObject();
02184 
02185                         return true;
02186                 }
02187                 else
02188                 {
02189                         sendInfo($this->lng->txt("crs_users_already_assigned"));
02190                         $this->searchObject();
02191 
02192                         return false;
02193                 }
02194                 return false;
02195         }
02196 
02197         function performRemoveFromWaitingListObject()
02198         {
02199                 global $rbacsystem;
02200 
02201                 // MINIMUM ACCESS LEVEL = 'administrate'
02202                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02203                 {
02204                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02205                 }
02206 
02207                 if(!is_array($_SESSION["crs_delete_waiting_list_ids"]))
02208                 {
02209                         sendInfo($this->lng->txt("crs_no_users_selected"));
02210                         $this->membersObject();
02211 
02212                         return false;
02213                 }
02214 
02215                 $this->object->initWaitingList();
02216                 foreach($_SESSION['crs_delete_waiting_list_ids'] as $usr_id)
02217                 {
02218                         $this->object->waiting_list_obj->removeFromList($usr_id);
02219                 }
02220                 sendInfo($this->lng->txt('crs_users_removed_from_list'));
02221                 $this->membersObject();
02222 
02223                 return true;
02224         }
02225 
02226                 
02227         function addSubscribers()
02228         {
02229                 global $rbacsystem;
02230 
02231                 // MINIMUM ACCESS LEVEL = 'administrate'
02232                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02233                 {
02234                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02235                 }
02236 
02237                 if(!is_array($_POST["subscriber"]))
02238                 {
02239                         sendInfo($this->lng->txt("crs_no_subscribers_selected"));
02240                         $this->membersObject();
02241 
02242                         return false;
02243                 }
02244                 $this->object->initCourseMemberObject();
02245                 
02246                 if($this->object->getSubscriptionMaxMembers() and 
02247                    ($this->object->getSubscriptionMaxMembers() < ($this->object->members_obj->getCountMembers() + count($_POST["subscriber"]))))
02248                 {
02249                         sendInfo($this->lng->txt("crs_max_members_reached"));
02250                         $this->membersObject();
02251 
02252                         return false;
02253                 }
02254                 if(!$this->object->members_obj->assignSubscribers($_POST["subscriber"]))
02255                 {
02256                         sendInfo($this->object->getMessage());
02257                         $this->membersObject();
02258 
02259                         return false;
02260                 }
02261                 else
02262                 {
02263                         // SEND NOTIFICATION
02264                         foreach($_POST["subscriber"] as $usr_id)
02265                         {
02266                                 $this->object->members_obj->sendNotification($this->object->members_obj->NOTIFY_ACCEPT_SUBSCRIBER,$usr_id);
02267                         }
02268                 }
02269                 sendInfo($this->lng->txt("crs_subscribers_assigned"));
02270                 $this->membersObject();
02271                 
02272                 return true;
02273         }
02274 
02275         function autoFillObject()
02276         {
02277                 global $rbacsystem;
02278 
02279                 // MINIMUM ACCESS LEVEL = 'administrate'
02280                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02281                 {
02282                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02283                 }
02284                 
02285                 $this->object->initCourseMemberObject();
02286 
02287                 if($this->object->getSubscriptionMaxMembers() and 
02288                    $this->object->getSubscriptionMaxMembers() <= $this->object->members_obj->getCountMembers())
02289                 {
02290                         sendInfo($this->lng->txt("crs_max_members_reached"));
02291                         $this->membersObject();
02292 
02293                         return false;
02294                 }
02295                 if($number = $this->object->members_obj->autoFillSubscribers())
02296                 {
02297                         sendInfo($this->lng->txt("crs_number_users_added")." ".$number);
02298                 }
02299                 else
02300                 {
02301                         sendInfo($this->lng->txt("crs_no_users_added"));
02302                 }
02303                 $this->membersObject();
02304 
02305                 return true;
02306         }
02307 
02308 
02309         function deleteSubscribers()
02310         {
02311                 global $rbacsystem;
02312 
02313                 $this->tabs_gui->setTabActive('members');
02314 
02315                 // MINIMUM ACCESS LEVEL = 'administrate'
02316                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02317                 {
02318                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02319                 }
02320                 if(!is_array($_POST["subscriber"]) or !count($_POST["subscriber"]))
02321                 {
02322                         sendInfo($this->lng->txt("crs_no_subscribers_selected"));
02323                         $this->membersObject();
02324 
02325                         return false;
02326                 }
02327                 sendInfo($this->lng->txt("crs_delete_subscribers_sure"));
02328 
02329                 // SHOW DELETE SCREEN
02330                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_editMembers.html","course");
02331                 $this->object->initCourseMemberObject();
02332 
02333                 // SAVE IDS IN SESSION
02334                 $_SESSION["crs_delete_subscriber_ids"] = $_POST["subscriber"];
02335 
02336                 $counter = 0;
02337                 $f_result = array();
02338 
02339                 foreach($_POST["subscriber"] as $member_id)
02340                 {
02341                         $member_data = $this->object->members_obj->getSubscriberData($member_id);
02342 
02343                         // GET USER OBJ
02344                         if($tmp_obj = ilObjectFactory::getInstanceByObjId($member_id,false))
02345                         {
02346                                 $f_result[$counter][]   = $tmp_obj->getLogin();
02347                                 $f_result[$counter][]   = $tmp_obj->getFirstname();
02348                                 $f_result[$counter][]   = $tmp_obj->getLastname();
02349                                 #$f_result[$counter][]   = strftime("%Y-%m-%d %R",$member_data["time"]);
02350                                 $f_result[$counter][]   = ilFormat::formatUnixTime($member_data["time"],true);
02351 
02352                                 unset($tmp_obj);
02353                                 ++$counter;
02354                         }
02355                 }
02356                 return $this->__showDeleteSubscriberTable($f_result);
02357         }
02358                 
02359         function removeFromWaitingList()
02360         {
02361                 global $rbacsystem;
02362 
02363                 $this->tabs_gui->setTabActive('members');
02364 
02365                 // MINIMUM ACCESS LEVEL = 'administrate'
02366                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02367                 {
02368                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02369                 }
02370                 if(!is_array($_POST["waiting_list"]) or !count($_POST["waiting_list"]))
02371                 {
02372                         sendInfo($this->lng->txt("crs_no_users_selected"));
02373                         $this->membersObject();
02374 
02375                         return false;
02376                 }
02377                 sendInfo($this->lng->txt("crs_delete_from_list_sure"));
02378 
02379                 // SHOW DELETE SCREEN
02380                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_editMembers.html","course");
02381                 $this->object->initCourseMemberObject();
02382                 $this->object->initWaitingList();
02383 
02384                 // SAVE IDS IN SESSION
02385                 $_SESSION["crs_delete_waiting_list_ids"] = $_POST["waiting_list"];
02386 
02387                 $counter = 0;
02388                 $f_result = array();
02389 
02390                 foreach($_POST["waiting_list"] as $wait_id)
02391                 {
02392                         $user_data =& $this->object->waiting_list_obj->getUser($wait_id);
02393                         // GET USER OBJ
02394                         if($tmp_obj = ilObjectFactory::getInstanceByObjId($wait_id,false))
02395                         {
02396                                 $f_result[$counter][]   = $tmp_obj->getLogin();
02397                                 $f_result[$counter][]   = $tmp_obj->getFirstname();
02398                                 $f_result[$counter][]   = $tmp_obj->getLastname();
02399                                 #$f_result[$counter][]   = strftime("%Y-%m-%d %R",$user_data["time"]);
02400                                 $f_result[$counter][]   = ilFormat::formatUnixTime($user_data["time"],true);
02401 
02402                                 unset($tmp_obj);
02403                                 ++$counter;
02404                         }
02405                 }
02406                 return $this->__showRemoveFromWaitingListTable($f_result);
02407         }
02408         
02409         function unsubscribeObject()
02410         {
02411                 global $rbacsystem;
02412 
02413                 // CHECK ACCESS
02414                 if(!$rbacsystem->checkAccess("leave", $this->ref_id))
02415                 {
02416                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02417                 }
02418 
02419                 $this->tabs_gui->setTabActive('members');
02420                 #$this->setSubTabs('members');
02421 
02422 
02423                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_unsubscribe_sure.html","course");
02424                 sendInfo($this->lng->txt('crs_unsubscribe_sure'));
02425                 
02426                 $this->tpl->setVariable("UNSUB_FORMACTION",$this->ctrl->getFormAction($this));
02427                 $this->tpl->setVariable("TXT_CANCEL",$this->lng->txt("cancel"));
02428                 $this->tpl->setVariable("CMD_SUBMIT",'performUnsubscribe');
02429                 $this->tpl->setVariable("TXT_SUBMIT",$this->lng->txt("crs_unsubscribe"));
02430                 
02431                 return true;
02432         }
02433 
02434         function performUnsubscribeObject()
02435         {
02436                 global $rbacsystem;
02437 
02438                 // CHECK ACCESS
02439                 if(!$rbacsystem->checkAccess("leave", $this->ref_id))
02440                 {
02441                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02442                 }
02443                 $this->object->initCourseMemberObject();
02444                 $this->object->members_obj->delete($this->ilias->account->getId());
02445                 $this->object->members_obj->sendUnsubscribeNotificationToAdmins($this->ilias->account->getId());
02446                 
02447                 sendInfo($this->lng->txt('crs_unsubscribed_from_crs'),true);
02448 
02449                 ilUtil::redirect("repository.php?ref_id=".$this->tree->getParentId($this->ref_id));
02450         }
02451 
02452         function deleteMembers()
02453         {
02454                 global $rbacsystem;
02455 
02456                 $this->tabs_gui->setTabActive('members');
02457 
02458                 $_POST['member'] = array_merge((array) $_POST['member_ids'],(array) $_POST['tutor_ids'],(array) $_POST['admin_ids']);
02459 
02460                 // MINIMUM ACCESS LEVEL = 'administrate'
02461                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02462                 {
02463                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02464                 }
02465                 if(!is_array($_POST["member"]) or !count($_POST["member"]))
02466                 {
02467                         sendInfo($this->lng->txt("crs_no_member_selected"));
02468                         $this->membersObject();
02469 
02470                         return false;
02471                 }
02472                 sendInfo($this->lng->txt("crs_delete_members_sure"));
02473 
02474                 $this->object->initCourseMemberObject();
02475 
02476                 // CHECK LAST ADMIN
02477                 if(!$this->object->members_obj->checkLastAdmin($_POST['member']))
02478                 {
02479                         sendInfo($this->lng->txt('crs_at_least_one_admin'));
02480                         $this->membersObject();
02481 
02482                         return false;
02483                 }
02484 
02485                 // SHOW DELETE SCREEN
02486                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_editMembers.html","course");
02487 
02488                 
02489 
02490                 // SAVE IDS IN SESSION
02491                 $_SESSION["crs_delete_member_ids"] = $_POST["member"];
02492 
02493                 $counter = 0;
02494                 $f_result = array();
02495 
02496                 foreach($_POST["member"] as $member_id)
02497                 {
02498                         $member_data = $this->object->members_obj->getUserData($member_id);
02499 
02500                         // GET USER OBJ
02501                         if($tmp_obj = ilObjectFactory::getInstanceByObjId($member_id,false))
02502                         {
02503                                 $f_result[$counter][]   = $tmp_obj->getLogin();
02504                                 $f_result[$counter][]   = $tmp_obj->getFirstname();
02505                                 $f_result[$counter][]   = $tmp_obj->getLastname();
02506 
02507                                 switch($member_data['role'])
02508                                 {
02509                                         case $this->object->members_obj->ROLE_ADMIN:
02510                                                 $f_result[$counter][] = $this->lng->txt("crs_admin"); 
02511                                                 break;
02512                                         case $this->object->members_obj->ROLE_TUTOR:
02513                                                 $f_result[$counter][] = $this->lng->txt("crs_tutor");
02514                                                 break;
02515                                         case $this->object->members_obj->ROLE_MEMBER:
02516                                                 $f_result[$counter][] = $this->lng->txt("crs_member"); 
02517                                                 break;
02518                                 }
02519 
02520                                 unset($tmp_obj);
02521                                 ++$counter;
02522                         }
02523                 }
02524                 $this->__showDeleteMembersTable($f_result);
02525 
02526                 return true;
02527         }
02528 
02529         function removeMembersObject()
02530         {
02531                 global $rbacsystem;
02532 
02533                 // MINIMUM ACCESS LEVEL = 'administrate'
02534                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02535                 {
02536                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02537                 }
02538                 if(!is_array($_SESSION["crs_delete_member_ids"]) or !count($_SESSION["crs_delete_member_ids"]))
02539                 {
02540                         sendInfo($this->lng->txt("crs_no_member_selected"));
02541                         $this->membersObject();
02542 
02543                         return false;
02544                 }
02545                 $this->object->initCourseMemberObject();
02546 
02547                 if(!$this->object->members_obj->deleteMembers($_SESSION["crs_delete_member_ids"]))
02548                 {
02549                         sendInfo($this->object->getMessage());
02550                         unset($_SESSION["crs_delete_member_ids"]);
02551                         $this->membersObject();
02552 
02553                         return false;
02554                 }
02555                 else
02556                 {
02557                         // SEND NOTIFICATION
02558                         foreach($_SESSION["crs_delete_member_ids"] as $usr_id)
02559                         {
02560                                 $this->object->members_obj->sendNotification($this->object->members_obj->NOTIFY_DISMISS_MEMBER,$usr_id);
02561                         }
02562                 }
02563                 unset($_SESSION["crs_delete_member_ids"]);
02564                 sendInfo($this->lng->txt("crs_members_deleted"));
02565                 $this->membersObject();
02566 
02567                 return true;
02568         }
02569 
02570         function removeSubscribersObject()
02571         {
02572                 global $rbacsystem;
02573 
02574                 // MINIMUM ACCESS LEVEL = 'administrate'
02575                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02576                 {
02577                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02578                 }
02579                 if(!is_array($_SESSION["crs_delete_subscriber_ids"]) or !count($_SESSION["crs_delete_subscriber_ids"]))
02580                 {
02581                         sendInfo($this->lng->txt("crs_no_subscribers_selected"));
02582                         $this->membersObject();
02583 
02584                         return false;
02585                 }
02586                 $this->object->initCourseMemberObject();
02587 
02588                 if(!$this->object->members_obj->deleteSubscribers($_SESSION["crs_delete_subscriber_ids"]))
02589                 {
02590                         sendInfo($this->object->getMessage());
02591                         unset($_SESSION["crs_delete_subscriber_ids"]);
02592                         $this->membersObject();
02593 
02594                         return false;
02595                 }
02596                 else
02597                 {
02598                         // SEND NOTIFICATION
02599                         foreach($_SESSION["crs_delete_subscriber_ids"] as $usr_id)
02600                         {
02601                                 $this->object->members_obj->sendNotification($this->object->members_obj->NOTIFY_DISMISS_SUBSCRIBER,$usr_id);
02602                         }
02603                 }
02604 
02605                 unset($_SESSION["crs_delete_subscriber_ids"]);
02606                 sendInfo($this->lng->txt("crs_subscribers_deleted"));
02607                 $this->membersObject();
02608 
02609                 return true;
02610         }
02611 
02612 
02613         function searchUserObject()
02614         {
02615                 global $rbacsystem;
02616 
02617                 $this->tabs_gui->setTabActive('members');
02618 
02619                 // MINIMUM ACCESS LEVEL = 'administrate'
02620                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02621                 {
02622                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02623                 }
02624                 $this->object->initCourseMemberObject();
02625                 if($this->object->getSubscriptionMaxMembers() and 
02626                    $this->object->getSubscriptionMaxMembers() <= $this->object->members_obj->getCountMembers())
02627                 {
02628                         sendInfo($this->lng->txt("crs_max_members_reached"));
02629                         $this->membersObject();
02630 
02631                         return false;
02632                 }
02633                 $this->tpl->addBlockFile("ADM_CONTENT","adm_content","tpl.crs_members_search.html","course");
02634                 
02635                 $this->tpl->setVariable("F_ACTION",$this->ctrl->getFormAction($this));
02636                 $this->tpl->setVariable("SEARCH_ASSIGN_USR",$this->lng->txt("crs_search_members"));
02637                 $this->tpl->setVariable("SEARCH_SEARCH_TERM",$this->lng->txt("search_search_term"));
02638                 $this->tpl->setVariable("SEARCH_VALUE",$_SESSION["crs_search_str"] ? 
02639                                                                 ilUtil::prepareFormOutput($_SESSION["crs_search_str"],true) : "");
02640                 $this->tpl->setVariable("SEARCH_FOR",$this->lng->txt("exc_search_for"));
02641                 $this->tpl->setVariable("SEARCH_ROW_TXT_USER",$this->lng->txt("exc_users"));
02642                 $this->tpl->setVariable("SEARCH_ROW_TXT_GROUP",$this->lng->txt("exc_groups"));
02643                 $this->tpl->setVariable("SEARCH_ROW_TXT_ROLE",$this->lng->txt("exc_roles"));
02644                 #$this->tpl->setVariable("SEARCH_ROW_TXT_COURSE",$this->lng->txt("courses"));
02645                 $this->tpl->setVariable("BTN2_VALUE",$this->lng->txt("cancel"));
02646                 $this->tpl->setVariable("BTN1_VALUE",$this->lng->txt("search"));
02647 
02648         $usr = ($_POST["search_for"] == "usr" || $_POST["search_for"] == "") ? 1 : 0;
02649                 $grp = ($_POST["search_for"] == "grp") ? 1 : 0;
02650                 $role = ($_POST["search_for"] == "role") ? 1 : 0;
02651 
02652                 $this->tpl->setVariable("SEARCH_ROW_CHECK_USER",ilUtil::formRadioButton($usr,"search_for","usr"));
02653                 $this->tpl->setVariable("SEARCH_ROW_CHECK_ROLE",ilUtil::formRadioButton($role,"search_for","role"));
02654         $this->tpl->setVariable("SEARCH_ROW_CHECK_GROUP",ilUtil::formRadioButton($grp,"search_for","grp"));
02655         #$this->tpl->setVariable("SEARCH_ROW_CHECK_COURSE",ilUtil::formRadioButton(0,"search_for",$this->SEARCH_COURSE));
02656 
02657                 $this->__unsetSessionVariables();
02658         }
02659 
02660         function __appendToStoredResults($a_result)
02661         {
02662                 $tmp_array = array();
02663                 foreach($a_result as $result)
02664                 {
02665                         if(is_array($result))
02666                         {
02667                                 $tmp_array[] = $result['id'];
02668                         }
02669                         elseif($result)
02670                         {
02671                                 $tmp_array[] = $result;
02672                         }
02673                 }
02674                 // merge results
02675                 
02676                 $_SESSION['crs_usr_search_result'] = array_unique(array_merge((array) $_SESSION['crs_usr_search_result'],$tmp_array));
02677                 return $_SESSION['crs_usr_search_result'];
02678         }
02679 
02680         function cancelSearchObject()
02681         {
02682                 $_SESSION['crs_usr_search_result'] = array();
02683                 $_SESSION['crs_search_str'] = '';
02684                 $this->searchUserObject();
02685         }
02686         
02687         function searchObject()
02688         {
02689                 global $rbacsystem,$tree;
02690 
02691                 $this->tabs_gui->setTabActive('members');
02692 
02693                 #$this->__unsetSessionVariables();
02694                 
02695 
02696                 $_SESSION["crs_search_str"] = $_POST["search_str"] = $_POST["search_str"] 
02697                         ? $_POST["search_str"] 
02698                         : $_SESSION["crs_search_str"];
02699                 $_SESSION["crs_search_for"] = $_POST["search_for"] = $_POST["search_for"] 
02700                         ? $_POST["search_for"] 
02701                         : $_SESSION["crs_search_for"];
02702                 
02703 
02704                 // MINIMUM ACCESS LEVEL = 'administrate'
02705                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02706                 {
02707                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02708                 }
02709                 $this->object->initCourseMemberObject();
02710 
02711                 if(!isset($_POST["search_for"]) or !isset($_POST["search_str"]))
02712                 {
02713                         sendInfo($this->lng->txt("crs_search_enter_search_string"));
02714                         $this->searchUserObject();
02715                         
02716                         return false;
02717                 }
02718                 if(!count($result = $this->__search($_POST["search_str"],$_POST["search_for"])))
02719                 {
02720                         sendInfo($this->lng->txt("crs_no_results_found"));
02721                         $this->searchUserObject();
02722 
02723                         return false;
02724                 }
02725 
02726                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_usr_selection.html","course");
02727                 #$this->__showButton("searchUser",$this->lng->txt("crs_new_search"));
02728                 
02729                 $counter = 0;
02730                 $f_result = array();
02731                 switch($_POST["search_for"])
02732                 {
02733                         case "usr":
02734                                 foreach($result as $user)
02735                                 {
02736                                         if(!is_object($tmp_obj = ilObjectFactory::getInstanceByObjId($user,false)))
02737                                         {
02738                                                 continue;
02739                                         }
02740                                         $user_ids[$counter] = $user;
02741                                         
02742                                         $f_result[$counter][] = ilUtil::formCheckbox(0,"user[]",$user);
02743                                         $f_result[$counter][] = $tmp_obj->getLogin();
02744                                         $f_result[$counter][] = $tmp_obj->getFirstname();
02745                                         $f_result[$counter][] = $tmp_obj->getLastname();
02746 
02747                                         unset($tmp_obj);
02748                                         ++$counter;
02749                                 }
02750                                 $this->__showSearchUserTable($f_result,$user_ids);
02751 
02752                                 return true;
02753 
02754                         case "grp":
02755                                 foreach($result as $group)
02756                                 {
02757                                         if(!$tree->isInTree($group["id"]))
02758                                         {
02759                                                 continue;
02760                                         }
02761                                         if(!$tmp_obj = ilObjectFactory::getInstanceByRefId($group["id"],false))
02762                                         {
02763                                                 continue;
02764                                         }
02765                                         
02766                                         $grp_ids[$counter] = $group["id"];
02767                                         
02768                                         $f_result[$counter][] = ilUtil::formCheckbox(0,"group[]",$group["id"]);
02769                                         $f_result[$counter][] = array($tmp_obj->getTitle(),$tmp_obj->getDescription());
02770                                         $f_result[$counter][] = $tmp_obj->getCountMembers();
02771                                         
02772                                         unset($tmp_obj);
02773                                         ++$counter;
02774                                 }
02775                                 $this->__showSearchGroupTable($f_result,$grp_ids);
02776 
02777                                 return true;
02778                                 
02779                         case "role":
02780                                 foreach($result as $role)
02781                                 {
02782                     // exclude anonymous role
02783                     if ($role["id"] == ANONYMOUS_ROLE_ID)
02784                     {
02785                         continue;
02786                     }
02787 
02788                     if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($role["id"],false))
02789                                         {
02790                                                 continue;
02791                                         }
02792 
02793                                     // exclude roles with no users assigned to
02794                     if ($tmp_obj->getCountMembers() == 0)
02795                     {
02796                         continue;
02797                     }
02798 
02799                                         $role_ids[$counter] = $role["id"];
02800                                         
02801                                         $f_result[$counter][] = ilUtil::formCheckbox(0,"role[]",$role["id"]);
02802                                         $f_result[$counter][] = array($tmp_obj->getTitle(),$tmp_obj->getDescription());
02803                                         $f_result[$counter][] = $tmp_obj->getCountMembers();
02804 
02805                                         unset($tmp_obj);
02806                                         ++$counter;
02807                                 }
02808 
02809                                 $this->__showSearchRoleTable($f_result,$role_ids);
02810 
02811                                 return true;
02812                 }
02813         }
02814 
02815         function listUsersGroupObject()
02816         {
02817                 global $rbacsystem,$tree;
02818 
02819                 $this->tabs_gui->setTabActive('members');
02820 
02821                 $_SESSION["crs_group"] = $_POST["group"] = $_POST["group"] ? $_POST["group"] : $_SESSION["crs_group"];
02822 
02823                 // MINIMUM ACCESS LEVEL = 'administrate'
02824                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02825                 {
02826                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02827                 }
02828                 if(!is_array($_POST["group"]))
02829                 {
02830                         sendInfo($this->lng->txt("crs_no_groups_selected"));
02831                         $this->searchObject();
02832 
02833                         return false;
02834                 }
02835 
02836                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_usr_selection.html","course");
02837                 #$this->__showButton("searchUser",$this->lng->txt("crs_new_search"));
02838                 $this->object->initCourseMemberObject();
02839 
02840                 // GET ALL MEMBERS
02841                 $members = array();
02842                 foreach($_POST["group"] as $group_id)
02843                 {
02844                         if(!$tree->isInTree($group_id))
02845                         {
02846                                 continue;
02847                         }
02848                         if(!$tmp_obj = ilObjectFactory::getInstanceByRefId($group_id))
02849                         {
02850                                 continue;
02851                         }
02852                         $members = array_merge($tmp_obj->getGroupMemberIds(),$members);
02853 
02854                         unset($tmp_obj);
02855                 }
02856                 $members = array_unique($members);
02857                 $members = $this->__appendToStoredResults($members);
02858 
02859                 // FORMAT USER DATA
02860                 $counter = 0;
02861                 $f_result = array();
02862                 foreach($members as $user)
02863                 {
02864                         if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($user,false))
02865                         {
02866                                 continue;
02867                         }
02868                         
02869                         $user_ids[$counter] = $user;
02870                                         
02871                         $f_result[$counter][] = ilUtil::formCheckbox(0,"user[]",$user);
02872                         $f_result[$counter][] = $tmp_obj->getLogin();
02873                         $f_result[$counter][] = $tmp_obj->getLastname();
02874                         $f_result[$counter][] = $tmp_obj->getFirstname();
02875 
02876                         unset($tmp_obj);
02877                         ++$counter;
02878                 }
02879                 $this->__showSearchUserTable($f_result,$user_ids,"listUsersGroup");
02880 
02881                 return true;
02882         }
02883         
02884         function listUsersRoleObject()
02885         {
02886                 global $rbacsystem,$rbacreview,$tree;
02887 
02888                 $this->tabs_gui->setTabActive('members');
02889 
02890                 $_SESSION["crs_role"] = $_POST["role"] = $_POST["role"] ? $_POST["role"] : $_SESSION["crs_role"];
02891 
02892                 // MINIMUM ACCESS LEVEL = 'administrate'
02893                 if(!$rbacsystem->checkAccess("write", $this->object->getRefId()))
02894                 {
02895                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
02896                 }
02897                 if(!is_array($_POST["role"]))
02898                 {
02899                         sendInfo($this->lng->txt("crs_no_roles_selected"));
02900                         $this->searchObject();
02901 
02902                         return false;
02903                 }
02904 
02905                 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.crs_usr_selection.html","course");
02906                 #$this->__showButton("searchUser",$this->lng->txt("crs_new_search"));
02907                 $this->object->initCourseMemberObject();
02908 
02909                 // GET ALL MEMBERS
02910                 $members = array();
02911                 foreach($_POST["role"] as $role_id)
02912                 {
02913                         $members = array_merge($rbacreview->assignedUsers($role_id),$members);
02914                 }
02915 
02916                 $members = array_unique($members);
02917                 $members = $this->__appendToStoredResults($members);
02918 
02919                 // FORMAT USER DATA
02920                 $counter = 0;
02921                 $f_result = array();
02922                 foreach($members as $user)
02923                 {
02924                         if(!$tmp_obj = ilObjectFactory::getInstanceByObjId($user,false))
02925                         {
02926                                 continue;
02927                         }
02928                         
02929                         $user_ids[$counter] = $user;
02930                                         
02931                         $f_result[$counter][] = ilUtil::formCheckbox(0,"user[]",$user);
02932                         $f_result[$counter][] = $tmp_obj->getLogin();
02933                         $f_result[$counter][] = $tmp_obj->getLastname();
02934                         $f_result[$counter][] = $tmp_obj->getFirstname();
02935 
02936                         unset($tmp_obj);
02937                         ++$counter;
02938                 }
02939                 $this->__showSearchUserTable($f_result,$user_ids,"listUsersRole");
02940 
02941                 return true;
02942         }
02943 
02944         function getTabs(&$tabs_gui)
02945         {
02946                 global $rbacsystem,$ilAccess,$ilUser;
02947 
02948                 $this->object->initCourseMemberObject();
02949 
02950                 $this->ctrl->setParameter($this,"ref_id",$this->ref_id);
02951 
02952                 if($ilAccess->checkAccess('read','',$this->ref_id))
02953                 {
02954                         $tabs_gui->addTarget('view_content',
02955                                                                  $this->ctrl->getLinkTarget($this,''));
02956                 }
02957                 if ($ilAccess->checkAccess('visible','',$this->ref_id))
02958                 {
02959                         //$next_class = $this->ctrl->getNextClass($this);
02960                         
02961                         // this is not nice. tabs should be displayed in ilcoursegui
02962                         // not via ilrepositorygui, then next_class == ilinfoscreengui
02963                         // could be checked
02964                         $force_active = (strtolower($_GET["cmdClass"]) == "ilinfoscreengui"
02965                                 || strtolower($_GET["cmdClass"]) == "ilnotegui")
02966                                 ? true
02967                                 : false;
02968                         $tabs_gui->addTarget("info_short",
02969                                                                  $this->ctrl->getLinkTargetByClass(
02970                                                                  array("ilobjcoursegui", "ilinfoscreengui"), "showSummary"),
02971                                                                  "infoScreen",
02972                                                                  "", "", $force_active);
02973                 }
02974                 if ($ilAccess->checkAccess('write','',$this->ref_id))
02975                 {
02976                         $force_active = (strtolower($_GET["cmdClass"]) == "ilconditionhandlerinterface"
02977                                 && $_GET["item_id"] == "")
02978                                 ? true
02979                                 : false;
02980                         $tabs_gui->addTarget("settings",
02981                                 $this->ctrl->getLinkTarget($this, "edit"),
02982                                 array("edit", "editCourseIcons", "listStructure"), "", "", $force_active);
02983                 }
02984 
02985                 // lom meta data
02986                 if ($ilAccess->checkAccess('write','',$this->ref_id))
02987                 {
02988                         $tabs_gui->addTarget("meta_data",
02989                                                                  $this->ctrl->getLinkTargetByClass(array('ilobjcoursegui','ilmdeditorgui'),'listSection'),
02990                                                                  "",
02991                                                                  "ilmdeditorgui");
02992                 }
02993 
02994                 // member list
02995                 if($ilAccess->checkAccess('write','',$this->ref_id))
02996                 {
02997                         $tabs_gui->addTarget("members",
02998                                                                  $this->ctrl->getLinkTarget($this, "members"), 
02999                                                                  "members",
03000                                                                  get_class($this));
03001                 }                       
03002                 elseif ($ilAccess->checkAccess('read','',$this->ref_id) &&
03003                         $this->object->getShowMembers() == $this->object->SHOW_MEMBERS_ENABLED)
03004                 {
03005                         $tabs_gui->addTarget("members",
03006                                                                  $this->ctrl->getLinkTarget($this, "membersGallery"), 
03007                                                                  "members",
03008                                                                  get_class($this));
03009                 }
03010                 
03011                 // learning objectives
03012                 if($ilAccess->checkAccess('write','',$this->ref_id))
03013                 {
03014                         $force_active = (strtolower($_GET["cmdClass"]) == "ilcourseobjectivesgui")
03015                                 ? true
03016                                 : false;
03017                         $tabs_gui->addTarget("crs_objectives",
03018                                                                  $this->ctrl->getLinkTarget($this,"listObjectives"), 
03019                                                                  "listObjectives",
03020                                                                  get_class($this), "", $force_active);
03021                 }
03022                 
03023                 // learning progress
03024                 include_once("Services/Tracking/classes/class.ilObjUserTracking.php");
03025                 include_once('Services/Tracking/classes/class.ilLPObjSettings.php');
03026 
03027                 if(ilObjUserTracking::_enabledLearningProgress() and
03028                    (($ilAccess->checkAccess('read','',$this->ref_id) and (ilLPObjSettings::_lookupMode($this->object->getId()) != LP_MODE_DEACTIVATED)) or
03029                    ($ilAccess->checkAccess('write','',$this->ref_id))))
03030                 {
03031                         $tabs_gui->addTarget('learning_progress',
03032                                                                  $this->ctrl->getLinkTargetByClass(array('ilobjcoursegui','illearningprogressgui'),''),
03033                                                                  '',
03034                                                                  array('illplistofobjectsgui','illplistofsettingsgui','illearningprogressgui','illplistofprogressgui'));
03035                 }
03036                 if ($ilAccess->checkAccess('edit_permission','',$this->ref_id))
03037                 {
03038                         $tabs_gui->addTarget("perm_settings",
03039                                                                  $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"),
03040                                                                  array("perm","info","owner"), 'ilpermissiongui');
03041                 }
03042 
03043                 if ($this->ctrl->getTargetScript() == "adm_object.php")
03044                 {
03045                         $tabs_gui->addTarget("show_owner",
03046                                                                  $this->ctrl->getLinkTarget($this, "owner"), "owner", get_class($this));
03047                         
03048                         if ($this->tree->getSavedNodeData($this->ref_id))
03049                         {
03050                                 $tabs_gui->addTarget("trash",
03051                                                                          $this->ctrl->getLinkTarget($this, "trash"), "trash", get_class($this));
03052                         }
03053                 }
03054                 if($ilAccess->checkAccess('join','',$this->ref_id)
03055                    and !ilCourseMembers::_isMember($ilUser->getId(),$this->object->getId()))
03056                 {
03057                         $tabs_gui->addTarget("join",
03058                                                                  $this->ctrl->getLinkTarget($this, "join"), 
03059                                                                  'join',
03060                                                                  "");
03061                 }                       
03062         }
03063         
03064         function fetchPrintSubscriberData($a_members)
03065         {
03066                 foreach($a_members as $member_id)
03067                 {
03068                         
03069                         $member_data = $this->object->members_obj->getSubscriberData($member_id);
03070 
03071                         if($tmp_obj = ilObjectFactory::getInstanceByObjId($member_id,false))
03072                         {
03073                                 $print_member[$member_id]['login'] = $tmp_obj->getLogin();
03074                                 $print_member[$member_id]['name'] = $tmp_obj->getLastname().', '.$tmp_obj->getFirstname();
03075                                 $print_member[$member_id]['time'] = ilFormat::formatUnixTime($member_data['time'],true);
03076                         }
03077                 }
03078                 switch($_SESSION['crs_print_sort'])
03079                 {
03080                         case 'lastname':
03081                                 return ilUtil::sortArray($print_member,'name',$_SESSION['crs_print_order']);
03082                                 
03083                         case 'login':
03084                                 return ilUtil::sortArray($print_member,'login',$_SESSION['crs_print_order']);
03085                         
03086                         case 'sub_time':
03087                                 return ilUtil::sortArray($print_member,'time',$_SESSION['crs_print_order']);
03088                         
03089                         default:
03090                                 return ilUtil::sortArray($print_member,'name',$_SESSION['crs_print_order']);
03091                 }
03092         }
03093         
03094         function fetchPrintMemberData($a_members)
03095         {
03096                 global $ilAccess;
03097 
03098                 $is_admin = (bool) $ilAccess->checkAccess("write",'',$this->object->getRefId());
03099                 
03100                 foreach($a_members as $member_id)
03101                 {
03102                         $member_data = $this->object->members_obj->getUserData($member_id);
03103         
03104                         // GET USER OBJ
03105                         if($tmp_obj = ilObjectFactory::getInstanceByObjId($member_id,false))
03106                         {
03107                                 $print_member[$member_id]['login'] = $tmp_obj->getLogin();
03108                                 $print_member[$member_id]['name'] = $tmp_obj->getLastname().', '.$tmp_obj->getFirstname();
03109 
03110                                 switch($member_data["role"])
03111                                 {
03112                                         case $this->object->members_obj->ROLE_ADMIN:
03113                                                 $print_member[$member_id]['role'] = $this->lng->txt("il_crs_admin");
03114                                                 break;
03115         
03116                                         case $this->object->members_obj->ROLE_TUTOR:
03117                                                 $print_member[$member_id]['role'] = $this->lng->txt("il_crs_tutor");
03118                                                 break;
03119         
03120                                         case $this->object->members_obj->ROLE_MEMBER:
03121                                                 $print_member[$member_id]['role'] = $this->lng->txt("il_crs_member");
03122                                                 break;
03123                                 }
03124                                 
03125                                 switch($member_data["status"])
03126                                 {
03127                                         case $this->object->members_obj->STATUS_NOTIFY:
03128                                                 $print_member[$member_id]['status'] = $this->lng->txt("crs_notify");
03129                                                 break;
03130         
03131                                         case $this->object->members_obj->STATUS_NO_NOTIFY:
03132                                                 $print_member[$member_id]['status'] = $this->lng->txt("crs_no_notify");
03133                                                 break;
03134         
03135                                         case $this->object->members_obj->STATUS_BLOCKED:
03136                                                 $print_member[$member_id]['status'] = $this->lng->txt("crs_blocked");
03137                                                 break;
03138         
03139                                         case $this->object->members_obj->STATUS_UNBLOCKED:
03140                                                 $print_member[$member_id]['status'] = $this->lng->txt("crs_unblocked");
03141                                                 break;
03142                                 }
03143         
03144                                 if($is_admin)
03145                                 {
03146                                         $print_member[$member_id]['passed'] = $member_data['passed'] ?
03147                                                                           $this->lng->txt('crs_member_passed') :
03148                                                                           $this->lng->txt('crs_member_not_passed');
03149                                         
03150                                 }
03151                         }
03152                 }
03153                 
03154                 switch($_SESSION['crs_print_sort'])
03155                 {
03156                         case 'lastname':
03157                                 return ilUtil::sortArray($print_member,'name',$_SESSION['crs_print_order']);
03158                                 
03159                         case 'login':
03160                                 return ilUtil::sortArray($print_member,'login',$_SESSION['crs_print_order']);
03161                         
03162                         case 'passed':
03163                                 return ilUtil::sortArray($print_member,'passed',$_SESSION['crs_print_order']);
03164                         
03165                         case 'blocked':
03166                         case 'notification':
03167                                 return ilUtil::sortArray($print_member,'status',$_SESSION['crs_print_order']);
03168                         
03169                         default:
03170                                 return ilUtil::sortArray($print_member,'name',$_SESSION['crs_print_order']);
03171                 }
03172         }
03173         
03174 
03175         function printMembersObject()
03176         {
03177                 global $rbacsystem;
03178 
03179                 $is_admin = (bool) $rbacsystem->checkAccess("write", $this->object->getRefId());
03180 
03181                 $tpl =& new ilTemplate('tpl.crs_members_print.html',true,true,'course');
03182 
03183                 $this->object->initCourseMemberObject();
03184 
03185                 // MEMBERS
03186                 if(count($members = $this->object->members_obj->getAssignedUsers()))
03187                 {
03188                         $members = $this->fetchPrintMemberData($members);
03189                         
03190                         foreach($members as $member_data)
03191                         {
03192                                 $tpl->setCurrentBlock("members_row");
03193                                 $tpl->setVariable("LOGIN",$member_data['login']);
03194                                 $tpl->setVariable("NAME",$member_data['name']);
03195                                 $tpl->setVariable("ROLE",$member_data['role']);
03196                                 $tpl->setVariable("STATUS",$member_data['status']);
03197                                 $tpl->setVariable("PASSED",$member_data['passed']);
03198                                 
03199                                 if($is_admin)
03200                                 {
03201                                         $tpl->setVariable("STATUS",$member_data['status']);
03202                                         $tpl->setVariable("PASSED",$member_data['passed']);
03203                                 }
03204                                 $tpl->parseCurrentBlock();
03205                         }
03206 
03207                         $tpl->setCurrentBlock("members");
03208                         $tpl->setVariable("MEMBERS_IMG_SOURCE",ilUtil::getImagePath('icon_usr.gif'));
03209                         $tpl->setVariable("MEMBERS_IMG_ALT",$this->lng->txt('crs_header_members'));
03210                         $tpl->setVariable("MEMBERS_TABLE_HEADER",$this->lng->txt('crs_members_table'));
03211                         $tpl->setVariable("TXT_LOGIN",$this->lng->txt('username'));
03212                         $tpl->setVariable("TXT_NAME",$this->lng->txt('name'));
03213                         $tpl->setVariable("TXT_ROLE",$this->lng->txt('crs_role'));
03214 
03215                         if($is_admin)
03216                         {
03217                                 $tpl->setVariable("TXT_STATUS",$this->lng->txt('crs_status'));
03218                                 $tpl->setVariable("TXT_PASSED",$this->lng->txt('crs_passed'));
03219                         }
03220 
03221                         $tpl->parseCurrentBlock();
03222 
03223                 }
03224                 // SUBSCRIBERS
03225                 if(count($members = $this->object->members_obj->getSubscribers()))
03226                 {
03227                         $members = $this->fetchPrintSubscriberData($members);
03228                         foreach($members as $member_data)
03229                         {
03230                                 $tpl->setCurrentBlock("members_row");
03231                                 $tpl->setVariable("SLOGIN",$member_data['login']);
03232                                 $tpl->setVariable("SNAME",$member_data['name']);
03233                                 $tpl->setVariable("STIME",$member_data["time"]);
03234                                 $this->tpl->parseCurrentBlock();
03235                         }
03236                         
03237                         $tpl->setCurrentBlock("subscribers");
03238                         $tpl->setVariable("SUBSCRIBERS_IMG_SOURCE",ilUtil::getImagePath('icon_usr.gif'));
03239                         $tpl->setVariable("SUBSCRIBERS_IMG_ALT",$this->lng->txt('crs_subscribers'));
03240                         $tpl->setVariable("SUBSCRIBERS_TABLE_HEADER",$this->lng->txt('crs_subscribers'));
03241                         $tpl->setVariable("TXT_SLOGIN",$this->lng->txt('username'));
03242                         $tpl->setVariable("TXT_SNAME",$this->lng->txt('name'));
03243                         $tpl->setVariable("TXT_STIME",$this->lng->txt('crs_time'));
03244                         $tpl->parseCurrentBlock();
03245 
03246                 }
03247 
03248                 $tpl->setVariable("TITLE",$this->lng->txt('crs_members_print_title'));
03249                 $tpl->setVariable("CSS_PATH",ilUtil::getStyleSheetLocation());
03250                 
03251                 $headline = $this->lng->txt('obj_crs').': '.$this->object->getTitle().
03252                         ' -> '.$this->lng->txt('crs_header_members').' ('.ilFormat::formatUnixTime(time(),true).')';
03253 
03254                 $tpl->setVariable("HEADLINE",$headline);
03255 
03256                 $tpl->show();
03257                 exit;
03258         }
03259 
03260 
03266         function membersGalleryObject()
03267         {
03268 
03269           include_once ("./classes/class.ilUtil.php");
03270 
03271                 global $rbacsystem, $ilErr, $ilAccess,$ilUser;
03272                 
03273                 $is_admin = (bool) $ilAccess->checkAccess("write", "", $this->object->getRefId());
03274 
03275                 if (!$is_admin &&
03276                         $this->object->getShowMembers() == $this->object->SHOW_MEMBERS_DISABLED)
03277                 {
03278                         $ilErr->raiseError($this->lng->txt("msg_no_perm_read"),$ilErr->MESSAGE);
03279                 }
03280 
03281                 $this->tabs_gui->setTabActive('members');
03282 
03283                 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.crs_members_gallery.html','course');
03284                 
03285                 $this->setSubTabs('members');
03286 
03287                 // Unsubscribe
03288                 if($ilAccess->checkAccess('leave','',$this->object->getRefId()) and
03289                    $this->object->members_obj->isMember($ilUser->getId()))
03290                 {
03291                         $this->__showButton($this->ctrl->getLinkTarget($this,'unsubscribe'),$this->lng->txt("crs_unsubscribe"));
03292                 }
03293 
03294 
03295                 $this->object->initCourseMemberObject();
03296 
03297                 // MEMBERS
03298                 if(count($members = $this->object->members_obj->getAssignedUsers()))
03299                 {
03300                         $ordered_members = array();
03301 
03302                         foreach($members as $member_id)
03303                         {
03304                                 if(!($usr_obj = ilObjectFactory::getInstanceByObjId($member_id,false)))
03305                                 {
03306                                         continue;
03307                                 }
03308                                 
03309                                 array_push($ordered_members,array("id" => $member_id, 
03310                                                                   "login" => $usr_obj->getLogin(),
03311                                                                   "lastname" => strtoupper($usr_obj->getLastName()),
03312                                                                   "firstname" => strtoupper($usr_obj->getFirstName()),
03313                                                                   "usr_obj" => $usr_obj));
03314                         }
03315 
03316                         $ordered_members=ilUtil::sortArray($ordered_members,"lastname","asc");
03317 
03318                         foreach($ordered_members as $member)
03319                         {
03320 
03321                           $usr_obj = $member["usr_obj"];
03322                           
03323                                 $public_profile = $usr_obj->getPref("public_profile");
03324                                 
03325                                 // SET LINK TARGET FOR USER PROFILE
03326                                 $this->ctrl->setParameterByClass("ilobjusergui", "user", $member["id"]);
03327                                 $profile_target = $this->ctrl->getLinkTargetByClass("ilobjusergui","getPublicProfile");
03328                           
03329                                 // GET USER IMAGE
03330                                 $file = $usr_obj->getPersonalPicturePath("xsmall");
03331                                 
03332                                 $member_data = $this->object->members_obj->getUserData($member["id"]);
03333 
03334                                 switch($member_data["role"])
03335                                 {
03336                                         // admins / tutors
03337                                         case $this->object->members_obj->ROLE_ADMIN:
03338                                         case $this->object->members_obj->ROLE_TUTOR:
03339                                                 if ($public_profile == "y")
03340                                                 {
03341                                                         $this->tpl->setCurrentBlock("tutor_linked");
03342                                                         $this->tpl->setVariable("LINK_PROFILE", $profile_target);
03343                                                         $this->tpl->setVariable("SRC_USR_IMAGE", $file);
03344                                                         $this->tpl->parseCurrentBlock();
03345                                                 }
03346                                                 else
03347                                                 {
03348                                                         $this->tpl->setCurrentBlock("tutor_not_linked");
03349                                                         $this->tpl->setVariable("SRC_USR_IMAGE", $file);
03350                                                         $this->tpl->parseCurrentBlock();
03351                                                 }
03352                                                 $this->tpl->setCurrentBlock("tutor");
03353                                                 break;
03354 
03355                                         // all others
03356                                         default:
03357                                                 if ($public_profile == "y")
03358                                                 {
03359                                                         $this->tpl->setCurrentBlock("member_linked");
03360                                                         $this->tpl->setVariable("LINK_PROFILE", $profile_target);
03361                                                         $this->tpl->setVariable("SRC_USR_IMAGE", $file);
03362                                                         $this->tpl->parseCurrentBlock();
03363                                                 }
03364                                                 else
03365                                                 {
03366                                                         $this->tpl->setCurrentBlock("member_not_linked");
03367                                                         $this->tpl->setVariable("SRC_USR_IMAGE", $file);
03368                                                         $this->tpl->parseCurrentBlock();
03369                                                 }
03370                                                 $this->tpl->setCurrentBlock("member");
03371                                                 break;
03372                                 }
03373                                 
03374                                 // do not show name, if public profile is not activated
03375                                 if ($public_profile == "y")
03376                                 {
03377                                         $this->tpl->setVariable("FIRSTNAME", $member["firstname"]);
03378                                         $this->tpl->setVariable("LASTNAME", $member["lastname"]);
03379                                 }
03380                                 $this->tpl->setVariable("LOGIN", $member["login"]);
03381                                 $this->tpl->parseCurrentBlock();
03382 
03383                         }
03384                         $this->tpl->setCurrentBlock("members"); 
03385                         $this->tpl->setVariable("MEMBERS_TABLE_HEADER",$this->lng->txt('crs_members_title'));
03386                         $this->tpl->parseCurrentBlock();
03387                         
03388                 }
03389                 
03390                 $this->tpl->setVariable("TITLE",$this->lng->txt('crs_members_print_title'));
03391                 $this->tpl->setVariable("CSS_PATH",ilUtil::getStyleSheetLocation());
03392                 
03393                 $headline = $this->object->getTitle()."<br/>".$this->object->getDescription();
03394                 
03395                 $this->tpl->setVariable("HEADLINE",$headline);
03396                 
03397                 $this->tpl->show();
03398                 exit;
03399         }
03400         
03401 
03402         function &__initTableGUI()
03403         {
03404                 include_once "./classes/class.ilTableGUI.php";
03405 
03406                 return new ilTableGUI(0,false);
03407         }
03408 
03409 
03410         function __setTableGUIBasicData(&$tbl,&$result_set,$from = "")
03411         {
03412         switch($from)
03413                 {
03414                         case "members":
03415                                 $offset = $_GET["update_members"] ? $_GET["offset"] : 0;
03416                                 $order = $_GET["update_members"] ? $_GET["sort_by"] : 'login';
03417                                 $direction = $_GET["update_members"] ? $_GET["sort_order"] : '';
03418                                 break;
03419 
03420                         case "subscribers":
03421                                 $offset = $_GET["update_subscribers"] ? $_GET["offset"] : 0;
03422                                 $order = $_GET["update_subscribers"] ? $_GET["sort_by"] : 'sub_time';
03423                                 $direction = $_GET["update_subscribers"] ? $_GET["sort_order"] : '';
03424                                 break;
03425                                 
03426                         case "group":
03427                                 $offset = $_GET["offset"];
03428                         $order = $_GET["sort_by"] ? $_GET["sort_by"] : "title";
03429                                 $direction = $_GET["sort_order"];
03430                                 break;
03431                                 
03432                         case "role":
03433                                 $offset = $_GET["offset"];
03434                         $order = $_GET["sort_by"] ? $_GET["sort_by"] : "title";
03435                                 $direction = $_GET["sort_order"];
03436                                 break;
03437 
03438                         default:
03439                                 $offset = $_GET["offset"];
03440                                 // init sort_by (unfortunatly sort_by is preset with 'title'
03441                         if ($_GET["sort_by"] == "title" or empty($_GET["sort_by"]))
03442                 {
03443                     $_GET["sort_by"] = "login";
03444                 }
03445                 $order = $_GET["sort_by"];
03446                                 $direction = $_GET["sort_order"];
03447                                 break;
03448                 }
03449 
03450                 $tbl->setOrderColumn($order);
03451                 $tbl->setOrderDirection($direction);
03452                 $tbl->setOffset($offset);
03453                 $tbl->setLimit($_GET["limit"]);
03454                 $tbl->setMaxCount(count($result_set));
03455                 $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
03456                 $tbl->setData($result_set);
03457         }
03458                 
03459 
03460 
03461         function __showEditMemberTable($a_result_set)
03462         {
03463                 $tbl =& $this->__initTableGUI();
03464                 $tpl =& $tbl->getTemplateObject();
03465 
03466                 // SET FORMACTION
03467                 $tpl->setCurrentBlock("tbl_form_header");
03468                 $this->ctrl->setParameter($this,"member_id",(int) $_GET["member_id"]);
03469                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03470                 $tpl->parseCurrentBlock();
03471 
03472 
03473                 $tpl->setCurrentBlock("tbl_action_btn");
03474                 $tpl->setVariable("BTN_NAME","updateMember");
03475                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("save"));
03476                 $tpl->parseCurrentBlock();
03477 
03478                 $tpl->setCurrentBlock("tbl_action_btn");
03479                 $tpl->setVariable("BTN_NAME","members");
03480                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("cancel"));
03481                 $tpl->parseCurrentBlock();
03482 
03483                 $tpl->setCurrentBlock("tbl_action_row");
03484                 $tpl->setVariable("COLUMN_COUNTS",5);
03485                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
03486                 $tpl->parseCurrentBlock();
03487 
03488 
03489                 $tbl->setTitle($this->lng->txt("crs_header_edit_members"),"icon_usr_b.gif",$this->lng->txt("crs_header_members"));
03490                 $tbl->setHeaderNames(array($this->lng->txt("username"),
03491                                                                    $this->lng->txt("firstname"),
03492                                                                    $this->lng->txt("lastname"),
03493                                                                    $this->lng->txt('crs_passed'),
03494                                                                    $this->lng->txt("crs_role_status")));
03495                 $tbl->setHeaderVars(array("login",
03496                                                                   "firstname",
03497                                                                   "lastname",
03498                                                                   "passed",
03499                                                                   "role"),
03500                                                         array("ref_id" => $this->object->getRefId(),
03501                                                                   "cmd" => "members",
03502                                                                   "cmdClass" => "ilobjcoursegui",
03503                                                                   "cmdNode" => $_GET["cmdNode"]));
03504 
03505                 $tbl->setColumnWidth(array("20%","20%","20%","20%","20%"));
03506 
03507 
03508                 $this->__setTableGUIBasicData($tbl,$a_result_set);
03509                 $tbl->disable('sort');
03510                 $tbl->render();
03511                 
03512                 $this->tpl->setVariable("EDIT_MEMBER_TABLE",$tbl->tpl->get());
03513         }
03514 
03515         function __showSearchUserTable($a_result_set,$a_user_ids = NULL,$a_cmd = "search")
03516         {
03517         $return_to  = "searchUser";
03518 
03519         if ($a_cmd == "listUsersRole" or $a_cmd == "listUsersGroup")
03520         {
03521             $return_to = "search";
03522         }
03523 
03524                 $this->__showButton($return_to,$this->lng->txt("back"));
03525 
03526         
03527                 $tbl =& $this->__initTableGUI();
03528                 $tpl =& $tbl->getTemplateObject();
03529 
03530 
03531                 // SET FORMACTION
03532                 $tpl->setCurrentBlock("tbl_form_header");
03533                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03534                 $tpl->parseCurrentBlock();
03535 
03536                 $tpl->setCurrentBlock("tbl_action_btn");
03537                 $tpl->setVariable("BTN_NAME","assignMembers");
03538                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("add"));
03539                 $tpl->parseCurrentBlock();
03540                 
03541                 $tpl->setCurrentBlock("plain_button");
03542                 $tpl->setVariable("PBTN_NAME",'searchUser');
03543                 $tpl->setVariable("PBTN_VALUE",$this->lng->txt('append_search'));
03544                 $tpl->parseCurrentBlock();
03545                 
03546                 $tpl->setCurrentBlock("plain_button");
03547                 $tpl->setVariable("PBTN_NAME",'cancelSearch');
03548                 $tpl->setVariable("PBTN_VALUE",$this->lng->txt("crs_new_search"));
03549                 $tpl->parseCurrentBlock();
03550 
03551                 if (!empty($a_user_ids))
03552                 {
03553                         // set checkbox toggles
03554                         $tpl->setCurrentBlock("tbl_action_toggle_checkboxes");
03555                         $tpl->setVariable("JS_VARNAME","user");                 
03556                         $tpl->setVariable("JS_ONCLICK",ilUtil::array_php2js($a_user_ids));
03557                         $tpl->setVariable("TXT_CHECKALL", $this->lng->txt("check_all"));
03558                         $tpl->setVariable("TXT_UNCHECKALL", $this->lng->txt("uncheck_all"));
03559                         $tpl->parseCurrentBlock();
03560                 }
03561 
03562                 $tpl->setCurrentBlock("tbl_action_row");
03563                 $tpl->setVariable("COLUMN_COUNTS",5);
03564                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
03565                 $tpl->parseCurrentBlock();
03566 
03567                 $tbl->setTitle($this->lng->txt("crs_header_edit_members"),"icon_usr_b.gif",$this->lng->txt("crs_header_edit_members"));
03568                 $tbl->setHeaderNames(array("",
03569                                                                    $this->lng->txt("username"),
03570                                                                    $this->lng->txt("firstname"),
03571                                                                    $this->lng->txt("lastname")));
03572                 $tbl->setHeaderVars(array("",
03573                                                                   "login",
03574                                                                   "firstname",
03575                                                                   "lastname"),
03576                                                         array("ref_id" => $this->object->getRefId(),
03577                                                                   "cmd" => $a_cmd,
03578                                                                   "cmdClass" => "ilobjcoursegui",
03579                                                                   "cmdNode" => $_GET["cmdNode"]));
03580 
03581                 $tbl->setColumnWidth(array("","33%","33%","33%"));
03582 
03583                 $this->__setTableGUIBasicData($tbl,$a_result_set);
03584                 $tbl->render();
03585                 
03586                 $this->tpl->setVariable("SEARCH_RESULT_TABLE",$tbl->tpl->get());
03587 
03588                 return true;
03589         }
03590         
03591         function __showSearchGroupTable($a_result_set,$a_grp_ids = NULL)
03592         {
03593                 $this->__showButton('searchUser',$this->lng->txt("back"));
03594 
03595                 $tbl =& $this->__initTableGUI();
03596                 $tpl =& $tbl->getTemplateObject();
03597 
03598                 $tpl->setCurrentBlock("tbl_form_header");
03599                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03600                 $tpl->parseCurrentBlock();
03601 
03602                 $tpl->setCurrentBlock("tbl_action_btn");
03603                 $tpl->setVariable("BTN_NAME","listUsersGroup");
03604                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("crs_list_users"));
03605                 $tpl->parseCurrentBlock();
03606 
03607                 if (!empty($a_grp_ids))
03608                 {
03609                         // set checkbox toggles
03610                         $tpl->setCurrentBlock("tbl_action_toggle_checkboxes");
03611                         $tpl->setVariable("JS_VARNAME","group");                        
03612                         $tpl->setVariable("JS_ONCLICK",ilUtil::array_php2js($a_grp_ids));
03613                         $tpl->setVariable("TXT_CHECKALL", $this->lng->txt("check_all"));
03614                         $tpl->setVariable("TXT_UNCHECKALL", $this->lng->txt("uncheck_all"));
03615                         $tpl->parseCurrentBlock();
03616                 }
03617 
03618                 $tpl->setCurrentBlock("tbl_action_row");
03619                 $tpl->setVariable("COLUMN_COUNTS",5);
03620                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
03621                 $tpl->parseCurrentBlock();
03622 
03623                 $tbl->setTitle($this->lng->txt("crs_header_edit_members"),"icon_usr_b.gif",$this->lng->txt("crs_header_edit_members"));
03624                 $tbl->setHeaderNames(array("",
03625                                                                    $this->lng->txt("obj_grp"),
03626                                                                    $this->lng->txt("crs_count_members")));
03627                 $tbl->setHeaderVars(array("",
03628                                                                   "title",
03629                                                                   "nr_members"),
03630                                                         array("ref_id" => $this->object->getRefId(),
03631                                                                   "cmd" => "search",
03632                                                                   "cmdClass" => "ilobjcoursegui",
03633                                                                   "cmdNode" => $_GET["cmdNode"]));
03634 
03635                 $tbl->setColumnWidth(array("","80%","19%"));
03636 
03637 
03638                 $this->__setTableGUIBasicData($tbl,$a_result_set,"group");
03639                 $tbl->render();
03640 
03641                 $this->tpl->setVariable("SEARCH_RESULT_TABLE",$tbl->tpl->get());
03642 
03643                 return true;
03644         }
03645         
03646         function __showSearchRoleTable($a_result_set,$a_role_ids)
03647         {
03648                 $this->__showButton('searchUser',$this->lng->txt("back"));
03649 
03650                 $tbl =& $this->__initTableGUI();
03651                 $tpl =& $tbl->getTemplateObject();
03652 
03653                 $tpl->setCurrentBlock("tbl_form_header");
03654                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03655                 $tpl->parseCurrentBlock();
03656 
03657                 $tpl->setCurrentBlock("tbl_action_btn");
03658                 $tpl->setVariable("BTN_NAME","searchUser");
03659                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("back"));
03660                 $tpl->parseCurrentBlock();
03661 
03662                 $tpl->setCurrentBlock("tbl_action_btn");
03663                 $tpl->setVariable("BTN_NAME","listUsersRole");
03664                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("crs_list_users"));
03665                 $tpl->parseCurrentBlock();
03666                 
03667                 if (!empty($a_role_ids))
03668                 {
03669                         // set checkbox toggles
03670                         $tpl->setCurrentBlock("tbl_action_toggle_checkboxes");
03671                         $tpl->setVariable("JS_VARNAME","role");                 
03672                         $tpl->setVariable("JS_ONCLICK",ilUtil::array_php2js($a_role_ids));
03673                         $tpl->setVariable("TXT_CHECKALL", $this->lng->txt("check_all"));
03674                         $tpl->setVariable("TXT_UNCHECKALL", $this->lng->txt("uncheck_all"));
03675                         $tpl->parseCurrentBlock();
03676                 }
03677 
03678                 $tpl->setCurrentBlock("tbl_action_row");
03679                 $tpl->setVariable("COLUMN_COUNTS",5);
03680                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
03681                 $tpl->parseCurrentBlock();
03682 
03683                 $tbl->setTitle($this->lng->txt("crs_header_edit_members"),"icon_usr_b.gif",$this->lng->txt("crs_header_edit_members"));
03684                 $tbl->setHeaderNames(array("",
03685                                                                    $this->lng->txt("obj_grp"),
03686                                                                    $this->lng->txt("crs_count_members")));
03687                 $tbl->setHeaderVars(array("",
03688                                                                   "title",
03689                                                                   "nr_members"),
03690                                                         array("ref_id" => $this->object->getRefId(),
03691                                                                   "cmd" => "search",
03692                                                                   "cmdClass" => "ilobjcoursegui",
03693                                                                   "cmdNode" => $_GET["cmdNode"]));
03694 
03695                 $tbl->setColumnWidth(array("","80%","19%"));
03696 
03697 
03698                 $this->__setTableGUIBasicData($tbl,$a_result_set,"role");
03699                 $tbl->render();
03700                 
03701                 $this->tpl->setVariable("SEARCH_RESULT_TABLE",$tbl->tpl->get());
03702 
03703                 return true;
03704         }
03705 
03706         function __showDeleteMembersTable($a_result_set)
03707         {
03708                 $tbl =& $this->__initTableGUI();
03709                 $tpl =& $tbl->getTemplateObject();
03710 
03711                 $tpl->setCurrentBlock("tbl_form_header");
03712                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03713                 $tpl->parseCurrentBlock();
03714 
03715 
03716                 $tpl->setCurrentBlock("tbl_action_btn");
03717                 $tpl->setVariable("BTN_NAME","removeMembers");
03718                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("crs_delete_member"));
03719                 $tpl->parseCurrentBlock();
03720 
03721                 $tpl->setCurrentBlock("tbl_action_btn");
03722                 $tpl->setVariable("BTN_NAME","cancelMember");
03723                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("cancel"));
03724                 $tpl->parseCurrentBlock();
03725 
03726                 $tpl->setCurrentBlock("tbl_action_row");
03727                 $tpl->setVariable("COLUMN_COUNTS",4);
03728                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
03729                 $tpl->parseCurrentBlock();
03730 
03731                 $tbl->setTitle($this->lng->txt("crs_header_delete_members"),"icon_usr_b.gif",$this->lng->txt("crs_header_delete_members"));
03732                 $tbl->setHeaderNames(array($this->lng->txt("username"),
03733                                                                    $this->lng->txt("firstname"),
03734                                                                    $this->lng->txt("lastname"),
03735                                                                    $this->lng->txt("role")));
03736                 $tbl->setHeaderVars(array("login",
03737                                                                   "firstname",
03738                                                                   "lastname",
03739                                                                   "role"),
03740                                                         array("ref_id" => $this->object->getRefId(),
03741                                                                   "cmd" => "members",
03742                                                                   "cmdClass" => "ilobjcoursegui",
03743                                                                   "cmdNode" => $_GET["cmdNode"]));
03744 
03745                 $tbl->setColumnWidth(array("25%","25%","25%","25%"));
03746 
03747                 $this->__setTableGUIBasicData($tbl,$a_result_set);
03748                 $tbl->disable('sort');
03749                 $tbl->render();
03750                 
03751                 $this->tpl->setVariable("EDIT_MEMBER_TABLE",$tbl->tpl->get());
03752 
03753                 return true;
03754         }
03755 
03756         function __showRemoveFromWaitingListTable($a_result_set)
03757         {
03758                 $tbl =& $this->__initTableGUI();
03759                 $tpl =& $tbl->getTemplateObject();
03760                 
03761                 $tpl->setCurrentBlock("tbl_form_header");
03762                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03763                 $tpl->parseCurrentBlock();
03764                 $tpl->setCurrentBlock("tbl_action_btn");
03765                 $tpl->setVariable("BTN_NAME","cancelMember");
03766                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("cancel"));
03767                 $tpl->parseCurrentBlock();
03768                 $tpl->setCurrentBlock("tbl_action_btn");
03769                 $tpl->setVariable("BTN_NAME","performRemoveFromWaitingList");
03770                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("delete"));
03771                 $tpl->parseCurrentBlock();
03772                 $tpl->setCurrentBlock("tbl_action_row");
03773                 $tpl->setVariable("COLUMN_COUNTS",4);
03774                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
03775                 $tpl->parseCurrentBlock();
03776 
03777                 $tbl->setTitle($this->lng->txt("crs_header_remove_from_waiting_list"),"icon_usr_b.gif",
03778                                            $this->lng->txt("crs_header_remove_from_waiting_list"));
03779                 $tbl->setHeaderNames(array($this->lng->txt("username"),
03780                                                                    $this->lng->txt("firstname"),
03781                                                                    $this->lng->txt("lastname"),
03782                                                                    $this->lng->txt("crs_time")));
03783                 $tbl->setHeaderVars(array("login",
03784                                                                   "firstname",
03785                                                                   "lastname",
03786                                                                   "sub_time"),
03787                                                         array("ref_id" => $this->object->getRefId(),
03788                                                                   "cmd" => "members",
03789                                                                   "cmdClass" => "ilobjcoursegui",
03790                                                                   "cmdNode" => $_GET["cmdNode"]));
03791 
03792                 $tbl->setColumnWidth(array("25%","25%","25%","25%"));
03793 
03794                 $this->__setTableGUIBasicData($tbl,$a_result_set);
03795                 $tbl->render();
03796 
03797                 $this->tpl->setVariable("EDIT_MEMBER_TABLE",$tbl->tpl->get());
03798 
03799                 return true;
03800         }
03801 
03802         function __showDeleteSubscriberTable($a_result_set)
03803         {
03804                 $tbl =& $this->__initTableGUI();
03805                 $tpl =& $tbl->getTemplateObject();
03806                 
03807                 $tpl->setCurrentBlock("tbl_form_header");
03808                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03809                 $tpl->parseCurrentBlock();
03810                 $tpl->setCurrentBlock("tbl_action_btn");
03811                 $tpl->setVariable("BTN_NAME","removeSubscribers");
03812                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("delete"));
03813                 $tpl->parseCurrentBlock();
03814                 $tpl->setCurrentBlock("tbl_action_btn");
03815                 $tpl->setVariable("BTN_NAME","cancelMember");
03816                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("cancel"));
03817                 $tpl->parseCurrentBlock();
03818                 $tpl->setCurrentBlock("tbl_action_row");
03819                 $tpl->setVariable("COLUMN_COUNTS",4);
03820                 $tpl->setVariable("IMG_ARROW",ilUtil::getImagePath("arrow_downright.gif"));
03821                 $tpl->parseCurrentBlock();
03822 
03823                 $tbl->setTitle($this->lng->txt("crs_header_delete_subscribers"),"icon_usr_b.gif",$this->lng->txt("crs_header_delete_members"));
03824                 $tbl->setHeaderNames(array($this->lng->txt("username"),
03825                                                                    $this->lng->txt("firstname"),
03826                                                                    $this->lng->txt("lastname"),
03827                                                                    $this->lng->txt("crs_time")));
03828                 $tbl->setHeaderVars(array("login",
03829                                                                   "firstname",
03830                                                                   "lastname",
03831                                                                   "sub_time"),
03832                                                         array("ref_id" => $this->object->getRefId(),
03833                                                                   "cmd" => "members",
03834                                                                   "cmdClass" => "ilobjcoursegui",
03835                                                                   "cmdNode" => $_GET["cmdNode"]));
03836 
03837                 $tbl->setColumnWidth(array("25%","25%","25%","25%"));
03838 
03839                 $this->__setTableGUIBasicData($tbl,$a_result_set);
03840                 $tbl->render();
03841 
03842                 $this->tpl->setVariable("EDIT_MEMBER_TABLE",$tbl->tpl->get());
03843 
03844                 return true;
03845         }
03846 
03847 
03848 
03849         function __showSubscribersTable($a_result_set,$a_subscriber_ids = NULL)
03850         {
03851                 $actions = array("addSubscribers"               => $this->lng->txt("crs_add_subscribers"),
03852                                                  "deleteSubscribers"    => $this->lng->txt("crs_delete_subscribers"));
03853 
03854                 $tbl =& $this->__initTableGUI();
03855                 $tpl =& $tbl->getTemplateObject();
03856 
03857                 // SET FORMACTION
03858                 $tpl->setCurrentBlock("tbl_form_header");
03859 
03860                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03861                 $tpl->parseCurrentBlock();
03862 
03863                 // SET FOOTER BUTTONS
03864                 $tpl->setCurrentBlock("tbl_action_row");
03865 
03866                 // BUTTONS FOR ADD USER  
03867                 $tpl->setCurrentBlock("plain_button");
03868                 $tpl->setVariable("PBTN_NAME","autoFill");
03869                 $tpl->setVariable("PBTN_VALUE",$this->lng->txt("crs_auto_fill"));
03870                 $tpl->parseCurrentBlock();
03871                 $tpl->setCurrentBlock("plain_buttons");
03872                 $tpl->parseCurrentBlock();
03873 
03874                 $tpl->setVariable("COLUMN_COUNTS",5);
03875                 
03876                 $tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.gif"));
03877 
03878                 $tpl->setCurrentBlock("tbl_action_select");
03879                 $tpl->setVariable("SELECT_ACTION",ilUtil::formSelect(1,"action",$actions,false,true));
03880                 $tpl->setVariable("BTN_NAME","gateway");
03881                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("execute"));
03882                 $tpl->parseCurrentBlock();
03883 
03884                 if (!empty($a_subscriber_ids))
03885                 {
03886                         // set checkbox toggles
03887                         $tpl->setCurrentBlock("tbl_action_toggle_checkboxes");
03888                         $tpl->setVariable("JS_VARNAME","subscriber");                   
03889                         $tpl->setVariable("JS_ONCLICK",ilUtil::array_php2js($a_subscriber_ids));
03890                         $tpl->setVariable("TXT_CHECKALL", $this->lng->txt("check_all"));
03891                         $tpl->setVariable("TXT_UNCHECKALL", $this->lng->txt("uncheck_all"));
03892                         $tpl->parseCurrentBlock();
03893                 }
03894                 
03895                 $tpl->setCurrentBlock("tbl_action_row");
03896                 $tpl->setVariable("TPLPATH",$this->tpl->tplPath);
03897                 $tpl->parseCurrentBlock();
03898 
03899 
03900                 $tbl->setTitle($this->lng->txt("crs_subscribers"),"icon_usr.gif",$this->lng->txt("crs_header_members"));
03901                 $tbl->setHeaderNames(array('',
03902                                                                    $this->lng->txt("username"),
03903                                                                    $this->lng->txt("firstname"),
03904                                                                    $this->lng->txt("lastname"),
03905                                                                    $this->lng->txt("crs_time")));
03906                 $tbl->setHeaderVars(array("",
03907                                                                   "login",
03908                                                                   "firstname",
03909                                                                   "lastname",
03910                                                                   "sub_time"),
03911                                                         array("ref_id" => $this->object->getRefId(),
03912                                                                   "cmd" => "members",
03913                                                                   "update_subscribers" => 1,
03914                                                                   "cmdClass" => "ilobjcoursegui",
03915                                                                   "cmdNode" => $_GET["cmdNode"]));
03916                 $tbl->setColumnWidth(array("4%","24%","24%","24%","24%"));
03917 
03918                 $this->__setTableGUIBasicData($tbl,$a_result_set,"subscribers");
03919                 $tbl->render();
03920 
03921                 $this->tpl->setVariable("SUBSCRIBER_TABLE",$tbl->tpl->get());
03922 
03923                 return true;
03924         }
03925         function __showWaitingListTable($a_result_set,$a_waiting_list_ids = NULL)
03926         {
03927                 $actions = array("addFromWaitingList"           => $this->lng->txt("crs_add_subscribers"),
03928                                                  "removeFromWaitingList"        => $this->lng->txt("crs_delete_from_waiting_list"));
03929 
03930                 $tbl =& $this->__initTableGUI();
03931                 $tpl =& $tbl->getTemplateObject();
03932 
03933                 // SET FORMACTION
03934                 $tpl->setCurrentBlock("tbl_form_header");
03935 
03936                 $tpl->setVariable("FORMACTION",$this->ctrl->getFormAction($this));
03937                 $tpl->parseCurrentBlock();
03938 
03939                 // SET FOOTER BUTTONS
03940                 $tpl->setCurrentBlock("tbl_action_row");
03941 
03942                 $tpl->setVariable("COLUMN_COUNTS",5);
03943                 
03944                 $tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.gif"));
03945 
03946                 $tpl->setCurrentBlock("tbl_action_select");
03947                 $tpl->setVariable("SELECT_ACTION",ilUtil::formSelect(1,"action",$actions,false,true));
03948                 $tpl->setVariable("BTN_NAME","gateway");
03949                 $tpl->setVariable("BTN_VALUE",$this->lng->txt("execute"));
03950                 $tpl->parseCurrentBlock();
03951 
03952                 if (!empty($a_waiting_list_ids))
03953                 {
03954                         // set checkbox toggles
03955                         $tpl->setCurrentBlock("tbl_action_toggle_checkboxes");
03956                         $tpl->setVariable("JS_VARNAME","waiting_list");                 
03957                         $tpl->setVariable("JS_ONCLICK",ilUtil::array_php2js($a_waiting_list_ids));
03958                         $tpl->setVariable("TXT_CHECKALL", $this->lng->txt("check_all"));
03959                         $tpl->setVariable("TXT_UNCHECKALL", $this->lng->txt("uncheck_all"));
03960                         $tpl->parseCurrentBlock();
03961                 }
03962                 
03963                 $tpl->setCurrentBlock("tbl_action_row");
03964                 $tpl->setVariable("TPLPATH",$this->tpl->tplPath);
03965                 $tpl->parseCurrentBlock();
03966 
03967 
03968                 $tbl->setTitle($this->lng->txt("crs_waiting_list"),"icon_usr.gif",$this->lng->txt("crs_waiting_list"));
03969                 $tbl->setHeaderNames(array('',
03970                                                                    $this->lng->txt("username"),
03971                                                                    $this->lng->txt("firstname"),
03972                                                                    $this->lng->txt("lastname"),
03973                                                                    $this->lng->txt("crs_time")));
03974                 $tbl->setHeaderVars(array("",
03975                                                                   "login",
03976                                                                   "firstname",
03977                                                                   "lastname",
03978                                                                   "sub_time"),
03979                                                         array("ref_id" => $this->object->getRefId(),
03980                                                                   "cmd" => "members",
03981                                                                   "update_subscribers" => 1,
03982                                                                   "cmdClass" => "ilobjcoursegui",
03983                                                                   "cmdNode" => $_GET["cmdNode"]));
03984                 $tbl->setColumnWidth(array("4%","24%","24%","24%","24%"));
03985 
03986                 $this->__setTableGUIBasicData($tbl,$a_result_set,"subscribers");
03987                 $tbl->render();
03988 
03989                 $this->tpl->setVariable("SUBSCRIBER_TABLE",$tbl->tpl->get());
03990 
03991                 return true;
03992         }
03993 
03994         function __search($a_search_string,$a_search_for)
03995         {
03996                 include_once("./classes/class.ilSearch.php");
03997 
03998                 $this->lng->loadLanguageModule("content");
03999 
04000                 $search =& new ilSearch($_SESSION["AccountId"]);
04001                 $search->setPerformUpdate(false);
04002                 $search->setMinWordLength(1);
04003                 $search->setSearchString($a_search_string);
04004                 $search->setCombination("and");
04005                 $search->setSearchFor(array(0 => $a_search_for));
04006                 $search->setSearchType('new');
04007 
04008                 if($search->validate($message))
04009                 {
04010                         $search->performSearch();
04011                 }
04012                 else
04013                 {
04014                         sendInfo($message,true);
04015                         $this->ctrl->redirect($this,"searchUser");
04016                 }
04017 
04018                 if($a_search_for == 'usr')
04019                 {
04020                         $this->__appendToStoredResults($search->getResultByType($a_search_for));
04021                         return $_SESSION['crs_usr_search_result'];
04022                 }
04023 
04024                 return $search->getResultByType($a_search_for);
04025         }               
04026 
04027 
04028         function __getDateSelect($a_type,$a_varname,$a_selected)
04029         {
04030                 switch($a_type)
04031                 {
04032                         case "minute":
04033                                 for($i=0;$i<=60;$i++)
04034                                 {
04035                                         $days[$i] = $i < 10 ? "0".$i : $i;
04036                                 }
04037                                 return ilUtil::formSelect($a_selected,$a_varname,$days,false,true);
04038 
04039                         case "hour":
04040                                 for($i=0;$i<24;$i++)
04041                                 {
04042                                         $days[$i] = $i < 10 ? "0".$i : $i;
04043                                 }
04044                                 return ilUtil::formSelect($a_selected,$a_varname,$days,false,true);
04045 
04046                         case "day":
04047                                 for($i=1;$i<32;$i++)
04048                                 {
04049                                         $days[$i] = $i < 10 ? "0".$i : $i;
04050                                 }
04051                                 return ilUtil::formSelect($a_selected,$a_varname,$days,false,true);
04052                         
04053                         case "month":
04054                                 for($i=1;$i<13;$i++)
04055                                 {
04056                                         $month[$i] = $i < 10 ? "0".$i : $i;
04057                                 }
04058                                 return ilUtil::formSelect($a_selected,$a_varname,$month,false,true);
04059 
04060                         case "year":
04061                                 for($i = date("Y",time());$i < date("Y",time()) + 3;++$i)
04062                                 {
04063                                         $year[$i] = $i;
04064                                 }
04065                                 return ilUtil::formSelect($a_selected,$a_varname,$year,false,true);
04066                 }
04067         }
04068 
04069         function __toUnix($a_time_arr)
04070         {
04071                 return mktime($a_time_arr["hour"],
04072                                           $a_time_arr["minute"],
04073                                           $a_time_arr["second"],
04074                                           $a_time_arr["month"],
04075                                           $a_time_arr["day"],
04076                                           $a_time_arr["year"]);
04077         }
04078         function __unsetSessionVariables()
04079         {
04080                 unset($_SESSION["crs_delete_member_ids"]);
04081                 unset($_SESSION["crs_delete_subscriber_ids"]);
04082                 unset($_SESSION["crs_search_str"]);
04083                 unset($_SESSION["crs_search_for"]);
04084                 unset($_SESSION["crs_group"]);
04085                 unset($_SESSION["crs_role"]);
04086                 unset($_SESSION["crs_archives"]);
04087         }
04088 
04089         function mailMembersObject()
04090         {
04091                 global $rbacreview, $ilErr, $ilAccess;
04092 
04093                 $is_admin = (bool) $ilAccess->checkAccess("write", "", $this->object->getRefId());
04094 
04095                 if (!$is_admin &&
04096                         $this->object->getShowMembers() == $this->object->SHOW_MEMBERS_DISABLED)
04097                 {
04098                         $ilErr->raiseError($this->lng->txt("msg_no_perm_read"),$ilErr->MESSAGE);
04099                 }
04100 
04101                 $this->tabs_gui->setTabActive('members');
04102 
04103                 $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.mail_members.html','course');
04104 
04105                 $this->setSubTabs('members');
04106 
04107                 $this->tpl->setVariable("MAILACTION",'mail_new.php?type=role');
04108                 $this->tpl->setVariable("MAIL_MEMBERS",$this->lng->txt('send_mail_members'));
04109                 $this->tpl->setVariable("MAIL_TUTOR",$this->lng->txt('send_mail_tutors'));
04110                 $this->tpl->setVariable("MAIL_ADMIN",$this->lng->txt('send_mail_admins'));
04111                 $this->tpl->setVariable("CHECK_MEMBER",ilUtil::formCheckbox(1,'roles[]','#il_crs_member_'.$this->object->getRefId()));
04112                 $this->tpl->setVariable("CHECK_TUTOR",ilUtil::formCheckbox(0,'roles[]','#il_crs_tutor_'.$this->object->getRefId()));
04113                 $this->tpl->setVariable("CHECK_ADMIN",ilUtil::formCheckbox(0,'roles[]','#il_crs_admin_'.$this->object->getRefId()));
04114                 $this->tpl->setVariable("IMG_ARROW",ilUtil::getImagePath('arrow_downright.gif'));
04115                 $this->tpl->setVariable("OK",$this->lng->txt('ok'));
04116         }
04117 
04118         
04119         function &executeCommand()
04120         {
04121                 global $rbacsystem,$ilUser,$ilAccess,$ilErr;
04122 
04123                 $next_class = $this->ctrl->getNextClass($this);
04124                 $cmd = $this->ctrl->getCmd();
04125 
04126                 $this->prepareOutput();
04127 
04128                 // check if object is purchased
04129                 include_once './payment/classes/class.ilPaymentObject.php';
04130 
04131                 if (!$this->creation_mode)      // don't check, if new object is created
04132                 {
04133                         if(!ilPaymentObject::_hasAccess($this->object->getRefId()))
04134                         {
04135                                 if ($cmd != "addToShoppingCart")
04136                                 {
04137                                         $this->ctrl->setCmd("");
04138                                         $cmd = "";
04139                                 }
04140         
04141                                 include_once './payment/classes/class.ilPaymentPurchaseGUI.php';
04142         
04143                                 $this->ctrl->setReturn($this,"");
04144                                 $pp_gui =& new ilPaymentPurchaseGUI($this->object->getRefId());
04145         
04146                                 $this->ctrl->forwardCommand($pp_gui);
04147         
04148                                 return true;
04149                         }
04150                 }
04151 
04152                 switch($next_class)
04153                 {
04154                         case "ilinfoscreengui":
04155                                 $this->infoScreen();    // forwards command
04156                                 break;
04157 
04158                         case 'ilmdeditorgui':
04159 
04160                                 include_once 'Services/MetaData/classes/class.ilMDEditorGUI.php';
04161 
04162                                 $md_gui =& new ilMDEditorGUI($this->object->getId(), 0, $this->object->getType());
04163                                 $md_gui->addObserver($this->object,'MDUpdateListener','General');
04164 
04165                                 $this->ctrl->forwardCommand($md_gui);
04166                                 $this->tabs_gui->setTabActive('meta_data');
04167                                 break;
04168 
04169                         case "ilcourseregistergui":
04170                                 $this->ctrl->setReturn($this,"");
04171                                 $reg_gui =& new ilCourseRegisterGUI($this->object->getRefId());
04172                                 $ret =& $this->ctrl->forwardCommand($reg_gui);
04173                                 break;
04174 
04175                         case "ilcourseobjectivesgui":
04176                                 include_once './course/classes/class.ilCourseObjectivesGUI.php';
04177 
04178                                 $this->ctrl->setReturn($this,"");
04179                                 $reg_gui =& new ilCourseObjectivesGUI($this->object->getRefId());
04180                                 $ret =& $this->ctrl->forwardCommand($reg_gui);
04181                                 break;
04182 
04183                         case 'ilobjcoursegroupinggui':
04184                                 include_once './course/classes/class.ilObjCourseGroupingGUI.php';
04185 
04186                                 $this->ctrl->setReturn($this,'edit');
04187                                 $this->setSubTabs('properties');
04188                                 $crs_grp_gui =& new ilObjCourseGroupingGUI($this->object,(int) $_GET['obj_id']);
04189                                 $this->ctrl->forwardCommand($crs_grp_gui);
04190                                 $this->tabs_gui->setTabActive('settings');
04191                                 $this->tabs_gui->setSubTabActive('groupings');
04192                                 break;
04193 
04194                         case "ilconditionhandlerinterface":
04195                                 include_once './classes/class.ilConditionHandlerInterface.php';
04196                                 
04197                                 // preconditions for single course items
04198                                 if($_GET['item_id'])
04199                                 {
04200                                         $this->ctrl->saveParameter($this,'item_id',$_GET['item_id']);
04201                                         $this->tabs_gui->setTabActive('content');
04202                                         $this->setSubTabs("item_activation");
04203 
04204                                         $new_gui =& new ilConditionHandlerInterface($this,(int) $_GET['item_id']);
04205                                         $this->ctrl->forwardCommand($new_gui);
04206                                 }
04207                                 else    // preconditions for whole course
04208                                 {
04209                                         $this->setSubTabs("properties");
04210                                         $this->tabs_gui->setTabActive('settings');
04211                                         $new_gui =& new ilConditionHandlerInterface($this);
04212 
04213                                         $this->ctrl->forwardCommand($new_gui);
04214                                 }
04215                                 break;
04216 
04217                         case "illearningprogressgui":
04218                                 include_once './Services/Tracking/classes/class.ilLearningProgressGUI.php';
04219 
04220                                 $new_gui =& new ilLearningProgressGUI(LP_MODE_REPOSITORY,
04221                                                                                                           $this->object->getRefId(),
04222                                                                                                           $_GET['user_id'] ? $_GET['user_id'] : $ilUser->getId());
04223                                 $this->ctrl->forwardCommand($new_gui);
04224                                 $this->tabs_gui->setTabActive('learning_progress');
04225                                 break;
04226                                 
04227                         case 'ilpermissiongui':
04228                                 include_once("./classes/class.ilPermissionGUI.php");
04229                                 $perm_gui =& new ilPermissionGUI($this);
04230                                 $ret =& $this->ctrl->forwardCommand($perm_gui);
04231                                 $this->tabs_gui->setTabActive('perm_settings');
04232                                 break;
04233 
04234                         case 'ilrepositorysearchgui':
04235                                 include_once('./Services/Search/classes/class.ilRepositorySearchGUI.php');
04236                                 $rep_search =& new ilRepositorySearchGUI();
04237                                 $rep_search->setCallback($this,'assignMembersObject');
04238 
04239                                 // Set tabs
04240                                 $this->tabs_gui->setTabActive('members');
04241                                 $this->ctrl->setReturn($this,'members');
04242                                 $ret =& $this->ctrl->forwardCommand($rep_search);
04243                                 $this->setSubTabs('members');
04244                                 $this->tabs_gui->setSubTabActive('members');
04245                                 break;
04246 
04247                         case 'ilcoursecontentinterface':
04248 
04249                                 $this->initCourseContentInterface();
04250                                 $this->cci_obj->cci_setContainer($this);
04251 
04252                                 $this->ctrl->forwardCommand($this->cci_obj);
04253                                 $this->setSubTabs('content');
04254                                 $this->tabs_gui->setTabActive('content');
04255                                 break;
04256 
04257                         case 'ilcoursecontentgui':
04258                                 $this->ctrl->setReturn($this,'members');
04259                                 include_once './course/classes/class.ilCourseContentGUI.php';
04260                                 $course_content_obj = new ilCourseContentGUI($this);
04261                                 $this->ctrl->forwardCommand($course_content_obj);
04262                                 break;
04263                                 
04264                         case 'ilobjusergui':
04265                                 require_once "./classes/class.ilObjUserGUI.php";
04266                                 $user_gui = new ilObjUserGUI("",$_GET["user"], false, false);
04267                                 $html = $this->ctrl->forwardCommand($user_gui);
04268                                 $this->setSubTabs('members');
04269                                 $this->tabs_gui->setTabActive('members');
04270                                 $this->tabs_gui->setSubTabActive('crs_members_gallery');
04271                                 $this->tpl->setVariable("ADM_CONTENT", $html);
04272                                 break;
04273 
04274                         default:
04275                                 if(!$this->creation_mode and !$ilAccess->checkAccess('visible','',$this->object->getRefId(),'crs'))
04276                                 {
04277                                         $ilErr->raiseError($this->lng->txt("msg_no_perm_read"),$ilErr->MESSAGE);
04278                                 }
04279                                 if( !$this->creation_mode
04280                                         && $cmd != 'infoScreen'
04281                                         && $cmd != 'sendfile'
04282                                         && !$rbacsystem->checkAccess("read",$this->object->getRefId())
04283                                         || $cmd == 'join'
04284                                         || $cmd == 'subscribe')
04285                                 {
04286                                         $this->ctrl->setReturn($this,"infoScreen");
04287                                         $reg_gui =& new ilCourseRegisterGUI($this->object->getRefId());
04288                                         $ret =& $this->ctrl->forwardCommand($reg_gui);
04289                                         break;
04290                                 }
04291                                 elseif($cmd == 'listObjectives')
04292                                 {
04293                                         include_once './course/classes/class.ilCourseObjectivesGUI.php';
04294 
04295                                         $this->ctrl->setReturn($this,"");
04296                                         $obj_gui =& new ilCourseObjectivesGUI($this->object->getRefId());
04297                                         $ret =& $this->ctrl->forwardCommand($obj_gui);
04298                                         break;
04299                                 }
04300                                 
04301                                 if((!$this->creation_mode)&&(!$rbacsystem->checkAccess("write",$this->object->getRefId()))){
04302                                         include_once('Services/Feedback/classes/class.ilFeedbackGUI.php');
04303                                         $feedbackGUI = new ilFeedbackGUI();
04304                                         $feedbackGUI->handleRequiredFeedback($this->object->getRefId());
04305                                 }
04306 
04307                                 if(!$cmd)
04308                                 {
04309                                         $cmd = 'view';
04310                                 }
04311                                 $cmd .= 'Object';
04312                                 $this->$cmd();
04313                                         
04314                                 break;
04315                 }
04316 
04317                 return true;
04318         }
04319 
04320         // STATIC
04321         function _forwards()
04322         {
04323                 return array("ilCourseRegisterGUI",'ilConditionHandlerInterface');
04324         }
04325 
04326         // METHODS FOR COURSE CONTENT INTERFACE
04327         function initCourseContentInterface()
04328         {
04329                 global $ilCtrl;
04330 
04331                 include_once "./course/classes/class.ilCourseContentInterface.php";
04332                 
04333                 $this->object->ctrl =& $ilCtrl;
04334                 $this->cci_obj =& new ilCourseContentInterface($this,$this->object->getRefId());
04335         }
04336 
04337         function cciObjectivesObject()
04338         {
04339                 $this->tabs_gui->setTabActive('learners_view');
04340                 
04341                 $this->initCourseContentInterface();
04342                 $this->cci_obj->cci_setContainer($this);
04343                 $this->cci_obj->cci_objectives();
04344 
04345                 return true;;
04346         }
04347         function cciObjectivesEditObject()
04348         {
04349                 $this->tabs_gui->setTabActive('edit_content');
04350 
04351                 $this->initCourseContentInterface();
04352                 $this->cci_obj->cci_setContainer($this);
04353                 $this->cci_obj->cci_view();
04354 
04355                 return true;
04356         }
04357         function cciObjectivesAskResetObject()
04358         {
04359                 $this->tabs_gui->setTabActive('learners_view');
04360 
04361                 $this->initCourseContentInterface();
04362                 $this->cci_obj->cci_setContainer($this);
04363                 $this->cci_obj->cci_objectives_ask_reset();
04364 
04365                 return true;;
04366         }
04367         function cciResetObject()
04368         {
04369                 $this->tabs_gui->setTabActive('learners_view');
04370 
04371                 global $ilUser;
04372 
04373                 include_once './course/classes/class.ilCourseObjectiveResult.php';
04374 
04375                 $tmp_obj_res =& new ilCourseObjectiveResult($ilUser->getId());
04376                 $tmp_obj_res->reset($this->object->getId());
04377 
04378                 sendInfo($this->lng->txt('crs_objectives_reseted'));
04379 
04380                 $this->initCourseContentInterface();
04381                 $this->cci_obj->cci_setContainer($this);
04382                 $this->cci_obj->cci_objectives();
04383         }
04384 
04385 
04386         // Methods for ConditionHandlerInterface
04387         function initConditionHandlerGUI($item_id)
04388         {
04389                 include_once './classes/class.ilConditionHandlerInterface.php';
04390 
04391                 if(!is_object($this->chi_obj))
04392                 {
04393                         if($_GET['item_id'])
04394                         {
04395                                 $this->chi_obj =& new ilConditionHandlerInterface($this,$item_id);
04396                                 $this->ctrl->saveParameter($this,'item_id',$_GET['item_id']);
04397                         }
04398                         else
04399                         {
04400                                 $this->chi_obj =& new ilConditionHandlerInterface($this);
04401                         }
04402                 }
04403                 return true;
04404         }
04405 
04406 
04407         function addLocatorItems()
04408         {
04409                 global $ilLocator;
04410                 switch ($this->ctrl->getCmd())
04411                 {
04412                         default:
04413                                 #$ilLocator->addItem($this->object->getTitle(), $this->ctrl->getLinkTarget($this, ""));
04414                                 break;
04415                 }
04416         }
04417 
04421         function _goto($a_target)
04422         {
04423                 global $ilAccess, $ilErr, $lng;
04424 
04425                 if ($ilAccess->checkAccess("read", "", $a_target))
04426                 {
04427                         $_GET["cmd"] = "frameset";
04428                         $_GET["ref_id"] = $a_target;
04429                         include("repository.php");
04430                         exit;
04431                 }
04432                 else
04433                 {
04434                         // to do: force flat view
04435                         if ($ilAccess->checkAccess("visible", "", $a_target))
04436                         {
04437                                 $_GET["cmd"] = "infoScreen";
04438                                 $_GET["ref_id"] = $a_target;
04439                                 include("repository.php");
04440                                 exit;
04441                         }
04442                         else
04443                         {
04444                                 if ($ilAccess->checkAccess("read", "", ROOT_FOLDER_ID))
04445                                 {
04446                                         $_GET["cmd"] = "frameset";
04447                                         $_GET["target"] = "";
04448                                         $_GET["ref_id"] = ROOT_FOLDER_ID;
04449                                         sendInfo(sprintf($lng->txt("msg_no_perm_read_item"),
04450                                                 ilObject::_lookupTitle(ilObject::_lookupObjId($a_target))), true);
04451                                         include("repository.php");
04452                                         exit;
04453                                 }
04454                         }
04455                 }
04456                 $ilErr->raiseError($lng->txt("msg_no_perm_read"), $ilErr->FATAL);
04457         }
04458 
04459 
04460         function toUnix($date,$time = array())
04461         {
04462                 return mktime($time['h'],$time['m'],0,$date['m'],$date['d'],$date['y']);
04463         }
04464 
04465         function __prepareDateSelect($a_unix_time)
04466         {
04467                 return array('y' => date('Y',$a_unix_time),
04468                                          'm' => date('n',$a_unix_time),
04469                                          'd' => date('d',$a_unix_time));
04470         }
04471 
04472         function __prepareTimeSelect($a_unix_time)
04473         {
04474                 return array('h' => date('G',$a_unix_time),
04475                                          'm' => date('i',$a_unix_time),
04476                                          's' => date('s',$a_unix_time));
04477         }
04478 
04479 
04480 
04481 
04482 } // END class.ilObjCourseGUI
04483 ?>

Generated on Fri Dec 13 2013 13:52:10 for ILIAS Release_3_7_x_branch .rev 46817 by  doxygen 1.7.1