4 include_once(
"./Services/Table/classes/class.ilTable2GUI.php");
5 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
6 include_once(
"./Modules/Exercise/classes/class.ilExAssignmentMemberStatus.php");
7 include_once(
"./Modules/Exercise/classes/class.ilExAssignmentTeam.php");
8 include_once(
"./Modules/Exercise/classes/class.ilExSubmission.php");
31 function __construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_ass)
36 $this->exc_id = $this->exc->getId();
38 $this->ass_id = $this->ass->getId();
39 $this->
setId(
"exc_mem_".$this->ass_id);
42 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
44 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
46 parent::__construct($a_parent_obj, $a_parent_cmd);
48 $this->
setTitle($lng->txt(
"exc_assignment").
": ".$this->ass->getTitle());
52 $data = $this->ass->getMemberListData();
55 if($this->ass->hasTeam())
62 foreach(
$data as $item)
64 $team_id = $team_map[$item[
"usr_id"]];
72 $team_id =
"nty".$item[
"usr_id"];
75 if(!isset($tmp[$team_id]))
77 $tmp[$team_id] = $item;
80 $tmp[$team_id][
"team"][$item[
"usr_id"]] = $item[
"name"];
81 $tmp[$team_id][
"team_id"] = $team_id;
91 if($ass_obj->getPeerReview())
93 include_once
'./Services/Rating/classes/class.ilRatingGUI.php';
101 if(!$this->ass->hasTeam())
104 if(in_array(
"image", $this->selected))
106 $this->
addColumn($this->lng->txt(
"image"),
"",
"1");
108 $this->
addColumn($this->lng->txt(
"name"),
"name");
109 if(in_array(
"login", $this->selected))
111 $this->
addColumn($this->lng->txt(
"login"),
"login");
116 $this->
addColumn($this->lng->txt(
"exc_team"));
122 $this->
addColumn($this->lng->txt(
"exc_exercise_sent"),
"sent_time");
124 $this->
addColumn($this->lng->txt(
"exc_submission"),
"submission");
125 $this->
addColumn($this->lng->txt(
"exc_grading"),
"solved_time");
126 $this->
addColumn($this->lng->txt(
"feedback"),
"feedback_time");
133 $this->
setRowTemplate(
"tpl.exc_members_row.html",
"Modules/Exercise");
138 $this->
addMultiCommand(
"saveStatusSelected", $lng->txt(
"exc_save_selected"));
139 $this->
addMultiCommand(
"redirectFeedbackMail", $lng->txt(
"exc_send_mail"));
140 $this->
addMultiCommand(
"sendMembers", $lng->txt(
"exc_send_assignment"));
142 if($this->ass->hasTeam())
144 $this->
addMultiCommand(
"createTeams", $lng->txt(
"exc_team_multi_create"));
145 $this->
addMultiCommand(
"dissolveTeams", $lng->txt(
"exc_team_multi_dissolve"));
148 $this->
addMultiCommand(
"confirmDeassignMembers", $lng->txt(
"exc_deassign_members"));
152 include_once
"Services/Form/classes/class.ilPropertyFormGUI.php";
153 include_once
"Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php";
154 $this->overlay_tpl =
new ilTemplate(
"tpl.exc_learner_comment_overlay.html",
true,
true,
"Modules/Exercise");
162 "txt" => $this->lng->txt(
"image"),
167 "txt" => $this->lng->txt(
"login"),
181 $ilCtrl->setParameter($this->parent_obj,
"ass_id", $this->ass_id);
182 $ilCtrl->setParameter($this->parent_obj,
"member_id", $member[
"usr_id"]);
184 include_once
"./Services/Object/classes/class.ilObjectFactory.php";
185 $member_id = $member[
"usr_id"];
192 $has_no_team_yet = (substr($member[
"team_id"], 0, 3) ==
"nty");
193 $member_status = $this->ass->getMemberStatus($member_id);
196 $this->tpl->setVariable(
"VAL_CHKBOX",
198 $this->tpl->setVariable(
"VAL_ID", $member_id);
200 if(!$has_no_team_yet)
205 if ($member_status->getSent())
207 $this->tpl->setCurrentBlock(
"mail_sent");
208 if (($st = $member_status->getSentTime()) > 0)
210 $this->tpl->setVariable(
"TXT_MAIL_SENT",
211 sprintf($lng->txt(
"exc_sent_at"),
216 $this->tpl->setVariable(
"TXT_MAIL_SENT",
219 $this->tpl->parseCurrentBlock();
223 $this->tpl->setCurrentBlock(
"mail_sent");
224 $this->tpl->setVariable(
"TXT_MAIL_SENT",
226 $this->tpl->parseCurrentBlock();
231 if(!isset($member[
"team"]))
237 if(!$has_no_team_yet)
239 $member_team = $this->teams[$member[
"team_id"]];
246 $submission =
new ilExSubmission($this->ass, $member_id, $member_team);
248 $file_info = $submission->getDownloadedFilesInfoForTableGUIS($this->parent_obj, $this->parent_cmd);
251 if(!isset($member[
"team"]))
253 $this->tpl->setVariable(
"TXT_NAME",
256 if(in_array(
"login", $this->selected))
258 $this->tpl->setVariable(
"TXT_LOGIN",
259 "[".$member[
"login"].
"]");
262 if(in_array(
"image", $this->selected))
265 $this->tpl->setVariable(
"USR_IMAGE",
266 $mem_obj->getPersonalPicturePath(
"xxsmall"));
267 $this->tpl->setVariable(
"USR_ALT", $lng->txt(
"personal_picture"));
271 if(!$ilAccess->checkAccessOfUser($member_id,
"read",
"", $this->exc->getRefId()) &&
272 is_array(
$info = $ilAccess->getInfo()))
274 $this->tpl->setCurrentBlock(
'access_warning');
275 $this->tpl->setVariable(
'PARENT_ACCESS',
$info[0][
"text"]);
276 $this->tpl->parseCurrentBlock();
282 asort($member[
"team"]);
283 foreach($member[
"team"] as $team_member_id => $team_member_name)
285 if(
sizeof($member[
"team"]) > 1)
287 $ilCtrl->setParameterByClass(
"ilExSubmissionTeamGUI",
"id", $team_member_id);
288 $url = $ilCtrl->getLinkTargetByClass(
"ilExSubmissionTeamGUI",
"confirmRemoveTeamMember");
289 $ilCtrl->setParameterByClass(
"ilExSubmissionTeamGUI",
"id",
"");
291 include_once
"Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php";
293 $this->tpl->setCurrentBlock(
"team_member_removal_bl");
294 $this->tpl->setVariable(
"URL_TEAM_MEMBER_REMOVAL",
$url);
295 $this->tpl->setVariable(
"TXT_TEAM_MEMBER_REMOVAL",
297 $this->tpl->parseCurrentBlock();
301 if(!$ilAccess->checkAccessOfUser($team_member_id,
"read",
"", $this->exc->getRefId()) &&
302 is_array(
$info = $ilAccess->getInfo()))
304 $this->tpl->setCurrentBlock(
'team_access_warning');
305 $this->tpl->setVariable(
'TEAM_PARENT_ACCESS',
$info[0][
"text"]);
306 $this->tpl->parseCurrentBlock();
309 $this->tpl->setCurrentBlock(
"team_member");
310 $this->tpl->setVariable(
"TXT_MEMBER_NAME", $team_member_name);
311 $this->tpl->parseCurrentBlock();
314 if(!$has_no_team_yet)
316 $this->tpl->setCurrentBlock(
"team_log");
317 $this->tpl->setVariable(
"HREF_LOG",
318 $ilCtrl->getLinkTargetByClass(
"ilExSubmissionTeamGUI",
"showTeamLog"));
319 $this->tpl->setVariable(
"TXT_LOG", $lng->txt(
"exc_team_log"));
320 $this->tpl->parseCurrentBlock();
325 $this->tpl->setCurrentBlock(
"team_info");
326 $this->tpl->setVariable(
"TXT_TEAM_INFO", $lng->txt(
"exc_no_team_yet"));
334 if($file_info[
"files"][
"count"])
336 $this->tpl->setVariable(
"TEAM_FILES_INFO",
"<br />".
337 $file_info[
"files"][
"txt"].
": ".
338 $file_info[
"files"][
"count"]);
340 $this->tpl->parseCurrentBlock();
344 if(!$has_no_team_yet)
346 $this->tpl->setVariable(
"VAL_LAST_SUBMISSION", $file_info[
"last_submission"][
"value"]);
347 $this->tpl->setVariable(
"TXT_LAST_SUBMISSION", $file_info[
"last_submission"][
"txt"]);
349 $this->tpl->setVariable(
"TXT_SUBMITTED_FILES", $file_info[
"files"][
"txt"]);
350 $this->tpl->setVariable(
"VAL_SUBMITTED_FILES", $file_info[
"files"][
"count"]);
352 if($file_info[
"files"][
"download_url"])
354 $this->tpl->setCurrentBlock(
"download_link");
355 $this->tpl->setVariable(
"LINK_DOWNLOAD", $file_info[
"files"][
"download_url"]);
356 $this->tpl->setVariable(
"TXT_DOWNLOAD", $file_info[
"files"][
"download_txt"]);
357 $this->tpl->parseCurrentBlock();
360 if($file_info[
"files"][
"download_new_url"])
362 $this->tpl->setCurrentBlock(
"download_link");
363 $this->tpl->setVariable(
"LINK_NEW_DOWNLOAD", $file_info[
"files"][
"download_new_url"]);
364 $this->tpl->setVariable(
"TXT_NEW_DOWNLOAD", $file_info[
"files"][
"download_new_txt"]);
365 $this->tpl->parseCurrentBlock();
369 $this->tpl->setVariable(
"TXT_NOTE", $lng->txt(
"exc_note_for_tutor"));
370 $this->tpl->setVariable(
"NAME_NOTE",
371 "notice[$member_id]");
372 $this->tpl->setVariable(
"VAL_NOTE",
378 $lcomment_value = $member_status->getComment();
380 $overlay_id =
"excasscomm_".$this->ass_id.
"_".$member_id;
381 $overlay_trigger_id = $overlay_id.
"_tr";
383 $overlay->setAnchor($overlay_trigger_id);
384 $overlay->setTrigger($overlay_trigger_id,
"click", $overlay_trigger_id);
387 $this->tpl->setVariable(
"LCOMMENT_ID", $overlay_id.
"_snip");
388 $this->tpl->setVariable(
"LCOMMENT_SNIPPET",
ilUtil::shortenText($lcomment_value, 25,
true));
389 $this->tpl->setVariable(
"COMMENT_OVERLAY_TRIGGER_ID", $overlay_trigger_id);
390 $this->tpl->setVariable(
"COMMENT_OVERLAY_TRIGGER_TEXT", $lng->txt(
"exc_comment_for_learner_edit"));
393 $lcomment_form->setId($overlay_id);
394 $lcomment_form->setPreventDoubleSubmission(
false);
396 $lcomment =
new ilTextAreaInputGUI($lng->txt(
"exc_comment_for_learner"),
"lcomment_".$this->ass_id.
"_".$member_id);
397 $lcomment->
setInfo($lng->txt(
"exc_comment_for_learner_info"));
398 $lcomment->setValue($lcomment_value);
399 $lcomment->setCols(45);
400 $lcomment->setRows(10);
401 $lcomment_form->addItem($lcomment);
403 $lcomment_form->addCommandButton(
"save", $lng->txt(
"save"));
406 $this->overlay_tpl->setCurrentBlock(
"overlay_bl");
407 $this->overlay_tpl->setVariable(
"COMMENT_OVERLAY_ID", $overlay_id);
408 $this->overlay_tpl->setVariable(
"COMMENT_OVERLAY_FORM", $lcomment_form->getHTML());
409 $this->overlay_tpl->parseCurrentBlock();
411 $status = $member_status->getStatus();
412 $this->tpl->setVariable(
"SEL_".strtoupper($status),
' selected="selected" ');
413 $this->tpl->setVariable(
"TXT_NOTGRADED", $lng->txt(
"exc_notgraded"));
414 $this->tpl->setVariable(
"TXT_PASSED", $lng->txt(
"exc_passed"));
415 $this->tpl->setVariable(
"TXT_FAILED", $lng->txt(
"exc_failed"));
416 if (($sd = $member_status->getStatusTime()) > 0)
418 $this->tpl->setCurrentBlock(
"status_date");
419 $this->tpl->setVariable(
"TXT_LAST_CHANGE", $lng->txt(
"last_change"));
420 $this->tpl->setVariable(
'VAL_STATUS_DATE',
422 $this->tpl->parseCurrentBlock();
424 $pic = $member_status->getStatusIcon();
426 $this->tpl->setVariable(
"ALT_STATUS", $lng->txt(
"exc_".$status));
429 $this->tpl->setVariable(
"TXT_MARK", $lng->txt(
"exc_mark"));
430 $this->tpl->setVariable(
"NAME_MARK",
432 $mark = $member_status->getMark();
436 if (($ft = $member_status->getFeedbackTime()) > 0)
438 $this->tpl->setCurrentBlock(
"feedback_date");
439 $this->tpl->setVariable(
"TXT_FEEDBACK_MAIL_SENT",
440 sprintf($lng->txt(
"exc_sent_at"),
442 $this->tpl->parseCurrentBlock();
446 $this->tpl->setVariable(
"LINK_FEEDBACK",
447 $ilCtrl->getLinkTarget($this->parent_obj,
"redirectFeedbackMail"));
448 $this->tpl->setVariable(
"TXT_FEEDBACK",
449 $lng->txt(
"exc_send_mail"));
452 $cnt_files = $this->storage->countFeedbackFiles($submission->getFeedbackId());
453 $this->tpl->setVariable(
"LINK_FILE_FEEDBACK",
454 $ilCtrl->getLinkTargetByClass(
"ilfilesystemgui",
"listFiles"));
457 $this->tpl->setVariable(
"TXT_FILE_FEEDBACK",
458 $lng->txt(
"exc_add_feedback_file"));
462 $this->tpl->setVariable(
"TXT_FILE_FEEDBACK",
463 $lng->txt(
"exc_fb_files").
" (".$cnt_files.
")");
467 if($peer_review = $submission->getPeerReview())
470 $given = $peer_review->countGivenFeedback(
true, $member_id);
471 $received =
sizeof($peer_review->getPeerReviewsByPeerId($member_id,
true));
473 $this->tpl->setCurrentBlock(
"peer_review_bl");
475 $this->tpl->setVariable(
"LINK_PEER_REVIEW_GIVEN",
476 $ilCtrl->getLinkTargetByClass(
"ilexpeerreviewgui",
"showGivenPeerReview"));
477 $this->tpl->setVariable(
"TXT_PEER_REVIEW_GIVEN",
478 $lng->txt(
"exc_peer_review_given").
" (".$given.
")");
480 $this->tpl->setVariable(
"TXT_PEER_REVIEW_RECEIVED",
481 $lng->txt(
"exc_peer_review_show").
" (".$received.
")");
482 $this->tpl->setVariable(
"LINK_PEER_REVIEW_RECEIVED",
483 $ilCtrl->getLinkTargetByClass(
"ilexpeerreviewgui",
"showReceivedPeerReview"));
492 $this->tpl->parseCurrentBlock();
495 $this->tpl->parseCurrentBlock();
499 $this->tpl->touchBlock(
"member_has_no_team_bl");
502 $ilCtrl->setParameter($this->parent_obj,
"ass_id", $this->ass_id);
503 $ilCtrl->setParameter($this->parent_obj,
"member_id",
"");
510 $url = $ilCtrl->getLinkTarget($this->
getParentObject(),
"saveCommentForLearners",
"",
true,
false);
511 $this->overlay_tpl->setVariable(
"AJAX_URL",
$url);
513 return parent::render().
514 $this->overlay_tpl->get();
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
static getAssignmentTeamMap($a_ass_id)
Get team structure for assignment.
static getInstancesFromMap($a_assignment_id)
static get($a_glyph, $a_text="")
Get glyph html.
Exercise assignment team.
static shortenText($a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
fillRow($member)
Fill table row.
getParentObject()
Get parent object.
static lookupAnyExerciseSent($a_ass_id)
Check whether exercise has been sent to any student per mail.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
special template class to simplify handling of ITX/PEAR
addMultiCommand($a_cmd, $a_text)
Add Command button.
This is a utility class for the yui overlays.
static formatDate(ilDateTime $date)
Format a date public.
getSelectedColumns()
Get selected columns.
getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
setRowTemplate($a_template, $a_template_dir="")
Set row template.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
This class represents a text area property in a property form.
setEnableHeader($a_enableheader)
Set Enable Header.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
setEnableTitle($a_enabletitle)
Set Enable Title.
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="", $a_tooltip_with_html=false)
Add a column to the header.
__construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_ass)
Constructor.
static formCheckbox($checked, $varname, $value, $disabled=false)
??? public