ILIAS  release_5-0 Revision 5.0.0-1144-gc4397b1f870
class.ilExerciseMemberTableGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4include_once("./Services/Table/classes/class.ilTable2GUI.php");
5include_once("./Modules/Exercise/classes/class.ilExAssignment.php");
6
16{
17 protected $exc;
18 protected $exc_id;
19 protected $ass_id;
20 protected $type;
21 protected $sent_col;
22 protected $peer_review;
23 protected $selected = array();
24
28 function __construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_ass_id)
29 {
30 global $ilCtrl, $lng;
31
32 $this->exc = $a_exc;
33 $this->exc_id = $this->exc->getId();
34 $this->setId("exc_mem_".$a_ass_id);
35
36
37 include_once("./Modules/Exercise/classes/class.ilFSStorageExercise.php");
38 $this->storage = new ilFSStorageExercise($this->exc_id, $a_ass_id);
39 include_once("./Modules/Exercise/classes/class.ilExAssignment.php");
40
41 $this->ass_id = $a_ass_id;
42
43 parent::__construct($a_parent_obj, $a_parent_cmd);
44
45 $this->setTitle($lng->txt("exc_assignment").": ".
47 $this->setTopCommands(true);
48 //$this->setLimit(9999);
49
50 $this->type = ilExAssignment::lookupType($this->ass_id);
51
52 $data = ilExAssignment::getMemberListData($this->exc_id, $this->ass_id);
53
54 // team upload? (1 row == 1 team)
55 if($this->type == ilExAssignment::TYPE_UPLOAD_TEAM)
56 {
57 $ass_obj = new ilExAssignment($this->ass_id);
58
59 $team_map = ilExAssignment::getAssignmentTeamMap($this->ass_id);
60 $tmp = array();
61
62 foreach($data as $item)
63 {
64 $team_id = $team_map[$item["usr_id"]];
65
66 if(!$team_id)
67 {
68 // #11058
69 // $team_id = $ass_obj->getTeamId($item["usr_id"], true);
70
71 // #11957
72 $team_id = "nty".$item["usr_id"];
73 }
74
75 if(!isset($tmp[$team_id]))
76 {
77 $tmp[$team_id] = $item;
78 }
79
80 $tmp[$team_id]["team"][$item["usr_id"]] = $item["name"];
81 $tmp[$team_id]["team_id"] = $team_id;
82 }
83
84 $data = $tmp;
85 unset($tmp);
86 }
87 else
88 {
89 // peer review / rating
90 $ass_obj = new ilExAssignment($this->ass_id);
91 $this->peer_review = $ass_obj->getPeerReview();
92 if($this->peer_review)
93 {
94 include_once './Services/Rating/classes/class.ilRatingGUI.php';
95 }
96 }
97
98 $this->setData($data);
99
100 $this->addColumn("", "", "1", true);
101
102 if($this->type != ilExAssignment::TYPE_UPLOAD_TEAM)
103 {
104 $this->selected = $this->getSelectedColumns();
105 if(in_array("image", $this->selected))
106 {
107 $this->addColumn($this->lng->txt("image"), "", "1");
108 }
109 $this->addColumn($this->lng->txt("name"), "name");
110 if(in_array("login", $this->selected))
111 {
112 $this->addColumn($this->lng->txt("login"), "login");
113 }
114 }
115 else
116 {
117 $this->addColumn($this->lng->txt("exc_team"));
118 }
119
120 $this->sent_col = ilExAssignment::lookupAnyExerciseSent($this->exc->getId(), $this->ass_id);
121 if ($this->sent_col)
122 {
123 $this->addColumn($this->lng->txt("exc_exercise_sent"), "sent_time");
124 }
125 $this->addColumn($this->lng->txt("exc_submission"), "submission");
126 $this->addColumn($this->lng->txt("exc_grading"), "solved_time");
127 $this->addColumn($this->lng->txt("feedback"), "feedback_time");
128
129 $this->setDefaultOrderField("name");
130 $this->setDefaultOrderDirection("asc");
131
132 $this->setEnableHeader(true);
133 $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
134 $this->setRowTemplate("tpl.exc_members_row.html", "Modules/Exercise");
135 //$this->disable("footer");
136 $this->setEnableTitle(true);
137 $this->setSelectAllCheckbox("member");
138
139 $this->addMultiCommand("saveStatus", $lng->txt("exc_save_selected"));
140 $this->addMultiCommand("redirectFeedbackMail", $lng->txt("exc_send_mail"));
141 $this->addMultiCommand("sendMembers", $lng->txt("exc_send_assignment"));
142 $this->addMultiCommand("confirmDeassignMembers", $lng->txt("exc_deassign_members"));
143
144 $this->addCommandButton("saveStatusAll", $lng->txt("exc_save_all"));
145
146 include_once "Services/Form/classes/class.ilPropertyFormGUI.php";
147 include_once "Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php";
148 $this->overlay_tpl = new ilTemplate("tpl.exc_learner_comment_overlay.html", true, true, "Modules/Exercise");
149 }
150
152 {
153 $columns = array();
154
155 $columns["image"] = array(
156 "txt" => $this->lng->txt("image"),
157 "default" => true
158 );
159
160 $columns["login"] = array(
161 "txt" => $this->lng->txt("login"),
162 "default" => true
163 );
164
165 return $columns;
166 }
167
171 protected function fillRow($member)
172 {
173 global $lng, $ilCtrl;
174
175 include_once "./Services/Object/classes/class.ilObjectFactory.php";
176 $member_id = $member["usr_id"];
177
178 if(!($mem_obj = ilObjectFactory::getInstanceByObjId($member_id,false)))
179 {
180 return;
181 }
182
183 $has_no_team_yet = (substr($member["team_id"], 0, 3) == "nty");
184
185 if(!$has_no_team_yet)
186 {
187 // mail sent
188 if ($this->sent_col)
189 {
190 if (ilExAssignment::lookupStatusSentOfUser($this->ass_id, $member_id))
191 {
192 $this->tpl->setCurrentBlock("mail_sent");
193 if (($st = ilExAssignment::lookupSentTimeOfUser($this->ass_id,
194 $member_id)) > 0)
195 {
196 $this->tpl->setVariable("TXT_MAIL_SENT",
197 sprintf($lng->txt("exc_sent_at"),
199 }
200 else
201 {
202 $this->tpl->setVariable("TXT_MAIL_SENT",
203 $lng->txt("sent"));
204 }
205 $this->tpl->parseCurrentBlock();
206 }
207 else
208 {
209 $this->tpl->setCurrentBlock("mail_sent");
210 $this->tpl->setVariable("TXT_MAIL_SENT",
211 "&nbsp;");
212 $this->tpl->parseCurrentBlock();
213 }
214 }
215
216 // checkbox
217 $this->tpl->setVariable("VAL_CHKBOX",
218 ilUtil::formCheckbox(0,"member[$member_id]",1));
219 $this->tpl->setVariable("VAL_ID",
220 $member_id);
221 }
222
223 $file_info = ilExAssignment::getDownloadedFilesInfoForTableGUIS($this->parent_obj, $this->exc_id, $this->type, $this->ass_id, $member_id, $this->parent_cmd);
224
225 // name and login
226 if(!isset($member["team"]))
227 {
228 $this->tpl->setVariable("TXT_NAME",
229 $member["name"]);
230
231 if(in_array("login", $this->selected))
232 {
233 $this->tpl->setVariable("TXT_LOGIN",
234 "[".$member["login"]."]");
235 }
236
237 if(in_array("image", $this->selected))
238 {
239 // image
240 $this->tpl->setVariable("USR_IMAGE",
241 $mem_obj->getPersonalPicturePath("xxsmall"));
242 $this->tpl->setVariable("USR_ALT", $lng->txt("personal_picture"));
243 }
244 }
245 // team upload
246 else
247 {
248 $this->tpl->setCurrentBlock("team_member");
249 asort($member["team"]);
250 foreach($member["team"] as $member_name) // #10749
251 {
252 $this->tpl->setVariable("TXT_MEMBER_NAME", $member_name);
253 $this->tpl->parseCurrentBlock();
254 }
255
256 if(!$has_no_team_yet)
257 {
258 $this->tpl->setCurrentBlock("team_log");
259 $ilCtrl->setParameter($this->parent_obj, "lmem", $member_id);
260 $this->tpl->setVariable("HREF_LOG",
261 $ilCtrl->getLinkTarget($this->parent_obj, "showTeamLog"));
262 $this->tpl->setVariable("TXT_LOG", $lng->txt("exc_team_log"));
263 $ilCtrl->setParameter($this->parent_obj, "lmem", "");
264 $this->tpl->parseCurrentBlock();
265 }
266 else
267 {
268 // #11957
269 $this->tpl->setCurrentBlock("team_info");
270 $this->tpl->setVariable("TXT_TEAM_INFO", $lng->txt("exc_no_team_yet"));
271 $this->tpl->setVariable("TXT_CREATE_TEAM", $lng->txt("exc_create_team"));
272
273 $ilCtrl->setParameter($this->parent_obj, "lmem", $member_id);
274 $this->tpl->setVariable("URL_CREATE_TEAM",
275 $ilCtrl->getLinkTarget($this->getParentObject(), "createSingleMemberTeam"));
276 $ilCtrl->setParameter($this->parent_obj, "lmem", "");
277
278 if($file_info["files"]["count"])
279 {
280 $this->tpl->setVariable("TEAM_FILES_INFO", "<br />".
281 $file_info["files"]["txt"].": ".
282 $file_info["files"]["count"]);
283 }
284 $this->tpl->parseCurrentBlock();
285 }
286 }
287
288 if(!$has_no_team_yet)
289 {
290 $this->tpl->setVariable("VAL_LAST_SUBMISSION", $file_info["last_submission"]["value"]);
291 $this->tpl->setVariable("TXT_LAST_SUBMISSION", $file_info["last_submission"]["txt"]);
292
293 $this->tpl->setVariable("TXT_SUBMITTED_FILES", $file_info["files"]["txt"]);
294 $this->tpl->setVariable("VAL_SUBMITTED_FILES", $file_info["files"]["count"]);
295
296 if($file_info["files"]["download_url"])
297 {
298 $this->tpl->setCurrentBlock("download_link");
299 $this->tpl->setVariable("LINK_DOWNLOAD", $file_info["files"]["download_url"]);
300 $this->tpl->setVariable("TXT_DOWNLOAD", $file_info["files"]["download_txt"]);
301 $this->tpl->parseCurrentBlock();
302 }
303
304 if($file_info["files"]["download_new_url"])
305 {
306 $this->tpl->setCurrentBlock("download_link");
307 $this->tpl->setVariable("LINK_NEW_DOWNLOAD", $file_info["files"]["download_new_url"]);
308 $this->tpl->setVariable("TXT_NEW_DOWNLOAD", $file_info["files"]["download_new_txt"]);
309 $this->tpl->parseCurrentBlock();
310 }
311
312 // note
313 $this->tpl->setVariable("TXT_NOTE", $lng->txt("exc_note_for_tutor"));
314 $this->tpl->setVariable("NAME_NOTE",
315 "notice[$member_id]");
316 $this->tpl->setVariable("VAL_NOTE",
318
319
320 // comment for learner
321
322 $lcomment_value = ilExAssignment::lookupCommentForUser($this->ass_id, $member_id);
323
324 $overlay_id = "excasscomm_".$this->ass_id."_".$member_id;
325 $overlay_trigger_id = $overlay_id."_tr";
326 $overlay = new ilOverlayGUI($overlay_id);
327 $overlay->setAnchor($overlay_trigger_id);
328 $overlay->setTrigger($overlay_trigger_id, "click", $overlay_trigger_id);
329 $overlay->add();
330
331 $this->tpl->setVariable("LCOMMENT_ID", $overlay_id."_snip");
332 $this->tpl->setVariable("LCOMMENT_SNIPPET", ilUtil::shortenText($lcomment_value, 25, true));
333 $this->tpl->setVariable("COMMENT_OVERLAY_TRIGGER_ID", $overlay_trigger_id);
334 $this->tpl->setVariable("COMMENT_OVERLAY_TRIGGER_TEXT", $lng->txt("exc_comment_for_learner_edit"));
335
336 $lcomment_form = new ilPropertyFormGUI();
337 $lcomment_form->setId($overlay_id);
338 $lcomment_form->setPreventDoubleSubmission(false);
339
340 $lcomment = new ilTextAreaInputGUI($lng->txt("exc_comment_for_learner"), "lcomment_".$this->ass_id."_".$member_id);
341 $lcomment->setInfo($lng->txt("exc_comment_for_learner_info"));
342 $lcomment->setValue($lcomment_value);
343 $lcomment->setCols(45);
344 $lcomment->setRows(10);
345 $lcomment_form->addItem($lcomment);
346
347 $lcomment_form->addCommandButton("save", $lng->txt("save"));
348 // $lcomment_form->addCommandButton("cancel", $lng->txt("cancel"));
349
350 $this->overlay_tpl->setCurrentBlock("overlay_bl");
351 $this->overlay_tpl->setVariable("COMMENT_OVERLAY_ID", $overlay_id);
352 $this->overlay_tpl->setVariable("COMMENT_OVERLAY_FORM", $lcomment_form->getHTML());
353 $this->overlay_tpl->parseCurrentBlock();
354
355
356 // solved
357 //$this->tpl->setVariable("CHKBOX_SOLVED",
358 // ilUtil::formCheckbox($this->exc->members_obj->getStatusByMember($member_id),"solved[$member_id]",1));
359 $status = ilExAssignment::lookupStatusOfUser($this->ass_id, $member_id);
360 $this->tpl->setVariable("SEL_".strtoupper($status), ' selected="selected" ');
361 $this->tpl->setVariable("TXT_NOTGRADED", $lng->txt("exc_notgraded"));
362 $this->tpl->setVariable("TXT_PASSED", $lng->txt("exc_passed"));
363 $this->tpl->setVariable("TXT_FAILED", $lng->txt("exc_failed"));
364 if (($sd = ilExAssignment::lookupStatusTimeOfUser($this->ass_id, $member_id)) > 0)
365 {
366 $this->tpl->setCurrentBlock("status_date");
367 $this->tpl->setVariable("TXT_LAST_CHANGE", $lng->txt("last_change"));
368 $this->tpl->setVariable('VAL_STATUS_DATE',
370 $this->tpl->parseCurrentBlock();
371 }
372 switch($status)
373 {
374 case "passed": $pic = "scorm/passed.svg"; break;
375 case "failed": $pic = "scorm/failed.svg"; break;
376 default: $pic = "scorm/not_attempted.svg"; break;
377 }
378 $this->tpl->setVariable("IMG_STATUS", ilUtil::getImagePath($pic));
379 $this->tpl->setVariable("ALT_STATUS", $lng->txt("exc_".$status));
380
381 // mark
382 $this->tpl->setVariable("TXT_MARK", $lng->txt("exc_mark"));
383 $this->tpl->setVariable("NAME_MARK",
384 "mark[$member_id]");
385 $mark = ilExAssignment::lookupMarkOfUser($this->ass_id, $member_id);
386 $this->tpl->setVariable("VAL_MARK",
388
389 // feedback
390 $ilCtrl->setParameter($this->parent_obj, "member_id", $member_id);
391 if (($ft = ilExAssignment::lookupFeedbackTimeOfUser($this->ass_id, $member_id)) > 0)
392 {
393 $this->tpl->setCurrentBlock("feedback_date");
394 $this->tpl->setVariable("TXT_FEEDBACK_MAIL_SENT",
395 sprintf($lng->txt("exc_sent_at"),
397 $this->tpl->parseCurrentBlock();
398 }
399
400 // feedback mail
401 $this->tpl->setVariable("LINK_FEEDBACK",
402 $ilCtrl->getLinkTarget($this->parent_obj, "redirectFeedbackMail"));
403 $this->tpl->setVariable("TXT_FEEDBACK",
404 $lng->txt("exc_send_mail"));
405
406 if($this->type == ilExAssignment::TYPE_UPLOAD_TEAM)
407 {
408 $feedback_id = "t".$member["team_id"];
409 }
410 else
411 {
412 $feedback_id = $member_id;
413 }
414
415 // file feedback
416 $cnt_files = $this->storage->countFeedbackFiles($feedback_id);
417 $ilCtrl->setParameter($this->parent_obj, "fsmode", "feedback");
418 $this->tpl->setVariable("LINK_FILE_FEEDBACK",
419 $ilCtrl->getLinkTargetByClass("ilfilesystemgui", "listFiles"));
420 if ($cnt_files == 0)
421 {
422 $this->tpl->setVariable("TXT_FILE_FEEDBACK",
423 $lng->txt("exc_add_feedback_file"));
424 }
425 else
426 {
427 $this->tpl->setVariable("TXT_FILE_FEEDBACK",
428 $lng->txt("exc_fb_files")." (".$cnt_files.")");
429 }
430
431 // peer review / rating
432 if(!isset($member["team"]) && $this->peer_review)
433 {
434 $this->tpl->setCurrentBlock("peer_review_bl");
435 $this->tpl->setVariable("TXT_PEER_REVIEW", $lng->txt("exc_peer_review_show"));
436
437 $ilCtrl->setParameter($this->parent_obj, "grd", 1);
438 $this->tpl->setVariable("LINK_PEER_REVIEW",
439 $ilCtrl->getLinkTarget($this->parent_obj, "showPersonalPeerReview"));
440 $ilCtrl->setParameter($this->parent_obj, "grd", "");
441
442 $rating = new ilRatingGUI();
443 $rating->setObject($this->ass_id, "ass", $member_id, "peer");
444 $rating->setUserId(0);
445 $this->tpl->setVariable("VAL_RATING", $rating->getHTML(true, false));
446
447 $this->tpl->parseCurrentBlock();
448 }
449
450 $this->tpl->parseCurrentBlock();
451 }
452 else
453 {
454 $this->tpl->touchBlock("member_has_no_team_bl");
455 }
456 }
457
458 public function render()
459 {
460 global $ilCtrl;
461
462 $url = $ilCtrl->getLinkTarget($this->getParentObject(), "saveCommentForLearners", "", true, false);
463 $this->overlay_tpl->setVariable("AJAX_URL", $url);
464
465 return parent::render().
466 $this->overlay_tpl->get();
467 }
468}
469?>
if(! $in) $columns
Definition: Utf8Test.php:46
const IL_CAL_DATETIME
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
Exercise assignment.
lookupMarkOfUser($a_ass_id, $a_user_id)
Lookup user mark.
getMemberListData($a_exc_id, $a_ass_id)
get member list data
static lookupSentTimeOfUser($a_ass_id, $a_user_id)
Get time when exercise has been sent per e-mail to user.
static lookupAnyExerciseSent($a_exc_id, $a_ass_id)
Check whether exercise has been sent to any student per mail.
static lookupFeedbackTimeOfUser($a_ass_id, $a_user_id)
Get time when feedback mail has been sent.
lookupStatusSentOfUser($a_ass_id, $a_user_id)
was: getStatusSentByMember($a_member_id)
lookupCommentForUser($a_ass_id, $a_user_id)
Lookup comment for the user.
lookupStatusOfUser($a_ass_id, $a_user_id)
was: getStatusByMember
static getAssignmentTeamMap($a_ass_id)
Get team structure for assignment.
static getDownloadedFilesInfoForTableGUIS($a_parent_obj, $a_exercise_id, $a_ass_type, $a_ass_id, $a_user_id, $a_parent_cmd=null)
lookupNoticeOfUser($a_ass_id, $a_user_id)
was: getNoticeByMember($a_member_id)
static lookupTitle($a_id)
Lookup title.
static lookupType($a_id)
Lookup type.
static lookupStatusTimeOfUser($a_ass_id, $a_user_id)
Get status time.
render()
render table @access public
__construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_ass_id)
Constructor.
getSelectableColumns()
Get selectable columns.
getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
This is a utility class for the yui overlays.
This class represents a property form user interface.
Class ilRatingGUI.
Class ilTable2GUI.
getSelectedColumns()
Get selected columns.
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
addColumn($a_text, $a_sort_field="", $a_width="", $a_is_checkbox_action_column=false, $a_class="", $a_tooltip="")
Add a column to the header.
setEnableHeader($a_enableheader)
Set Enable Header.
getParentObject()
Get parent object.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
setData($a_data)
set table data @access public
setEnableTitle($a_enabletitle)
Set Enable Title.
setRowTemplate($a_template, $a_template_dir="")
Set row template.
addMultiCommand($a_cmd, $a_text)
Add Command button.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setSelectAllCheckbox($a_select_all_checkbox)
Set the name of the checkbox that should be toggled with a select all button.
setId($a_val)
Set id.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
special template class to simplify handling of ITX/PEAR
This class represents a text area property in a property form.
static formCheckbox($checked, $varname, $value, $disabled=false)
??? @access public
static shortenText($a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:40