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.ilExAssignmentTeam.php");
7 include_once(
"./Services/UIComponent/Modal/classes/class.ilModalGUI.php");
34 protected $cols_default = array(
"login",
"submission",
"idl",
"calc_deadline");
35 protected $cols_order = array(
"image",
"name",
"login",
"team_members",
36 "sent_time",
"submission",
"calc_deadline",
"idl",
"status",
"mark",
"status_time",
37 "feedback_time",
"comment",
"notice");
52 $this->ctrl = $DIC->ctrl();
53 $this->access = $DIC->access();
54 $this->tpl = $DIC[
"tpl"];
55 $this->lng = $DIC->language();
64 parent::__construct($a_parent_obj, $a_parent_cmd);
69 $this->
setRowTemplate(
"tpl.exc_members_row.html",
"Modules/Exercise");
72 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
84 foreach ($this->cols_order as
$id) {
85 if (in_array($id, $this->cols_mandatory) ||
86 in_array($id, $selected)) {
87 if (array_key_exists($id,
$columns)) {
94 $this->
addColumn($this->lng->txt(
"actions"));
99 $this->
addMultiCommand(
"saveStatusSelected", $this->lng->txt(
"exc_save_selected"));
104 if ($this->mode == self::MODE_BY_ASSIGNMENT &&
105 $this->ass->hasActiveIDl() &&
106 !$this->ass->hasReadOnlyIDl()) {
107 $this->
addMultiCommand(
"setIndividualDeadline", $this->lng->txt(
"exc_individual_deadline_action"));
110 if ($this->exc->hasTutorFeedbackMail() &&
111 $this->mode == self::MODE_BY_ASSIGNMENT) {
112 $this->
addMultiCommand(
"redirectFeedbackMail", $this->lng->txt(
"exc_tbl_action_feedback_mail"));
115 $this->
addMultiCommand(
"sendMembers", $this->lng->txt(
"exc_send_assignment"));
117 if ($this->mode == self::MODE_BY_ASSIGNMENT &&
119 $this->ass->hasTeam()) {
120 $this->
addMultiCommand(
"createTeams", $this->lng->txt(
"exc_team_multi_create"));
121 $this->
addMultiCommand(
"dissolveTeams", $this->lng->txt(
"exc_team_multi_dissolve"));
124 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
125 $this->
addMultiCommand(
"confirmDeassignMembers", $this->lng->txt(
"exc_deassign_members"));
134 include_once
"Services/Form/classes/class.ilPropertyFormGUI.php";
139 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
140 $item = $this->
addFilterItemByMetaType(
"flt_name", self::FILTER_TEXT,
false, $this->lng->txt(
"name") .
" / " . $this->lng->txt(
"login"));
141 $this->filter[
"name"] = $item->getValue();
144 $this->lng->loadLanguageModule(
"search");
146 "" => $this->lng->txt(
"search_any"),
147 "notgraded" => $this->lng->txt(
"exc_notgraded"),
148 "passed" => $this->lng->txt(
"exc_passed"),
149 "failed" => $this->lng->txt(
"exc_failed")
151 $item = $this->
addFilterItemByMetaType(
"flt_status", self::FILTER_SELECT,
false, $this->lng->txt(
"exc_tbl_status"));
153 $this->filter[
"status"] = $item->getValue();
156 "" => $this->lng->txt(
"search_any"),
157 "y" => $this->lng->txt(
"exc_tbl_filter_has_submission"),
158 "n" => $this->lng->txt(
"exc_tbl_filter_has_no_submission")
160 $item = $this->
addFilterItemByMetaType(
"flt_subm", self::FILTER_SELECT,
false, $this->lng->txt(
"exc_tbl_filter_submission"));
162 $this->filter[
"subm"] = $item->getValue();
165 abstract protected function initMode($a_item_id);
176 foreach ($this->cols_order as
$id) {
177 if (in_array($id, $this->cols_mandatory)) {
181 if (array_key_exists($id,
$columns)) {
186 "default" => in_array($id, $this->cols_default)
197 $cols[
"submission"] = array($this->lng->txt(
"exc_tbl_submission_date"),
"submission");
199 $cols[
"status"] = array($this->lng->txt(
"exc_tbl_status"),
"status");
200 $cols[
"mark"] = array($this->lng->txt(
"exc_tbl_mark"),
"mark");
201 $cols[
"status_time"] = array($this->lng->txt(
"exc_tbl_status_time"),
"status_time");
203 $cols[
"sent_time"] = array($this->lng->txt(
"exc_tbl_sent_time"),
"sent_time");
205 if ($this->exc->hasTutorFeedbackText() ||
206 $this->exc->hasTutorFeedbackMail() ||
207 $this->exc->hasTutorFeedbackFile()) {
208 $cols[
"feedback_time"] = array($this->lng->txt(
"exc_tbl_feedback_time"),
"feedback_time");
211 if ($this->exc->hasTutorFeedbackText()) {
212 $cols[
"comment"] = array($this->lng->txt(
"exc_tbl_comment"),
"comment");
215 $cols[
"notice"] = array($this->lng->txt(
"exc_tbl_notice"),
"notice");
225 $has_no_team_yet = ($a_ass->
hasTeam() &&
231 if ($this->mode == self::MODE_BY_ASSIGNMENT) {
233 $this->tpl->setVariable(
"VAL_NAME", $a_row[
"name"]);
236 if (!$ilAccess->checkAccessOfUser($a_user_id,
"read",
"", $this->exc->getRefId()) &&
237 is_array(
$info = $ilAccess->getInfo())) {
238 $this->tpl->setCurrentBlock(
'access_warning');
239 $this->tpl->setVariable(
'PARENT_ACCESS',
$info[0][
"text"]);
240 $this->tpl->parseCurrentBlock();
243 asort($a_row[
"team"]);
244 foreach ($a_row[
"team"] as $team_member_id => $team_member_name) {
245 if (
sizeof($a_row[
"team"]) > 1) {
246 $ilCtrl->setParameterByClass(
"ilExSubmissionTeamGUI",
"id", $team_member_id);
247 $url =
$ilCtrl->getLinkTargetByClass(
"ilExSubmissionTeamGUI",
"confirmRemoveTeamMember");
248 $ilCtrl->setParameterByClass(
"ilExSubmissionTeamGUI",
"id",
"");
250 include_once
"Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php";
252 $this->tpl->setCurrentBlock(
"team_member_removal_bl");
253 $this->tpl->setVariable(
"URL_TEAM_MEMBER_REMOVAL",
$url);
254 $this->tpl->setVariable(
255 "TXT_TEAM_MEMBER_REMOVAL",
258 $this->tpl->parseCurrentBlock();
262 if (!$ilAccess->checkAccessOfUser($team_member_id,
"read",
"", $this->exc->getRefId()) &&
263 is_array(
$info = $ilAccess->getInfo())) {
264 $this->tpl->setCurrentBlock(
'team_access_warning');
265 $this->tpl->setVariable(
'TEAM_PARENT_ACCESS',
$info[0][
"text"]);
266 $this->tpl->parseCurrentBlock();
269 $this->tpl->setCurrentBlock(
"team_member");
270 $this->tpl->setVariable(
"TXT_MEMBER_NAME", $team_member_name);
271 $this->tpl->parseCurrentBlock();
274 if ($has_no_team_yet) {
276 $this->tpl->setCurrentBlock(
"team_info");
277 $this->tpl->setVariable(
"TXT_TEAM_INFO", $this->lng->txt(
"exc_no_team_yet"));
279 $this->tpl->setCurrentBlock(
"team_info");
280 $this->tpl->setVariable(
"TXT_TEAM_INFO",
"(" . $a_row[
"submission_obj"]->getTeam()->
getId() .
")");
284 $this->tpl->setVariable(
"VAL_NAME", $a_row[
"name"]);
288 if (!$has_no_team_yet) {
290 $this->tpl->setVariable(
"SEL_" . strtoupper($a_row[
"status"]),
' selected="selected" ');
291 $this->tpl->setVariable(
"TXT_NOTGRADED", $this->lng->txt(
"exc_notgraded"));
292 $this->tpl->setVariable(
"TXT_PASSED", $this->lng->txt(
"exc_passed"));
293 $this->tpl->setVariable(
"TXT_FAILED", $this->lng->txt(
"exc_failed"));
299 $this->tpl->setVariable(
"NO_TEAM_COLSPAN", $nt_colspan);
305 if ($this->exc->hasTutorFeedbackText()) {
306 $comment_id =
"excasscomm_" . $a_ass->
getId() .
"_" . $a_user_id;
309 $modal->setId($comment_id);
310 $modal->setHeading($this->lng->txt(
"exc_tbl_action_feedback_text"));
313 $lcomment_form->setId($comment_id);
314 $lcomment_form->setPreventDoubleSubmission(
false);
316 $lcomment =
new ilTextAreaInputGUI($this->lng->txt(
"exc_comment_for_learner"),
"lcomment_" . $a_ass->
getId() .
"_" . $a_user_id);
317 $lcomment->
setInfo($this->lng->txt(
"exc_comment_for_learner_info"));
318 $lcomment->setValue($a_row[
"comment"]);
319 $lcomment->setCols(45);
320 $lcomment->setRows(10);
321 $lcomment_form->addItem($lcomment);
323 $lcomment_form->addCommandButton(
"save", $this->lng->txt(
"save"));
326 $modal->setBody($lcomment_form->getHTML());
328 $this->comment_modals[] = $modal->getHTML();
336 $include_seconds =
false;
340 include_once
"./Services/Object/classes/class.ilObjectFactory.php";
342 $this->tpl->setVariable(
"VAL_IMAGE", $usr_obj->getPersonalPicturePath(
"xxsmall"));
343 $this->tpl->setVariable(
"TXT_IMAGE", $this->lng->txt(
"personal_picture"));
350 if (!
sizeof($a_row[
"team"])) {
351 $this->tpl->setVariable(
"VAL_TEAM_MEMBER", $this->lng->txt(
"exc_no_team_yet"));
353 foreach ($a_row[
"team"] as
$name) {
354 $this->tpl->setCurrentBlock(
"team_member_bl");
355 $this->tpl->setVariable(
"VAL_TEAM_MEMBER", $name);
356 $this->tpl->parseCurrentBlock();
360 $this->tpl->setVariable(
"VAL_TEAM_MEMBER",
" ");
365 $this->tpl->setVariable(
366 "VAL_" . strtoupper($col),
373 case "calc_deadline":
374 $this->tpl->setVariable(
375 "VAL_" . strtoupper($col),
383 if ($has_no_team_yet) {
396 $this->tpl->setVariable(
"LCOMMENT_ID", $comment_id .
"_snip");
399 $this->tpl->setVariable(
"VAL_" . strtoupper($col), (trim($a_row[$col]) !==
"")
400 ? nl2br(trim($a_row[$col]))
405 $include_seconds =
true;
406 if ($a_row[
"submission_obj"]) {
407 foreach ($a_row[
"submission_obj"]->getFiles() as $file) {
409 $this->tpl->setVariable(
"TXT_LATE", $this->lng->txt(
"exc_late_submission"));
417 case "feedback_time":
420 $this->tpl->setVariable(
421 "VAL_" . strtoupper($col),
441 $this->tpl->setVariable(
"VAL_" . strtoupper($col), $a_row[$col]
451 include_once
"Services/UIComponent/AdvancedSelectionList/classes/class.ilAdvancedSelectionListGUI.php";
453 $actions->setId($a_ass->
getId() .
"_" . $a_user_id);
454 $actions->setListTitle($this->lng->txt(
"actions"));
458 $counter = $file_info[
"files"][
"count"];
460 if ($file_info[
"files"][
"download_url"]) {
462 $file_info[
"files"][
"download_txt"] .
" (" . $counter .
")",
464 $file_info[
"files"][
"download_url"]
468 if ($file_info[
"files"][
"download_new_url"]) {
470 $file_info[
"files"][
"download_new_txt"],
472 $file_info[
"files"][
"download_new_url"]
477 if (!$has_no_team_yet &&
484 $this->tpl->setVariable(
"VAL_IDL_ID", $a_ass->
getId() .
"_" . $idl_id);
487 $this->lng->txt(
"exc_individual_deadline_action"),
495 "il.ExcIDl.trigger('" . $idl_id .
"'," . $a_ass->
getId() .
")" 500 if ($this->exc->hasTutorFeedbackMail()) {
502 $this->lng->txt(
"exc_tbl_action_feedback_mail"),
504 $ilCtrl->getLinkTarget($this->parent_obj,
"redirectFeedbackMail")
509 if ($this->exc->hasTutorFeedbackFile()) {
510 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
514 ?
" (" . $counter .
")" 517 $this->lng->txt(
"exc_tbl_action_feedback_file") . $counter,
519 $ilCtrl->getLinkTargetByClass(
"ilfilesystemgui",
"listFiles")
524 if ($this->exc->hasTutorFeedbackText()) {
526 $this->lng->txt(
"exc_tbl_action_feedback_text"),
534 "il.ExcManagement.showComment('" . $comment_id .
"')" 539 if (($peer_review = $a_row[
"submission_obj"]->getPeerReview()) && $a_ass->
afterDeadlineStrict()) {
540 $counter = $peer_review->countGivenFeedback(
true, $a_user_id);
542 ?
" (" . $counter .
")" 545 $this->lng->txt(
"exc_tbl_action_peer_review_given") . $counter,
547 $ilCtrl->getLinkTargetByClass(
"ilexpeerreviewgui",
"showGivenPeerReview")
550 $counter =
sizeof($peer_review->getPeerReviewsByPeerId($a_user_id,
true));
552 ?
" (" . $counter .
")" 555 $this->lng->txt(
"exc_tbl_action_peer_review_received") . $counter,
557 $ilCtrl->getLinkTargetByClass(
"ilexpeerreviewgui",
"showReceivedPeerReview")
562 if ($has_no_team_yet) {
564 $this->lng->txt(
"exc_create_team"),
566 $ilCtrl->getLinkTargetByClass(
"ilExSubmissionTeamGUI",
"createSingleMemberTeam")
570 $this->lng->txt(
"exc_tbl_action_team_log"),
572 $ilCtrl->getLinkTargetByClass(
"ilExSubmissionTeamGUI",
"showTeamLog")
576 $this->tpl->setVariable(
"ACTIONS", $actions->getHTML());
583 $tpl = $DIC->ui()->mainTemplate();
587 $tpl->addJavaScript(
"Modules/Exercise/js/ilExcManagement.js");
588 $tpl->addOnLoadCode(
'il.ExcManagement.init("' .
$url .
'");');
590 return parent::render() .
591 implode(
"\n", $this->comment_modals);
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
setDefaultOrderField($a_defaultorderfield)
Set Default order field.
static getTeamId($a_assignment_id, $a_user_id, $a_create_on_demand=false)
Get team id for member id.
setShowTemplates($a_value)
Toggle templates.
getId()
Get assignment id.
if(!array_key_exists('StateId', $_REQUEST)) $id
addFilterItemByMetaType($id, $type=self::FILTER_TEXT, $a_optional=false, $caption=null)
Add filter by standard type.
static get($a_glyph, $a_text="")
Get glyph html.
getParentCmd()
Get parent command.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date public.
getParentObject()
Get parent object.
setDefaultOrderDirection($a_defaultorderdirection)
Set Default order direction.
setResetCommand($a_val, $a_caption=null)
Set reset filter command.
Exercise submission table.
addMultiCommand($a_cmd, $a_text)
Add Command button.
parseRow($a_user_id, ilExAssignment $a_ass, array $a_row)
getSelectedColumns()
Get selected columns.
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
setRowTemplate($a_template, $a_template_dir="")
Set row template.
User interface class for advanced drop-down selection lists.
__construct($a_parent_obj, $a_parent_cmd, ilObjExercise $a_exc, $a_item_id)
Constructor.
afterDeadlineStrict($a_include_personal=true)
static getInstance()
Get instance.
setFormAction($a_form_action, $a_multipart=false)
Set Form action parameter.
setFormName($a_formname="")
Set Form name.
This class represents a text area property in a property form.
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.
countFeedbackFiles($a_user_id)
Count number of feedback files for a user.
setFilterCommand($a_val, $a_caption=null)
Set filter command.