ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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;
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  $ilCtrl->setParameter($a_parent_obj, "member_id", $this->part_id);
44  $this->user = new ilObjUser($this->part_id);
45  }
46  // #14650 - invalid user
47  else
48  {
49  $ilCtrl->setParameter($a_parent_obj, "member_id", "");
50  $ilCtrl->setParameter($a_parent_obj, "part_id", ""); // #0020073
51  $ilCtrl->redirect($a_parent_obj, $a_parent_cmd);
52  }
53  }
54 
55  parent::__construct($a_parent_obj, $a_parent_cmd);
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  // #18327
101  if(!$ilAccess->checkAccessOfUser($a_part_id, "read","", $this->exc->getRefId()) &&
102  is_array($info = $ilAccess->getInfo()))
103  {
104  $this->setDescription('<span class="warning">'.$info[0]['text'].'</span>');
105  }
106  }
107 
111  function numericOrdering($a_f)
112  {
113  if (in_array($a_f, array("order_val")))
114  {
115  return true;
116  }
117  return false;
118  }
119 
120 
124  protected function fillRow($d)
125  {
126  global $lng, $ilCtrl;
127 
128  $ilCtrl->setParameter($this->parent_obj, "ass_id", $d["id"]);
129  $ilCtrl->setParameter($this->parent_obj, "member_id", $this->part_id);
130 
131  $this->tpl->setVariable("TXT_ASS_TITLE", $d["title"]);
132 
133  $assignment = new ilExAssignment($d["id"]);
134  $member_status = $assignment->getMemberStatus($this->part_id);
135  $submission = new ilExSubmission($assignment, $this->part_id);
136  $file_info = $submission->getDownloadedFilesInfoForTableGUIS($this->parent_obj, $this->parent_cmd);
137 
138  $has_no_team_yet = false;
139  if($assignment->hasTeam())
140  {
141  $members = $submission->getTeam()->getMembers();
142 
143  // #11957
144  if(sizeof($members))
145  {
146  $this->tpl->setCurrentBlock("ass_members");
147  foreach($members as $member_id)
148  {
149  $this->tpl->setVariable("TXT_MEMBER_NAME",
150  ilObjUser::_lookupFullname($member_id));
151  $this->tpl->parseCurrentBlock();
152  }
153 
154  $this->tpl->setVariable("HREF_LOG",
155  $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "showTeamLog"));
156  $this->tpl->setVariable("TXT_LOG", $lng->txt("exc_team_log"));
157  }
158  else
159  {
160  // #11957
161  $has_no_team_yet = true;
162  $this->tpl->setCurrentBlock("team_info");
163  $this->tpl->setVariable("TXT_TEAM_INFO", $lng->txt("exc_no_team_yet"));
164  $this->tpl->setVariable("TXT_CREATE_TEAM", $lng->txt("exc_create_team"));
165 
166  $this->tpl->setVariable("URL_CREATE_TEAM",
167  $ilCtrl->getLinkTargetByClass("ilExSubmissionTeamGUI", "createSingleMemberTeam"));
168 
169  if($file_info["files"]["count"])
170  {
171  $this->tpl->setVariable("TEAM_FILES_INFO", "<br />".
172  $file_info["files"]["txt"].": ".
173  $file_info["files"]["count"]);
174  }
175  $this->tpl->parseCurrentBlock();
176  }
177  }
178 
179  if(!$has_no_team_yet)
180  {
181  $this->tpl->setVariable("VAL_CHKBOX",
182  ilUtil::formCheckbox(0, "assid[".$d["id"]."]",1));
183  $this->tpl->setVariable("VAL_ID",
184  $d["id"]);
185 
186  $this->tpl->setVariable("VAL_LAST_SUBMISSION", $file_info["last_submission"]["value"]);
187  $this->tpl->setVariable("TXT_LAST_SUBMISSION", $file_info["last_submission"]["txt"]);
188 
189  $this->tpl->setVariable("TXT_SUBMITTED_FILES", $file_info["files"]["txt"]);
190  $this->tpl->setVariable("VAL_SUBMITTED_FILES", $file_info["files"]["count"]);
191 
192  if($file_info["files"]["download_url"])
193  {
194  $this->tpl->setCurrentBlock("download_link");
195  $this->tpl->setVariable("LINK_DOWNLOAD", $file_info["files"]["download_url"]);
196  $this->tpl->setVariable("TXT_DOWNLOAD", $file_info["files"]["download_txt"]);
197  $this->tpl->parseCurrentBlock();
198  }
199 
200  if($file_info["files"]["download_new_url"])
201  {
202  $this->tpl->setCurrentBlock("download_link");
203  $this->tpl->setVariable("LINK_NEW_DOWNLOAD", $file_info["files"]["download_new_url"]);
204  $this->tpl->setVariable("TXT_NEW_DOWNLOAD", $file_info["files"]["download_new_txt"]);
205  $this->tpl->parseCurrentBlock();
206  }
207 
208  // note
209  $this->tpl->setVariable("TXT_NOTE", $lng->txt("exc_note_for_tutor"));
210  $this->tpl->setVariable("NAME_NOTE",
211  "notice[".$d["id"]."]");
212  $this->tpl->setVariable("VAL_NOTE",
213  ilUtil::prepareFormOutput($member_status->getNotice()));
214 
215  // comment for learner
216 
217  $lcomment_value = $member_status->getComment();
218 
219  $overlay_id = "excasscomm_".$d["id"]."_".$this->part_id;
220  $overlay_trigger_id = $overlay_id."_tr";
221  $overlay = new ilOverlayGUI($overlay_id);
222  $overlay->setAnchor($overlay_trigger_id);
223  $overlay->setTrigger($overlay_trigger_id, "click", $overlay_trigger_id);
224  $overlay->add();
225 
226  $this->tpl->setVariable("LCOMMENT_ID", $overlay_id."_snip");
227  $this->tpl->setVariable("LCOMMENT_SNIPPET", ilUtil::shortenText($lcomment_value, 25, true));
228  $this->tpl->setVariable("COMMENT_OVERLAY_TRIGGER_ID", $overlay_trigger_id);
229  $this->tpl->setVariable("COMMENT_OVERLAY_TRIGGER_TEXT", $lng->txt("exc_comment_for_learner_edit"));
230 
231  $lcomment_form = new ilPropertyFormGUI();
232  $lcomment_form->setId($overlay_id);
233  $lcomment_form->setPreventDoubleSubmission(false);
234 
235  $lcomment = new ilTextAreaInputGUI($lng->txt("exc_comment_for_learner"), "lcomment_".$d["id"]."_".$this->part_id);
236  $lcomment->setInfo($lng->txt("exc_comment_for_learner_info"));
237  $lcomment->setValue($lcomment_value);
238  $lcomment->setCols(45);
239  $lcomment->setRows(5);
240  $lcomment_form->addItem($lcomment);
241 
242  $lcomment_form->addCommandButton("save", $lng->txt("save"));
243  // $lcomment_form->addCommandButton("cancel", $lng->txt("cancel"));
244 
245  $this->overlay_tpl->setCurrentBlock("overlay_bl");
246  $this->overlay_tpl->setVariable("COMMENT_OVERLAY_ID", $overlay_id);
247  $this->overlay_tpl->setVariable("COMMENT_OVERLAY_FORM", $lcomment_form->getHTML());
248  $this->overlay_tpl->parseCurrentBlock();
249 
250  $status = $member_status->getStatus();
251  $this->tpl->setVariable("SEL_".strtoupper($status), ' selected="selected" ');
252  $this->tpl->setVariable("TXT_NOTGRADED", $lng->txt("exc_notgraded"));
253  $this->tpl->setVariable("TXT_PASSED", $lng->txt("exc_passed"));
254  $this->tpl->setVariable("TXT_FAILED", $lng->txt("exc_failed"));
255  if (($sd = $member_status->getStatusTime()) > 0)
256  {
257  $this->tpl->setCurrentBlock("status_date");
258  $this->tpl->setVariable("TXT_LAST_CHANGE", $lng->txt("last_change"));
259  $this->tpl->setVariable('VAL_STATUS_DATE',
261  $this->tpl->parseCurrentBlock();
262  }
263  $pic = $member_status->getStatusIcon();
264  $this->tpl->setVariable("IMG_STATUS", ilUtil::getImagePath($pic));
265  $this->tpl->setVariable("ALT_STATUS", $lng->txt("exc_".$status));
266 
267  // mark
268  $this->tpl->setVariable("TXT_MARK", $lng->txt("exc_mark"));
269  $this->tpl->setVariable("NAME_MARK",
270  "mark[".$d["id"]."]");
271  $mark = $member_status->getMark();
272  $this->tpl->setVariable("VAL_MARK", ilUtil::prepareFormOutput($mark));
273 
274  // feedback
275  if (($ft = $member_status->getFeedbackTime()) > 0)
276  {
277  $this->tpl->setCurrentBlock("feedback_date");
278  $this->tpl->setVariable("TXT_FEEDBACK_MAIL_SENT",
279  sprintf($lng->txt("exc_sent_at"),
281  $this->tpl->parseCurrentBlock();
282  }
283  $ilCtrl->setParameter($this->parent_obj, "rcp_to", $this->user->getLogin());
284  $this->tpl->setVariable("LINK_FEEDBACK",
285  $ilCtrl->getLinkTarget($this->parent_obj, "redirectFeedbackMail"));
286  //"ilias.php?baseClass=ilMailGUI&type=new&rcp_to=".$mem_obj->getLogin());
287  $this->tpl->setVariable("TXT_FEEDBACK",
288  $lng->txt("exc_send_mail"));
289  $ilCtrl->setParameter($this->parent_obj, "rcp_to", "");
290 
291  $storage = new ilFSStorageExercise($this->exc_id, $d["id"]);
292  $cnt_files = $storage->countFeedbackFiles($submission->getFeedbackId());
293  $this->tpl->setVariable("LINK_FILE_FEEDBACK",
294  $ilCtrl->getLinkTargetByClass("ilfilesystemgui", "listFiles"));
295  if ($cnt_files == 0)
296  {
297  $this->tpl->setVariable("TXT_FILE_FEEDBACK",
298  $lng->txt("exc_add_feedback_file"));
299  }
300  else
301  {
302  $this->tpl->setVariable("TXT_FILE_FEEDBACK",
303  $lng->txt("exc_fb_files")." (".$cnt_files.")");
304  }
305 
306  // peer review / rating
307  if($peer_review = $submission->getPeerReview())
308  {
309  // :TODO: validate?
310  $given = $peer_review->countGivenFeedback(true, $this->part_id);
311  $received = sizeof($peer_review->getPeerReviewsByPeerId($this->part_id, true));
312 
313  $this->tpl->setCurrentBlock("peer_review_bl");
314 
315  $this->tpl->setVariable("LINK_PEER_REVIEW_GIVEN",
316  $ilCtrl->getLinkTargetByClass("ilexpeerreviewgui", "showGivenPeerReview"));
317  $this->tpl->setVariable("TXT_PEER_REVIEW_GIVEN",
318  $lng->txt("exc_peer_review_given")." (".$given.")");
319 
320  $this->tpl->setVariable("TXT_PEER_REVIEW_RECEIVED",
321  $lng->txt("exc_peer_review_show")." (".$received.")");
322  $this->tpl->setVariable("LINK_PEER_REVIEW_RECEIVED",
323  $ilCtrl->getLinkTargetByClass("ilexpeerreviewgui", "showReceivedPeerReview"));
324 
325  /* :TODO: restrict to valid?
326  $rating = new ilRatingGUI();
327  $rating->setObject($d["id"], "ass", $this->part_id, "peer");
328  $rating->setUserId(0);
329  $this->tpl->setVariable("VAL_RATING", $rating->getHTML(true, false));
330  */
331 
332  $this->tpl->parseCurrentBlock();
333  }
334 
335  }
336  else
337  {
338  $this->tpl->touchBlock("member_has_no_team_bl");
339  }
340 
341  $ilCtrl->setParameter($this->parent_obj, "ass_id", "");
342  $ilCtrl->setParameter($this->parent_obj, "member_id", "");
343  }
344 
345  public function render()
346  {
347  global $ilCtrl;
348 
349  $url = $ilCtrl->getLinkTarget($this->getParentObject(), "saveCommentForLearners", "", true, false);
350  $this->overlay_tpl->setVariable("AJAX_URL", $url);
351 
352  return parent::render().
353  $this->overlay_tpl->get();
354  }
355 }
356 ?>
addCommandButton($a_cmd, $a_text, $a_onclick='', $a_id="", $a_class=null)
Add Command button.
static _lookupName($a_user_id)
lookup user name
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
setDescription($a_val)
Set description.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
static getAssignmentDataOfExercise($a_exc_id)
Get assignments data of an exercise in an array.
Exercise assignment.
const IL_CAL_DATETIME
This class represents a property form user interface.
Exercise participant table.
static shortenText($a_str, $a_len, $a_dots=false, $a_next_blank=false, $a_keep_extension=false)
shorten a string to given length.
numericOrdering($a_f)
Check whether field is numeric.
$url
Definition: shib_logout.php:72
getParentObject()
Get parent object.
setId($a_val)
Set id.
_lookupFullname($a_user_id)
Lookup Full Name.
global $ilCtrl
Definition: ilias.php:18
__construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_part_id)
Constructor.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setTitle($a_title, $a_icon=0, $a_icon_alt=0)
Set title and title icon.
setInfo($a_info)
Set Information Text.
$info
Definition: example_052.php:80
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
Class ilTable2GUI.
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
This is a utility class for the yui overlays.
static formatDate(ilDateTime $date)
Format a date public.
Date and time handling
setRowTemplate($a_template, $a_template_dir="")
Set row template.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
global $lng
Definition: privfeed.php:40
This class represents a text area property in a property form.
Exercise submission.
setEnableHeader($a_enableheader)
Set Enable Header.
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.
static formCheckbox($checked, $varname, $value, $disabled=false)
??? public