101 $this->ui_factory =
$DIC->ui()->factory();
102 $this->ui_renderer =
$DIC->ui()->renderer();
103 $this->
user = $DIC->user();
104 $this->toolbar =
$DIC->toolbar();
107 $this->ctrl =
$DIC->ctrl();
108 $this->tabs_gui =
$DIC->tabs();
109 $this->lng =
$DIC->language();
110 $this->tpl =
$DIC[
"tpl"];
112 $this->task_factory =
$DIC->backgroundTasks()->taskFactory();
114 $request =
$DIC->exercise()->internal()->request();
118 $this->exercise = $request->getRequestedExercise();
120 $this->assignment = $a_ass;
121 $this->ass_id = $this->assignment->getId();
124 $this->ctrl->saveParameter($this, array(
"vw",
"member_id"));
125 $this->ctrl->saveParameter($this, array(
"part_id"));
134 $class = $ilCtrl->getNextClass($this);
138 case "ilfilesystemgui":
139 $ilTabs->clearTargets();
140 $ilTabs->setBackTarget(
142 $ilCtrl->getLinkTarget($this, $this->getViewBack())
151 $feedback_id = $submission->getFeedbackId();
152 $noti_rec_ids = $submission->getUserIds();
155 foreach ($noti_rec_ids as $rec_id) {
158 $fs_title = implode(
" / ", $fs_title);
160 $fs_gui =
new ilFileSystemGUI($fstorage->getFeedbackPath($feedback_id));
161 $fs_gui->setTableId(
"excfbfil" . $this->assignment->getId() .
"_" . $feedback_id);
162 $fs_gui->setAllowDirectories(
false);
163 $fs_gui->setTitle(
$lng->txt(
"exc_fb_files") .
" - " .
164 $this->assignment->getTitle() .
" - " .
166 $pcommand = $fs_gui->getLastPerformedCommand();
167 if (is_array($pcommand) && $pcommand[
"cmd"] ==
"create_file") {
168 foreach ($noti_rec_ids as $user_id) {
169 $member_status = $this->assignment->getMemberStatus($user_id);
170 $member_status->setFeedback(
true);
171 $member_status->update();
174 $this->exercise->sendFeedbackFileNotification(
177 $this->assignment->getId()
180 $this->ctrl->forwardCommand($fs_gui);
183 case 'ilrepositorysearchgui':
185 $ref_id = $this->exercise->getRefId();
186 $rep_search->addUserAccessFilterCallable(
function ($a_user_ids) use ($ref_id) {
187 return $GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
188 'edit_submissions_grades',
189 'edit_submissions_grades',
194 $rep_search->setTitle($this->lng->txt(
"exc_add_participant"));
195 $rep_search->setCallback($this,
'addMembersObject');
199 $this->ctrl->setReturn($this,
'members');
201 $this->ctrl->forwardCommand($rep_search);
204 case "ilexsubmissionteamgui":
206 $ilCtrl->forwardCommand($gui);
209 case "ilexsubmissionfilegui":
211 $ilCtrl->forwardCommand($gui);
214 case "ilexsubmissiontextgui":
215 $ilCtrl->saveParameter($this, array(
"part_id"));
217 $ilCtrl->forwardCommand($gui);
220 case "ilexpeerreviewgui":
222 $ilCtrl->forwardCommand($gui);
226 $cmd = $ilCtrl->getCmd();
228 case 'downloadSubmissions':
229 $cmd = $ilCtrl->getCmd(
"downloadSubmissions");
232 $cmd = $ilCtrl->getCmd(
"listPublicSubmissions");
235 $this->{$cmd .
"Object"}();
242 switch ($_REQUEST[
"vw"]) {
244 $back_cmd =
"showParticipant";
248 $back_cmd =
"showGradesOverview";
253 $back_cmd =
"members";
262 $this->ctrl->setReturn($this, $back_cmd);
264 $this->tabs_gui->clearTargets();
265 $this->tabs_gui->setBackTarget(
266 $this->lng->txt(
"back"),
267 $this->ctrl->getLinkTarget($this, $back_cmd)
270 return new ilExSubmission($this->assignment, $_REQUEST[
"member_id"],
null,
true);
284 $ass_id =
$_GET[
"ass_id"];
285 $part_id =
$_GET[
"part_id"];
287 $ilCtrl->setParameter($this,
"vw",
"");
288 $ilCtrl->setParameter($this,
"member_id",
"");
289 $ilCtrl->setParameter($this,
"ass_id",
"");
290 $ilCtrl->setParameter($this,
"part_id",
"");
294 $lng->txt(
"exc_assignment_view"),
295 $ilCtrl->getLinkTarget($this,
"members")
299 $lng->txt(
"exc_participant_view"),
300 $ilCtrl->getLinkTarget($this,
"showParticipant")
304 $lng->txt(
"exc_grades_overview"),
305 $ilCtrl->getLinkTarget($this,
"showGradesOverview")
307 $ilTabs->activateSubTab($a_activate);
309 $ilCtrl->setParameter($this,
"ass_id", $ass_id);
310 $ilCtrl->setParameter($this,
"part_id", $part_id);
318 $ilCtrl->setParameterByClass(
"ilExSubmissionFileGUI",
"member_id", (
int)
$_GET[
"member_id"]);
319 $url = $ilCtrl->getLinkTargetByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI",
"ilExerciseManagementGUI",
"ilExSubmissionFileGUI"),
"downloadNewReturned");
320 $js_url = $ilCtrl->getLinkTargetByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI",
"ilExerciseManagementGUI",
"ilExSubmissionFileGUI"),
"downloadNewReturned",
"",
"",
false);
321 ilUtil::sendInfo(
$lng->txt(
"exc_wait_for_files") .
"<a href='$url'> " .
$lng->txt(
'exc_download_files') .
"</a><script>window.location.href ='" . $js_url .
"';</script>");
340 if (!$this->assignment) {
341 $this->assignment = current($ass);
345 if (count($ass) > 1) {
347 foreach ($ass as
$a) {
348 $options[
$a->getId()] =
$a->getTitle();
351 $si->setOptions($options);
352 $si->setValue($this->assignment->getId());
353 $ilToolbar->addStickyItem(
$si,
true);
356 $button->setCaption(
"select");
357 $button->setCommand(
"selectAssignment");
358 $ilToolbar->addStickyItem($button);
360 $ilToolbar->addSeparator();
363 elseif ($this->assignment) {
364 $ilCtrl->setParameter($this,
"ass_id", $this->assignment->getId());
370 $has_rbac_access =
$GLOBALS[
'DIC']->access()->checkAccess(
371 'edit_submissions_grades',
373 $this->exercise->getRefId()
375 if ($has_rbac_access) {
380 'auto_complete_name' =>
$lng->txt(
'user'),
381 'submit_name' =>
$lng->txt(
'add'),
382 'add_search' =>
true,
383 'add_from_container' => $this->exercise->getRefId()
389 if (count($ass) > 0) {
390 if ($has_rbac_access) {
391 $ilToolbar->addSeparator();
395 $ilToolbar->setFormAction($ilCtrl->getFormAction($this));
397 $ilCtrl->setParameter($this,
"ass_id", $this->assignment->getId());
401 $ilToolbar->addButton(
402 $this->lng->txt(
"exc_adopt_group_teams"),
403 $this->ctrl->getLinkTarget($this,
"adoptTeamsFromGroup")
406 $ilToolbar->addSeparator();
408 } elseif ($this->exercise->hasTutorFeedbackFile()) {
409 if (!$this->assignment->getAssignmentType()->usesTeams()) {
411 $ilToolbar->addButton(
412 $this->lng->txt(
"exc_multi_feedback"),
413 $this->ctrl->getLinkTarget($this,
"showMultiFeedback")
416 $ilToolbar->addSeparator();
422 if ($submission_repository->hasSubmissions($this->assignment->getId())) {
423 $ass_type = $this->assignment->getType();
426 $ilToolbar->addFormButton(
$lng->txt(
"exc_list_text_assignment"),
"listTextAssignment");
428 $ilToolbar->addFormButton(
$lng->txt(
"download_all_returned_files"),
"downloadSubmissions");
430 $this->ctrl->setParameter($this,
"vw", self::VIEW_ASSIGNMENT);
434 $exc_tab->getHTML() .
435 $this->initIndividualDeadlineModal()
441 $ilCtrl->setParameter($this,
"ass_id",
"");
448 $participant_id = $_REQUEST[
'part_id'];
452 (
int) $this->exercise->getRefId(),
453 (
int) $this->exercise->getId(),
455 (
int) $participant_id
458 if ($download_task->run()) {
459 ilUtil::sendSuccess($this->lng->txt(
'exc_down_files_started_bg'),
true);
462 if ($this->assignment) {
463 $this->ctrl->redirect($this,
"members");
465 $this->ctrl->redirect($this,
"showParticipant");
473 $exc_tab->resetOffset();
474 $exc_tab->writeFilterToSession();
482 $exc_tab->resetOffset();
483 $exc_tab->resetFilter();
496 if (is_array(
$_POST[
"lcomment"])) {
497 foreach (
$_POST[
"lcomment"] as $k => $v) {
498 $marks_obj =
new ilLPMarks($this->exercise->getId(), (
int) $k);
501 $marks_obj->update();
504 ilUtil::sendSuccess(
$lng->txt(
"exc_msg_saved_grades"),
true);
505 $ilCtrl->redirect($this,
"showGradesOverview");
520 $button_print = $this->ui_factory->button()->standard($this->lng->txt(
'print'),
"#")
521 ->withOnLoadCode(
function ($id) {
522 return "$('#{$id}').click(function() { window.print(); return false; });";
524 $this->toolbar->addSeparator();
525 $this->toolbar->addComponent($button_print);
527 $group_panels_tpl =
new ilTemplate(
"tpl.exc_group_report_panels.html",
true,
true,
"Modules/Exercise");
528 $group_panels_tpl->setVariable(
'TITLE', $this->lng->txt(
"exc_list_text_assignment") .
": " . $this->assignment->getTitle());
535 $members = $members_filter->filterParticipantsByAccess();
540 $submission_data = $this->assignment->getExerciseMemberAssignmentData($file[
"user_id"], $this->
filter[
"status"]);
542 if (is_array($submission_data)) {
543 $data = array_merge($feedback_data, $submission_data);
549 if ($total_reports == 0) {
550 $mtpl =
new ilTemplate(
"tpl.message.html",
true,
true,
"Services/Utilities");
551 $mtpl->setCurrentBlock(
"info_message");
552 $mtpl->setVariable(
"TEXT", $this->lng->txt(
"fiter_no_results"));
553 $mtpl->parseCurrentBlock();
554 $report_html .= $mtpl->get();
557 $group_panels_tpl->setVariable(
'CONTENT', $report_html);
558 $this->tpl->setContent($group_panels_tpl->get());
570 $group_panels_tpl =
new ilTemplate(
"tpl.exc_group_report_panels.html",
true,
true,
"Modules/Exercise");
571 $group_panels_tpl->setVariable(
'TITLE', $this->lng->txt(
"exc_compare_selected_submissions"));
577 foreach ($participants as $participant_id) {
578 $submission =
new ilExSubmission($this->assignment, $participant_id);
581 $file = reset($submission->getFiles());
585 "user_id" => $participant_id,
593 $submission_data = $this->assignment->getExerciseMemberAssignmentData($file[
"user_id"], $this->
filter[
"status"]);
595 if (is_array($submission_data)) {
596 $data = array_merge($feedback_data, $submission_data);
602 $group_panels_tpl->setVariable(
'CONTENT', $report_html);
603 $this->tpl->setContent($group_panels_tpl->get());
610 $this->ctrl->setParameter($this,
"member_id", $a_data[
'uid']);
612 $this->ui_factory->button()->shy($this->lng->txt(
"grade_evaluate"),
"#")->withOnClick($modal->getShowSignal())
615 if ($this->exercise->hasTutorFeedbackMail()) {
616 $actions[] = $this->ui_factory->button()->shy(
617 $this->lng->txt(
"exc_tbl_action_feedback_mail"),
618 $this->ctrl->getLinkTarget($this,
"redirectFeedbackMail")
621 if ($this->exercise->hasTutorFeedbackFile()) {
622 $actions[] = $this->ui_factory->button()->shy(
623 $this->lng->txt(
"exc_tbl_action_feedback_file"),
624 $this->ctrl->getLinkTargetByClass(
"ilFileSystemGUI",
"listFiles")
628 $this->ctrl->setParameter($this,
"member_id",
"");
630 $actions_dropdown = $this->ui_factory->dropdown()->standard($actions);
632 if ($a_data[
'status'] == self::GRADE_NOT_GRADED) {
633 $str_status_key = $this->lng->txt(
'exc_tbl_status');
634 $str_status_value = $this->lng->txt(
'not_yet');
636 $str_status_key = $this->lng->txt(
'exc_tbl_status_time');
640 $str_mark_key = $this->lng->txt(
"exc_tbl_mark");
641 $str_mark_value = $this->lng->txt(
'not_yet');
643 if (($a_data[
'mark'] !=
"")) {
644 $str_mark_value = $a_data[
'mark'];
647 if ($a_data[
'feedback_time']) {
648 $str_evaluation_key = $this->lng->txt(
'exc_tbl_feedback_time');
651 $str_evaluation_key = $this->lng->txt(
'exc_settings_feedback');
652 $str_evaluation_value = $this->lng->txt(
'not_yet');
655 $card_content = array(
657 $str_status_key => $str_status_value,
658 $str_mark_key => $str_mark_value,
659 $str_evaluation_key => $str_evaluation_value,
660 $this->lng->txt(
'feedback_given') => $a_data[
'fb_given'],
661 $this->lng->txt(
'feedback_received') => $a_data[
'fb_received']
663 $card_tpl =
new ilTemplate(
"tpl.exc_report_details_card.html",
true,
true,
"Modules/Exercise");
664 foreach ($card_content as $key => $value) {
665 $card_tpl->setCurrentBlock(
"assingment_card");
666 $card_tpl->setVariable(
"ROW_KEY", $key);
667 $card_tpl->setVariable(
"ROW_VALUE", $value);
668 $card_tpl->parseCurrentBlock();
671 $main_panel = $this->ui_factory->panel()->sub($a_data[
'uname'], $this->ui_factory->legacy($a_data[
'utext']))
672 ->withCard($this->ui_factory->card()->standard($this->lng->txt(
'text_assignment'))->withSections(array($this->ui_factory->legacy($card_tpl->get()))))->withActions($actions_dropdown);
674 $feedback_tpl =
new ilTemplate(
"tpl.exc_report_feedback.html",
true,
true,
"Modules/Exercise");
676 if (array_key_exists(
"peer", $a_data) && ($this->
filter[
"feedback"] == self::FEEDBACK_FULL_SUBMISSION) || $this->
filter[
"feedback"] ==
"") {
677 $feedback_tpl->setCurrentBlock(
"feedback");
678 foreach ($a_data[
"peer"] as $peer_id) {
681 $peer_name =
$user->getFirstname() .
" " .
$user->getLastname();
683 $peer_name = $this->lng->txt(
"exc_deleted_user");
686 $feedback_tpl->setCurrentBlock(
"peer_feedback");
687 $feedback_tpl->setVariable(
"PEER_NAME", $peer_name);
689 $submission =
new ilExSubmission($this->assignment, $a_data[
"uid"]);
690 $values = $submission->getPeerReview()->getPeerReviewValues($peer_id, $a_data[
"uid"]);
693 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
694 $crit_id = $crit->getId()
697 $crit->setPeerReviewContext($this->assignment, $peer_id, $a_data[
"uid"]);
700 '<div class="ilBlockPropertyCaption">' . $crit->getTitle() .
'</div>' .
701 '<div style="margin:2px 0;">' . $crit->getHTML($values[$crit_id]) .
'</div>';
703 $feedback_tpl->setVariable(
"PEER_FEEDBACK", $review_html);
704 $feedback_tpl->parseCurrentBlock();
706 $feedback_tpl->parseCurrentBlock();
708 $feedback_tpl->setVariable(
"GRADE", $this->lng->txt(
'grade') .
": " . $this->lng->txt(
'exc_' . $a_data[
'status']));
709 $feedback_tpl->setVariable(
"COMMENT", $this->lng->txt(
'exc_comment') .
"<br>" . $a_data[
'comment']);
711 $feedback_panel = $this->ui_factory->panel()->sub(
"", $this->ui_factory->legacy($feedback_tpl->get()));
713 $report = $this->ui_factory->panel()->report(
"", array($main_panel, $feedback_panel));
715 return $this->ui_renderer->render([$modal,$report]);
720 $modal_tpl =
new ilTemplate(
"tpl.exc_report_evaluation_modal.html",
true,
true,
"Modules/Exercise");
721 $modal_tpl->setVariable(
"USER_NAME", $a_data[
'uname']);
724 $form->setFormAction($this->ctrl->getFormAction($this,
"saveEvaluationFromModal"));
725 $form->setId(uniqid(
'form'));
729 self::GRADE_NOT_GRADED => $this->lng->txt(
"exc_notgraded"),
730 self::GRADE_PASSED => $this->lng->txt(
"exc_passed"),
731 self::GRADE_FAILED => $this->lng->txt(
"exc_failed")
734 $si->setOptions($options);
735 $si->setValue($a_data[
'status']);
739 $mark_input =
new ilTextInputGUI($this->lng->txt(
"exc_tbl_mark"),
"mark");
740 $mark_input->setValue($a_data[
'mark']);
741 $mark_input->setMaxLength(32);
742 $mark_input->setSize(4);
743 $form->addItem($mark_input);
746 $item->setValue($a_data[
'uid']);
747 $form->addItem($item);
750 if ($this->exercise->hasTutorFeedbackText()) {
753 $u_text = strip_tags($a_data[
"utext"]);
756 if (strlen($u_text) > $max_chars) {
757 $text =
"<input type='checkbox' class='read-more-state' id='post-1' />";
758 $text .=
"<div class='read-more-wrap'>";
759 $text .= mb_substr($u_text, 0, $max_chars);
760 $text .=
"<span class='read-more-target'>";
761 $text .= mb_substr($u_text, $max_chars);
762 $text .=
"</span></div>";
763 $text .=
"<label for='post-1' class='read-more-trigger'></label>";
765 $modal_tpl->setVariable(
"USER_TEXT", $text);
768 $ta->setInfo($this->lng->txt(
"exc_comment_for_learner_info"));
769 $ta->setValue($a_data[
'comment']);
774 $modal_tpl->setVariable(
"FORM", $form->getHTML());
776 $form_id =
'form_' . $form->getId();
777 $submit_btn = $this->ui_factory->button()->primary($this->lng->txt(
"save"),
'#')
778 ->withOnLoadCode(
function ($id) use ($form_id) {
779 return "$('#{$id}').click(function() { $('#{$form_id}').submit(); return false; });";
782 return $this->ui_factory->modal()->roundtrip(strtoupper($this->lng->txt(
"grade_evaluate")), $this->ui_factory->legacy($modal_tpl->get()))->withActionButtons([$submit_btn]);
791 $user_id = (int)
$_POST[
'mem_id'];
792 $grade = trim(
$_POST[
"grade"]);
793 $mark = trim(
$_POST[
'mark']);
795 if ($this->assignment->getId() && $user_id) {
796 $member_status = $this->assignment->getMemberStatus($user_id);
798 $member_status->setStatus($grade);
799 $member_status->setMark($mark);
801 $member_status->setFeedback(
true);
803 $member_status->update();
805 ilUtil::sendSuccess($this->lng->txt(
"exc_status_saved"),
true);
806 $this->ctrl->redirect($this,
"listTextAssignment");
814 if (!strlen(trim(
$_POST[
'user_login']))) {
819 $users = explode(
',',
$_POST[
'user_login']);
822 foreach ($users as
$user) {
830 $user_ids[] = $user_id;
845 if (!count($a_user_ids)) {
850 if (!$this->exercise->members_obj->assignMembers($a_user_ids)) {
869 ilUtil::sendSuccess($this->lng->txt(
"exc_members_assigned"),
true);
872 $this->ctrl->redirect($this,
"members");
897 $this->ctrl->setParameter($this,
"ass_id",
"");
901 $members = $this->exercise->members_obj->getMembers();
903 $members =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
904 'edit_submissions_grades',
905 'edit_submissions_grades',
906 $this->exercise->getRefId(),
911 if (count($members) == 0) {
917 foreach ($members as $mem_id) {
920 if (trim(
$name[
"login"]) !=
"") {
921 $mems[$mem_id] =
$name;
928 if (
$_GET[
"part_id"] ==
"" && count($mems) > 0) {
929 $_GET[
"part_id"] = key($mems);
932 $current_participant =
$_GET[
"part_id"];
935 if (count($mems) > 1) {
937 foreach ($mems as $k => $m) {
939 $m[
"lastname"] .
", " . $m[
"firstname"] .
" [" . $m[
"login"] .
"]";
942 $si->setOptions($options);
943 $si->setValue($current_participant);
944 $ilToolbar->addStickyItem(
$si,
true);
947 $button->setCaption(
"select");
948 $button->setCommand(
"selectParticipant");
949 $ilToolbar->addStickyItem($button);
952 if (count($mems) > 0) {
953 $this->ctrl->setParameter($this,
"vw", self::VIEW_PARTICIPANT);
954 $this->ctrl->setParameter($this,
"part_id", $current_participant);
956 $ilToolbar->addSeparator();
957 $ilToolbar->setFormAction($ilCtrl->getFormAction($this));
958 $ilToolbar->addFormButton(
$lng->txt(
"download_all_returned_files"),
"downloadSubmissions");
966 $tpl->setContent($part_tab->getHTML() .
967 $this->initIndividualDeadlineModal());
976 $exc_tab->resetOffset();
977 $exc_tab->writeFilterToSession();
985 $exc_tab->resetOffset();
986 $exc_tab->resetFilter();
1013 $mems = $mem_obj->getMembers();
1015 $mems =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
1016 'edit_submissions_grades',
1017 'edit_submissions_grades',
1018 $this->exercise->getRefId(),
1021 if (count($mems) > 0) {
1022 $ilToolbar->addButton(
1023 $lng->txt(
"exc_export_excel"),
1024 $ilCtrl->getLinkTarget($this,
"exportExcel")
1028 $this->ctrl->setParameter($this,
"vw", self::VIEW_GRADES);
1032 "showGradesOverview",
1036 $tpl->setContent($grades_tab->getHTML());
1046 if (
$_GET[
"member_id"] !=
"") {
1048 $members = $submission->getUserIds();
1050 $members = array_keys($members);
1055 foreach ($members as $user_id) {
1056 $member_status = $this->assignment->getMemberStatus($user_id);
1057 $member_status->setFeedback(
true);
1058 $member_status->update();
1062 $logins = implode(
",", $logins);
1065 $sig = chr(13) . chr(10) . chr(13) . chr(10);
1066 $sig .= $this->lng->txt(
'exc_mail_permanent_link');
1067 $sig .= chr(13) . chr(10) . chr(13) . chr(10);
1069 $sig = rawurlencode(base64_encode($sig));
1077 'rcp_to' => $logins,
1091 foreach ($this->exercise->members_obj->getMembers() as $member_id) {
1093 $submission->updateTutorDownloadTime();
1099 foreach ($submission->getFiles() as $file) {
1100 if ($this->assignment->getAssignmentType()->isSubmissionAssignedToTeam()) {
1101 $storage_id = $file[
"team_id"];
1103 $storage_id = $file[
"user_id"];
1106 $members[$storage_id][
"files"][$file[
"returned_id"]] = $file;
1108 if ($this->assignment->getAssignmentType()->isSubmissionAssignedToTeam()) {
1109 $name =
"Team " . $submission->getTeam()->getId();
1112 $name = $tmp_obj->getFirstname() .
" " . $tmp_obj->getLastname();
1114 if ($storage_id > 0) {
1115 $members[$storage_id][
"name"] =
$name;
1127 if ($this->assignment) {
1130 $this->ctrl->redirect($this,
"members");
1133 foreach (array_keys(
$_POST[
"member"]) as $user_id) {
1135 $tmembers = $submission->getUserIds();
1136 if (!(
bool) $a_keep_teams) {
1137 foreach ($tmembers as $tuser_id) {
1138 $members[$tuser_id] = 1;
1142 $members[] = $tmembers;
1145 $members[] = $user_id;
1154 $this->ctrl->redirect($this,
"showParticipant");
1157 $user_id =
$_GET[
"part_id"];
1159 foreach (array_keys(
$_POST[
"ass"]) as $ass_id) {
1161 $tmembers = $submission->getUserIds();
1162 if (!(
bool) $a_keep_teams) {
1163 foreach ($tmembers as $tuser_id) {
1164 $members[$ass_id][] = $tuser_id;
1168 $members[$ass_id][] = $tmembers;
1171 $members[$ass_id][] = $user_id;
1187 ilUtil::sendSuccess($this->lng->txt(
"exc_sent"),
true);
1188 if ($this->assignment) {
1189 $this->exercise->sendAssignment($this->assignment, array_keys($members));
1190 $this->ctrl->redirect($this,
"members");
1192 foreach ($members as $ass_id => $users) {
1193 $this->exercise->sendAssignment(
new ilExAssignment($ass_id), $users);
1195 $this->ctrl->setParameter($this,
"part_id",
$_GET[
"part_id"]);
1196 $this->ctrl->redirect($this,
"showParticipant");
1212 $cgui->setFormAction($ilCtrl->getFormAction($this));
1213 $cgui->setHeaderText(
$lng->txt(
"exc_msg_sure_to_deassign_participant"));
1214 $cgui->setCancel(
$lng->txt(
"cancel"),
"members");
1215 $cgui->setConfirm(
$lng->txt(
"remove"),
"deassignMembers");
1217 foreach ($members as $k => $m) {
1225 $tpl->setContent($cgui->getHTML());
1238 foreach (array_keys($members) as $usr_id) {
1239 $this->exercise->members_obj->deassignMember((
int) $usr_id);
1242 ilUtil::sendSuccess(
$lng->txt(
"exc_msg_participants_removed"),
true);
1243 $ilCtrl->redirect($this,
"members");
1249 $storage->deleteUserSubmissionDirectory($user_id);
1254 if (!isset(
$_POST[
'comments_value'])) {
1258 $this->exercise->members_obj->setNoticeForMember(
1262 ilUtil::sendSuccess($this->lng->txt(
"exc_members_comments_saved"));
1273 $member_id = (int)
$_GET[
"part_id"];
1275 foreach (array_keys(
$_POST[
"id"]) as $ass_id) {
1276 if (is_array($a_selected) &&
1277 !in_array($ass_id, $a_selected)) {
1281 $data[$ass_id][$member_id] = array(
1285 if (array_key_exists(
"mark",
$_POST)) {
1288 if (array_key_exists(
"notice",
$_POST)) {
1293 $ilCtrl->setParameter($this,
"part_id", $member_id);
1300 $user_ids = (array) array_keys((array)
$_POST[
'id']);
1301 $filtered_user_ids =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
1302 'edit_submissions_grades',
1303 'edit_submissions_grades',
1304 $this->exercise->getRefId(),
1309 foreach ($filtered_user_ids as $user_id) {
1310 if (is_array($a_selected) &&
1311 !in_array($user_id, $a_selected)) {
1315 $data[-1][$user_id] = array(
1319 if (array_key_exists(
"mark",
$_POST)) {
1322 if (array_key_exists(
"notice",
$_POST)) {
1333 if ($this->assignment) {
1347 $saved_for = array();
1348 foreach ($a_data as $ass_id => $users) {
1349 $ass = ($ass_id < 0)
1352 foreach ($users as $user_id => $values) {
1355 foreach ($submission->getUserIds() as $sub_user_id) {
1357 $saved_for[$sub_user_id] = $uname[
"lastname"] .
", " . $uname[
"firstname"];
1359 $member_status = $ass->getMemberStatus($sub_user_id);
1362 $status = $values[
"status"];
1363 if ($status ==
"") {
1366 $member_status->setStatus($status);
1367 if (array_key_exists(
"mark", $values)) {
1368 $member_status->setMark($values[
"mark"]);
1370 if (array_key_exists(
"notice", $values)) {
1371 $member_status->setNotice($values[
"notice"]);
1373 $member_status->update();
1378 if (count($saved_for) > 0) {
1379 $save_for_str =
"(" . implode(
" - ", $saved_for) .
")";
1383 ilUtil::sendSuccess($this->lng->txt(
"exc_status_saved") .
" " . $save_for_str,
true);
1393 $res = array(
"result" =>
false);
1395 if ($this->ctrl->isAsynch()) {
1396 $ass_id = (int)
$_POST[
"ass_id"];
1397 $user_id = (int)
$_POST[
"mem_id"];
1400 if ($ass_id && $user_id) {
1402 $user_ids = $submission->getUserIds();
1405 $all_members = $all_members->getMembers();
1407 $reci_ids = array();
1408 foreach ($user_ids as $user_id) {
1409 if (in_array($user_id, $all_members)) {
1410 $member_status = $this->assignment->getMemberStatus($user_id);
1412 $member_status->setFeedback(
true);
1413 $member_status->update();
1416 $reci_ids[] = $user_id;
1421 if (
sizeof($reci_ids)) {
1423 $this->exercise->sendFeedbackFileNotification(
1431 $res = array(
"result" =>
true,
"snippet" => nl2br(
$comment));
1435 echo(json_encode(
$res));
1444 $this->exercise->exportGradesExcel();
1459 $new_members = array();
1461 foreach ($members as $group) {
1462 if (is_array($group)) {
1463 $new_members = array_merge($new_members, $group);
1465 $first_user = $group;
1466 $first_user = array_shift($first_user);
1468 foreach ($group as $user_id) {
1469 $team->removeTeamMember($user_id);
1472 $new_members[] = $group;
1476 if (
sizeof($new_members)) {
1479 $first_user = array_shift($new_members);
1481 if (
sizeof($new_members)) {
1482 foreach ($new_members as $user_id) {
1483 $team->addTeamMember($user_id);
1488 $submission =
new ilExSubmission($this->assignment, $first_user);
1489 $this->exercise->processExerciseStatus(
1491 $team->getMembers(),
1492 $submission->hasSubmitted(),
1493 $submission->validatePeerReviews()
1497 ilUtil::sendSuccess($this->lng->txt(
"msg_obj_modified"),
true);
1498 $ilCtrl->redirect($this,
"members");
1507 foreach ($members as $group) {
1509 if (is_array($group)) {
1512 $first_user = $group;
1513 $first_user = array_shift($first_user);
1515 foreach ($group as $user_id) {
1516 $team->removeTeamMember($user_id);
1520 $this->exercise->processExerciseStatus(
1528 ilUtil::sendSuccess($this->lng->txt(
"msg_obj_modified"),
true);
1529 $ilCtrl->redirect($this,
"members");
1539 $ilTabs->clearTargets();
1540 $ilTabs->setBackTarget(
1542 $ilCtrl->getLinkTarget($this, $this->getViewBack())
1548 $tpl->setContent($a_form->getHTML());
1556 $form->setTitle(
$lng->txt(
"exc_adopt_group_teams") .
" - " . $this->assignment->getTitle());
1557 $form->setFormAction($this->ctrl->getFormAction($this,
"createTeamsFromGroups"));
1559 $all_members = array();
1561 if (
sizeof($group[
"members"])) {
1563 $grp_value = $options = array();
1564 foreach ($group[
"members"] as $user_id) {
1566 $options[$user_id] = $user_name;
1567 if (!in_array($user_id, $all_members)) {
1568 $grp_value[] = $user_id;
1569 $all_members[] = $user_id;
1573 foreach ($options as $user_id => $user_name) {
1576 $grp_team->setValue($grp_value);
1577 $form->addItem($grp_team);
1580 $grp_team->setValue(
$lng->txt(
"exc_adopt_group_teams_no_members"));
1581 $form->addItem($grp_team);
1585 if (
sizeof($all_members)) {
1586 $form->addCommandButton(
"createTeamsFromGroups",
$lng->txt(
"save"));
1588 $form->addCommandButton(
"members",
$lng->txt(
"cancel"));
1598 if ($form->checkInput()) {
1600 $all_members = $teams = array();
1602 foreach (array_keys($map) as $grp_id) {
1603 $postvar =
"grpt_" . $grp_id;
1604 $members =
$_POST[$postvar];
1605 if (is_array($members)) {
1606 $teams[] = $members;
1607 $invalid_team_members = array();
1609 foreach ($members as $user_id) {
1610 if (!array_key_exists($user_id, $all_members)) {
1611 $all_members[$user_id] = $grp_id;
1614 $invalid_team_members[] = $user_id;
1618 if (
sizeof($invalid_team_members)) {
1622 foreach ($invalid_team_members as $user_id) {
1624 $grp_title = $map[$all_members[$user_id]][
"title"];
1625 $alert[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_conflict"), $user_name, $grp_title);
1627 $input = $form->getItemByPostVar($postvar);
1628 $input->setAlert(implode(
"<br/>", $alert));
1633 if (
sizeof($teams)) {
1637 $sum = array(
"added" => 0,
"blocked" => 0);
1638 foreach ($teams as $members) {
1639 foreach ($members as $user_id) {
1640 if (!$this->exercise->members_obj->isAssigned($user_id)) {
1641 $this->exercise->members_obj->assignMember($user_id);
1644 if (!in_array($user_id, $existing_users)) {
1651 $first = array_shift($members);
1657 if (
sizeof($members)) {
1658 foreach ($members as $user_id) {
1659 $team->addTeamMember($user_id);
1665 if ($sum[
"added"]) {
1666 $mess[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_added"), $sum[
"added"]);
1668 if ($sum[
"blocked"]) {
1669 $mess[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_blocked"), $sum[
"blocked"]);
1671 if ($sum[
"added"]) {
1672 ilUtil::sendSuccess(implode(
" ", $mess),
true);
1677 $this->ctrl->redirect($this,
"members");
1683 $form->setValuesByPost();
1697 $form->addCommandButton(
"uploadMultiFeedback",
$lng->txt(
"upload"));
1698 $form->addCommandButton(
"members",
$lng->txt(
"cancel"));
1702 $fi->setSuffixes(array(
"zip"));
1703 $fi->setRequired(
true);
1704 $form->addItem($fi);
1707 $form->setFormAction($this->ctrl->getFormAction($this,
"uploadMultiFeedback"));
1730 $button->setCaption(
"exc_download_zip_structure");
1731 $button->setUrl($this->ctrl->getLinkTarget($this,
"downloadMultiFeedbackZip"));
1732 $button->setOmitPreventDoubleSubmission(
true);
1733 $ilToolbar->addButtonInstance($button);
1739 $tpl->setContent($a_form->getHTML());
1747 $this->assignment->sendMultiFeedbackStructureFile($this->exercise);
1757 if ($form->checkInput()) {
1760 $this->ctrl->redirect($this,
"showMultiFeedbackConfirmationTable");
1763 $this->ctrl->redirect($this,
"showMultiFeedback");
1767 $form->setValuesByPost();
1784 $tpl->setContent($tab->getHTML());
1792 $this->assignment->clearMultiFeedbackDirectory();
1793 $this->ctrl->redirect($this,
"members");
1801 $this->assignment->saveMultiFeedbackFiles(
$_POST[
"file"], $this->exercise);
1803 ilUtil::sendSuccess($this->lng->txt(
"msg_obj_modified"),
true);
1804 $this->ctrl->redirect($this,
"members");
1819 $modal->setHeading(
$lng->txt(
"exc_individual_deadline"));
1820 $modal->setId(
"ilExcIDl");
1821 $modal->setBody(
'<div id="ilExcIDlBody"></div>');
1822 $modal = $modal->getHTML();
1824 $ajax_url = $this->ctrl->getLinkTarget($this,
"handleIndividualDeadlineCalls",
"",
true,
false);
1826 $tpl->addJavaScript(
"./Modules/Exercise/js/ilExcIDl.js",
true, 3);
1827 $tpl->addOnloadCode(
'il.ExcIDl.init("' . $ajax_url .
'");');
1839 foreach ($a_data as $item) {
1840 $item = explode(
"_", $item);
1842 $user_id = $item[1];
1844 if (!array_key_exists($ass_id, $ass_tmp)) {
1845 if ($this->assignment &&
1846 $ass_id == $this->assignment->getId()) {
1853 $map[$ass_id][] = $user_id;
1856 return array($map, $ass_tmp);
1864 $this->ctrl->saveParameter($this,
"part_id");
1867 if ((
bool)
$_GET[
"dn"]) {
1868 ilUtil::sendSuccess($this->lng->txt(
"settings_saved"),
true);
1869 $this->ctrl->redirect($this, $this->assignment
1871 :
"showParticipant");
1875 if (
$_GET[
"idlid"]) {
1877 if (is_array($tmp)) {
1879 echo $form->getHTML() .
1880 $tpl->getOnLoadCodeForAsynch();
1886 foreach (array_keys(
$_POST) as $id) {
1887 if (substr($id, 0, 3) ==
"dl_") {
1888 $tmp[] = substr($id, 3);
1898 if (
$valid = $form->checkInput()) {
1899 foreach ($users as $ass_id => $users) {
1900 $ass = $ass_map[$ass_id];
1905 foreach ($users as $user_id) {
1906 $date_field = $form->getItemByPostVar(
"dl_" . $ass_id .
"_" . $user_id);
1911 $res[$ass_id][$user_id] = $date_field->getDate();
1918 $form->setValuesByPost();
1919 echo $form->getHTML() .
1920 $tpl->getOnLoadCodeForAsynch();
1922 foreach (
$res as $ass_id => $users) {
1923 $ass = $ass_map[$ass_id];
1925 foreach ($users as $id => $date) {
1926 $ass->setIndividualDeadline($id, $date);
1929 $ass->recalculateLateSubmissions();
1942 $form->setFormAction($this->ctrl->getFormAction($this));
1943 $form->setName(
"ilExcIDlForm");
1945 foreach ($ids as $ass_id => $users) {
1946 $ass = $a_ass_map[$ass_id];
1949 $section->setTitle($ass->getTitle());
1954 $values = $ass->getIndividualDeadlines();
1956 foreach ($users as $id) {
1958 if (is_numeric($id)) {
1965 $team_id = (int) substr($id, 1);
1966 if (array_key_exists($team_id, $teams)) {
1968 foreach ($teams[$team_id]->getMembers() as $member_id) {
1970 $name[] = $uname[
"lastname"] .
", " . $uname[
"firstname"];
1978 $dl->setShowTime(
true);
1979 $dl->setRequired(
true);
1980 $form->addItem($dl);
1982 if (array_key_exists($id, $values)) {
1988 $form->addCommandButton(
"", $this->lng->txt(
"save"));
1998 if ($this->assignment) {
2007 if (
$_POST[
"filter_status"]) {
2011 if (
$_POST[
"filter_feedback"]) {
2015 $this->lng->loadLanguageModule(
"search");
2017 $this->toolbar->setFormAction($this->ctrl->getFormAction($this,
"listTextAssignment"));
2021 if (
$_POST[
"filter_status"]) {
2025 $si_status =
new ilSelectInputGUI($this->lng->txt(
"exc_tbl_status"),
"filter_status");
2027 "" => $this->lng->txt(
"search_any"),
2028 self::GRADE_NOT_GRADED => $this->lng->txt(
"exc_notgraded"),
2029 self::GRADE_PASSED => $this->lng->txt(
"exc_passed"),
2030 self::GRADE_FAILED => $this->lng->txt(
"exc_failed")
2032 $si_status->setOptions($options);
2033 $si_status->setValue($this->
filter[
"status"]);
2035 $si_feedback =
new ilSelectInputGUI($this->lng->txt(
"feedback"),
"filter_feedback");
2037 self::FEEDBACK_FULL_SUBMISSION => $this->lng->txt(
"submissions_feedback"),
2038 self::FEEDBACK_ONLY_SUBMISSION => $this->lng->txt(
"submissions_only")
2040 $si_feedback->setOptions($options);
2041 $si_feedback->setValue($this->
filter[
"feedback"]);
2043 $this->toolbar->addInputItem($si_status,
true);
2047 if ($this->assignment->getPeerReview()) {
2048 if (
$_POST[
"filter_feedback"]) {
2051 $this->
filter[
"feedback"] =
"submission_feedback";
2054 $si_feedback =
new ilSelectInputGUI($this->lng->txt(
"feedback"),
"filter_feedback");
2056 "submission_feedback" => $this->lng->txt(
"submissions_feedback"),
2057 "submission_only" => $this->lng->txt(
"submissions_only")
2059 $si_feedback->setOptions($options);
2060 $si_feedback->setValue($this->
filter[
"feedback"]);
2062 $this->toolbar->addInputItem($si_feedback,
true);
2067 $submit->setCaption(
"filter");
2068 $submit->setCommand(
"listTextAssignment");
2069 $this->toolbar->addButtonInstance($submit);
2079 $ass_id = (int)
$_GET[
"ass_id"];
2080 $member_id = (int)
$_GET[
"member_id"];
2084 $last_opening = $submission->getLastOpeningHTMLView();
2086 $submission_time = $submission->getLastSubmission();
2092 list($obj_date, $obj_id) = explode(
"_", basename($zip_original_full_path));
2094 $obj_dir = $this->assignment->getAssignmentType()->getStringIdentifier() .
"_" . $obj_id;
2097 DIRECTORY_SEPARATOR .
2099 DIRECTORY_SEPARATOR .
2100 dirname($zip_internal_path) .
2101 DIRECTORY_SEPARATOR .
2103 DIRECTORY_SEPARATOR .
2108 $web_filesystem =
$DIC->filesystem()->web();
2110 if ($last_opening > $submission_time && $web_filesystem->has($index_html_file)) {
2113 if ($zip_original_full_path) {
2114 $file_copied = $this->
copyFileToWebDir($zip_original_full_path, $zip_internal_path);
2119 $web_filesystem->delete($zip_internal_path);
2122 $submission_repository->updateWebDirAccessTime($this->assignment->getId(), $member_id);
2127 $error_msg = $this->lng->txt(
"exc_copy_zip_error");
2131 $error_msg = $this->lng->txt(
"exc_find_zip_error");
2144 $submitted = $submission->
getFiles();
2146 if (count($submitted) > 0) {
2147 $submitted = array_pop($submitted);
2149 return $submitted[
'filename'];
2161 protected function copyFileToWebDir(
string $origin_path_filename,
string $internal_file_path) : ?string
2165 $web_filesystem =
$DIC->filesystem()->web();
2166 $data_filesystem =
$DIC->filesystem()->storage();
2168 $internal_dirs = dirname($internal_file_path);
2169 $zip_file = basename($internal_file_path);
2171 if ($data_filesystem->has($internal_file_path)) {
2172 if (!$web_filesystem->hasDir($internal_dirs)) {
2173 $web_filesystem->createDir($internal_dirs);
2176 if (!$web_filesystem->has($internal_file_path)) {
2177 $stream = $data_filesystem->readStream($internal_file_path);
2178 $web_filesystem->writeStream($internal_file_path, $stream);
2180 return ILIAS_ABSOLUTE_PATH .
2181 DIRECTORY_SEPARATOR .
2183 DIRECTORY_SEPARATOR .
2185 DIRECTORY_SEPARATOR .
2187 DIRECTORY_SEPARATOR .
2202 list($external_path, $internal_file_path) = explode(
CLIENT_ID .
"/", $external_file_path);
2204 return $internal_file_path;
2213 $this->tabs_gui->clearTargets();
2214 $this->tabs_gui->setBackTarget(
2215 $this->lng->txt(
"back"),
2216 $this->ctrl->getLinkTarget($this,
"members")
2227 $uname =
$user->getFirstname() .
" " .
$user->getLastname();
2230 "uid" => $a_data[
"user_id"],
2232 "udate" => $a_data[
"ts"],
2238 $data[
"peer"] = array();
2239 foreach ($peer_review->getPeerReviewsByPeerId($a_data[
'user_id']) as $key => $value) {
2240 $data[
"peer"][] = $value[
'giver_id'];
2244 $data[
"fb_given"] = $peer_review->countGivenFeedback(
true, $a_data[
"user_id"]);
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
An exception for terminatinating execution or to throw for unit testing.
static initDateTimePicker()
This class represents an option in a checkbox group.
Confirmation screen class.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date @access public.
@classDescription Date and time handling
static _before(ilDateTime $start, ilDateTime $end, $a_compare_field='', $a_tz='')
compare two dates and check start is before end This method does not consider tz offsets.
Download submissions and feedback for exercises.
static getAdoptableGroups($a_exc_ref_id)
static getGroupMembersMap($a_exc_ref_id)
static getAssignmentTeamMap($a_ass_id)
Get team structure for assignment.
static getInstanceByUserId($a_assignment_id, $a_user_id, $a_create_on_demand=false)
static getInstancesFromMap($a_assignment_id)
static getInstancesByExercise($a_exc_id)
static getAssignmentDataOfExercise($a_exc_id)
Get assignments data of an exercise in an array.
static lookupTitle($a_id)
Lookup title.
Exercise participant table.
Exercise participant table.
Object-based submissions (ends up as static file)
Exercise submission //TODO: This class has to much static methods related to delivered "files".
static downloadAllAssignmentFiles(ilExAssignment $a_ass, array $members, $to_path)
Download all submitted files of an assignment (all user)
static getAssignmentFilesByUsers(int $a_exc_id, int $a_ass_id, array $a_users)
static getAssignmentParticipants(int $a_exercise_id, int $a_ass_id)
getFiles(array $a_file_ids=null, $a_only_valid=false, $a_min_timestamp=null)
Get submission items (not only files)
Exercise exceptions class.
Class ilExerciseManagementGUI.
collectFeedbackDataFromPeer(array $a_data)
initIndividualDeadlineModal()
initIndividualDeadlineForm(array $a_ass_map, array $ids)
selectAssignmentObject()
Select assignment.
exportExcelObject()
Export as excel.
copyFileToWebDir(string $origin_path_filename, string $internal_file_path)
Generate the directories and copy the file if necessary.
redirectFeedbackMailObject()
set feedback status for member and redirect to mail screen
showParticipantResetObject()
confirmDeassignMembersObject()
Confirm deassigning members.
addSubTabs($a_activate)
adds tabs to tab gui object
initMultiFeedbackForm($a_ass_id)
uploadMultiFeedbackObject()
Upload multi feedback file.
getMultiActionUserIds($a_keep_teams=false)
sendMembersObject()
Send assignment per mail to participants.
saveStatusAllObject(array $a_selected=null, $a_redirect=true)
showMultiFeedbackObject(ilPropertyFormGUI $a_form=null)
Show multi-feedback screen.
saveStatusParticipantObject(array $a_selected=null)
Save assignment status (participant view)
adoptTeamsFromGroupObject(ilPropertyFormGUI $a_form=null)
saveEvaluationFromModalObject()
Save assignment submission grade(status) and comment from the roundtrip modal.
getSubmissionZipFilePath(ilExSubmission $submission)
Returns the ZIP file path from outside web directory.
deassignMembersObject()
Deassign members from exercise.
saveStatusSelectedObject()
openSubmissionViewObject()
Open HTML view for portfolio submissions.
showMultiFeedbackConfirmationTableObject()
Show multi feedback confirmation table.
saveMultiFeedbackObject()
Save multi feedback.
setIndividualDeadlineObject()
downloadSubmissionsObject()
getWebFilePathFromExternalFilePath(string $external_file_path)
Get the object specific file path from an external full file path.
cancelMultiFeedbackObject()
Cancel Multi Feedback.
membersObject()
All participants and submission of one assignment.
parseIndividualDeadlineData(array $a_data)
showGradesOverviewObject()
Show grades overview.
addUserFromAutoCompleteObject()
Add user as member.
compareTextAssignmentsObject()
TODO -> Deal with the redirection after update the grade via action button.
listTextAssignmentObject()
todo: Pagination.
selectParticipantObject()
Select participant.
__construct(ilExerciseInternalService $service, ilExAssignment $a_ass=null)
Constructor.
showParticipantObject()
Show Participant.
saveGradesObject()
Save grades.
downloadAllObject()
Download all submitted files (of all members).
const FEEDBACK_ONLY_SUBMISSION
removeUserSubmissionFilesFromWebDir(int $user_id)
downloadMultiFeedbackZipObject()
Download multi-feedback structrue file.
handleIndividualDeadlineCallsObject()
addMembersObject($a_user_ids=array())
Add new partipant.
showParticipantApplyObject()
saveStatus(array $a_data, $a_redirect=true)
Save status of selecte members.
const FEEDBACK_FULL_SUBMISSION
saveCommentForLearnersObject()
Save comment for learner (asynch)
createTeamsFromGroupsObject()
getEvaluationModal($a_data)
Class ilExerciseMembersFilter.
File System Explorer GUI class.
static _getLink($a_ref_id, $a_type='', $a_params=array(), $append="")
static getLogger($a_component_id)
Get component logger.
static getInstance()
Get instance.
This class represents a non editable value in a property form.
static _lookupLogin($a_user_id)
lookup login
static _lookupId($a_user_str)
Lookup id by login.
static _lookupName($a_user_id)
lookup user name
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static _exists($a_id, $a_reference=false, $a_type=null)
checks if an object exists in object_data@access public
static _lookupType($a_id, $a_reference=false)
lookup object type
static _replaceMediaObjectImageSrc($a_text, $a_direction=0, $nic=IL_INST_ID)
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
static fillAutoCompleteToolbar($parent_object, ilToolbarGUI $toolbar=null, $a_options=array(), $a_sticky=false)
fill toolbar with
special template class to simplify handling of ITX/PEAR
This class represents a text area property in a property form.
This class represents a text property in a property form.
static getNamePresentation( $a_user_id, $a_user_image=false, $a_profile_link=false, $a_profile_back_link="", $a_force_first_lastname=false, $a_omit_login=false, $a_sortable=true, $a_return_data_array=false, $a_ctrl_path="ilpublicuserprofilegui")
Default behaviour is:
static sortArray( $array, $a_array_sortby, $a_array_sortorder=0, $a_numeric=false, $a_keep_keys=false)
sortArray
static redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static unzip(string $path_to_zip_file, bool $overwrite_existing=false, bool $unpack_flat=false)
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static stripSlashesArray($a_arr, $a_strip_html=true, $a_allow="")
Strip slashes from array.
static signFolderOfStartFile($start_file_path)
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
foreach($_POST as $key=> $value) $res