ILIAS  Release_4_4_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 
148  {
149  $columns = array();
150 
151  $columns["image"] = array(
152  "txt" => $this->lng->txt("image"),
153  "default" => true
154  );
155 
156  $columns["login"] = array(
157  "txt" => $this->lng->txt("login"),
158  "default" => true
159  );
160 
161  return $columns;
162  }
163 
167  protected function fillRow($member)
168  {
169  global $lng, $ilCtrl;
170 
171  include_once "./Services/Object/classes/class.ilObjectFactory.php";
172  $member_id = $member["usr_id"];
173 
174  if(!($mem_obj = ilObjectFactory::getInstanceByObjId($member_id,false)))
175  {
176  return;
177  }
178 
179  $has_no_team_yet = (substr($member["team_id"], 0, 3) == "nty");
180 
181  if(!$has_no_team_yet)
182  {
183  // mail sent
184  if ($this->sent_col)
185  {
186  if (ilExAssignment::lookupStatusSentOfUser($this->ass_id, $member_id))
187  {
188  $this->tpl->setCurrentBlock("mail_sent");
189  if (($st = ilExAssignment::lookupSentTimeOfUser($this->ass_id,
190  $member_id)) > 0)
191  {
192  $this->tpl->setVariable("TXT_MAIL_SENT",
193  sprintf($lng->txt("exc_sent_at"),
195  }
196  else
197  {
198  $this->tpl->setVariable("TXT_MAIL_SENT",
199  $lng->txt("sent"));
200  }
201  $this->tpl->parseCurrentBlock();
202  }
203  else
204  {
205  $this->tpl->setCurrentBlock("mail_sent");
206  $this->tpl->setVariable("TXT_MAIL_SENT",
207  "&nbsp;");
208  $this->tpl->parseCurrentBlock();
209  }
210  }
211 
212  // checkbox
213  $this->tpl->setVariable("VAL_CHKBOX",
214  ilUtil::formCheckbox(0,"member[$member_id]",1));
215  $this->tpl->setVariable("VAL_ID",
216  $member_id);
217  }
218 
219  $file_info = ilExAssignment::getDownloadedFilesInfoForTableGUIS($this->parent_obj, $this->exc_id, $this->type, $this->ass_id, $member_id, $this->parent_cmd);
220 
221  // name and login
222  if(!isset($member["team"]))
223  {
224  $this->tpl->setVariable("TXT_NAME",
225  $member["name"]);
226 
227  if(in_array("login", $this->selected))
228  {
229  $this->tpl->setVariable("TXT_LOGIN",
230  "[".$member["login"]."]");
231  }
232 
233  if(in_array("image", $this->selected))
234  {
235  // image
236  $this->tpl->setVariable("USR_IMAGE",
237  $mem_obj->getPersonalPicturePath("xxsmall"));
238  $this->tpl->setVariable("USR_ALT", $lng->txt("personal_picture"));
239  }
240  }
241  // team upload
242  else
243  {
244  $this->tpl->setCurrentBlock("team_member");
245  asort($member["team"]);
246  foreach($member["team"] as $member_name) // #10749
247  {
248  $this->tpl->setVariable("TXT_MEMBER_NAME", $member_name);
249  $this->tpl->parseCurrentBlock();
250  }
251 
252  if(!$has_no_team_yet)
253  {
254  $this->tpl->setCurrentBlock("team_log");
255  $ilCtrl->setParameter($this->parent_obj, "lmem", $member_id);
256  $this->tpl->setVariable("HREF_LOG",
257  $ilCtrl->getLinkTarget($this->parent_obj, "showTeamLog"));
258  $this->tpl->setVariable("TXT_LOG", $lng->txt("exc_team_log"));
259  $ilCtrl->setParameter($this->parent_obj, "lmem", "");
260  $this->tpl->parseCurrentBlock();
261  }
262  else
263  {
264  // #11957
265  $this->tpl->setCurrentBlock("team_info");
266  $this->tpl->setVariable("TXT_TEAM_INFO", $lng->txt("exc_no_team_yet"));
267  $this->tpl->setVariable("TXT_CREATE_TEAM", $lng->txt("exc_create_team"));
268 
269  $ilCtrl->setParameter($this->parent_obj, "lmem", $member_id);
270  $this->tpl->setVariable("URL_CREATE_TEAM",
271  $ilCtrl->getLinkTarget($this->getParentObject(), "createSingleMemberTeam"));
272  $ilCtrl->setParameter($this->parent_obj, "lmem", "");
273 
274  if($file_info["files"]["count"])
275  {
276  $this->tpl->setVariable("TEAM_FILES_INFO", "<br />".
277  $file_info["files"]["txt"].": ".
278  $file_info["files"]["count"]);
279  }
280  $this->tpl->parseCurrentBlock();
281  }
282  }
283 
284  if(!$has_no_team_yet)
285  {
286  $this->tpl->setVariable("VAL_LAST_SUBMISSION", $file_info["last_submission"]["value"]);
287  $this->tpl->setVariable("TXT_LAST_SUBMISSION", $file_info["last_submission"]["txt"]);
288 
289  $this->tpl->setVariable("TXT_SUBMITTED_FILES", $file_info["files"]["txt"]);
290  $this->tpl->setVariable("VAL_SUBMITTED_FILES", $file_info["files"]["count"]);
291 
292  if($file_info["files"]["download_url"])
293  {
294  $this->tpl->setCurrentBlock("download_link");
295  $this->tpl->setVariable("LINK_DOWNLOAD", $file_info["files"]["download_url"]);
296  $this->tpl->setVariable("TXT_DOWNLOAD", $file_info["files"]["download_txt"]);
297  $this->tpl->parseCurrentBlock();
298  }
299 
300  if($file_info["files"]["download_new_url"])
301  {
302  $this->tpl->setCurrentBlock("download_link");
303  $this->tpl->setVariable("LINK_NEW_DOWNLOAD", $file_info["files"]["download_new_url"]);
304  $this->tpl->setVariable("TXT_NEW_DOWNLOAD", $file_info["files"]["download_new_txt"]);
305  $this->tpl->parseCurrentBlock();
306  }
307 
308  // note
309  $this->tpl->setVariable("TXT_NOTE", $lng->txt("note"));
310  $this->tpl->setVariable("NAME_NOTE",
311  "notice[$member_id]");
312  $this->tpl->setVariable("VAL_NOTE",
314 
315  // comment for learner
316  $this->tpl->setVariable("TXT_LCOMMENT", $lng->txt("exc_comment_for_learner"));
317  $this->tpl->setVariable("NAME_LCOMMENT",
318  "lcomment[$member_id]");
319  $lpcomment = ilExAssignment::lookupCommentForUser($this->ass_id, $member_id);
320  $this->tpl->setVariable("VAL_LCOMMENT",
321  ilUtil::prepareFormOutput($lpcomment));
322 
323  // solved
324  //$this->tpl->setVariable("CHKBOX_SOLVED",
325  // ilUtil::formCheckbox($this->exc->members_obj->getStatusByMember($member_id),"solved[$member_id]",1));
326  $status = ilExAssignment::lookupStatusOfUser($this->ass_id, $member_id);
327  $this->tpl->setVariable("SEL_".strtoupper($status), ' selected="selected" ');
328  $this->tpl->setVariable("TXT_NOTGRADED", $lng->txt("exc_notgraded"));
329  $this->tpl->setVariable("TXT_PASSED", $lng->txt("exc_passed"));
330  $this->tpl->setVariable("TXT_FAILED", $lng->txt("exc_failed"));
331  if (($sd = ilExAssignment::lookupStatusTimeOfUser($this->ass_id, $member_id)) > 0)
332  {
333  $this->tpl->setCurrentBlock("status_date");
334  $this->tpl->setVariable("TXT_LAST_CHANGE", $lng->txt("last_change"));
335  $this->tpl->setVariable('VAL_STATUS_DATE',
337  $this->tpl->parseCurrentBlock();
338  }
339  switch($status)
340  {
341  case "passed": $pic = "scorm/passed.png"; break;
342  case "failed": $pic = "scorm/failed.png"; break;
343  default: $pic = "scorm/not_attempted.png"; break;
344  }
345  $this->tpl->setVariable("IMG_STATUS", ilUtil::getImagePath($pic));
346  $this->tpl->setVariable("ALT_STATUS", $lng->txt("exc_".$status));
347 
348  // mark
349  $this->tpl->setVariable("TXT_MARK", $lng->txt("exc_mark"));
350  $this->tpl->setVariable("NAME_MARK",
351  "mark[$member_id]");
352  $mark = ilExAssignment::lookupMarkOfUser($this->ass_id, $member_id);
353  $this->tpl->setVariable("VAL_MARK",
355 
356  // feedback
357  $ilCtrl->setParameter($this->parent_obj, "member_id", $member_id);
358  if (($ft = ilExAssignment::lookupFeedbackTimeOfUser($this->ass_id, $member_id)) > 0)
359  {
360  $this->tpl->setCurrentBlock("feedback_date");
361  $this->tpl->setVariable("TXT_FEEDBACK_MAIL_SENT",
362  sprintf($lng->txt("exc_sent_at"),
364  $this->tpl->parseCurrentBlock();
365  }
366 
367  // feedback mail
368  $this->tpl->setVariable("LINK_FEEDBACK",
369  $ilCtrl->getLinkTarget($this->parent_obj, "redirectFeedbackMail"));
370  $this->tpl->setVariable("TXT_FEEDBACK",
371  $lng->txt("exc_send_mail"));
372 
373  if($this->type == ilExAssignment::TYPE_UPLOAD_TEAM)
374  {
375  $feedback_id = "t".$member["team_id"];
376  }
377  else
378  {
379  $feedback_id = $member_id;
380  }
381 
382  // file feedback
383  $cnt_files = $this->storage->countFeedbackFiles($feedback_id);
384  $ilCtrl->setParameter($this->parent_obj, "fsmode", "feedback");
385  $this->tpl->setVariable("LINK_FILE_FEEDBACK",
386  $ilCtrl->getLinkTargetByClass("ilfilesystemgui", "listFiles"));
387  if ($cnt_files == 0)
388  {
389  $this->tpl->setVariable("TXT_FILE_FEEDBACK",
390  $lng->txt("exc_add_feedback_file"));
391  }
392  else
393  {
394  $this->tpl->setVariable("TXT_FILE_FEEDBACK",
395  $lng->txt("exc_fb_files")." (".$cnt_files.")");
396  }
397 
398  // peer review / rating
399  if(!isset($member["team"]) && $this->peer_review)
400  {
401  $this->tpl->setCurrentBlock("peer_review_bl");
402  $this->tpl->setVariable("TXT_PEER_REVIEW", $lng->txt("exc_peer_review_show"));
403 
404  $ilCtrl->setParameter($this->parent_obj, "grd", 1);
405  $this->tpl->setVariable("LINK_PEER_REVIEW",
406  $ilCtrl->getLinkTarget($this->parent_obj, "showPersonalPeerReview"));
407  $ilCtrl->setParameter($this->parent_obj, "grd", "");
408 
409  $rating = new ilRatingGUI();
410  $rating->setObject($this->ass_id, "ass", $member_id, "peer");
411  $rating->setUserId(0);
412  $this->tpl->setVariable("VAL_RATING", $rating->getHTML(true, false));
413 
414  $this->tpl->parseCurrentBlock();
415  }
416 
417  $this->tpl->parseCurrentBlock();
418  }
419  else
420  {
421  $this->tpl->touchBlock("member_has_no_team_bl");
422  }
423  }
424 
425 }
426 ?>