ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
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 
4 include_once("./Services/Table/classes/class.ilTable2GUI.php");
5 include_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").": ".
46  ilExAssignment::lookupTitle($a_ass_id));
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 ?>