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

Modules/Exercise/classes/class.ilObjExerciseGUI.php

Go to the documentation of this file.
00001 <?php
00002 /*
00003         +-----------------------------------------------------------------------------+
00004         | ILIAS open source                                                           |
00005         +-----------------------------------------------------------------------------+
00006         | Copyright (c) 1998-2001 ILIAS open source, University of Cologne            |
00007         |                                                                             |
00008         | This program is free software; you can redistribute it and/or               |
00009         | modify it under the terms of the GNU General Public License                 |
00010         | as published by the Free Software Foundation; either version 2              |
00011         | of the License, or (at your option) any later version.                      |
00012         |                                                                             |
00013         | This program is distributed in the hope that it will be useful,             |
00014         | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
00015         | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
00016         | GNU General Public License for more details.                                |
00017         |                                                                             |
00018         | You should have received a copy of the GNU General Public License           |
00019         | along with this program; if not, write to the Free Software                 |
00020         | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. |
00021         +-----------------------------------------------------------------------------+
00022 */
00023 
00024 
00025 require_once "classes/class.ilObjectGUI.php";
00026 
00037 class ilObjExerciseGUI extends ilObjectGUI
00038 {
00043         function ilObjExerciseGUI($a_data,$a_id,$a_call_by_reference,$a_prepare_output = true)
00044         {
00045                 global $lng;
00046                 
00047                 $this->type = "exc";
00048                 $this->ilObjectGUI($a_data,$a_id,$a_call_by_reference,false);
00049                 
00050                 $lng->loadLanguageModule("exercise");
00051                 $this->ctrl->saveParameter($this, array("sort_by", "sort_order", "offset"));
00052         }
00053   
00054         function getFiles()
00055         {
00056                 return $this->files ? $this->files : array();
00057         }
00058         
00059         function setFiles($a_files)
00060         {
00061                 $this->files = $a_files;
00062         }
00063 
00064         function createObject()
00065         {
00066                 parent::createObject();
00067 
00068                 $this->tpl->setVariable("INSTRUCTION",
00069                         ilUtil::prepareFormOutput($_SESSION["error_post_vars"]["Fobject"]["instruction"], true));
00070 
00071                 // SET ADDITIONAL TEMPLATE VARIABLES
00072                 $this->tpl->setVariable("TXT_INSTRUCTION",$this->lng->txt("exc_instruction"));
00073                 $this->tpl->setVariable("TXT_EDIT_UNTIL",$this->lng->txt("exc_edit_until"));
00074                 $this->tpl->setVariable("TXT_HOUR",$this->lng->txt("time_h"));
00075                 $this->tpl->setVariable("TXT_DAY",$this->lng->txt("time_d"));
00076                 $this->tpl->setVariable("SELECT_HOUR",$this->__getDateSelect("hour",(int) date("H",time())));
00077                 $this->tpl->setVariable("SELECT_MINUTES",$this->__getDateSelect("minutes",(int) date("i",time())));
00078                 $this->tpl->setVariable("SELECT_DAY",$this->__getDateSelect("day",(int) date("d",time())));
00079                 $this->tpl->setVariable("SELECT_MONTH",$this->__getDateSelect("month",(int) date("m",time())));
00080                 $this->tpl->setVariable("SELECT_YEAR",$this->__getDateSelect("year",1));
00081                 $this->tpl->setVariable("CMD_CANCEL", "cancel");
00082         
00083                 $this->fillCloneTemplate('DUPLICATE','exc');
00084         
00085                 return true;
00086         }
00087   
00088         function viewObject()
00089         {
00090                 $this->infoScreenObject();
00091                 return;
00092                 global $rbacsystem,$ilUser;
00093         
00094                 include_once 'Services/Tracking/classes/class.ilLearningProgress.php';
00095                 ilLearningProgress::_tracProgress($ilUser->getId(),$this->object->getId(),'exc');
00096         
00097         
00098                 if (strtolower($_GET["baseClass"]) == "iladministrationgui")
00099                 {
00100                         parent::viewObject();
00101                         return;
00102                 }
00103 
00104                 if (!$rbacsystem->checkAccess("read", $this->ref_id))
00105                 {
00106                         $this->ilias->raiseError($this->lng->txt("msg_no_perm_read"),$this->ilias->error_obj->MESSAGE);
00107                 }
00108                 $this->getTemplateFile("view", "exc");
00109         
00110                 $this->tpl->setVariable("FORM_DOWNLOAD_ACTION", $this->ctrl->getFormAction($this, "downloadFile"));
00111                 $this->tpl->setVariable("TITLE_TXT",$this->lng->txt("title"));
00112                 $this->tpl->setVariable("TITLE",$this->object->getTitle());
00113                 $this->tpl->setVariable("TXT_HEADER",$this->lng->txt("exc_details"));
00114                 $this->tpl->setVariable("DESCRIPTION_TXT",$this->lng->txt("description"));
00115                 $this->tpl->setVariable("DESCRIPTION",$this->object->getDescription());
00116                 $this->tpl->setVariable("INSTRUCTION_TXT",$this->lng->txt("exc_instruction"));
00117                 $this->tpl->setVariable("INSTRUCTION",nl2br($this->object->getInstruction()));
00118                 $this->tpl->setVariable("EDIT_UNTIL_TXT",$this->lng->txt("exc_edit_until"));
00119                 $this->tpl->setVariable("EDIT_UNTIL",date("H:i, d.m.Y",$this->object->getTimestamp()));
00120                 $this->tpl->setVariable("TIME_TO_SEND_TXT",$this->lng->txt("exc_time_to_send"));
00121         
00122                 if ($this->object->getTimestamp()-time() <= 0)
00123                 {
00124                         $this->tpl->setCurrentBlock("TIME_REACHED");
00125                         $this->tpl->setVariable("TIME_TO_SEND",$this->lng->txt("exc_time_over_short"));
00126                         $this->tpl->parseCurrentBlock();                
00127                 }
00128                 else {
00129                         $timediff = ilUtil::int2array($this->object->getTimestamp()-time(),null);
00130                         $timestr = ilUtil::timearray2string($timediff);
00131                         $this->tpl->setCurrentBlock("TIME_NOT_REACHED");
00132                         $this->tpl->setVariable("TIME_TO_SEND",$timestr);
00133                         $this->tpl->parseCurrentBlock();
00134                 }
00135         
00136                 $anyfiles = false;
00137                 foreach($this->object->getFiles() as $file)
00138                 {
00139                         $this->tpl->setCurrentBlock("FILES_ROW");
00140                         $this->tpl->setVariable("FILE_DATA",$file["name"]);
00141                         $this->tpl->setVariable("FILE_CHECK",ilUtil::formRadioButton(0,"file",urlencode($file["name"])));
00142                         $this->tpl->parseCurrentBlock();
00143                         $anyfiles = true;
00144                 }
00145         
00146                 if ($anyfiles)
00147                 {
00148                         $this->tpl->setCurrentBlock("FILES");
00149                         $this->tpl->setVariable("FILES_TXT",$this->lng->txt("exc_files"));
00150                         $this->tpl->setVariable("TXT_DOWNLOAD",$this->lng->txt("download"));
00151                         $this->tpl->setVariable("IMG",ilUtil::getImagePath("arrow_downright.gif"));
00152                         $this->tpl->parseCurrentBlock();
00153                 }
00154         
00155                 $this->tpl->setCurrentBlock("perma_link");
00156                 $this->tpl->setVariable("PERMA_LINK", ILIAS_HTTP_PATH.
00157                         "/goto.php?target=".
00158                         $this->object->getType().
00159                         "_".$this->object->getRefId()."&client_id=".CLIENT_ID);
00160                 $this->tpl->setVariable("TXT_PERMA_LINK", $this->lng->txt("perma_link"));
00161                 $this->tpl->setVariable("PERMA_TARGET", "_top");
00162                 $this->tpl->parseCurrentBlock();
00163         
00164                 return true;
00165         }
00166   
00172         function deliverObject()
00173         {
00174                 global $ilUser;
00175                 require_once "./Services/Utilities/classes/class.ilUtil.php";
00176                 
00177                 $this->checkPermission("read");
00178                 
00179                 $this->tabs_gui->setTabActive("exc_your_submission");
00180                 
00181                 if (mktime() > $this->object->getTimestamp())
00182                 {
00183                         ilUtil::sendInfo($this->lng->txt("exercise_time_over"));
00184                 }
00185 
00186 
00187                 if ($_POST["cmd"]["delete"] && mktime() < $this->object->getTimestamp())
00188                 {
00189                         if (count($_POST["delivered"]))
00190                         {
00191                                 $this->object->deleteDeliveredFiles($_POST["delivered"], $ilUser->id);
00192                         }
00193                         else
00194                         {
00195                                 ilUtil::sendInfo($this->lng->txt("please_select_a_delivered_file_to_delete"));
00196                         }
00197                 }
00198 
00199                 if ($_POST["cmd"]["download"])
00200                 {
00201                         if (count($_POST["delivered"]))
00202                         {
00203                                 $this->object->members_obj->downloadSelectedFiles($_POST["delivered"],$ilUser->getId());
00204                         }
00205                         else
00206                         {
00207                                 ilUtil::sendInfo($this->lng->txt("please_select_a_delivered_file_to_download"));
00208                         }
00209                 }
00210 
00211 
00212                 if (mktime() > $this->object->getTimestamp())
00213                 {
00214                         $this->getTemplateFile("delivered_files", "exc");
00215                 }
00216                 else
00217                 {
00218                         $this->getTemplateFile("deliver_file", "exc");
00219                 }
00220 
00221                 $delivered_files = $this->object->getDeliveredFiles($ilUser->id);
00222                 $color_class = array("tblrow1", "tblrow2");
00223                 $counter = 0;
00224                 foreach ($delivered_files as $index => $file)
00225                 {
00226                         $this->tpl->setCurrentBlock("delivered_row");
00227                         $this->tpl->setVariable("COLOR_CLASS", $color_class[$counter % 2]);
00228                         $this->tpl->setVariable("FILE_ID", $file["returned_id"]);
00229                         $this->tpl->setVariable("DELIVERED_FILE", $file["filetitle"]);
00230                         preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $file["TIMESTAMP14"], $matches);
00231                         $stamp = strtotime(sprintf("%04d-%02d-%02d %02d:%02d:%02d", 
00232                                 $matches[1], $matches[2], $matches[3], 
00233                                 $matches[4], $matches[5], $matches[6]));
00234                         $date = date($this->lng->text["lang_dateformat"] . " " . $this->lng->text["lang_timeformat"], $stamp);
00235                         $this->tpl->setVariable("DELIVERED_DATE", $date);
00236                         $this->tpl->parseCurrentBlock();
00237                         $counter++;
00238                 }
00239                 if (count($delivered_files))
00240                 {
00241                         $this->tpl->setCurrentBlock("footer_content");
00242                         $this->tpl->setVariable("ARROW_SIGN", ilUtil::getImagePath("arrow_downright.gif"));
00243                         $this->tpl->setVariable("BUTTON_DELETE", $this->lng->txt("delete"));
00244                         $this->tpl->setVariable("BUTTON_DOWNLOAD", $this->lng->txt("download"));
00245                         $this->tpl->parseCurrentBlock();
00246                 }
00247                 else
00248                 {
00249                         $this->tpl->setCurrentBlock("footer_empty");
00250                         $this->tpl->setVariable("TEXT_NO_DELIVERED_FILES", 
00251                                 $this->lng->txt("message_no_delivered_files"));
00252                         $this->tpl->parseCurrentBlock();
00253                 }
00254                 
00255                 $this->tpl->setCurrentBlock("delivered_files");
00256                 $this->tpl->setVariable("DELIVER_FORMACTION", 
00257                         $this->ctrl->getLinkTarget($this, "deliver"));
00258                 $this->tpl->setVariable("TEXT_DATE", $this->lng->txt("date"));
00259                 $this->tpl->setVariable("TEXT_DELIVERED_FILENAME", $this->lng->txt("filename"));
00260                 $this->tpl->setVariable("TEXT_HEADING_DELIVERED_FILES", $this->lng->txt("already_delivered_files"));
00261                 $this->tpl->parseCurrentBlock();
00262                 $this->tpl->setCurrentBlock("adm_content");
00263                 $this->tpl->setVariable("FORMACTION", 
00264                         $this->ctrl->getLinkTarget($this, "deliverFile"));
00265                 $this->tpl->setVariable("BUTTON_DELIVER", $this->lng->txt("upload"));
00266                 $this->tpl->setVariable("TEXT_FILENAME", $this->lng->txt("enter_filename_deliver"));
00267                 $this->tpl->setVariable("TXT_UPLOAD_FILE", $this->lng->txt("file_add"));
00268                 $this->tpl->setVariable("TXT_UPLOAD_ZIPFILE", $this->lng->txt("header_zip"));
00269                 $this->tpl->parseCurrentBlock();
00270                 
00271         }
00272   
00273         function deliverFileObject()
00274         {
00275                 global $ilUser, $lng;
00276                 
00277                 $this->checkPermission("read");
00278 
00279                 $this->tabs_gui->setTabActive("view");
00280                 $this->tabs_gui->setTabActive("exc_your_submission");
00281 
00282                 if (!empty($_POST["cmd"][deliverUnzip]) && preg_match("/zip/",$_FILES["deliver"]["type"]) == 1)
00283                 {
00284                         $this->object->processUploadedFile($_FILES["deliver"]["tmp_name"], "deliverFile", false);
00285                         
00286                 }
00287                 else
00288                 {
00289                         if(!$this->object->deliverFile($_FILES["deliver"], $ilUser->id))
00290                         {
00291                                 ilUtil::sendInfo($this->lng->txt("exc_upload_error"),true);
00292                         }
00293                 }
00294                 
00295                 
00296                 $this->deliverObject();
00297         }
00298   
00299         function downloadFileObject()
00300         {
00301                 global $rbacsystem;
00302                 
00303                 $file = ($_POST["file"])
00304                         ? $_POST["file"]
00305                         : $_GET["file"];
00306 
00307                 $this->checkPermission("read");
00308                 
00309                 if (!isset($file))
00310                 {
00311                         ilUtil::sendInfo($this->lng->txt("exc_select_one_file"),true);
00312                         $this->ctrl->redirect($this, "view");
00313                 }
00314                 $files = $this->object->getFiles();
00315                 $file_exist = false;
00316         
00317                 foreach($this->object->getFiles() as $lfile)
00318                 {
00319                         if($lfile["name"] == urldecode($file))
00320                         {
00321                                 $file_exist = true;
00322                                 break;
00323                         }
00324                 }
00325                 if(!$file_exist)
00326                 {
00327                         echo "FILE DOES NOT EXIST";
00328                         exit;
00329                 }
00330                 ilUtil::deliverFile($this->object->file_obj->getAbsolutePath(urldecode($file)),
00331                                 urldecode($file));
00332         
00333                 return true;
00334         }
00335   
00340         function saveObject()
00341         {
00342                 global $rbacadmin;
00343         
00344                 // CHECK INPUT
00345                 include_once("./Modules/Exercise/classes/class.ilObjExercise.php");
00346                 $tmp_obj =& new ilObjExercise();
00347         
00348                 $tmp_obj->setDate($_POST["d_hour"],$_POST["d_minutes"],$_POST["d_day"],$_POST["d_month"],$_POST["d_year"]);
00349                 if(!$tmp_obj->checkDate())
00350                 {
00351                         $this->ilias->raiseError($this->lng->txt("exc_date_not_valid"), $this->ilias->error_obj->MESSAGE);
00352                 }
00353                 unset($tmp_obj);
00354                 // END INPUT CHECK
00355                 
00356                 // always call parent method first to create an object_data entry & a reference
00357                 $newObj = parent::saveObject();
00358         
00359                 // setup rolefolder & default local roles if needed (see ilObjForum & ilObjForumGUI for an example)
00360                 //$roles = $newObj->initDefaultRoles();
00361         
00362                 // put here your object specific stuff  
00363         
00364                 $newObj->setDate($_POST["d_hour"],$_POST["d_minutes"],$_POST["d_day"],$_POST["d_month"],$_POST["d_year"]);
00365         
00366                 $newObj->setInstruction(ilUtil::stripSlashes($_POST["Fobject"]["instruction"]));
00367                 $newObj->saveData();
00368         
00369                 // always send a message
00370                 ilUtil::sendInfo($this->lng->txt("exc_added"),true);
00371                 ilUtil::redirect("ilias.php?baseClass=ilExerciseHandlerGUI&ref_id=".$newObj->getRefId()."&cmd=edit");
00372         }
00373   
00374         function editObject()
00375         {
00376                 global $rbacsystem;
00377         
00378                 $this->checkPermission("write");
00379                 
00380                 // LOAD SAVED DATA IN CASE OF ERROR
00381                 $title = $_SESSION["error_post_vars"]["Fobject"]["title"] ?
00382                 ilUtil::prepareFormOutput($_SESSION["error_post_vars"]["Fobject"]["title"],true) :
00383                 ilUtil::prepareFormOutput($this->object->getTitle());
00384                 $desc  = $_SESSION["error_post_vars"]["Fobject"]["desc"] ?
00385                 $_SESSION["error_post_vars"]["Fobject"]["desc"] :
00386                 $this->object->getLongDescription();
00387         
00388                 $instruction  = $_SESSION["error_post_vars"]["Fobject"]["instruction"] ?
00389                 $_SESSION["error_post_vars"]["Fobject"]["instruction"] :
00390                 $this->object->getInstruction();
00391         
00392                 $hour  = $_SESSION["error_post_vars"]["Fobject"]["d_hour"] ?
00393                 $_SESSION["error_post_vars"]["Fobject"]["d_hour"] :
00394                 date("H",$this->object->getTimestamp());
00395         
00396                 $minutes  = $_SESSION["error_post_vars"]["Fobject"]["d_minutes"] ?
00397                 $_SESSION["error_post_vars"]["Fobject"]["d_minutes"] :
00398                 date("i",$this->object->getTimestamp());
00399         
00400                 $day  = $_SESSION["error_post_vars"]["Fobject"]["d_day"] ?
00401                 $_SESSION["error_post_vars"]["Fobject"]["d_day"] :
00402                 date("d",$this->object->getTimestamp());
00403         
00404                 $month  = $_SESSION["error_post_vars"]["Fobject"]["d_month"] ?
00405                 $_SESSION["error_post_vars"]["Fobject"]["d_month"] :
00406                 date("m",$this->object->getTimestamp());
00407         
00408                 $year  = $_SESSION["error_post_vars"]["Fobject"]["year"] ?
00409                 $_SESSION["error_post_vars"]["Fobject"]["year"] :
00410                 date("Y",$this->object->getTimestamp());
00411         
00412                 // SET TPL VARIABLES
00413                 $this->getTemplateFile("edit","exc");
00414         
00415                 // TEXT VAIRABLES
00416                 $this->tpl->setVariable("TXT_TITLE", $this->lng->txt("title"));
00417                 $this->tpl->setVariable("TXT_DESC", $this->lng->txt("desc"));
00418                 $this->tpl->setVariable("TXT_INSTRUCTION", $this->lng->txt("exc_instruction"));
00419                 $this->tpl->setVariable("TXT_HEADER",$this->lng->txt("exc_edit_exercise"));
00420                 $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this, "update"));
00421                 $this->tpl->setVariable("TXT_SAVE", $this->lng->txt("save"));
00422                 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00423                 $this->tpl->setVariable("TXT_CANCEL",$this->lng->txt("cancel"));
00424                 $this->tpl->setVariable("TXT_SUBMIT",$this->lng->txt("save"));
00425                 $this->tpl->setVariable("TXT_EDIT_UNTIL",$this->lng->txt("exc_edit_until"));
00426         
00427                 // SHOW INPUT
00428                 $this->tpl->setVariable("TITLE",$title);
00429                 $this->tpl->setVariable("DESC",$desc);
00430                 $this->tpl->setVariable("INSTRUCTION",$instruction);
00431                          
00432                 // SHOW DATE SELECTS
00433                 $this->tpl->setVariable("TXT_HOUR",$this->lng->txt("time_h"));
00434                 $this->tpl->setVariable("TXT_DAY",$this->lng->txt("time_d"));
00435                 $this->tpl->setVariable("SELECT_HOUR",$this->__getDateSelect("hour",$hour));    
00436                 $this->tpl->setVariable("SELECT_MINUTES",$this->__getDateSelect("minutes",$minutes));
00437                 $this->tpl->setVariable("SELECT_DAY",$this->__getDateSelect("day",$day));
00438                 $this->tpl->setVariable("SELECT_MONTH",$this->__getDateSelect("month",$month));
00439                 $this->tpl->setVariable("SELECT_YEAR",$this->__getDateSelect("year",$year));
00440         
00441                 $this->tpl->setVariable("CMD_SUBMIT","update");
00442                 $this->tpl->setVariable("CMD_CANCEL","cancelEdit");
00443         
00444                 // SHOW FILES
00445                 if(count($files = $this->object->getFiles()))
00446                 {
00447                         foreach($files as $file)
00448                         {
00449                                 $this->tpl->setCurrentBlock("FILE_ROW");
00450                                 $this->tpl->setVariable("ROW_FILE",$file["name"]);
00451                                 $this->tpl->setVariable("ROW_CHECKBOX",$this->lng->txt("exc_ask_delete")."&nbsp".
00452                                                 ilUtil::formCheckbox(0,"delete_file[]",$file["name"]));
00453                                 $this->tpl->parseCurrentBlock();
00454                         }
00455                         $this->tpl->setCurrentBlock("FILE_DATA");
00456                         $this->tpl->setVariable("TXT_FILES",$this->lng->txt("exc_files").":");
00457                         $this->tpl->parseCurrentBlock();
00458                 }
00459         
00460                 $this->tpl->setCurrentBlock("FILES");
00461                 $this->tpl->setVariable("TXT_HEADER_FILE",$this->lng->txt("file_add"));
00462                 $this->tpl->setVariable("TXT_FILE",$this->lng->txt("file"));
00463                 $this->tpl->setVariable("TXT_UPLOAD",$this->lng->txt("upload"));
00464                 $this->tpl->setVariable("FORMACTION_FILE", $this->ctrl->getFormAction($this));
00465                 $this->tpl->setVariable("TXT_HEADER_ZIP", $this->lng->txt("header_zip"));
00466                 $this->tpl->setVariable("CMD_FILE_SUBMIT","uploadFile");
00467                 $this->tpl->parseCurrentBlock();
00468         }
00469   
00470         function updateObject()
00471         {
00472                 global $rbacsystem;
00473         
00474                 $this->checkPermission("write");
00475         
00476                 $this->object->setInstruction(ilUtil::stripSlashes($_POST["Fobject"]["instruction"]));
00477                 $this->object->setDate($_POST["d_hour"],$_POST["d_minutes"],$_POST["d_day"],
00478                                 $_POST["d_month"],$_POST["d_year"]);
00479                 if($_POST["delete_file"])
00480                 {
00481                         $this->object->deleteFiles($_POST["delete_file"]);
00482                 }
00483                         
00484                 $this->object->setTitle(ilUtil::stripSlashes($_POST["Fobject"]["title"]));
00485                 $this->object->setDescription(ilUtil::stripSlashes($_POST["Fobject"]["desc"]));
00486                 $this->update = $this->object->update();
00487         
00488                 ilUtil::sendInfo($this->lng->txt("msg_obj_modified"),true);
00489         
00490                 $this->ctrl->redirect($this, "edit");   
00491         }
00492   
00493         function cancelEditObject()
00494         {
00495                 ilUtil::sendInfo($this->lng->txt("msg_cancel"),true);
00496                 $this->ctrl->redirect($this, "view");
00497         }
00498 
00499         function uploadZipObject()
00500         {
00501                 global $rbacsystem;
00502                 
00503                 $this->checkPermission("write");
00504 
00505                 if(!$this->object->addUploadedFile($_FILES["zipfile"], true))
00506                 {
00507                         ilUtil::sendInfo($this->lng->txt("exc_upload_error"),true);
00508                 }
00509                 $this->ctrl->redirect($this, "edit");
00510         
00511         }
00512 
00513         function uploadFileObject()
00514         {
00515                 global $rbacsystem;
00516 
00517                 $this->checkPermission("write");
00518 
00519                 if(!$this->object->addUploadedFile($_FILES["file"]))
00520                 {
00521                         ilUtil::sendInfo($this->lng->txt("exc_upload_error"),true);
00522                 }
00523                 $this->ctrl->redirect($this, "edit");
00524         }
00525         
00526         
00530         function updateMembersObject()
00531         {
00532                 global $rbacsystem;
00533         
00534                 $this->checkPermission("write");
00535         
00536                 if ($_POST["downloadReturned"])
00537                 {
00538                         $this->object->members_obj->deliverReturnedFiles(key($_POST["downloadReturned"]));
00539                         exit;
00540                 }
00541                 else
00542                 {
00543                         switch($_POST["action"])
00544                         {
00545                                 case "save_status":
00546                                         $users = $this->__saveStatus();
00547                                         break;
00548                                         
00549                                 case "send_member":
00550                                         if(!count($_POST["member"]))
00551                                         {
00552                                                 ilUtil::sendInfo($this->lng->txt("select_one"),true);
00553                                         }
00554                                         else
00555                                         {
00556                                                 $this->object->send($_POST["member"]);
00557                                                 ilUtil::sendInfo($this->lng->txt("exc_sent"),true);
00558                                         }
00559                                 break;
00560                                 
00561                                 case "redirectFeedbackMail":
00562                                         $this->redirectFeedbackMailObject();
00563                                         /*
00564                                         include_once('./Services/User/classes/class.ilObjUser.php');
00565 
00566                                         if (!count($_POST["member"]))
00567                                         {
00568                                                 ilUtil::sendInfo($this->lng->txt("select_one"),true);
00569                                         }
00570                                         else 
00571                                         {
00572                                                 $recipients = "";
00573                                                 foreach($_POST["member"] as $rcpt => $value) 
00574                                                 {
00575                                                         $user = new ilObjUser($rcpt,false);
00576                                                         $recipients = $recipients.$user->getLogin().",";
00577                                                 }
00578                 
00579                                                 ilUtil::redirect("ilias.php?baseClass=ilMailGUI&type=new&rcp_to=".$recipients);
00580                                         }*/
00581                                         break;
00582                                         
00583                                 case "delete_member":
00584                                                 $this->__deassignMembers();
00585                                         break;
00586                         }
00587                 }
00588                 $this->ctrl->redirect($this, "members");
00589         }
00590         
00594         function downloadReturnedObject()
00595         {
00596                 $this->checkPermission("write");
00597 
00598                 if (!$this->object->members_obj->deliverReturnedFiles($_GET["member_id"]))
00599                 {
00600                         $this->ctrl->redirect($this, "members");
00601                 }
00602                 exit;
00603         }
00604 
00608         function downloadNewReturnedObject()
00609         {
00610                 $this->checkPermission("write");
00611                 
00612                 if (!$this->object->members_obj->deliverReturnedFiles($_GET["member_id"], true))
00613                 {
00614                         $this->ctrl->redirect($this, "members");
00615                 }
00616                 exit;
00617         }
00618 
00619         function addMembersObject()
00620         {
00621                 global $ilAccess,$ilErr;
00622 
00623                 $this->checkPermission("write");
00624                 if(!count($_POST['user']))
00625                 {
00626                         ilUtil::sendInfo($this->lng->txt("no_checkbox"));
00627                         return false;
00628                 }
00629 
00630                 if(!$this->object->members_obj->assignMembers($_POST["user"]))
00631                 {
00632                         ilUtil::sendInfo($this->lng->txt("exc_members_already_assigned"));
00633                         return false;
00634                 }
00635                 else
00636                 {
00637                         ilUtil::sendInfo($this->lng->txt("exc_members_assigned"),true);
00638                 }
00639                 $this->ctrl->redirect($this, "members");
00640                 return false;
00641         }
00642 
00643 
00644         function membersObject()
00645         {
00646                 global $rbacsystem, $tree;
00647 
00648                 include_once 'Services/Tracking/classes/class.ilLPMarks.php';
00649         
00650                 $this->checkPermission("write");
00651                 
00652                 //add template for buttons      
00653                 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00654         
00655                 // add member button
00656                 $this->tpl->setCurrentBlock("btn_cell");
00657                 $this->tpl->setVariable("BTN_LINK",$this->ctrl->getLinkTargetByClass('ilRepositorySearchGUI','start'));
00658                 $this->tpl->setVariable("BTN_TXT",$this->lng->txt("add_member"));
00659                 $this->tpl->parseCurrentBlock();
00660                 
00661                 // add course members button, in case the exercise is inside a course
00662                 $parent_id = $tree->getParentId($_GET["ref_id"]);
00663                 $parent_obj_id = ilObject::_lookupObjId($parent_id);
00664                 $type = ilObject::_lookupType($parent_obj_id);
00665                 //$obj = new ilObject($parent_id, true);
00666                 //$type = $obj->getType();
00667 
00668                 // search for a parent course
00669                 while ($parent_id != 1 && $type != "crs")
00670                 {
00671                         $parent_id = $tree->getParentId($parent_id);
00672                         $parent_obj_id = ilObject::_lookupObjId($parent_id);
00673                         $type = ilObject::_lookupType($parent_obj_id);
00674 
00675                         //$obj = new ilObject($parent_id, true);
00676                         //$type = $obj->getType();
00677                 }
00678 
00679                 if ($type == "crs") 
00680                 {
00681                         $search_for_role = "il_crs_member_" . $parent_id;
00682                         $this->tpl->setCurrentBlock("btn_cell");
00683                 
00684                         $_SESSION['rep_query']['role']['title'] = $search_for_role;
00685                         $_SESSION['rep_search_type'] = 'role';
00686                         
00687                         $this->tpl->setVariable("BTN_LINK",$this->ctrl->getLinkTargetByClass('ilRepositorySearchGUI','performSearch'));
00688                         $this->lng->loadLanguageModule("exercise");
00689                         $this->tpl->setVariable("BTN_TXT",$this->lng->txt("exc_crs_add_members"));
00690                         $this->tpl->parseCurrentBlock();
00691                 }
00692                 
00693                 
00694                 $this->getTemplateFile("members","exc");
00695         
00696                 if(!count($this->object->members_obj->getMembers()))
00697                 {
00698                         ilUtil::sendInfo($this->lng->txt("exc_no_members_assigned"));
00699                 }
00700                 else    
00701                 {
00702                         // if we come from edit_comments action button
00703                         /*
00704                         if (!empty($_GET["comment_id"])) 
00705                         {
00706                                 //$tmp_obj = ilObjectFactory::getInstanceByObjId($_GET["comment_id"],false);
00707                                 $tmp_obj = new ilObjUser($_GET["comment_id"]);
00708                                 $this->tpl->setCurrentBlock("comments");
00709                                 $this->tpl->setVariable("COMMENTS_FORMACTION",
00710                                 $this->ctrl->setParameter();
00711                                 $this->getFormAction("saveComments",
00712                                         $this->ctrl->getLinkTarget($this, "saveComments")
00713                                         "exercise.php?ref_id=".$_GET["ref_id"]."&member_id=".$_GET["comment_id"]."&cmd=saveComments&cmdClass=ilobjexercisegui&cmdNode=1&baseClass="));
00714                                 $this->tpl->setVariable("NOTICE_VALUE", $this->getComments($_GET["comment_id"]));
00715                                 $this->tpl->setVariable("MEMBER_PICTURE", $tmp_obj->getPersonalPicturePath("xsmall"));
00716                                 $this->tpl->setVariable("MEMBER_ID", $_GET["comment_id"]);
00717                                 $this->tpl->setVariable("SAVE_COMMENTS", $this->lng->txt("save"));
00718                                 $this->tpl->setVariable("EDIT_COMMENTS", $this->lng->txt("edit_comments"));
00719                                 $this->tpl->setVariable("MEMBER_LOGIN", $tmp_obj->getLastName().", ".$tmp_obj->getFirstName());
00720 
00721                                 $this->tpl->parseCurrentBlock();
00722                         }*/
00723 
00724                         $counter = 0;
00725                         $members = $this->object->getMemberListData();
00726 
00727                         include_once("./Services/Table/classes/class.ilTableGUI.php");
00728                         $tbl = new ilTableGUI();
00729                         $this->tpl->addBlockfile("MEMBER_TABLE", "term_table", "tpl.table.html");
00730                         $this->tpl->addBlockfile("TBL_CONTENT", "member_row", "tpl.exc_members_row.html", "Modules/Exercise");
00731                         
00732                         $sent_col = $this->object->_lookupAnyExerciseSent($this->object->getId());
00733                         
00734                         // SET FORMAACTION
00735                         $this->tpl->setCurrentBlock("tbl_form_header");
00736                         
00737                         $this->tpl->setVariable("FORMACTION", $this->ctrl->getLinkTarget($this, "updateMembers"));
00738                         $this->tpl->parseCurrentBlock();
00739         
00740                         // SET FOOTER BUTTONS
00741                         $this->tpl->setCurrentBlock("tbl_action_row");
00742 
00743                         $this->tpl->setVariable("COLUMN_COUNTS",6);
00744                         $this->tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.gif"));
00745 
00746                         $actions = array("save_status"          => $this->lng->txt("exc_save_changes"),
00747                                 "redirectFeedbackMail"  => $this->lng->txt("exc_send_mail"),
00748                                 "send_member"           => $this->lng->txt("exc_send_exercise"),
00749                                 "delete_member" => $this->lng->txt("exc_deassign_members"));
00750 
00751                         $this->tpl->setCurrentBlock("tbl_action_select");
00752                         $this->tpl->setVariable("SELECT_ACTION",ilUtil::formSelect(1,"action",$actions,false,true));
00753                         $this->tpl->setVariable("BTN_NAME","execute");
00754                         $this->tpl->setVariable("BTN_VALUE",$this->lng->txt("execute"));
00755                         $this->tpl->parseCurrentBlock();
00756         
00757                         $this->tpl->setCurrentBlock("tbl_action_row");
00758                         $this->tpl->setVariable("COLUMN_COUNTS",10);
00759                         $this->tpl->setVariable("TPLPATH",$this->tpl->tplPath);
00760                         $this->tpl->parseCurrentBlock();
00761 
00762                         // title & header columns
00763                         if ($sent_col)
00764                         {
00765                                 $sent_str = $this->lng->txt("exc_exercise_sent");
00766                         }
00767                         else
00768                         {
00769                                 $sent_str = "&nbsp;";
00770                         }
00771                         $tbl->setTitle($this->lng->txt("members"),"icon_usr.gif",
00772                                 $this->lng->txt("exc_header_members"));
00773                         $tbl->setHeaderNames(array("", "", $this->lng->txt("name"),
00774                                 $this->lng->txt("login"),
00775                                 $sent_str,
00776                                 $this->lng->txt("exc_submission"),
00777                                 $this->lng->txt("exc_grading"),
00778                                 $this->lng->txt("mail")
00779                                 ));
00780 
00781                         $tbl->setColumnWidth(array("1%", "1%", "", "", "", "", "", ""));
00782                         $cols = array("", "", "name", "login", "sent_time", "submission",
00783                                 "solved_time", "feedback_time");
00784                         
00785                         if (!$_GET["sort_by"])
00786                         {
00787                                 $_GET["sort_by"] = "name";
00788                         }
00789                         if (!$_GET["sort_order"])
00790                         {
00791                                 $_GET["sort_order"] = "asc";
00792                         }
00793                         
00794                         $header_params = $this->ctrl->getParameterArray($this);
00795                         unset($header_params["sort_by"]);
00796                         unset($header_params["sort_order"]);
00797                         unset($header_params["offset"]);
00798                         $header_params["cmd"] = "members";
00799                         $tbl->setHeaderVars($cols, $header_params);
00800                         $members = ilUtil::sortArray($members, $_GET["sort_by"], $_GET["sort_order"]);
00801                         $tbl->setOrderColumn($_GET["sort_by"]);
00802                         $tbl->setOrderDirection($_GET["sort_order"]);
00803                         $tbl->setOffset($_GET["offset"]);
00804                         $tbl->setLimit($_GET["limit"]);
00805                         $tbl->setMaxCount(count($members));
00806                         $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
00807                         $members = array_slice($members, $_GET["offset"], $_GET["limit"]);
00808                         $tbl->render();
00809 
00810                         
00811                         // new table
00812                         foreach ($members as $member)
00813                         {
00814                                 include_once "./classes/class.ilObjectFactory.php";
00815                 
00816                                 $member_id = $member["usr_id"];
00817                                 if(!($mem_obj = ilObjectFactory::getInstanceByObjId($member_id,false)))
00818                                 {
00819                                         continue;
00820                                 }
00821                                 
00822                                 // checkbox
00823                                 $this->tpl->setCurrentBlock("member_row");
00824                                 $this->tpl->setVariable("ROW_CSS",
00825                                         ilUtil::switchColor($counter++,"tblrow1","tblrow2"));
00826                                 $this->tpl->setVariable("VAL_CHKBOX",
00827                                         ilUtil::formCheckbox(0,"member[$member_id]",1));
00828                                 $this->tpl->setVariable("VAL_ID",
00829                                         $member_id);
00830                                         
00831                                 // name and login
00832                                 $this->tpl->setVariable("TXT_NAME",
00833                                         $member["name"]);
00834                                 $this->tpl->setVariable("TXT_LOGIN",
00835                                         "[".$member["login"]."]");
00836                                         
00837                                 // image
00838                                 $this->tpl->setVariable("USR_IMAGE",
00839                                         $mem_obj->getPersonalPicturePath("xxsmall"));
00840                                 $this->tpl->setVariable("USR_ALT", $this->lng->txt("personal_picture"));
00841 
00842                                 // mail sent
00843                                 if ($this->object->members_obj->getStatusSentByMember($member_id))
00844                                 {
00845                                         if (($st = ilObjExercise::_lookupSentTime($this->object->getId(),
00846                                                 $member_id)) > 0)
00847                                         {
00848                                                 $this->tpl->setVariable("TXT_MAIL_SENT",
00849                                                         sprintf($this->lng->txt("exc_sent_at"),
00850                                                         ilFormat::formatDate($st, "datetime", true)
00851                                                         ));
00852                                         }
00853                                         else
00854                                         {
00855                                                 $this->tpl->setVariable("TXT_MAIL_SENT",
00856                                                         $this->lng->txt("sent"));
00857                                         }
00858                                 }
00859 
00860                                 // submission:
00861                                 // see if files have been resubmmited after solved
00862                                 $last_sub =
00863                                         $this->object->getLastSubmission($member_id);
00864                                 if ($last_sub)
00865                                 {
00866                                         $last_sub = ilFormat::formatDate($last_sub, "datetime", true);
00867                                 }
00868                                 else
00869                                 {
00870                                         $last_sub = "---";
00871                                 }
00872                                 if ($this->object->_lookupUpdatedSubmission($this->object->getId(), $member_id) == 1) 
00873                                 {
00874                                         $last_sub = "<b>".$last_sub."</b>";
00875                                 }
00876                                 $this->tpl->setVariable("VAL_LAST_SUBMISSION", $last_sub);
00877                                 $this->tpl->setVariable("TXT_LAST_SUBMISSION",
00878                                         $this->lng->txt("exc_last_submission"));
00879 
00880                                 // nr of submitted files
00881                                 $this->tpl->setVariable("TXT_SUBMITTED_FILES",
00882                                         $this->lng->txt("exc_files_returned"));
00883                                 $sub_cnt = count($this->object->getDeliveredFiles($member_id));
00884                                 $new = $this->object->_lookupNewFiles($this->object->getId(), $member_id);
00885                                 if (count($new) > 0)
00886                                 {
00887                                         $sub_cnt.= " ".sprintf($this->lng->txt("cnt_new"),count($new));
00888                                 }
00889                                 $this->tpl->setVariable("VAL_SUBMITTED_FILES",
00890                                         $sub_cnt);
00891                                 
00892                                 // download command
00893                                 $this->ctrl->setParameter($this, "member_id", $member_id);
00894                                 if ($sub_cnt > 0)
00895                                 {
00896                                         $this->tpl->setCurrentBlock("download_link");
00897                                         $this->tpl->setVariable("LINK_DOWNLOAD",
00898                                                 $this->ctrl->getLinkTarget($this, "downloadReturned"));
00899                                         if (count($new) <= 0)
00900                                         {
00901                                                 $this->tpl->setVariable("TXT_DOWNLOAD",
00902                                                         $this->lng->txt("exc_download_files"));
00903                                         }
00904                                         else
00905                                         {
00906                                                 $this->tpl->setVariable("TXT_DOWNLOAD",
00907                                                         $this->lng->txt("exc_download_all"));
00908                                         }
00909                                         $this->tpl->parseCurrentBlock();
00910                                         
00911                                         // download new files only
00912                                         if (count($new) > 0)
00913                                         {
00914                                                 $this->tpl->setCurrentBlock("download_link");
00915                                                 $this->tpl->setVariable("LINK_NEW_DOWNLOAD",
00916                                                         $this->ctrl->getLinkTarget($this, "downloadNewReturned"));
00917                                                 $this->tpl->setVariable("TXT_NEW_DOWNLOAD",
00918                                                         $this->lng->txt("exc_download_new"));
00919                                                 $this->tpl->parseCurrentBlock();
00920                                         }
00921                                         
00922                                         $this->tpl->setCurrentBlock("member_row");
00923                                 }
00924                                 
00925                                 // note
00926                                 $this->tpl->setVariable("TXT_NOTE", $this->lng->txt("note"));
00927                                 $this->tpl->setVariable("NAME_NOTE",
00928                                         "notice[$member_id]");
00929                                 $this->tpl->setVariable("VAL_NOTE",
00930                                         ilUtil::prepareFormOutput($this->object->members_obj->getNoticeByMember($member_id)));
00931                                         
00932                                 // comment for learner
00933                                 $this->tpl->setVariable("TXT_LCOMMENT", $this->lng->txt("exc_comment_for_learner"));
00934                                 $this->tpl->setVariable("NAME_LCOMMENT",
00935                                         "lcomment[$member_id]");
00936                                 $lpcomment = ilLPMarks::_lookupComment($member_id,$this->object->getId());
00937                                 $this->tpl->setVariable("VAL_LCOMMENT",
00938                                         ilUtil::prepareFormOutput($lpcomment));
00939 
00940                                 // solved
00941                                 //$this->tpl->setVariable("CHKBOX_SOLVED",
00942                                 //      ilUtil::formCheckbox($this->object->members_obj->getStatusByMember($member_id),"solved[$member_id]",1));
00943                                 $status = ilExerciseMembers::_lookupStatus($this->object->getId(), $member_id);
00944                                 $this->tpl->setVariable("SEL_".strtoupper($status), ' selected="selected" ');
00945                                 $this->tpl->setVariable("TXT_NOTGRADED", $this->lng->txt("exc_notgraded"));
00946                                 $this->tpl->setVariable("TXT_PASSED", $this->lng->txt("exc_passed"));
00947                                 $this->tpl->setVariable("TXT_FAILED", $this->lng->txt("exc_failed"));
00948                                 if (($sd = ilObjExercise::_lookupStatusTime($this->object->getId(), $member_id)) > 0)
00949                                 {
00950                                         $this->tpl->setCurrentBlock("status_date");
00951                                         $this->tpl->setVariable("TXT_LAST_CHANGE", $this->lng->txt("last_change"));
00952                                         $this->tpl->setVariable("VAL_STATUS_DATE",
00953                                                 ilFormat::formatDate($sd, "datetime", true));
00954                                         $this->tpl->parseCurrentBlock();
00955                                         $this->tpl->setCurrentBlock("member_row");
00956                                 }
00957                                 switch($status)
00958                                 {
00959                                         case "passed":  $pic = "scorm/passed.gif"; break;
00960                                         case "failed":  $pic = "scorm/failed.gif"; break;
00961                                         default:                $pic = "scorm/not_attempted.gif"; break;
00962                                 }
00963                                 $this->tpl->setVariable("IMG_STATUS", ilUtil::getImagePath($pic));
00964                                 $this->tpl->setVariable("ALT_STATUS", $this->lng->txt("exc_".$status));
00965                                 
00966                                 // mark
00967                                 $this->tpl->setVariable("TXT_MARK", $this->lng->txt("exc_mark"));
00968                                 $this->tpl->setVariable("NAME_MARK",
00969                                         "mark[$member_id]");
00970                                 $mark = ilLPMarks::_lookupMark($member_id,$this->object->getId());
00971                                 $this->tpl->setVariable("VAL_MARK",
00972                                         ilUtil::prepareFormOutput($mark));
00973                                         
00974                                 // feedback
00975                                 $this->ctrl->setParameter($this, "member_id", $member_id);
00976                                 $this->tpl->setVariable("CHKBOX_FEEDBACK",
00977                                         ilUtil::formCheckbox($this->object->members_obj->getStatusFeedbackByMember($member_id),"feedback[$member_id]",1));
00978                                 if (($ft = ilObjExercise::_lookupFeedbackTime($this->object->getId(), $member_id)) > 0)
00979                                 {
00980                                         $this->tpl->setCurrentBlock("feedback_date");
00981                                         $this->tpl->setVariable("TXT_FEEDBACK_MAIL_SENT",
00982                                                 sprintf($this->lng->txt("exc_sent_at"),
00983                                                 ilFormat::formatDate($ft, "datetime", true)));
00984                                         $this->tpl->parseCurrentBlock();
00985                                         $this->tpl->setCurrentBlock("member_row");
00986                                 }
00987                                 $this->ctrl->setParameter($this, "rcp_to", $mem_obj->getLogin());
00988                                 $this->tpl->setVariable("LINK_FEEDBACK",
00989                                         $this->ctrl->getLinkTarget($this, "redirectFeedbackMail"));
00990                                         //"ilias.php?baseClass=ilMailGUI&type=new&rcp_to=".$mem_obj->getLogin());
00991                                 $this->tpl->setVariable("TXT_FEEDBACK",
00992                                         $this->lng->txt("exc_send_mail"));
00993                                 $this->ctrl->setParameter($this, "rcp_to", "");
00994 
00995                                 $this->tpl->parseCurrentBlock();
00996                         }
00997                         $this->tpl->setCurrentBlock("tbl_content");
00998                         $this->tpl->parseCurrentBlock();
00999 
01000                         
01001                         //$this->__showMembersTableContent($this->__showMembersTable($f_result,$member_ids));
01002 
01003                         if(count($this->object->members_obj->getAllDeliveredFiles()))
01004                         {
01005                                 $this->tpl->addBlockFile("SPECIAL_BUTTONS", "special_buttons", "tpl.exc_download_all.html",
01006                                         "Modules/Exercise");
01007                                 $this->tpl->setCurrentBlock("download_all");
01008                                 $this->tpl->setVariable("BUTTON_DOWNLOAD_ALL", $this->lng->txt("download_all_returned_files"));
01009                                 $this->tpl->setVariable("FORMACTION", 
01010                                         $this->ctrl->getLinkTarget($this, "downloadAll"));
01011                                 $this->tpl->parseCurrentBlock();
01012                         }
01013                 }
01014         }
01015 
01019         function redirectFeedbackMailObject()
01020         {
01021                 $this->checkPermission("write");
01022                 
01023                 if ($_GET["member_id"] != "")
01024                 {
01025                         $this->object->members_obj->setStatusFeedbackForMember($_GET["member_id"], 1);
01026                         ilUtil::redirect("ilias.php?baseClass=ilMailGUI&type=new&rcp_to=".urlencode($_GET["rcp_to"]));
01027                 }
01028                 else if(count($_POST["member"]) > 0)
01029                 {
01030                         include_once('./Services/User/classes/class.ilObjUser.php');
01031                         $logins = array();
01032                         foreach($_POST["member"] as $member => $val)
01033                         {
01034                                 $logins[] = ilObjUser::_lookupLogin($member);
01035                                 $this->object->members_obj->setStatusFeedbackForMember($member, 1);
01036                         }
01037                         $logins = implode($logins, ",");
01038                         ilUtil::redirect("ilias.php?baseClass=ilMailGUI&type=new&rcp_to=".$logins);
01039                 }
01040 
01041                 ilUtil::sendInfo($this->lng->txt("select_one"),true);
01042                 $this->ctrl->redirect($this, "members");
01043         }
01044         
01048         function downloadAllObject()
01049         {
01050                 $this->checkPermission("write");
01051                 
01052                 $members = array();
01053 
01054                 foreach($this->object->members_obj->getMembers() as $member_id)
01055                 {
01056                         // update download time
01057                         $this->object->members_obj->updateTutorDownloadTime($member_id);
01058 
01059                         // get member object (ilObjUser)
01060                         if (ilObject::_exists($member_id))
01061                         {
01062                                 $tmp_obj =& ilObjectFactory::getInstanceByObjId($member_id);
01063                                 $members[$member_id] = $tmp_obj->getFirstname() . " " . $tmp_obj->getLastname();
01064                                 unset($tmp_obj);
01065                         }
01066                 }
01067         
01068                 $this->object->file_obj->downloadAllDeliveredFiles($members);
01069         }
01070         
01071         function newMembersObject()
01072         {
01073                 global $rbacsystem;
01074         
01075                 $this->checkPermission("write");
01076         
01077                 // SEARCH CANCELED
01078                 if(isset($_POST["cancel"]))
01079                 {
01080                         $this->ctrl->redirect($this, "members");
01081                 }
01082         
01083                 if(isset($_POST["select"]))
01084                 {
01085                         if(is_array($_POST["id"]))
01086                         {
01087                                 if(!$this->object->members_obj->assignMembers($_POST["id"]))
01088                                 {
01089                                         ilUtil::sendInfo($this->lng->txt("exc_members_already_assigned"),true);
01090                                 }
01091                                 else
01092                                 {
01093                                         ilUtil::sendInfo($this->lng->txt("exc_members_assigned"),true);
01094                                 }
01095                                 $this->ctrl->redirect($this, "members");
01096                         }
01097                 }
01098                 $show_search = true;
01099         
01100                 $this->getTemplateFile("add_member","exc");
01101                 $this->tpl->setVariable("F_ACTION",$this->ctrl->getLinkTarget($this, "newMembers"));
01102 
01103                 if($_POST["search_str"])
01104                 {
01105                         $result = $this->__searchMembers(ilUtil::stripSlashes($_POST["search_str"]),$_POST["search_for"]);
01106         
01107                         switch(count($result))
01108                         {
01109                         case 0:
01110                                 // SHOW ERROR MESSAGE
01111                                 ilUtil::sendInfo($this->lng->txt("cont_no_object_found"));
01112                         break;
01113                 
01114                         case 1:
01115                                 $result = $this->__getMembersOfObject($result,$_POST["search_for"]);
01116                                 $this->__showMembersSelect($result);
01117                                 $show_search = false;
01118                         break;
01119                 
01120                         default:
01121                                 if($_POST["search_for"] == 'usr')
01122                                 {
01123                                         $this->__showMembersSelect($result);
01124                                 }
01125                                 else
01126                                 {
01127                                         $this->__showObjectSelect($result,$_POST["search_for"]);
01128                                 }
01129                                 $show_search = false;
01130                                 break;
01131                         }
01132                 }
01133                 if($_POST["obj_select"])
01134                 {
01135                         if(count($_POST["obj"]))
01136                         {
01137                                 $result = $this->__getMembersOfObject($_POST["obj"],"grp");
01138                                 $this->__showMembersSelect($result);
01139                                 $show_search = false;
01140                         }
01141                 }
01142         
01143         
01144                 if($show_search)
01145                 {
01146                         $this->lng->loadLanguageModule("content");
01147                         $this->lng->loadLanguageModule("search");
01148         
01149                         $search_for = array("usr" => $this->lng->txt("exc_users"),
01150                         "grp"   => $this->lng->txt("exc_groups"));
01151                         #"role" => $this->lng->txt("!!Rollen"));
01152         
01153                         $counter = 0;
01154                         foreach($search_for as $key => $value)
01155                         {
01156                                 $this->tpl->setCurrentBlock("USR_SEARCH_ROW");
01157                                 $this->tpl->setVariable("SEARCH_ROW_CHECK",
01158                                         ilUtil::formRadioButton(++$counter == 1 ? 1 : 0,"search_for",$key));
01159                                 $this->tpl->setVariable("SEARCH_ROW_TXT",$value);
01160                                 $this->tpl->parseCurrentBlock();
01161                         }
01162                         $this->tpl->setVariable("SEARCH_ASSIGN_USR",$this->lng->txt("add_member"));
01163                         $this->tpl->setVariable("SEARCH_SEARCH_TERM",$this->lng->txt("search_search_term"));
01164                         $this->tpl->setVariable("SEARCH_FOR",$this->lng->txt("exc_search_for"));
01165                         $this->tpl->setVariable("BTN1_VALUE",$this->lng->txt("search"));
01166                         $this->tpl->setVariable("BTN2_VALUE",$this->lng->txt("cancel"));
01167                 }
01168         }
01169 
01170         function __getMembersOfObject($a_result,$a_type)
01171         {
01172 
01173                 switch($a_type)
01174                 {
01175                         case "usr":
01176                                 return $a_result;
01177                         case "grp":
01178                                 include_once "./classes/class.ilObjGroup.php";
01179         
01180                                 $all_members = array();
01181                                 foreach($a_result as $group)
01182                                 {
01183                                         $tmp_grp_obj = ilObjectFactory::getInstanceByRefId($group["id"]);
01184         
01185                                         $members = $tmp_grp_obj->getGroupMemberIds();
01186                                         $all_members = array_merge($all_members,$members);
01187                                 }
01188                                 // FORMAT ARRAY
01189                                 $all_members = array_unique($all_members);
01190                                 foreach($all_members as $member)
01191                                 {
01192                                         $result[] = array("id" => $member);
01193                                 }
01194                                 return $result;
01195                 }
01196                 return true;
01197         }
01198 
01199         function __showObjectSelect($a_result,$a_type)
01200         {
01201                 include_once "./classes/class.ilObjectFactory.php";
01202   
01203                 foreach($a_result as $obj)
01204                 {
01205                         $tmp_obj =& ilObjectFactory::getInstanceByRefId($obj["id"]);
01206                         $this->tpl->setCurrentBlock("OBJ_SELECT_ROW");
01207                         $this->tpl->setVariable("OBJ_ROW_TITLE",$tmp_obj->getTitle());
01208                         $this->tpl->setVariable("OBJ_ROW_ID",$tmp_obj->getRefId());
01209                         $this->tpl->setVariable("OBJ_ROW_DESCRIPTION",$tmp_obj->getDescription());
01210                         $this->tpl->parseCurrentBlock();
01211         
01212                         unset($tmp_obj);
01213                 }
01214                 $this->tpl->setCurrentBlock("OBJ_SELECT");
01215                 $this->tpl->setVariable("OBJ_SELECT_TITLE",$this->lng->txt("title"));
01216                 $this->tpl->setVariable("OBJ_SELECT_DESCRIPTION",$this->lng->txt("description"));
01217   
01218                 $this->tpl->setVariable("OBJ_BTN1_VALUE",$this->lng->txt("select"));
01219                 $this->tpl->setVariable("OBJ_BTN2_VALUE",$this->lng->txt("cancel"));
01220                 $this->tpl->parseCurrentBlock();
01221         }
01222 
01223         function __showMembersSelect($a_result)
01224         {
01225                 include_once "./classes/class.ilObjectFactory.php";
01226                 include_once "./Services/Utilities/classes/class.ilUtil.php";
01227   
01228                 $ids = array();
01229                 foreach($a_result as $user)
01230                 {
01231                         array_push($ids, $user["id"]);
01232         
01233                         $tmp_obj =& ilObjectFactory::getInstanceByObjId($user["id"]);
01234 
01235                         $this->tpl->setCurrentBlock("USR_SELECT_ROW");
01236                         $this->tpl->setVariable("ROW_LOGIN",$tmp_obj->getLogin());
01237                         $this->tpl->setVariable("NAME_ID","id_".$tmp_obj->getId());
01238                         $this->tpl->setVariable("ROW_ID",$tmp_obj->getId());
01239                         $this->tpl->setVariable("ROW_FIRSTNAME",$tmp_obj->getFirstname());
01240                         $this->tpl->setVariable("ROW_LASTNAME",$tmp_obj->getLastname());
01241                         $this->tpl->parseCurrentBlock();
01242         
01243                         unset($tmp_obj);
01244                 }
01245   
01246                 $this->tpl->setCurrentBlock("USR_SELECT");
01247                 $this->tpl->setVariable("SELECT_LOGIN",$this->lng->txt("login"));
01248                 $this->tpl->setVariable("SELECT_FIRSTNAME",$this->lng->txt("firstname"));
01249                 $this->tpl->setVariable("SELECT_LASTNAME",$this->lng->txt("lastname"));
01250   
01251                 $this->tpl->setVariable("BTN1_VALUE",$this->lng->txt("assign"));
01252                 $this->tpl->setVariable("BTN2_VALUE",$this->lng->txt("cancel"));
01253                 $this->tpl->setVariable("JS_VARNAME","id");
01254                 $this->tpl->setVariable("JS_ONCLICK",ilUtil::array_php2js($ids));
01255                 $this->tpl->setVariable("TXT_CHECKALL",$this->lng->txt("check_all"));
01256                 $this->tpl->setVariable("TXT_UNCHECKALL",$this->lng->txt("uncheck_all"));
01257   
01258                 $this->tpl->parseCurrentBlock();
01259         }
01260         function __searchMembers($a_search_str,$a_search_for)
01261         {
01262                 include_once("./classes/class.ilSearch.php");
01263   
01264                 $this->lng->loadLanguageModule("content");
01265   
01266                 $search =& new ilSearch($_SESSION["AccountId"]);
01267                 $search->setPerformUpdate(false);
01268                 $search->setSearchString(ilUtil::stripSlashes($_POST["search_str"]));
01269                 $search->setCombination("and");
01270                 $search->setSearchFor(array(0 => $a_search_for));
01271                 $search->setSearchType('new');
01272   
01273                 $message = '';
01274                 if($search->validate($message))
01275                 {
01276                         $search->performSearch();
01277                 }
01278                 else
01279                 {
01280                         ilUtil::sendInfo($message,true);
01281                         $this->ctrl->redirect($this, "newMembers");
01282                 }
01283                 return $search->getResultByType($a_search_for);
01284         }
01285 
01286         function __deassignMembers()
01287         {
01288                 if(is_array($_POST["member"]))
01289                 {
01290                         foreach($_POST["member"] as $usr_id => $member)
01291                         {
01292                                 $this->object->members_obj->deassignMember($usr_id);
01293                         }
01294                         return true;
01295                 }
01296                 else
01297                 {
01298                         ilUtil::sendInfo($this->lng->txt("select_one"),true);
01299                         return false;
01300                 }
01301         }
01302 
01303         function saveCommentsObject() 
01304         {
01305                 $this->checkPermission("write");
01306                 
01307                 if(!isset($_POST['comments_value']))
01308                 {
01309                         continue;
01310                 }
01311   
01312                 $this->object->members_obj->setNoticeForMember($_GET["member_id"],
01313                         ilUtil::stripSlashes($_POST["comments_value"]));
01314                 ilUtil::sendInfo($this->lng->txt("exc_members_comments_saved"));
01315                 $this->membersObject();
01316         }
01317 
01318         function getComments($member_id) 
01319         {
01320                 return $this->object->members_obj->getNoticeByMember($member_id);
01321         }
01322 
01323         function __saveStatus()
01324         {
01325                 $this->checkPermission("write");
01326                 
01327                 include_once 'Services/Tracking/classes/class.ilLPMarks.php';
01328 
01329 //var_dump($_POST["member"]);
01330 //var_dump($_POST["id"]);
01331                 
01332                 $saved_for = array();
01333                 
01334                 foreach($_POST["id"] as $key => $value)
01335                 {
01336                         if (count($_POST["member"]) > 0 && $_POST["member"][$key] != "1")
01337                         {
01338                                 continue;
01339                         }
01340                         else
01341                         {
01342                                 if (count($_POST["member"]) > 0)
01343                                 {
01344                                         $uname = ilObjUser::_lookupName($key);
01345                                         $saved_for[] = $uname["lastname"].", ".$uname["firstname"];
01346                                 }
01347                         }
01348                         
01349                         $this->object->members_obj->setStatusForMember($key, $_POST["status"][$key]);
01350                         //$this->object->members_obj->setStatusFeedbackForMember($key, $_POST["feedback"][$key] ? 1 : 0);
01351                         $this->object->members_obj->setNoticeForMember($key,ilUtil::stripSlashes($_POST["notice"][$key]));
01352 
01353                         if (ilUtil::stripSlashes($_POST['mark'][$key]) != 
01354                                 ilLPMarks::_lookupMark($key, $this->object->getId()))
01355                         {
01356                                 $this->object->members_obj->updateStatusTimeForMember($key);
01357                         }
01358                                 
01359                         // save mark and comment
01360                         $marks_obj = new ilLPMarks($this->object->getId(),$key);
01361                         $marks_obj->setMark(ilUtil::stripSlashes($_POST['mark'][$key]));
01362                         $marks_obj->setComment(ilUtil::stripSlashes($_POST['lcomment'][$key]));
01363                         $marks_obj->update();
01364                 }
01365                 if (count($saved_for) > 0)
01366                 {
01367                         $save_for_str = "(".implode($saved_for, " - ").")";
01368                 }
01369                 ilUtil::sendInfo($this->lng->txt("exc_status_saved")." ".$save_for_str,true);
01370                 return true;
01371         }
01372 
01373         function __getDateSelect($a_type,$a_selected)
01374         {
01375                 switch($a_type)
01376                 {
01377                         case "hour":
01378                                 for($i=0; $i<24; $i++)
01379                                 {
01380                                         $hours[$i] = $i < 10 ? "0".$i : $i;
01381                                 }
01382                                 return ilUtil::formSelect($a_selected,"d_hour",$hours,false,true);
01383         
01384                         case "minutes":
01385                                 for($i=0;$i<60;$i++)
01386                                 {
01387                                         $minutes[$i] = $i < 10 ? "0".$i : $i;
01388                                 }
01389                                 return ilUtil::formSelect($a_selected,"d_minutes",$minutes,false,true);
01390         
01391                         case "day":
01392                                 for($i=1; $i<32; $i++)
01393                                 {
01394                                         $days[$i] = $i < 10 ? "0".$i : $i;
01395                                 }
01396                                 return ilUtil::formSelect($a_selected,"d_day",$days,false,true);
01397         
01398                         case "month":
01399                                 for($i=1; $i<13; $i++)
01400                                 {
01401                                         $month[$i] = $i < 10 ? "0".$i : $i;
01402                                 }
01403                                 return ilUtil::formSelect($a_selected,"d_month",$month,false,true);
01404         
01405                         case "year":
01406                                 for($i = date("Y",time());$i < date("Y",time()) + 3;++$i)
01407                                 {
01408                                         $year[$i] = $i;
01409                                 }
01410                                 return ilUtil::formSelect($a_selected,"d_year",$year,false,true);
01411                 }
01412         }
01413 
01414         function __filterAssignedUsers($a_result)
01415         {
01416                 foreach($a_result as $user)
01417                 {
01418                         if(!$this->object->members_obj->isAssigned($user["id"]))
01419                         {
01420                                 $filtered[] = $user;
01421                         }
01422                 }
01423         
01424                 return $filtered ? $filtered : array();
01425         }
01426         
01432         function getTabs(&$tabs_gui)
01433         {
01434                 global $ilAccess,$ilUser;
01435   
01436                 $next_class = strtolower($this->ctrl->getNextClass());
01437                 if ($ilAccess->checkAccess("visible", "", $this->object->getRefId()))
01438                 {
01439                         $force_active = ($next_class == "ilinfoscreengui")
01440                                 ? true
01441                                 : false;
01442                         $tabs_gui->addTarget("info_short",
01443                                  $this->ctrl->getLinkTargetByClass("ilinfoscreengui", "showSummary"),
01444                                  "showSummary",
01445                                  "ilinfoscreengui", "", $force_active);
01446                 }
01447 
01448                 /*
01449                 $tabs_gui->addTarget("view",
01450                         $this->ctrl->getLinkTarget($this, 'view'),
01451                         array("view",""), "");*/
01452                         
01453                 if ($ilAccess->checkAccess("read", "", $this->object->getRefId()))
01454                 {
01455                         $tabs_gui->addTarget("exc_your_submission",
01456                                 $this->ctrl->getLinkTarget($this, "deliver"),
01457                                 "deliver", "");
01458                 }
01459 
01460                 // edit properties
01461                 if ($ilAccess->checkAccess("write", "", $this->ref_id))
01462                 {
01463                         $tabs_gui->addTarget("edit_properties",
01464                                 $this->ctrl->getLinkTarget($this, 'edit'),
01465                                 "edit", "");
01466                         
01467                         $tabs_gui->addTarget("members",
01468                         $this->ctrl->getLinkTarget($this, 'members'),
01469                         array("members", "newMembers", "newmembers"), "");
01470                 }
01471 
01472                 // learning progress
01473                 $save_sort_order = $_GET["sort_order"];         // hack, because exercise sort parameters
01474                 $save_sort_by = $_GET["sort_by"];                       // must not be forwarded to learning progress
01475                 $save_offset = $_GET["offset"];
01476                 $_GET["offset"] = $_GET["sort_by"] = $_GET["sort_order"] = ""; 
01477                 include_once("Services/Tracking/classes/class.ilObjUserTracking.php");
01478                 if($ilAccess->checkAccess("read", "", $this->ref_id) and ilObjUserTracking::_enabledLearningProgress() and $ilUser->getId() != ANONYMOUS_USER_ID)
01479                 {
01480                         $tabs_gui->addTarget('learning_progress',
01481                         $this->ctrl->getLinkTargetByClass(array('ilobjexercisegui','illearningprogressgui'),''),
01482                  '',array('illplistofobjectsgui','illplistofsettingsgui','illearningprogressgui','illplistofprogressgui'));
01483                 }
01484                 $_GET["sort_order"] = $save_sort_order;         // hack, part ii
01485                 $_GET["sort_by"] = $save_sort_by;
01486                 $_GET["offset"] = $save_offset;
01487                 
01488                 // permissions
01489                 if ($ilAccess->checkAccess("edit_permission", "", $this->ref_id))
01490                 {
01491                         $tabs_gui->addTarget("perm_settings",
01492                         $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"), 
01493                         array("perm","info","owner"), 'ilpermissiongui');
01494                 }
01495         }
01496         
01497         function &executeCommand()
01498         {
01499                 global $ilUser;
01500   
01501                 $next_class = $this->ctrl->getNextClass($this);
01502                 $cmd = $this->ctrl->getCmd();
01503                 $this->prepareOutput();
01504   
01505 //echo "-".$next_class."-".$cmd."-"; exit;
01506                 switch($next_class)
01507                 {
01508                         case "ilinfoscreengui":
01509                                 $this->infoScreen();    // forwards command
01510                                 break;
01511 
01512                         case 'ilpermissiongui':
01513                                 include_once("./classes/class.ilPermissionGUI.php");
01514                                 $perm_gui =& new ilPermissionGUI($this);
01515                                 $ret =& $this->ctrl->forwardCommand($perm_gui);
01516                         break;
01517         
01518                         case "illearningprogressgui":
01519                                 include_once './Services/Tracking/classes/class.ilLearningProgressGUI.php';
01520         
01521                                 $new_gui =& new ilLearningProgressGUI(LP_MODE_REPOSITORY,
01522                                         $this->object->getRefId(),
01523                                         $_GET['user_id'] ? $_GET['user_id'] : $ilUser->getId());
01524                                 $this->ctrl->forwardCommand($new_gui);
01525                                 $this->tabs_gui->setTabActive('learning_progress');
01526                         break;
01527 
01528                         case 'ilrepositorysearchgui':
01529                                 include_once('./Services/Search/classes/class.ilRepositorySearchGUI.php');
01530                                 $rep_search =& new ilRepositorySearchGUI();
01531                                 $rep_search->setCallback($this,'addMembersObject');
01532 
01533                                 // Set tabs
01534                                 $this->tabs_gui->setTabActive('members');
01535                                 $this->ctrl->setReturn($this,'members');
01536                                 $ret =& $this->ctrl->forwardCommand($rep_search);
01537                                 #$this->__setSubTabs('members');
01538                                 #$this->tabs_gui->setSubTabActive('members');
01539                                 break;
01540 
01541         
01542                         default:
01543                                 if(!$cmd)
01544                                 {
01545                                         $cmd = "infoScreen";
01546                                 }
01547         
01548                                 $cmd .= "Object";
01549         
01550                                 $this->$cmd();
01551         
01552                         break;
01553                 }
01554   
01555                 return true;
01556         }
01557         
01563         function infoScreenObject()
01564         {
01565                 $this->ctrl->setCmd("showSummary");
01566                 $this->ctrl->setCmdClass("ilinfoscreengui");
01567                 $this->infoScreen();
01568         }
01569 
01573         function infoScreen()
01574         {
01575                 global $ilAccess, $ilUser;
01576 
01577                 $this->checkPermission("visible");
01578 
01579                 include_once("./Services/InfoScreen/classes/class.ilInfoScreenGUI.php");
01580                 $info = new ilInfoScreenGUI($this);
01581                 
01582                 $info->enablePrivateNotes();
01583                 
01584                 $info->enableNews();
01585                 if ($ilAccess->checkAccess("write", "", $_GET["ref_id"]))
01586                 {
01587                         $info->enableNewsEditing();
01588                         $info->setBlockProperty("news", "settings", true);
01589                 }
01590                 
01591                 // standard meta data
01592                 //$info->addMetaDataSections($this->object->getId(),0, $this->object->getType());
01593                 
01594                 // instructions
01595                 $info->addSection($this->lng->txt("exc_instruction"));
01596                 $info->addProperty("",
01597                         nl2br($this->object->getInstruction()));
01598                 
01599                 // schedule
01600                 $info->addSection($this->lng->txt("exc_schedule"));
01601                 $info->addProperty($this->lng->txt("exc_edit_until"),
01602                         date("H:i, d.m.Y",$this->object->getTimestamp()));
01603                 
01604                 if ($this->object->getTimestamp()-time() <= 0)
01605                 {
01606                         $time_str = $this->lng->txt("exc_time_over_short");
01607                 }
01608                 else
01609                 {
01610                         $time_diff = ilUtil::int2array($this->object->getTimestamp()-time(),null);
01611                         $time_str = ilUtil::timearray2string($time_diff);
01612                 }
01613                 $info->addProperty($this->lng->txt("exc_time_to_send"),
01614                         "<b>".$time_str."</b>");
01615                         
01616                 // download files
01617                 if ($ilAccess->checkAccess("read", "", $this->ref_id))
01618                 {
01619                         $files = $this->object->getFiles();
01620                         if (count($files) > 0)
01621                         {
01622                                 $info->addSection($this->lng->txt("exc_files"));
01623                                 foreach($files as $file)
01624                                 {
01625                                         $this->ctrl->setParameter($this, "file", urlencode($file["name"]));
01626                                         $info->addProperty($file["name"],
01627                                                 $this->lng->txt("download"),
01628                                                 $this->ctrl->getLinkTarget($this, "downloadFile"));
01629                                         $this->ctrl->setParameter($this, "file", "");
01630                                 }
01631                         }
01632                 }
01633 
01634                 // submission and feedback info only if read permission given
01635                 if ($ilAccess->checkAccess("read", "", $this->ref_id))
01636                 {
01637                         // submission
01638                         $info->addSection($this->lng->txt("exc_your_submission"));
01639                         $delivered_files = $this->object->getDeliveredFiles($ilUser->id);
01640                         $titles = array();
01641                         foreach($delivered_files as $file)
01642                         {
01643                                 $titles[] = $file["filetitle"];
01644                         }
01645                         $files_str = implode($titles, ", ");
01646                         if ($files_str == "")
01647                         {
01648                                 $files_str = $this->lng->txt("message_no_delivered_files");
01649                         }
01650                         $info->addProperty($this->lng->txt("exc_files_returned"),
01651                                 $files_str);
01652                         $last_sub = $this->object->getLastSubmission($ilUser->getId());
01653                         if ($last_sub)
01654                         {
01655                                 $last_sub = ilFormat::formatDate($last_sub, "datetime", true);
01656                         }
01657                         else
01658                         {
01659                                 $last_sub = "---";
01660                         }
01661 
01662                         $info->addProperty($this->lng->txt("exc_last_submission"),
01663                                 $last_sub);
01664                         
01665                         // feedback from tutor
01666                         include_once("Services/Tracking/classes/class.ilLPMarks.php");
01667                         $lpcomment = ilLPMarks::_lookupComment($ilUser->getId(), $this->object->getId());
01668                         $mark = ilLPMarks::_lookupMark($ilUser->getId(), $this->object->getId());
01669                         $status = ilExerciseMembers::_lookupStatus($this->object->getId(), $ilUser->getId());
01670                         if ($lpcomment != "" || $mark != "" || $status != "notgraded")
01671                         {
01672                                 $info->addSection($this->lng->txt("exc_feedback_from_tutor"));
01673                                 if ($lpcomment != "")
01674                                 {
01675                                         $info->addProperty($this->lng->txt("exc_comment"),
01676                                                 $lpcomment);
01677                                 }
01678                                 if ($mark != "")
01679                                 {
01680                                         $info->addProperty($this->lng->txt("exc_mark"),
01681                                                 $mark);
01682                                 }
01683 
01684                                 if ($status == "") 
01685                                 {
01686                                   $info->addProperty($this->lng->txt("status"),
01687                                                 $this->lng->txt("message_no_delivered_files"));                         
01688                                 }
01689                                 else
01690                                         if ($status != "notgraded")
01691                                         {
01692                                           $info->addProperty($this->lng->txt("status"),
01693                                                         $this->lng->txt("exc_".$status));
01694                                         }
01695                         }
01696                 }
01697 
01698                 // forward the command
01699                 $this->ctrl->forwardCommand($info);
01700         }
01701 
01702 
01708         function _goto($a_target)
01709         {
01710                 global $rbacsystem, $ilErr, $lng, $ilAccess;
01711 
01712                 if ($ilAccess->checkAccess("visible", "", $a_target))
01713                 {
01714                         $_GET["ref_id"] = $a_target;
01715                         $_GET["cmd"] = "infoScreen";
01716                         $_GET["baseClass"] = "ilExerciseHandlerGUI";
01717                         include("ilias.php");
01718                         exit;
01719                 }
01720                 else if ($ilAccess->checkAccess("read", "", ROOT_FOLDER_ID))
01721                 {
01722                         $_GET["cmd"] = "frameset";
01723                         $_GET["target"] = "";
01724                         $_GET["ref_id"] = ROOT_FOLDER_ID;
01725                         ilUtil::sendInfo(sprintf($lng->txt("msg_no_perm_read_item"),
01726                                 ilObject::_lookupTitle(ilObject::_lookupObjId($a_target))), true);
01727                         include("repository.php");
01728                         exit;
01729                 }
01730                 
01731                 $ilErr->raiseError($lng->txt("msg_no_perm_read"), $ilErr->FATAL);
01732         }               
01733 
01737         function addLocatorItems()
01738         {
01739                 global $ilLocator;
01740                 
01741                 if (is_object($this->object))
01742                 {
01743                         $ilLocator->addItem($this->object->getTitle(), $this->ctrl->getLinkTarget($this, "infoScreen"), "", $_GET["ref_id"]);
01744                 }
01745         }
01746         
01747 } // END class.ilObjExerciseGUI
01748 ?>

Generated on Fri Dec 13 2013 17:56:50 for ILIAS Release_3_9_x_branch .rev 46835 by  doxygen 1.7.1