00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
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
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
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
00355
00356
00357 $newObj = parent::saveObject();
00358
00359
00360
00361
00362
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
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
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
00413 $this->getTemplateFile("edit","exc");
00414
00415
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
00428 $this->tpl->setVariable("TITLE",$title);
00429 $this->tpl->setVariable("DESC",$desc);
00430 $this->tpl->setVariable("INSTRUCTION",$instruction);
00431
00432
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
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")." ".
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
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
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
00653 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00654
00655
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
00662 $parent_id = $tree->getParentId($_GET["ref_id"]);
00663 $parent_obj_id = ilObject::_lookupObjId($parent_id);
00664 $type = ilObject::_lookupType($parent_obj_id);
00665
00666
00667
00668
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
00676
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
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
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
00735 $this->tpl->setCurrentBlock("tbl_form_header");
00736
00737 $this->tpl->setVariable("FORMACTION", $this->ctrl->getLinkTarget($this, "updateMembers"));
00738 $this->tpl->parseCurrentBlock();
00739
00740
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
00763 if ($sent_col)
00764 {
00765 $sent_str = $this->lng->txt("exc_exercise_sent");
00766 }
00767 else
00768 {
00769 $sent_str = " ";
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
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
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
00832 $this->tpl->setVariable("TXT_NAME",
00833 $member["name"]);
00834 $this->tpl->setVariable("TXT_LOGIN",
00835 "[".$member["login"]."]");
00836
00837
00838 $this->tpl->setVariable("USR_IMAGE",
00839 $mem_obj->getPersonalPicturePath("xxsmall"));
00840 $this->tpl->setVariable("USR_ALT", $this->lng->txt("personal_picture"));
00841
00842
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
00861
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
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
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
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
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
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
00941
00942
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
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
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
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
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
01057 $this->object->members_obj->updateTutorDownloadTime($member_id);
01058
01059
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
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
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
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
01330
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
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
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
01450
01451
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
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
01473 $save_sort_order = $_GET["sort_order"];
01474 $save_sort_by = $_GET["sort_by"];
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;
01485 $_GET["sort_by"] = $save_sort_by;
01486 $_GET["offset"] = $save_offset;
01487
01488
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
01506 switch($next_class)
01507 {
01508 case "ilinfoscreengui":
01509 $this->infoScreen();
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
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
01592
01593
01594
01595 $info->addSection($this->lng->txt("exc_instruction"));
01596 $info->addProperty("",
01597 nl2br($this->object->getInstruction()));
01598
01599
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
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
01635 if ($ilAccess->checkAccess("read", "", $this->ref_id))
01636 {
01637
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
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
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 }
01748 ?>