ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilExParticipantTableGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 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 include_once("./Modules/Exercise/classes/class.ilFSStorageExercise.php");
7 include_once("./Services/Rating/classes/class.ilRatingGUI.php");
8 
18 {
19 
23  function __construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_part_id)
24  {
25  global $ilCtrl, $lng, $ilAccess, $lng;
26 
27  $this->exc = $a_exc;
28  $this->exc_id = $this->exc->getId();
29 
30  include_once("./Modules/Exercise/classes/class.ilExAssignment.php");
31 
32  $this->part_id = $a_part_id;
33 
34  $this->setId("exc_part_".$this->exc_id."_".$this->part_id);
35 
36  include_once("./Services/User/classes/class.ilObjUser.php");
37 
38  if ($this->part_id > 0)
39  {
40  $name = ilObjUser::_lookupName($this->part_id);
41  if(trim($name["login"]))
42  {
43  $this->user = new ilObjUser($this->part_id);
44  }
45  // #14650 - invalid user
46  else
47  {
48  $ilCtrl->setParameter($a_parent_obj, "part_id", "");
49  $ilCtrl->redirect($a_parent_obj, $a_parent_cmd);
50  }
51  }
52 
53  parent::__construct($a_parent_obj, $a_parent_cmd);
54 
55  //$this->setData(ilExAssignment::getMemberListData($this->exc_id, $this->ass_id));
57  $this->setData($data);
58 
59 //var_dump($data);
60 
61  if ($this->part_id > 0)
62  {
63  $this->setTitle($lng->txt("exc_participant").": ".
64  $name["lastname"].", ".$name["firstname"]." [".$name["login"]."]");
65  }
66  else
67  {
68  $this->setTitle($lng->txt("exc_participant"));
69  }
70 
71  $this->setTopCommands(true);
72  //$this->setLimit(9999);
73 
74 // $this->addColumn("", "", "1", true);
75  $this->addColumn($this->lng->txt("exc_assignment"), "order_val");
76  $this->addColumn($this->lng->txt("exc_submission"), "submission");
77  $this->addColumn($this->lng->txt("exc_grading"), "solved_time");
78 // $this->addColumn($this->lng->txt("mail"), "feedback_time");
79  $this->addColumn($this->lng->txt("feedback"), "feedback_time");
80 
81  $this->setDefaultOrderField("order_val");
82  $this->setDefaultOrderDirection("asc");
83 
84  $this->setEnableHeader(true);
85  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
86  $this->setRowTemplate("tpl.exc_participant_row.html", "Modules/Exercise");
87  //$this->disable("footer");
88  $this->setEnableTitle(true);
89 // $this->setSelectAllCheckbox("assid");
90 
91  if ($this->part_id > 0)
92  {
93  $this->addCommandButton("saveStatusParticipant", $lng->txt("exc_save_changes"));
94  }
95 
96  include_once "Services/Form/classes/class.ilPropertyFormGUI.php";
97  include_once "Services/UIComponent/Overlay/classes/class.ilOverlayGUI.php";
98  $this->overlay_tpl = new ilTemplate("tpl.exc_learner_comment_overlay.html", true, true, "Modules/Exercise");
99  }
100 
104  function numericOrdering($a_f)
105  {
106  if (in_array($a_f, array("order_val")))
107  {
108  return true;
109  }
110  return false;
111  }
112 
113 
117  protected function fillRow($d)
118  {
119  global $lng, $ilCtrl;
120 
121  $this->tpl->setVariable("TXT_ASS_TITLE", $d["title"]);
122 
123  $file_info = ilExAssignment::getDownloadedFilesInfoForTableGUIS($this->parent_obj, $this->exc_id, $d["type"], $d["id"], $this->part_id, $this->parent_cmd);
124 
125  $has_no_team_yet = false;
126  if($d["type"] == ilExAssignment::TYPE_UPLOAD_TEAM)
127  {
128  $members = ilExAssignment::getTeamMembersByAssignmentId($d["id"], $this->part_id);
129 
130  // #11957
131  if(sizeof($members))
132  {
133  $this->tpl->setCurrentBlock("ass_members");
134  foreach($members as $member_id)
135  {
136  $this->tpl->setVariable("TXT_MEMBER_NAME",
137  ilObjUser::_lookupFullname($member_id));
138  $this->tpl->parseCurrentBlock();
139  }
140 
141  $ilCtrl->setParameter($this->parent_obj, "lpart", $this->part_id);
142  $this->tpl->setVariable("HREF_LOG",
143  $ilCtrl->getLinkTarget($this->parent_obj, "showTeamLog"));
144  $this->tpl->setVariable("TXT_LOG", $lng->txt("exc_team_log"));
145  $ilCtrl->setParameter($this->parent_obj, "lpart", "");
146  }
147  else
148  {
149  // #11957
150  $has_no_team_yet = true;
151  $this->tpl->setCurrentBlock("team_info");
152  $this->tpl->setVariable("TXT_TEAM_INFO", $lng->txt("exc_no_team_yet"));
153  $this->tpl->setVariable("TXT_CREATE_TEAM", $lng->txt("exc_create_team"));
154 
155  $ilCtrl->setParameter($this->parent_obj, "ass_id", $d["id"]);
156  $ilCtrl->setParameter($this->parent_obj, "lpart", $this->part_id);
157  $this->tpl->setVariable("URL_CREATE_TEAM",
158  $ilCtrl->getLinkTarget($this->getParentObject(), "createSingleMemberTeam"));
159  $ilCtrl->setParameter($this->parent_obj, "lpart", "");
160  $ilCtrl->setParameter($this->parent_obj, "ass_id", "");
161 
162  if($file_info["files"]["count"])
163  {
164  $this->tpl->setVariable("TEAM_FILES_INFO", "<br />".
165  $file_info["files"]["txt"].": ".
166  $file_info["files"]["count"]);
167  }
168  $this->tpl->parseCurrentBlock();
169  }
170  }
171 
172  if(!$has_no_team_yet)
173  {
174  $this->tpl->setVariable("VAL_CHKBOX",
175  ilUtil::formCheckbox(0, "assid[".$d["id"]."]",1));
176  $this->tpl->setVariable("VAL_ID",
177  $d["id"]);
178 
179  $this->tpl->setVariable("VAL_LAST_SUBMISSION", $file_info["last_submission"]["value"]);
180  $this->tpl->setVariable("TXT_LAST_SUBMISSION", $file_info["last_submission"]["txt"]);
181 
182  $this->tpl->setVariable("TXT_SUBMITTED_FILES", $file_info["files"]["txt"]);
183  $this->tpl->setVariable("VAL_SUBMITTED_FILES", $file_info["files"]["count"]);
184 
185  if($file_info["files"]["download_url"])
186  {
187  $this->tpl->setCurrentBlock("download_link");
188  $this->tpl->setVariable("LINK_DOWNLOAD", $file_info["files"]["download_url"]);
189  $this->tpl->setVariable("TXT_DOWNLOAD", $file_info["files"]["download_txt"]);
190  $this->tpl->parseCurrentBlock();
191  }
192 
193  if($file_info["files"]["download_new_url"])
194  {
195  $this->tpl->setCurrentBlock("download_link");
196  $this->tpl->setVariable("LINK_NEW_DOWNLOAD", $file_info["files"]["download_new_url"]);
197  $this->tpl->setVariable("TXT_NEW_DOWNLOAD", $file_info["files"]["download_new_txt"]);
198  $this->tpl->parseCurrentBlock();
199  }
200 
201  // note
202  $this->tpl->setVariable("TXT_NOTE", $lng->txt("exc_note_for_tutor"));
203  $this->tpl->setVariable("NAME_NOTE",
204  "notice[".$d["id"]."]");
205  $this->tpl->setVariable("VAL_NOTE",
207 
208  // comment for learner
209 
210  $lcomment_value = ilExAssignment::lookupCommentForUser($d["id"], $this->part_id);
211 
212  $overlay_id = "excasscomm_".$d["id"]."_".$this->part_id;
213  $overlay_trigger_id = $overlay_id."_tr";
214  $overlay = new ilOverlayGUI($overlay_id);
215  $overlay->setAnchor($overlay_trigger_id);
216  $overlay->setTrigger($overlay_trigger_id, "click", $overlay_trigger_id);
217  $overlay->add();
218 
219  $this->tpl->setVariable("LCOMMENT_ID", $overlay_id."_snip");
220  $this->tpl->setVariable("LCOMMENT_SNIPPET", ilUtil::shortenText($lcomment_value, 25, true));
221  $this->tpl->setVariable("COMMENT_OVERLAY_TRIGGER_ID", $overlay_trigger_id);
222  $this->tpl->setVariable("COMMENT_OVERLAY_TRIGGER_TEXT", $lng->txt("exc_comment_for_learner_edit"));
223 
224  $lcomment_form = new ilPropertyFormGUI();
225  $lcomment_form->setId($overlay_id);
226  $lcomment_form->setPreventDoubleSubmission(false);
227 
228  $lcomment = new ilTextAreaInputGUI($lng->txt("exc_comment_for_learner"), "lcomment_".$d["id"]."_".$this->part_id);
229  $lcomment->setInfo($lng->txt("exc_comment_for_learner_info"));
230  $lcomment->setValue($lcomment_value);
231  $lcomment->setCols(45);
232  $lcomment->setRows(5);
233  $lcomment_form->addItem($lcomment);
234 
235  $lcomment_form->addCommandButton("save", $lng->txt("save"));
236  // $lcomment_form->addCommandButton("cancel", $lng->txt("cancel"));
237 
238  $this->overlay_tpl->setCurrentBlock("overlay_bl");
239  $this->overlay_tpl->setVariable("COMMENT_OVERLAY_ID", $overlay_id);
240  $this->overlay_tpl->setVariable("COMMENT_OVERLAY_FORM", $lcomment_form->getHTML());
241  $this->overlay_tpl->parseCurrentBlock();
242 
243  /*
244  $this->tpl->setVariable("TXT_LCOMMENT", $lng->txt("exc_comment_for_learner"));
245  $this->tpl->setVariable("NAME_LCOMMENT",
246  "lcomment[".$d["id"]."]");
247  $lpcomment = ilExAssignment::lookupCommentForUser($d["id"], $this->part_id);
248  $this->tpl->setVariable("VAL_LCOMMENT",
249  ilUtil::prepareFormOutput($lpcomment));
250  */
251 
252  // solved
253  //$this->tpl->setVariable("CHKBOX_SOLVED",
254  // ilUtil::formCheckbox($this->exc->members_obj->getStatusByMember($member_id),"solved[$member_id]",1));
255  $status = ilExAssignment::lookupStatusOfUser($d["id"], $this->part_id);
256  $this->tpl->setVariable("SEL_".strtoupper($status), ' selected="selected" ');
257  $this->tpl->setVariable("TXT_NOTGRADED", $lng->txt("exc_notgraded"));
258  $this->tpl->setVariable("TXT_PASSED", $lng->txt("exc_passed"));
259  $this->tpl->setVariable("TXT_FAILED", $lng->txt("exc_failed"));
260  if (($sd = ilExAssignment::lookupStatusTimeOfUser($d["id"], $this->part_id)) > 0)
261  {
262  $this->tpl->setCurrentBlock("status_date");
263  $this->tpl->setVariable("TXT_LAST_CHANGE", $lng->txt("last_change"));
264  $this->tpl->setVariable('VAL_STATUS_DATE',
266  $this->tpl->parseCurrentBlock();
267  }
268  switch($status)
269  {
270  case "passed": $pic = "scorm/passed.svg"; break;
271  case "failed": $pic = "scorm/failed.svg"; break;
272  default: $pic = "scorm/not_attempted.svg"; break;
273  }
274  $this->tpl->setVariable("IMG_STATUS", ilUtil::getImagePath($pic));
275  $this->tpl->setVariable("ALT_STATUS", $lng->txt("exc_".$status));
276 
277  // mark
278  $this->tpl->setVariable("TXT_MARK", $lng->txt("exc_mark"));
279  $this->tpl->setVariable("NAME_MARK",
280  "mark[".$d["id"]."]");
281  $mark = ilExAssignment::lookupMarkOfUser($d["id"], $this->part_id);
282  $this->tpl->setVariable("VAL_MARK",
284 
285  // feedback
286  $ilCtrl->setParameter($this->parent_obj, "member_id", $this->part_id);
287  if (($ft = ilExAssignment::lookupFeedbackTimeOfUser($d["id"], $this->part_id)) > 0)
288  {
289  $this->tpl->setCurrentBlock("feedback_date");
290  $this->tpl->setVariable("TXT_FEEDBACK_MAIL_SENT",
291  sprintf($lng->txt("exc_sent_at"),
293  $this->tpl->parseCurrentBlock();
294  }
295  $ilCtrl->setParameter($this, "rcp_to", $this->user->getLogin());
296  $this->tpl->setVariable("LINK_FEEDBACK",
297  $ilCtrl->getLinkTarget($this->parent_obj, "redirectFeedbackMail"));
298  //"ilias.php?baseClass=ilMailGUI&type=new&rcp_to=".$mem_obj->getLogin());
299  $this->tpl->setVariable("TXT_FEEDBACK",
300  $lng->txt("exc_send_mail"));
301  $ilCtrl->setParameter($this->parent_obj, "rcp_to", "");
302 
303  if($d["type"] == ilExAssignment::TYPE_UPLOAD_TEAM)
304  {
305  $feedback_id = "t".ilExAssignment::getTeamIdByAssignment($d["id"], $this->part_id);
306  }
307  else
308  {
309  $feedback_id = $this->part_id;
310  }
311 
312  $storage = new ilFSStorageExercise($this->exc_id, $d["id"]);
313  $cnt_files = $storage->countFeedbackFiles($feedback_id);
314  $ilCtrl->setParameter($this->parent_obj, "fsmode", "feedbackpart");
315  $this->tpl->setVariable("LINK_FILE_FEEDBACK",
316  $ilCtrl->getLinkTargetByClass("ilfilesystemgui", "listFiles"));
317  if ($cnt_files == 0)
318  {
319  $this->tpl->setVariable("TXT_FILE_FEEDBACK",
320  $lng->txt("exc_add_feedback_file"));
321  }
322  else
323  {
324  $this->tpl->setVariable("TXT_FILE_FEEDBACK",
325  $lng->txt("exc_fb_files")." (".$cnt_files.")");
326  }
327 
328  // peer review / rating
329  if($d["type"] != ilExAssignment::TYPE_UPLOAD_TEAM && $d["peer"])
330  {
331  $this->tpl->setCurrentBlock("peer_review_bl");
332  $this->tpl->setVariable("TXT_PEER_REVIEW", $lng->txt("exc_peer_review_show"));
333 
334  $ilCtrl->setParameter($this->parent_obj, "grd", 2);
335  $this->tpl->setVariable("LINK_PEER_REVIEW",
336  $ilCtrl->getLinkTarget($this->parent_obj, "showPersonalPeerReview"));
337  $ilCtrl->setParameter($this->parent_obj, "grd", "");
338 
339  $rating = new ilRatingGUI();
340  $rating->setObject($d["id"], "ass", $this->part_id, "peer");
341  $rating->setUserId(0);
342  $this->tpl->setVariable("VAL_RATING", $rating->getHTML(true, false));
343 
344  $this->tpl->parseCurrentBlock();
345  }
346 
347  $ilCtrl->setParameter($this->parent_obj, "ass_id", $_GET["ass_id"]);
348  }
349  else
350  {
351  $this->tpl->touchBlock("member_has_no_team_bl");
352  }
353  }
354 
355  public function render()
356  {
357  global $ilCtrl;
358 
359  $url = $ilCtrl->getLinkTarget($this->getParentObject(), "saveCommentForLearners", "", true, false);
360  $this->overlay_tpl->setVariable("AJAX_URL", $url);
361 
362  return parent::render().
363  $this->overlay_tpl->get();
364  }
365 }
366 ?>