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
4include_once("./Services/Table/classes/class.ilTable2GUI.php");
5include_once("./Modules/Exercise/classes/class.ilExAssignment.php");
6include_once("./Modules/Exercise/classes/class.ilFSStorageExercise.php");
7include_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?>
const IL_CAL_DATETIME
static formatDate(ilDateTime $date)
Format a date @access public.
@classDescription Date and time handling
Exercise assignment.
static getAssignmentDataOfExercise($a_exc_id)
Get assignments data of an exercise in an array.
__construct($a_parent_obj, $a_parent_cmd, $a_exc, $a_part_id)
Constructor.
numericOrdering($a_f)
Check whether field is numeric.
render()
render table @access public
Exercise submission.
_lookupFullname($a_user_id)
Lookup Full Name.
static _lookupName($a_user_id)
lookup user name
This is a utility class for the yui overlays.
This class represents a property form user interface.
Class ilTable2GUI.
setTopCommands($a_val)
Set top commands (display command buttons on top of table, too)
setEnableHeader($a_enableheader)
Set Enable Header.
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.
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.
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
setId($a_val)
Set id.
setDescription($a_val)
Set description.
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
$info
Definition: example_052.php:80
global $ilCtrl
Definition: ilias.php:18
global $lng
Definition: privfeed.php:40
$url
Definition: shib_logout.php:72