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
00037 require_once "class.ilObjectGUI.php";
00038
00039 class ilObjExerciseGUI extends ilObjectGUI
00040 {
00045 function ilObjExerciseGUI($a_data,$a_id,$a_call_by_reference,$a_prepare_output = true)
00046 {
00047 $this->type = "exc";
00048 $this->ilObjectGUI($a_data,$a_id,$a_call_by_reference,false);
00049 }
00050
00051 function getFiles()
00052 {
00053 return $this->files ? $this->files : array();
00054 }
00055 function setFiles($a_files)
00056 {
00057 $this->files = $a_files;
00058 }
00059
00060 function createObject()
00061 {
00062 parent::createObject();
00063
00064
00065 $this->tpl->setVariable("TXT_INSTRUCTION",$this->lng->txt("exc_instruction"));
00066 $this->tpl->setVariable("TXT_EDIT_UNTIL",$this->lng->txt("exc_edit_until"));
00067 $this->tpl->setVariable("TXT_HOUR",$this->lng->txt("time_h"));
00068 $this->tpl->setVariable("TXT_DAY",$this->lng->txt("time_d"));
00069 $this->tpl->setVariable("SELECT_HOUR",$this->__getDateSelect("hour",(int) date("H",time())));
00070 $this->tpl->setVariable("SELECT_MINUTES",$this->__getDateSelect("minutes",(int) date("i",time())));
00071 $this->tpl->setVariable("SELECT_DAY",$this->__getDateSelect("day",(int) date("d",time())));
00072 $this->tpl->setVariable("SELECT_MONTH",$this->__getDateSelect("month",(int) date("m",time())));
00073 $this->tpl->setVariable("SELECT_YEAR",$this->__getDateSelect("year",1));
00074 $this->tpl->setVariable("CMD_CANCEL", "cancel");
00075
00076 return true;
00077 }
00078
00079 function viewObject()
00080 {
00081 global $rbacsystem;
00082
00083 if (strtolower($_GET["baseClass"]) == "iladministrationgui")
00084 {
00085 parent::viewObject();
00086 return;
00087 }
00088
00089 if (!$rbacsystem->checkAccess("read", $this->ref_id))
00090 {
00091 $this->ilias->raiseError($this->lng->txt("msg_no_perm_read"),$this->ilias->error_obj->MESSAGE);
00092 }
00093 $this->getTemplateFile("view", "exc");
00094
00095 $this->tpl->setVariable("FORM_DOWNLOAD_ACTION", $this->ctrl->getFormAction($this, "downloadFile"));
00096 $this->tpl->setVariable("TITLE",$this->object->getTitle());
00097 $this->tpl->setVariable("DESCRIPTION",$this->object->getDescription());
00098 $this->tpl->setVariable("INSTRUCTION_TXT",$this->lng->txt("exc_instruction"));
00099 $this->tpl->setVariable("INSTRUCTION",nl2br($this->object->getInstruction()));
00100 $this->tpl->setVariable("EDIT_UNTIL_TXT",$this->lng->txt("exc_edit_until"));
00101 $this->tpl->setVariable("EDIT_UNTIL",date("H:i, d.m.Y",$this->object->getTimestamp()));
00102
00103 $anyfiles = false;
00104 foreach($this->object->getFiles() as $file)
00105 {
00106 $this->tpl->setCurrentBlock("FILES_ROW");
00107 $this->tpl->setVariable("FILE_DATA",$file["name"]);
00108 $this->tpl->setVariable("FILE_CHECK",ilUtil::formRadioButton(0,"file",urlencode($file["name"])));
00109 $this->tpl->parseCurrentBlock();
00110 $anyfiles = true;
00111 }
00112
00113 if ($anyfiles)
00114 {
00115 $this->tpl->setCurrentBlock("FILES");
00116 $this->tpl->setVariable("FILES_TXT",$this->lng->txt("exc_files"));
00117 $this->tpl->setVariable("TXT_DOWNLOAD",$this->lng->txt("download"));
00118 $this->tpl->setVariable("IMG",ilUtil::getImagePath("arrow_downright.gif"));
00119 $this->tpl->parseCurrentBlock();
00120 }
00121
00122 return true;
00123 }
00124
00130 function deliverObject()
00131 {
00132 global $ilUser;
00133 require_once "./classes/class.ilUtil.php";
00134
00135 if (mktime() > $this->object->getTimestamp())
00136 {
00137 sendInfo($this->lng->txt("exercise_time_over"));
00138 }
00139 else
00140 {
00141 if ($_POST["cmd"]["delete"])
00142 {
00143 if (count($_POST["delivered"]))
00144 {
00145 $this->object->deleteDeliveredFiles($_POST["delivered"], $ilUser->id);
00146 }
00147 else
00148 {
00149 sendInfo($this->lng->txt("please_select_a_delivered_file_to_delete"));
00150 }
00151 }
00152
00153 if ($_POST["cmd"]["download"])
00154 {
00155 if (count($_POST["delivered"]))
00156 {
00157 $this->object->members_obj->downloadSelectedFiles($_POST["delivered"]);
00158 }
00159 else
00160 {
00161 sendInfo($this->lng->txt("please_select_a_delivered_file_to_download"));
00162 }
00163 }
00164
00165 $this->getTemplateFile("deliver_file", "exc");
00166 $delivered_files = $this->object->getDeliveredFiles($ilUser->id);
00167 $color_class = array("tblrow1", "tblrow2");
00168 $counter = 0;
00169 foreach ($delivered_files as $index => $file)
00170 {
00171 $this->tpl->setCurrentBlock("delivered_row");
00172 $this->tpl->setVariable("COLOR_CLASS", $color_class[$counter % 2]);
00173 $this->tpl->setVariable("FILE_ID", $file["returned_id"]);
00174 $this->tpl->setVariable("DELIVERED_FILE", $file["filetitle"]);
00175 preg_match("/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/", $file["TIMESTAMP14"], $matches);
00176 $stamp = strtotime(sprintf("%04d-%02d-%02d %02d:%02d:%02d", $matches[1], $matches[2], $matches[3], $matches[4], $matches[5], $matches[6]));
00177 $date = date($this->lng->text["lang_dateformat"] . " " . $this->lng->text["lang_timeformat"], $stamp);
00178 $this->tpl->setVariable("DELIVERED_DATE", $date);
00179 $this->tpl->parseCurrentBlock();
00180 $counter++;
00181 }
00182 if (count($delivered_files))
00183 {
00184 $this->tpl->setCurrentBlock("footer_content");
00185 $this->tpl->setVariable("ARROW_SIGN", ilUtil::getImagePath("arrow_downright.gif"));
00186 $this->tpl->setVariable("BUTTON_DELETE", $this->lng->txt("delete"));
00187 $this->tpl->setVariable("BUTTON_DOWNLOAD", $this->lng->txt("download"));
00188 $this->tpl->parseCurrentBlock();
00189 }
00190 else
00191 {
00192 $this->tpl->setCurrentBlock("footer_empty");
00193 $this->tpl->setVariable("TEXT_NO_DELIVERED_FILES", $this->lng->txt("message_no_delivered_files"));
00194 $this->tpl->parseCurrentBlock();
00195 }
00196 $this->tpl->setCurrentBlock("delivered_files");
00197 $this->tpl->setVariable("DELIVER_FORMACTION", $this->getFormAction("deliver", "exercise.php?cmd=deliver&ref_id=".$this->ref_id));
00198 $this->tpl->setVariable("TEXT_DATE", $this->lng->txt("date"));
00199 $this->tpl->setVariable("TEXT_DELIVERED_FILENAME", $this->lng->txt("filename"));
00200 $this->tpl->setVariable("TEXT_HEADING_DELIVERED_FILES", $this->lng->txt("already_delivered_files"));
00201 $this->tpl->parseCurrentBlock();
00202 $this->tpl->setCurrentBlock("adm_content");
00203 $this->tpl->setVariable("FORMACTION", $this->getFormAction("deliverFile", "exercise.php?cmd=deliverFile&ref_id=".$this->ref_id));
00204 $this->tpl->setVariable("BUTTON_DELIVER", $this->lng->txt("upload"));
00205 $this->tpl->setVariable("TEXT_FILENAME", $this->lng->txt("enter_filename_deliver"));
00206 $this->tpl->parseCurrentBlock();
00207 }
00208 }
00209
00210 function deliverFileObject()
00211 {
00212 global $ilUser;
00213
00214 if(!$this->object->deliverFile($_FILES["deliver"], $ilUser->id))
00215 {
00216 sendInfo($this->lng->txt("exc_upload_error"),true);
00217 }
00218 $this->deliverObject();
00219 }
00220
00221 function downloadFileObject()
00222 {
00223 global $rbacsystem;
00224
00225 if (!$rbacsystem->checkAccess("read", $this->ref_id))
00226 {
00227 $this->ilias->raiseError($this->lng->txt("msg_no_perm_read"),$this->ilias->error_obj->MESSAGE);
00228 }
00229 if(!isset($_POST["file"]))
00230 {
00231 sendInfo($this->lng->txt("exc_select_one_file"),true);
00232 $this->ctrl->redirect($this, "view");
00233 }
00234 $files = $this->object->getFiles();
00235 $file_exist = false;
00236
00237 foreach($this->object->getFiles() as $file)
00238 {
00239 if($file["name"] == urldecode($_POST["file"]))
00240 {
00241 $file_exist = true;
00242 break;
00243 }
00244 }
00245 if(!$file_exist)
00246 {
00247 echo "FILE DOES NOT EXIST";
00248 exit;
00249 }
00250 ilUtil::deliverFile($this->object->file_obj->getAbsolutePath(urldecode($_POST["file"])),
00251 urldecode($_POST["file"]));
00252
00253 return true;
00254 }
00255
00260 function saveObject()
00261 {
00262 global $rbacadmin;
00263
00264
00265 include_once("./classes/class.ilObjExercise.php");
00266 $tmp_obj =& new ilObjExercise();
00267
00268 $tmp_obj->setDate($_POST["d_hour"],$_POST["d_minutes"],$_POST["d_day"],$_POST["d_month"],$_POST["d_year"]);
00269 if(!$tmp_obj->checkDate())
00270 {
00271 $this->ilias->raiseError($this->lng->txt("exc_date_not_valid"), $this->ilias->error_obj->MESSAGE);
00272 }
00273 unset($tmp_obj);
00274
00275
00276
00277 $newObj = parent::saveObject();
00278
00279
00280
00281
00282
00283
00284 $newObj->setDate($_POST["d_hour"],$_POST["d_minutes"],$_POST["d_day"],$_POST["d_month"],$_POST["d_year"]);
00285
00286 $newObj->setInstruction(ilUtil::stripSlashes($_POST["Fobject"]["instruction"]));
00287 $newObj->saveData();
00288
00289
00290 sendInfo($this->lng->txt("exc_added"),true);
00291 ilUtil::redirect("exercise.php?ref_id=".$newObj->getRefId()."&cmd=edit");
00292 }
00293
00294 function editObject()
00295 {
00296 global $rbacsystem;
00297
00298 if (!$rbacsystem->checkAccess("write", $this->ref_id))
00299 {
00300 $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
00301 }
00302
00303 $title = $_SESSION["error_post_vars"]["Fobject"]["title"] ?
00304 ilUtil::prepareFormOutput($_SESSION["error_post_vars"]["Fobject"]["title"],true) :
00305 ilUtil::prepareFormOutput($this->object->getTitle());
00306 $desc = $_SESSION["error_post_vars"]["Fobject"]["desc"] ?
00307 $_SESSION["error_post_vars"]["Fobject"]["desc"] :
00308 $this->object->getDescription();
00309
00310 $instruction = $_SESSION["error_post_vars"]["Fobject"]["instruction"] ?
00311 $_SESSION["error_post_vars"]["Fobject"]["instruction"] :
00312 $this->object->getInstruction();
00313
00314 $hour = $_SESSION["error_post_vars"]["Fobject"]["d_hour"] ?
00315 $_SESSION["error_post_vars"]["Fobject"]["d_hour"] :
00316 date("H",$this->object->getTimestamp());
00317
00318 $minutes = $_SESSION["error_post_vars"]["Fobject"]["d_minutes"] ?
00319 $_SESSION["error_post_vars"]["Fobject"]["d_minutes"] :
00320 date("i",$this->object->getTimestamp());
00321
00322 $day = $_SESSION["error_post_vars"]["Fobject"]["d_day"] ?
00323 $_SESSION["error_post_vars"]["Fobject"]["d_day"] :
00324 date("d",$this->object->getTimestamp());
00325
00326 $month = $_SESSION["error_post_vars"]["Fobject"]["d_month"] ?
00327 $_SESSION["error_post_vars"]["Fobject"]["d_month"] :
00328 date("m",$this->object->getTimestamp());
00329
00330 $year = $_SESSION["error_post_vars"]["Fobject"]["year"] ?
00331 $_SESSION["error_post_vars"]["Fobject"]["year"] :
00332 date("Y",$this->object->getTimestamp());
00333
00334
00335 $this->getTemplateFile("edit","exc");
00336
00337
00338 $this->tpl->setVariable("TXT_TITLE", $this->lng->txt("title"));
00339 $this->tpl->setVariable("TXT_DESC", $this->lng->txt("desc"));
00340 $this->tpl->setVariable("TXT_INSTRUCTION", $this->lng->txt("exc_instruction"));
00341 $this->tpl->setVariable("TXT_HEADER",$this->lng->txt("exc_edit_exercise"));
00342 $this->tpl->setVariable("FORMACTION", $this->ctrl->getFormAction($this));
00343 $this->tpl->setVariable("TXT_SAVE", $this->lng->txt("save"));
00344 $this->tpl->setVariable("TXT_REQUIRED_FLD", $this->lng->txt("required_field"));
00345 $this->tpl->setVariable("TXT_CANCEL",$this->lng->txt("cancel"));
00346 $this->tpl->setVariable("TXT_SUBMIT",$this->lng->txt("save"));
00347 $this->tpl->setVariable("TXT_EDIT_UNTIL",$this->lng->txt("exc_edit_until"));
00348
00349
00350
00351 $this->tpl->setVariable("TITLE",$title);
00352 $this->tpl->setVariable("DESC",$desc);
00353 $this->tpl->setVariable("INSTRUCTION",$instruction);
00354
00355
00356
00357
00358 $this->tpl->setVariable("TXT_HOUR",$this->lng->txt("time_h"));
00359 $this->tpl->setVariable("TXT_DAY",$this->lng->txt("time_d"));
00360 $this->tpl->setVariable("SELECT_HOUR",$this->__getDateSelect("hour",$hour));
00361 $this->tpl->setVariable("SELECT_MINUTES",$this->__getDateSelect("minutes",$minutes));
00362 $this->tpl->setVariable("SELECT_DAY",$this->__getDateSelect("day",$day));
00363 $this->tpl->setVariable("SELECT_MONTH",$this->__getDateSelect("month",$month));
00364 $this->tpl->setVariable("SELECT_YEAR",$this->__getDateSelect("year",$year));
00365
00366 $this->tpl->setVariable("CMD_SUBMIT","update");
00367 $this->tpl->setVariable("CMD_CANCEL","cancelEdit");
00368
00369
00370 if(count($files = $this->object->getFiles()))
00371 {
00372 foreach($files as $file)
00373 {
00374 $this->tpl->setCurrentBlock("FILE_ROW");
00375 $this->tpl->setVariable("ROW_FILE",$file["name"]);
00376 $this->tpl->setVariable("ROW_CHECKBOX",$this->lng->txt("exc_ask_delete")." ".
00377 ilUtil::formCheckbox(0,"delete_file[]",$file["name"]));
00378 $this->tpl->parseCurrentBlock();
00379 }
00380 $this->tpl->setCurrentBlock("FILE_DATA");
00381 $this->tpl->setVariable("TXT_FILES",$this->lng->txt("exc_files").":");
00382 $this->tpl->parseCurrentBlock();
00383 }
00384
00385 $this->tpl->setCurrentBlock("FILES");
00386 $this->tpl->setVariable("TXT_HEADER_FILE",$this->lng->txt("file_add"));
00387 $this->tpl->setVariable("TXT_FILE",$this->lng->txt("file"));
00388 $this->tpl->setVariable("TXT_UPLOAD",$this->lng->txt("upload"));
00389 $this->tpl->setVariable("FORMACTION_FILE", $this->ctrl->getFormAction($this));
00390 $this->tpl->setVariable("CMD_FILE_SUBMIT","uploadFile");
00391 $this->tpl->parseCurrentBlock();
00392
00393 }
00394
00395 function updateObject()
00396 {
00397 global $rbacsystem;
00398
00399 if (!$rbacsystem->checkAccess("write", $_GET["ref_id"]))
00400 {
00401 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00402 }
00403
00404 $this->object->setInstruction(ilUtil::stripSlashes($_POST["Fobject"]["instruction"]));
00405 $this->object->setDate($_POST["d_hour"],$_POST["d_minutes"],$_POST["d_day"],$_POST["d_month"],$_POST["d_year"]);
00406 if($_POST["delete_file"])
00407 {
00408 $this->object->deleteFiles($_POST["delete_file"]);
00409 }
00410 $this->object->setTitle(ilUtil::stripSlashes($_POST["Fobject"]["title"]));
00411 $this->object->setDescription(ilUtil::stripSlashes($_POST["Fobject"]["desc"]));
00412 $this->update = $this->object->update();
00413
00414 sendInfo($this->lng->txt("msg_obj_modified"),true);
00415
00416 $this->ctrl->redirect($this, "edit");
00417
00418 }
00419
00420 function cancelEditObject()
00421 {
00422 sendInfo($this->lng->txt("msg_cancel"),true);
00423 $this->ctrl->redirect($this, "view");
00424 }
00425
00426 function uploadFileObject()
00427 {
00428 global $rbacsystem;
00429 if (!$rbacsystem->checkAccess("write", $_GET["ref_id"]))
00430 {
00431 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00432 }
00433 if(!$this->object->addUploadedFile($_FILES["file"]))
00434 {
00435 sendInfo($this->lng->txt("exc_upload_error"),true);
00436 }
00437 $this->ctrl->redirect($this, "edit");
00438 }
00439
00440 function updateMembersObject()
00441 {
00442 global $rbacsystem;
00443
00444 if (!$rbacsystem->checkAccess("write", $this->ref_id))
00445 {
00446 $this->ilias->raiseError($this->lng->txt("msg_no_perm_write"),$this->ilias->error_obj->MESSAGE);
00447 }
00448
00449 if ($_POST["downloadReturned"])
00450 {
00451 $this->object->members_obj->deliverReturnedFiles(key($_POST["downloadReturned"]));
00452 exit;
00453 }
00454 else
00455 {
00456 switch($_POST["action"])
00457 {
00458 case "save_status":
00459 $this->__saveStatus();
00460 sendInfo($this->lng->txt("exc_status_saved"),true);
00461 break;
00462 case "send_member":
00463 if(!count($_POST["member"]))
00464 {
00465 sendInfo($this->lng->txt("select_one"),true);
00466 }
00467 else
00468 {
00469 $this->object->send($_POST["member"]);
00470 sendInfo($this->lng->txt("exc_sent"),true);
00471 }
00472 break;
00473 case "delete_member":
00474 $this->__deassignMembers();
00475 break;
00476 }
00477 }
00478 $this->ctrl->redirect($this, "members");
00479 }
00480
00481 function membersObject()
00482 {
00483 global $rbacsystem;
00484
00485 if (!$rbacsystem->checkAccess("write", $_GET["ref_id"]))
00486 {
00487 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00488 }
00489
00490
00491 $this->tpl->addBlockfile("BUTTONS", "buttons", "tpl.buttons.html");
00492
00493
00494 $this->tpl->setCurrentBlock("btn_cell");
00495 $this->tpl->setVariable("BTN_LINK", $this->ctrl->getLinkTarget($this, 'newmembers'));
00496 $this->tpl->setVariable("BTN_TXT",$this->lng->txt("add_member"));
00497 $this->tpl->parseCurrentBlock();
00498
00499 $this->getTemplateFile("members","exc");
00500
00501 if(!count($this->object->members_obj->getMembers()))
00502 {
00503 sendInfo($this->lng->txt("exc_no_members_assigned"));
00504 }
00505 else
00506 {
00507 $counter = 0;
00508 foreach($this->object->members_obj->getMembers() as $member_id)
00509 {
00510 include_once "./classes/class.ilObjectFactory.php";
00511
00512 if(!($tmp_obj = ilObjectFactory::getInstanceByObjId($member_id,false)))
00513 {
00514 continue;
00515 }
00516 $f_result[$counter][] = ilUtil::formCheckbox(0,"member[$member_id]",1);
00517 $f_result[$counter][] = $tmp_obj->getLogin();
00518 $f_result[$counter][] = $tmp_obj->getFirstname();
00519 $f_result[$counter][] = $tmp_obj->getLastname();
00520 $f_result[$counter][] = array("notice[$member_id]",
00521 ilUtil::prepareFormOutput($this->object->members_obj->getNoticeByMember($member_id)));
00522 if ($this->object->members_obj->hasReturned($member_id))
00523 {
00524 $f_result[$counter][] = "<input class=\"submit\" type=\"submit\" name=\"downloadReturned[$member_id]\" value=\"" .
00525 $this->lng->txt("download") . "\" />";
00526 }
00527 else
00528 {
00529 $f_result[$counter][] = "";
00530 }
00531 $f_result[$counter][] = ilUtil::formCheckbox($this->object->members_obj->getStatusReturnedByMember($member_id),
00532 "returned[$member_id]",1);
00533 $f_result[$counter][] = ilUtil::formCheckbox($this->object->members_obj->getStatusSolvedByMember($member_id),
00534 "solved[$member_id]",1);
00535 $f_result[$counter][] = ilUtil::formCheckbox($this->object->members_obj->getStatusSentByMember($member_id),
00536 "sent[$member_id]",1);
00537
00538 $member_ids[] = $member_id;
00539
00540 unset($tmp_obj);
00541 ++$counter;
00542 }
00543 $this->__showMembersTableContent($this->__showMembersTable($f_result,$member_ids));
00544
00545
00546 if(count($this->object->members_obj->getAllDeliveredFiles()))
00547 {
00548 $this->tpl->addBlockFile("SPECIAL_BUTTONS", "special_buttons", "tpl.exc_download_all.html");
00549 $this->tpl->setCurrentBlock("download_all");
00550 $this->tpl->setVariable("BUTTON_DOWNLOAD_ALL", $this->lng->txt("download_all_returned_files"));
00551 $this->tpl->setVariable("FORMACTION",
00552 $this->getFormAction("downloadAll", "exercise.php?cmd=downloadAll&ref_id=".$this->ref_id));
00553 $this->tpl->parseCurrentBlock();
00554 }
00555 }
00556 }
00557
00558 function downloadAllObject()
00559 {
00560 $members = array();
00561
00562 foreach($this->object->members_obj->getMembers() as $member_id)
00563 {
00564 $tmp_obj =& ilObjectFactory::getInstanceByObjId($member_id);
00565 $members[$member_id] = $tmp_obj->getFirstname() . " " . $tmp_obj->getLastname();
00566 unset($tmp_obj);
00567 }
00568
00569 $this->object->file_obj->downloadAllDeliveredFiles($members);
00570 }
00571
00572 function newMembersObject()
00573 {
00574 global $rbacsystem;
00575
00576 if (!$rbacsystem->checkAccess("write", $_GET["ref_id"]))
00577 {
00578 $this->ilias->raiseError($this->lng->txt("permission_denied"),$this->ilias->error_obj->MESSAGE);
00579 }
00580
00581
00582 if(isset($_POST["cancel"]))
00583 {
00584 $this->ctrl->redirect($this, "members");
00585 }
00586
00587 if(isset($_POST["select"]))
00588 {
00589 if(is_array($_POST["id"]))
00590 {
00591 if(!$this->object->members_obj->assignMembers($_POST["id"]))
00592 {
00593 sendInfo($this->lng->txt("exc_members_already_assigned"),true);
00594 }
00595 else
00596 {
00597 sendInfo($this->lng->txt("exc_members_assigned"),true);
00598 }
00599 $this->ctrl->redirect($this, "members");
00600 }
00601 }
00602 $show_search = true;
00603
00604 $this->getTemplateFile("add_member","exc");
00605 $this->tpl->setVariable("F_ACTION",$this->ctrl->getLinkTarget($this, "newMembers"));
00606
00607 if($_POST["search_str"])
00608 {
00609 $result = $this->__searchMembers(ilUtil::stripSlashes($_POST["search_str"]),$_POST["search_for"]);
00610
00611 switch(count($result))
00612 {
00613 case 0:
00614
00615 sendInfo($this->lng->txt("cont_no_object_found"));
00616 break;
00617
00618 case 1:
00619 $result = $this->__getMembersOfObject($result,$_POST["search_for"]);
00620 $this->__showMembersSelect($result);
00621 $show_search = false;
00622 break;
00623
00624 default:
00625 if($_POST["search_for"] == 'usr')
00626 {
00627 $this->__showMembersSelect($result);
00628 }
00629 else
00630 {
00631 $this->__showObjectSelect($result,$_POST["search_for"]);
00632 }
00633 $show_search = false;
00634 break;
00635 }
00636 }
00637 if($_POST["obj_select"])
00638 {
00639 if(count($_POST["obj"]))
00640 {
00641 $result = $this->__getMembersOfObject($_POST["obj"],"grp");
00642 $this->__showMembersSelect($result);
00643 $show_search = false;
00644 }
00645 }
00646
00647
00648 if($show_search)
00649 {
00650 $this->lng->loadLanguageModule("content");
00651 $this->lng->loadLanguageModule("search");
00652
00653 $search_for = array("usr" => $this->lng->txt("exc_users"),
00654 "grp" => $this->lng->txt("exc_groups"));
00655 # "role" => $this->lng->txt("!!Rollen"));
00656
00657 $counter = 0;
00658 foreach($search_for as $key => $value)
00659 {
00660 $this->tpl->setCurrentBlock("USR_SEARCH_ROW");
00661 $this->tpl->setVariable("SEARCH_ROW_CHECK",ilUtil::formRadioButton(++$counter == 1 ? 1 : 0,"search_for",$key));
00662 $this->tpl->setVariable("SEARCH_ROW_TXT",$value);
00663 $this->tpl->parseCurrentBlock();
00664 }
00665 $this->tpl->setVariable("SEARCH_ASSIGN_USR",$this->lng->txt("add_member"));
00666 $this->tpl->setVariable("SEARCH_SEARCH_TERM",$this->lng->txt("search_search_term"));
00667 $this->tpl->setVariable("SEARCH_FOR",$this->lng->txt("exc_search_for"));
00668 $this->tpl->setVariable("BTN1_VALUE",$this->lng->txt("search"));
00669 $this->tpl->setVariable("BTN2_VALUE",$this->lng->txt("cancel"));
00670 }
00671 }
00672
00673
00674 function __showMembersTableContent($a_data)
00675 {
00676
00677 $counter = 0;
00678 foreach($a_data as $row)
00679 {
00680 foreach($row as $key => $column)
00681 {
00682 switch($key)
00683 {
00684 case 4:
00685 $this->tpl->setCurrentBlock("form_input");
00686 $this->tpl->setVariable("ROW_INPUT_NAME",$column[0]);
00687 $this->tpl->setVariable("ROW_INPUT_VALUE",$column[1]);
00688 $this->tpl->parseCurrentBlock();
00689 break;
00690
00691 default:
00692 $this->tpl->setCurrentBlock("text");
00693 $this->tpl->setVariable("ROW_TEXT",$column);
00694 $this->tpl->parseCurrentBlock();
00695
00696 break;
00697 }
00698 $this->tpl->setCurrentBlock("table_cell");
00699 $this->tpl->parseCurrentBlock();
00700 }
00701 $this->tpl->setCurrentBlock("row");
00702 $this->tpl->setVariable("ROW_CSS",ilUtil::switchColor(++$counter,"tblrow1","tblrow2"));
00703 $this->tpl->parseCurrentBlock();
00704 }
00705 $this->tpl->setCurrentBlock("tbl_content");
00706 $this->tpl->parseCurrentBlock();
00707
00708 return true;
00709 }
00710
00711 function __getMembersOfObject($a_result,$a_type)
00712 {
00713
00714 switch($a_type)
00715 {
00716 case "usr":
00717 return $a_result;
00718
00719 case "grp":
00720 include_once "./classes/class.ilObjGroup.php";
00721
00722 $all_members = array();
00723 foreach($a_result as $group)
00724 {
00725 $tmp_grp_obj = ilObjectFactory::getInstanceByRefId($group["id"]);
00726
00727 $members = $tmp_grp_obj->getGroupMemberIds();
00728 $all_members = array_merge($all_members,$members);
00729 }
00730
00731 $all_members = array_unique($all_members);
00732 foreach($all_members as $member)
00733 {
00734 $result[] = array("id" => $member);
00735 }
00736 return $result;
00737 }
00738 return true;
00739 }
00740
00741 function __showObjectSelect($a_result,$a_type)
00742 {
00743 include_once "./classes/class.ilObjectFactory.php";
00744
00745 foreach($a_result as $obj)
00746 {
00747 $tmp_obj =& ilObjectFactory::getInstanceByRefId($obj["id"]);
00748
00749 $this->tpl->setCurrentBlock("OBJ_SELECT_ROW");
00750 $this->tpl->setVariable("OBJ_ROW_TITLE",$tmp_obj->getTitle());
00751 $this->tpl->setVariable("OBJ_ROW_ID",$tmp_obj->getRefId());
00752 $this->tpl->setVariable("OBJ_ROW_DESCRIPTION",$tmp_obj->getDescription());
00753 $this->tpl->parseCurrentBlock();
00754
00755 unset($tmp_obj);
00756 }
00757 $this->tpl->setCurrentBlock("OBJ_SELECT");
00758 $this->tpl->setVariable("OBJ_SELECT_TITLE",$this->lng->txt("title"));
00759 $this->tpl->setVariable("OBJ_SELECT_DESCRIPTION",$this->lng->txt("description"));
00760
00761 $this->tpl->setVariable("OBJ_BTN1_VALUE",$this->lng->txt("select"));
00762 $this->tpl->setVariable("OBJ_BTN2_VALUE",$this->lng->txt("cancel"));
00763
00764 $this->tpl->parseCurrentBlock();
00765 }
00766
00767 function __showMembersSelect($a_result)
00768 {
00769 include_once "./classes/class.ilObjectFactory.php";
00770 include_once "./classes/class.ilUtil.php";
00771
00772 $ids = array();
00773
00774 foreach($a_result as $user)
00775 {
00776 array_push($ids, $user["id"]);
00777
00778 $tmp_obj =& ilObjectFactory::getInstanceByObjId($user["id"]);
00779
00780 $this->tpl->setCurrentBlock("USR_SELECT_ROW");
00781 $this->tpl->setVariable("ROW_LOGIN",$tmp_obj->getLogin());
00782 $this->tpl->setVariable("NAME_ID","id_".$tmp_obj->getId());
00783 $this->tpl->setVariable("ROW_ID",$tmp_obj->getId());
00784 $this->tpl->setVariable("ROW_FIRSTNAME",$tmp_obj->getFirstname());
00785 $this->tpl->setVariable("ROW_LASTNAME",$tmp_obj->getLastname());
00786 $this->tpl->parseCurrentBlock();
00787
00788 unset($tmp_obj);
00789 }
00790
00791 $this->tpl->setCurrentBlock("USR_SELECT");
00792 $this->tpl->setVariable("SELECT_LOGIN",$this->lng->txt("login"));
00793 $this->tpl->setVariable("SELECT_FIRSTNAME",$this->lng->txt("firstname"));
00794 $this->tpl->setVariable("SELECT_LASTNAME",$this->lng->txt("lastname"));
00795
00796 $this->tpl->setVariable("BTN1_VALUE",$this->lng->txt("assign"));
00797 $this->tpl->setVariable("BTN2_VALUE",$this->lng->txt("cancel"));
00798 $this->tpl->setVariable("JS_VARNAME","id");
00799 $this->tpl->setVariable("JS_ONCLICK",ilUtil::array_php2js($ids));
00800 $this->tpl->setVariable("TXT_CHECKALL",$this->lng->txt("check_all"));
00801 $this->tpl->setVariable("TXT_UNCHECKALL",$this->lng->txt("uncheck_all"));
00802
00803 $this->tpl->parseCurrentBlock();
00804 }
00805 function __searchMembers($a_search_str,$a_search_for)
00806 {
00807 include_once("./classes/class.ilSearch.php");
00808
00809 $this->lng->loadLanguageModule("content");
00810
00811 $search =& new ilSearch($_SESSION["AccountId"]);
00812 $search->setPerformUpdate(false);
00813 $search->setSearchString(ilUtil::stripSlashes($_POST["search_str"]));
00814 $search->setCombination("and");
00815 $search->setSearchFor(array(0 => $a_search_for));
00816 $search->setSearchType('new');
00817
00818 if($search->validate($message))
00819 {
00820 $search->performSearch();
00821 }
00822 else
00823 {
00824 sendInfo($message,true);
00825 $this->ctrl->redirect($this, "newMembers");
00826 }
00827 return $search->getResultByType($a_search_for);
00828 }
00829 function __deassignMembers()
00830 {
00831 if(is_array($_POST["member"]))
00832 {
00833 foreach($_POST["member"] as $usr_id => $member)
00834 {
00835 $this->object->members_obj->deassignMember($usr_id);
00836 }
00837 return true;
00838 }
00839 else
00840 {
00841 sendInfo($this->lng->txt("select_one"),true);
00842 return false;
00843 }
00844 }
00845
00846 function __saveStatus()
00847 {
00848 foreach($this->object->members_obj->getMembers() as $member)
00849 {
00850 if(!isset($_POST['notice'][$member]))
00851 {
00852 continue;
00853 }
00854 $this->object->members_obj->setNoticeForMember($member,ilUtil::stripSlashes($_POST["notice"][$member]));
00855 $this->object->members_obj->setStatusSolvedForMember($member,$_POST["solved"][$member] ? 1 : 0);
00856 $this->object->members_obj->setStatusSentForMember($member,$_POST["sent"][$member] ? 1 : 0);
00857 $this->object->members_obj->setStatusReturnedForMember($member,$_POST["returned"][$member] ? 1 : 0);
00858 }
00859 return true;
00860 }
00861
00862 function __showMembersTable($a_data,$a_member_ids)
00863 {
00864 global $ilUser;
00865
00866 $actions = array("save_status" => $this->lng->txt("exc_save_changes"),
00867 "send_member" => $this->lng->txt("exc_send_exercise"),
00868 "delete_member" => $this->lng->txt("exc_deassign_members"));
00869
00870 $this->tpl->addBlockFile("MEMBER_TABLE","member_table","tpl.table.html");
00871 $this->tpl->addBlockfile("TBL_CONTENT", "tbl_content", "tpl.exc_members_row.html");
00872
00873
00874
00875 $this->tpl->setCurrentBlock("tbl_form_header");
00876
00877 $this->tpl->setVariable("FORMACTION", $this->ctrl->getLinkTarget($this, "updateMembers"));
00878
00879 $this->tpl->parseCurrentBlock();
00880
00881
00882 $this->tpl->setCurrentBlock("tbl_action_row");
00883
00884
00885
00886 if (count($a_member_ids))
00887 {
00888
00889 $this->tpl->setCurrentBlock("tbl_action_toggle_checkboxes");
00890 $this->tpl->setVariable("JS_VARNAME","member");
00891 $this->tpl->setVariable("JS_ONCLICK",ilUtil::array_php2js($a_member_ids));
00892 $this->tpl->setVariable("TXT_CHECKALL", $this->lng->txt("check_all"));
00893 $this->tpl->setVariable("TXT_UNCHECKALL", $this->lng->txt("uncheck_all"));
00894 $this->tpl->parseCurrentBlock();
00895 }
00896
00897
00898
00899 $this->tpl->setVariable("COLUMN_COUNTS",6);
00900 $this->tpl->setVariable("IMG_ARROW", ilUtil::getImagePath("arrow_downright.gif"));
00901
00902 $this->tpl->setCurrentBlock("tbl_action_select");
00903 $this->tpl->setVariable("SELECT_ACTION",ilUtil::formSelect(1,"action",$actions,false,true));
00904 $this->tpl->setVariable("BTN_NAME","execute");
00905 $this->tpl->setVariable("BTN_VALUE",$this->lng->txt("execute"));
00906 $this->tpl->parseCurrentBlock();
00907
00908 $this->tpl->setCurrentBlock("tbl_action_row");
00909 $this->tpl->setVariable("COLUMN_COUNTS",9);
00910 $this->tpl->setVariable("TPLPATH",$this->tpl->tplPath);
00911 $this->tpl->parseCurrentBlock();
00912
00913 include_once "./classes/class.ilTableGUI.php";
00914
00915 $tbl = new ilTableGUI();
00916
00917 $tbl->setTitle($this->lng->txt("exc_header_members"),"icon_usr.gif",$this->lng->txt("exc_header_members"));
00918 $tbl->setHeaderNames(array('',$this->lng->txt("login"),
00919 $this->lng->txt("firstname"),
00920 $this->lng->txt("lastname"),
00921 $this->lng->txt("exc_notices"),
00922 $this->lng->txt("exc_files_returned"),
00923 $this->lng->txt("exc_status_returned"),
00924 $this->lng->txt("exc_status_solved"),
00925 $this->lng->txt("sent")));
00926 $tbl->setHeaderVars(array("","login","firstname","lastname","","","","",""),
00927 array("ref_id" => $this->object->getRefId(),
00928 "cmd" => "members"));
00929 $tbl->setColumnWidth(array("5%","10%","10%","10%","30%","15%","7%","7%","7%"));
00930 $tbl->disable('content');
00931
00932 $tbl->setOrderColumn($_GET["sort_by"]);
00933 $tbl->setOrderDirection($_GET["sort_order"]);
00934 $tbl->setLimit($ilUser->getPref('hits_per_page'));
00935 $tbl->setMaxCount(count($a_data));
00936 $tbl->setOffset($_GET["offset"] ? $_GET["offset"] : 0);
00937 $tbl->setFooter("tblfooter",$this->lng->txt("previous"),$this->lng->txt("next"));
00938 $tbl->setData($a_data);
00939 $tbl->sortData();
00940 $tbl->render();
00941
00942 return $tbl->getData();
00943 }
00944
00945 function __getDateSelect($a_type,$a_selected)
00946 {
00947 switch($a_type)
00948 {
00949 case "hour":
00950 for($i=0;$i<24;$i++)
00951 {
00952 $hours[$i] = $i < 10 ? "0".$i : $i;
00953 }
00954 return ilUtil::formSelect($a_selected,"d_hour",$hours,false,true);
00955
00956 case "minutes":
00957 for($i=0;$i<60;$i++)
00958 {
00959 $minutes[$i] = $i < 10 ? "0".$i : $i;
00960 }
00961 return ilUtil::formSelect($a_selected,"d_minutes",$minutes,false,true);
00962
00963 case "day":
00964 for($i=1;$i<32;$i++)
00965 {
00966 $days[$i] = $i < 10 ? "0".$i : $i;
00967 }
00968 return ilUtil::formSelect($a_selected,"d_day",$days,false,true);
00969
00970 case "month":
00971 for($i=1;$i<13;$i++)
00972 {
00973 $month[$i] = $i < 10 ? "0".$i : $i;
00974 }
00975 return ilUtil::formSelect($a_selected,"d_month",$month,false,true);
00976
00977 case "year":
00978 for($i = date("Y",time());$i < date("Y",time()) + 3;++$i)
00979 {
00980 $year[$i] = $i;
00981 }
00982 return ilUtil::formSelect($a_selected,"d_year",$year,false,true);
00983 }
00984 }
00985
00986 function __filterAssignedUsers($a_result)
00987 {
00988 foreach($a_result as $user)
00989 {
00990 if(!$this->object->members_obj->isAssigned($user["id"]))
00991 {
00992 $filtered[] = $user;
00993 }
00994 }
00995 return $filtered ? $filtered : array();
00996 }
00997
01003 function getTabs(&$tabs_gui)
01004 {
01005 global $rbacsystem;
01006
01007
01008
01009
01010
01011 $tabs_gui->addTarget("view",
01012 $this->ctrl->getLinkTarget($this, 'view'),
01013 array("view",""), "");
01014
01015
01016 if ($rbacsystem->checkAccess("write", $this->ref_id))
01017 {
01018 $tabs_gui->addTarget("edit_properties",
01019 $this->ctrl->getLinkTarget($this, 'edit'),
01020 "edit", "");
01021 }
01022
01023
01024 $tabs_gui->addTarget("deliver",
01025 $this->ctrl->getLinkTarget($this, 'deliver'),
01026 array("deliver", "deliverFile"), "");
01027
01028
01029 if ($rbacsystem->checkAccess("write", $this->ref_id))
01030 {
01031 $tabs_gui->addTarget("show_members",
01032 $this->ctrl->getLinkTarget($this, 'members'),
01033 array("members", "newMembers", "newmembers"), "");
01034
01035
01036
01037
01038
01039
01040
01041 }
01042
01043
01044 if ($rbacsystem->checkAccess("edit_permission", $this->ref_id))
01045 {
01046 $tabs_gui->addTarget("perm_settings",
01047 $this->ctrl->getLinkTargetByClass(array(get_class($this),'ilpermissiongui'), "perm"), array("perm","info","owner"), 'ilpermissiongui');
01048 }
01049 }
01050
01051 function &executeCommand()
01052 {
01053 $next_class = $this->ctrl->getNextClass($this);
01054 $cmd = $this->ctrl->getCmd();
01055 $this->prepareOutput();
01056
01057
01058 switch($next_class)
01059 {
01060 case 'ilpermissiongui':
01061 include_once("./classes/class.ilPermissionGUI.php");
01062 $perm_gui =& new ilPermissionGUI($this);
01063 $ret =& $this->ctrl->forwardCommand($perm_gui);
01064 break;
01065
01066 default:
01067
01068 if(!$cmd)
01069 {
01070 $cmd = "view";
01071 }
01072
01073 $cmd .= "Object";
01074
01075 $this->$cmd();
01076
01077 break;
01078 }
01079
01080 return true;
01081 }
01082 }
01083 ?>