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"));
133 $class =
$ilCtrl->getNextClass($this);
137 case "ilfilesystemgui":
138 $ilTabs->clearTargets();
139 $ilTabs->setBackTarget(
141 $ilCtrl->getLinkTarget($this, $this->getViewBack())
150 $feedback_id = $submission->getFeedbackId();
151 $noti_rec_ids = $submission->getUserIds();
154 foreach ($noti_rec_ids as $rec_id) {
157 $fs_title = implode(
" / ", $fs_title);
159 $fs_gui =
new ilFileSystemGUI($fstorage->getFeedbackPath($feedback_id));
160 $fs_gui->setTableId(
"excfbfil" . $this->assignment->getId() .
"_" . $feedback_id);
161 $fs_gui->setAllowDirectories(
false);
162 $fs_gui->setTitle(
$lng->txt(
"exc_fb_files") .
" - " .
163 $this->assignment->getTitle() .
" - " .
165 $pcommand = $fs_gui->getLastPerformedCommand();
166 if (is_array($pcommand) && $pcommand[
"cmd"] ==
"create_file") {
167 foreach ($noti_rec_ids as $user_id) {
168 $member_status = $this->assignment->getMemberStatus($user_id);
169 $member_status->setFeedback(
true);
170 $member_status->update();
173 $this->exercise->sendFeedbackFileNotification(
176 $this->assignment->getId()
179 $this->ctrl->forwardCommand($fs_gui);
182 case 'ilrepositorysearchgui':
184 $ref_id = $this->exercise->getRefId();
185 $rep_search->addUserAccessFilterCallable(
function ($a_user_ids) use ($ref_id) {
186 return $GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
187 'edit_submissions_grades',
188 'edit_submissions_grades',
193 $rep_search->setTitle($this->lng->txt(
"exc_add_participant"));
194 $rep_search->setCallback($this,
'addMembersObject');
198 $this->ctrl->setReturn($this,
'members');
200 $this->ctrl->forwardCommand($rep_search);
203 case "ilexsubmissionteamgui":
208 case "ilexsubmissionfilegui":
213 case "ilexsubmissiontextgui":
214 $ilCtrl->saveParameter($this, array(
"part_id"));
219 case "ilexpeerreviewgui":
227 case 'downloadSubmissions':
228 $cmd =
$ilCtrl->getCmd(
"downloadSubmissions");
231 $cmd =
$ilCtrl->getCmd(
"listPublicSubmissions");
234 $this->{$cmd .
"Object"}();
241 switch ($_REQUEST[
"vw"]) {
243 $back_cmd =
"showParticipant";
247 $back_cmd =
"showGradesOverview";
252 $back_cmd =
"members";
261 $this->ctrl->setReturn($this, $back_cmd);
263 $this->tabs_gui->clearTargets();
264 $this->tabs_gui->setBackTarget(
265 $this->lng->txt(
"back"),
266 $this->ctrl->getLinkTarget($this, $back_cmd)
269 return new ilExSubmission($this->assignment, $_REQUEST[
"member_id"],
null,
true);
283 $ass_id =
$_GET[
"ass_id"];
284 $part_id =
$_GET[
"part_id"];
286 $ilCtrl->setParameter($this,
"vw",
"");
287 $ilCtrl->setParameter($this,
"member_id",
"");
288 $ilCtrl->setParameter($this,
"ass_id",
"");
289 $ilCtrl->setParameter($this,
"part_id",
"");
293 $lng->txt(
"exc_assignment_view"),
294 $ilCtrl->getLinkTarget($this,
"members")
298 $lng->txt(
"exc_participant_view"),
299 $ilCtrl->getLinkTarget($this,
"showParticipant")
303 $lng->txt(
"exc_grades_overview"),
304 $ilCtrl->getLinkTarget($this,
"showGradesOverview")
306 $ilTabs->activateSubTab($a_activate);
308 $ilCtrl->setParameter($this,
"ass_id", $ass_id);
309 $ilCtrl->setParameter($this,
"part_id", $part_id);
317 $ilCtrl->setParameterByClass(
"ilExSubmissionFileGUI",
"member_id", (
int)
$_GET[
"member_id"]);
318 $url =
$ilCtrl->getLinkTargetByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI",
"ilExerciseManagementGUI",
"ilExSubmissionFileGUI"),
"downloadNewReturned");
319 $js_url =
$ilCtrl->getLinkTargetByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI",
"ilExerciseManagementGUI",
"ilExSubmissionFileGUI"),
"downloadNewReturned",
"",
"",
false);
320 ilUtil::sendInfo(
$lng->txt(
"exc_wait_for_files") .
"<a href='$url'> " .
$lng->txt(
'exc_download_files') .
"</a><script>window.location.href ='" . $js_url .
"';</script>");
339 if (!$this->assignment) {
340 $this->assignment = current($ass);
344 if (count($ass) > 1) {
346 foreach ($ass as
$a) {
347 $options[
$a->getId()] =
$a->getTitle();
350 $si->setOptions($options);
351 $si->setValue($this->assignment->getId());
352 $ilToolbar->addStickyItem(
$si);
355 $button->setCaption(
"exc_select_ass");
356 $button->setCommand(
"selectAssignment");
357 $ilToolbar->addStickyItem($button);
359 $ilToolbar->addSeparator();
362 elseif ($this->assignment) {
363 $ilCtrl->setParameter($this,
"ass_id", $this->assignment->getId());
369 $has_rbac_access =
$GLOBALS[
'DIC']->access()->checkAccess(
370 'edit_submissions_grades',
372 $this->exercise->getRefId()
374 if ($has_rbac_access) {
379 'auto_complete_name' =>
$lng->txt(
'user'),
380 'submit_name' =>
$lng->txt(
'add'),
381 'add_search' =>
true,
382 'add_from_container' => $this->exercise->getRefId()
388 if (count($ass) > 0) {
389 if ($has_rbac_access) {
390 $ilToolbar->addSeparator();
394 $ilToolbar->setFormAction(
$ilCtrl->getFormAction($this));
396 $ilCtrl->setParameter($this,
"ass_id", $this->assignment->getId());
400 $ilToolbar->addButton(
401 $this->lng->txt(
"exc_adopt_group_teams"),
402 $this->ctrl->getLinkTarget($this,
"adoptTeamsFromGroup")
405 $ilToolbar->addSeparator();
407 } elseif ($this->exercise->hasTutorFeedbackFile()) {
408 if (!$this->assignment->getAssignmentType()->usesTeams()) {
410 $ilToolbar->addButton(
411 $this->lng->txt(
"exc_multi_feedback"),
412 $this->ctrl->getLinkTarget($this,
"showMultiFeedback")
415 $ilToolbar->addSeparator();
421 if ($submission_repository->hasSubmissions($this->assignment->getId())) {
422 $ass_type = $this->assignment->getType();
425 $ilToolbar->addFormButton(
$lng->txt(
"exc_list_text_assignment"),
"listTextAssignment");
427 $ilToolbar->addFormButton(
$lng->txt(
"download_all_returned_files"),
"downloadSubmissions");
429 $this->ctrl->setParameter($this,
"vw", self::VIEW_ASSIGNMENT);
433 $exc_tab->getHTML() .
434 $this->initIndividualDeadlineModal()
440 $ilCtrl->setParameter($this,
"ass_id",
"");
447 $participant_id = $_REQUEST[
'part_id'];
451 (
int) $this->exercise->getRefId(),
452 (
int) $this->exercise->getId(),
454 (
int) $participant_id
457 if ($download_task->run()) {
458 ilUtil::sendSuccess($this->lng->txt(
'exc_down_files_started_bg'),
true);
461 if ($this->assignment) {
462 $this->ctrl->redirect($this,
"members");
464 $this->ctrl->redirect($this,
"showParticipant");
472 $exc_tab->resetOffset();
473 $exc_tab->writeFilterToSession();
481 $exc_tab->resetOffset();
482 $exc_tab->resetFilter();
495 if (is_array(
$_POST[
"lcomment"])) {
496 foreach (
$_POST[
"lcomment"] as $k => $v) {
497 $marks_obj =
new ilLPMarks($this->exercise->getId(), (
int) $k);
500 $marks_obj->update();
503 ilUtil::sendSuccess(
$lng->txt(
"exc_msg_saved_grades"),
true);
504 $ilCtrl->redirect($this,
"showGradesOverview");
519 $button_print = $this->ui_factory->button()->standard($this->lng->txt(
'print'),
"#")
520 ->withOnLoadCode(
function ($id) {
521 return "$('#{$id}').click(function() { window.print(); return false; });";
523 $this->toolbar->addSeparator();
524 $this->toolbar->addComponent($button_print);
526 $group_panels_tpl =
new ilTemplate(
"tpl.exc_group_report_panels.html",
true,
true,
"Modules/Exercise");
527 $group_panels_tpl->setVariable(
'TITLE', $this->lng->txt(
"exc_list_text_assignment") .
": " . $this->assignment->getTitle());
534 $members = $members_filter->filterParticipantsByAccess();
539 $submission_data = $this->assignment->getExerciseMemberAssignmentData($file[
"user_id"], $this->filter[
"status"]);
541 if (is_array($submission_data)) {
542 $data = array_merge($feedback_data, $submission_data);
548 if ($total_reports == 0) {
549 $mtpl =
new ilTemplate(
"tpl.message.html",
true,
true,
"Services/Utilities");
550 $mtpl->setCurrentBlock(
"info_message");
551 $mtpl->setVariable(
"TEXT", $this->lng->txt(
"fiter_no_results"));
552 $mtpl->parseCurrentBlock();
553 $report_html .= $mtpl->get();
556 $group_panels_tpl->setVariable(
'CONTENT', $report_html);
557 $this->tpl->setContent($group_panels_tpl->get());
569 $group_panels_tpl =
new ilTemplate(
"tpl.exc_group_report_panels.html",
true,
true,
"Modules/Exercise");
570 $group_panels_tpl->setVariable(
'TITLE', $this->lng->txt(
"exc_compare_selected_submissions"));
576 foreach ($participants as $participant_id) {
577 $submission =
new ilExSubmission($this->assignment, $participant_id);
580 $file = reset($submission->getFiles());
584 "user_id" => $participant_id,
592 $submission_data = $this->assignment->getExerciseMemberAssignmentData($file[
"user_id"], $this->filter[
"status"]);
594 if (is_array($submission_data)) {
595 $data = array_merge($feedback_data, $submission_data);
601 $group_panels_tpl->setVariable(
'CONTENT', $report_html);
602 $this->tpl->setContent($group_panels_tpl->get());
609 $this->ctrl->setParameter($this,
"member_id", $a_data[
'uid']);
611 $this->ui_factory->button()->shy($this->lng->txt(
"grade_evaluate"),
"#")->withOnClick($modal->getShowSignal())
613 if ($this->exercise->hasTutorFeedbackMail()) {
614 $actions[] = $this->ui_factory->button()->shy(
615 $this->lng->txt(
"exc_tbl_action_feedback_mail"),
616 $this->ctrl->getLinkTarget($this,
"redirectFeedbackMail")
619 if ($this->exercise->hasTutorFeedbackFile()) {
620 $actions[] = $this->ui_factory->button()->shy(
621 $this->lng->txt(
"exc_tbl_action_feedback_file"),
622 $this->ctrl->getLinkTargetByClass(
"ilFileSystemGUI",
"listFiles")
626 $this->ctrl->setParameter($this,
"member_id",
"");
628 $actions_dropdown = $this->ui_factory->dropdown()->standard($actions);
630 if ($a_data[
'status'] == self::GRADE_NOT_GRADED) {
631 $str_status_key = $this->lng->txt(
'exc_tbl_status');
632 $str_status_value = $this->lng->txt(
'not_yet');
634 $str_status_key = $this->lng->txt(
'exc_tbl_status_time');
638 $str_mark_key = $this->lng->txt(
"exc_tbl_mark");
639 $str_mark_value = $this->lng->txt(
'not_yet');
641 if (($a_data[
'mark'] !=
"")) {
642 $str_mark_value = $a_data[
'mark'];
645 if ($a_data[
'feedback_time']) {
646 $str_evaluation_key = $this->lng->txt(
'exc_tbl_feedback_time');
649 $str_evaluation_key = $this->lng->txt(
'exc_settings_feedback');
650 $str_evaluation_value = $this->lng->txt(
'not_yet');
653 $card_content = array(
655 $str_status_key => $str_status_value,
656 $str_mark_key => $str_mark_value,
657 $str_evaluation_key => $str_evaluation_value,
658 $this->lng->txt(
'feedback_given') => $a_data[
'fb_given'],
659 $this->lng->txt(
'feedback_received') => $a_data[
'fb_received']
661 $card_tpl =
new ilTemplate(
"tpl.exc_report_details_card.html",
true,
true,
"Modules/Exercise");
662 foreach ($card_content as $key => $value) {
663 $card_tpl->setCurrentBlock(
"assingment_card");
664 $card_tpl->setVariable(
"ROW_KEY", $key);
665 $card_tpl->setVariable(
"ROW_VALUE", $value);
666 $card_tpl->parseCurrentBlock();
669 $main_panel = $this->ui_factory->panel()->sub($a_data[
'uname'], $this->ui_factory->legacy($a_data[
'utext']))
670 ->withCard($this->ui_factory->card()->standard($this->lng->txt(
'text_assignment'))->withSections(array($this->ui_factory->legacy($card_tpl->get()))))->withActions($actions_dropdown);
672 $feedback_tpl =
new ilTemplate(
"tpl.exc_report_feedback.html",
true,
true,
"Modules/Exercise");
674 if (array_key_exists(
"peer", $a_data) && ($this->filter[
"feedback"] == self::FEEDBACK_FULL_SUBMISSION) || $this->filter[
"feedback"] ==
"") {
675 $feedback_tpl->setCurrentBlock(
"feedback");
676 foreach ($a_data[
"peer"] as $peer_id) {
679 $peer_name =
$user->getFirstname() .
" " .
$user->getLastname();
681 $peer_name = $this->lng->txt(
"exc_deleted_user");
684 $feedback_tpl->setCurrentBlock(
"peer_feedback");
685 $feedback_tpl->setVariable(
"PEER_NAME", $peer_name);
687 $submission =
new ilExSubmission($this->assignment, $a_data[
"uid"]);
688 $values = $submission->getPeerReview()->getPeerReviewValues($peer_id, $a_data[
"uid"]);
691 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
692 $crit_id = $crit->getId()
695 $crit->setPeerReviewContext($this->assignment, $peer_id, $a_data[
"uid"]);
698 '<div class="ilBlockPropertyCaption">' . $crit->getTitle() .
'</div>' .
699 '<div style="margin:2px 0;">' . $crit->getHTML($values[$crit_id]) .
'</div>';
701 $feedback_tpl->setVariable(
"PEER_FEEDBACK", $review_html);
702 $feedback_tpl->parseCurrentBlock();
704 $feedback_tpl->parseCurrentBlock();
706 $feedback_tpl->setVariable(
"GRADE", $this->lng->txt(
'grade') .
": " . $this->lng->txt(
'exc_' . $a_data[
'status']));
707 $feedback_tpl->setVariable(
"COMMENT", $this->lng->txt(
'exc_comment') .
"<br>" . $a_data[
'comment']);
709 $feedback_panel = $this->ui_factory->panel()->sub(
"", $this->ui_factory->legacy($feedback_tpl->get()));
711 $report = $this->ui_factory->panel()->report(
"", array($main_panel, $feedback_panel));
713 return $this->ui_renderer->render([$modal,$report]);
718 $modal_tpl =
new ilTemplate(
"tpl.exc_report_evaluation_modal.html",
true,
true,
"Modules/Exercise");
719 $modal_tpl->setVariable(
"USER_NAME", $a_data[
'uname']);
722 $form->setFormAction($this->ctrl->getFormAction($this,
"saveEvaluationFromModal"));
723 $form->setId(uniqid(
'form'));
727 self::GRADE_NOT_GRADED => $this->lng->txt(
"exc_notgraded"),
728 self::GRADE_PASSED => $this->lng->txt(
"exc_passed"),
729 self::GRADE_FAILED => $this->lng->txt(
"exc_failed")
732 $si->setOptions($options);
733 $si->setValue($a_data[
'status']);
737 $mark_input =
new ilTextInputGUI($this->lng->txt(
"exc_tbl_mark"),
"mark");
738 $mark_input->setValue($a_data[
'mark']);
739 $mark_input->setMaxLength(32);
740 $mark_input->setSize(4);
741 $form->addItem($mark_input);
744 $item->setValue($a_data[
'uid']);
745 $form->addItem($item);
748 if ($this->exercise->hasTutorFeedbackText()) {
751 $u_text = strip_tags($a_data[
"utext"]);
754 if (strlen($u_text) > $max_chars) {
755 $text =
"<input type='checkbox' class='read-more-state' id='post-1' />";
756 $text .=
"<div class='read-more-wrap'>";
757 $text .= mb_substr($u_text, 0, $max_chars);
758 $text .=
"<span class='read-more-target'>";
759 $text .= mb_substr($u_text, $max_chars);
760 $text .=
"</span></div>";
761 $text .=
"<label for='post-1' class='read-more-trigger'></label>";
763 $modal_tpl->setVariable(
"USER_TEXT", $text);
766 $ta->setInfo($this->lng->txt(
"exc_comment_for_learner_info"));
767 $ta->setValue($a_data[
'comment']);
772 $modal_tpl->setVariable(
"FORM", $form->getHTML());
774 $form_id =
'form_' . $form->getId();
775 $submit_btn = $this->ui_factory->button()->primary($this->lng->txt(
"save"),
'#')
776 ->withOnLoadCode(
function ($id) use ($form_id) {
777 return "$('#{$id}').click(function() { $('#{$form_id}').submit(); return false; });";
780 return $this->ui_factory->modal()->roundtrip(strtoupper($this->lng->txt(
"grade_evaluate")), $this->ui_factory->legacy($modal_tpl->get()))->withActionButtons([$submit_btn]);
789 $user_id = (int)
$_POST[
'mem_id'];
790 $grade = trim(
$_POST[
"grade"]);
791 $mark = trim(
$_POST[
'mark']);
793 if ($this->assignment->getId() && $user_id) {
794 $member_status = $this->assignment->getMemberStatus($user_id);
796 $member_status->setStatus($grade);
797 $member_status->setMark($mark);
799 $member_status->setFeedback(
true);
801 $member_status->update();
803 ilUtil::sendSuccess($this->lng->txt(
"exc_status_saved"),
true);
804 $this->ctrl->redirect($this,
"listTextAssignment");
812 if (!strlen(trim(
$_POST[
'user_login']))) {
817 $users = explode(
',',
$_POST[
'user_login']);
820 foreach ($users as
$user) {
828 $user_ids[] = $user_id;
843 if (!count($a_user_ids)) {
848 if (!$this->exercise->members_obj->assignMembers($a_user_ids)) {
867 ilUtil::sendSuccess($this->lng->txt(
"exc_members_assigned"),
true);
870 $this->ctrl->redirect($this,
"members");
895 $this->ctrl->setParameter($this,
"ass_id",
"");
899 $members = $this->exercise->members_obj->getMembers();
901 $members =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
902 'edit_submissions_grades',
903 'edit_submissions_grades',
904 $this->exercise->getRefId(),
909 if (count($members) == 0) {
915 foreach ($members as $mem_id) {
918 if (trim(
$name[
"login"]) !=
"") {
919 $mems[$mem_id] =
$name;
926 if (
$_GET[
"part_id"] ==
"" && count($mems) > 0) {
927 $_GET[
"part_id"] = key($mems);
930 $current_participant =
$_GET[
"part_id"];
933 if (count($mems) > 1) {
935 foreach ($mems as $k => $m) {
937 $m[
"lastname"] .
", " . $m[
"firstname"] .
" [" . $m[
"login"] .
"]";
940 $si->setOptions($options);
941 $si->setValue($current_participant);
942 $ilToolbar->addStickyItem(
$si);
945 $button->setCaption(
"exc_select_part");
946 $button->setCommand(
"selectParticipant");
947 $ilToolbar->addStickyItem($button);
950 if (count($mems) > 0) {
951 $this->ctrl->setParameter($this,
"vw", self::VIEW_PARTICIPANT);
952 $this->ctrl->setParameter($this,
"part_id", $current_participant);
954 $ilToolbar->setFormAction(
$ilCtrl->getFormAction($this));
955 $ilToolbar->addFormButton(
$lng->txt(
"download_all_returned_files"),
"downloadSubmissions");
963 $tpl->setContent($part_tab->getHTML() .
964 $this->initIndividualDeadlineModal());
973 $exc_tab->resetOffset();
974 $exc_tab->writeFilterToSession();
982 $exc_tab->resetOffset();
983 $exc_tab->resetFilter();
1010 $mems = $mem_obj->getMembers();
1012 $mems =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
1013 'edit_submissions_grades',
1014 'edit_submissions_grades',
1015 $this->exercise->getRefId(),
1018 if (count($mems) > 0) {
1019 $ilToolbar->addButton(
1020 $lng->txt(
"exc_export_excel"),
1021 $ilCtrl->getLinkTarget($this,
"exportExcel")
1025 $this->ctrl->setParameter($this,
"vw", self::VIEW_GRADES);
1029 "showGradesOverview",
1033 $tpl->setContent($grades_tab->getHTML());
1043 if (
$_GET[
"member_id"] !=
"") {
1045 $members = $submission->getUserIds();
1047 $members = array_keys($members);
1052 foreach ($members as $user_id) {
1053 $member_status = $this->assignment->getMemberStatus($user_id);
1054 $member_status->setFeedback(
true);
1055 $member_status->update();
1059 $logins = implode(
",", $logins);
1062 $sig = chr(13) . chr(10) . chr(13) . chr(10);
1063 $sig .= $this->lng->txt(
'exc_mail_permanent_link');
1064 $sig .= chr(13) . chr(10) . chr(13) . chr(10);
1066 $sig = rawurlencode(base64_encode($sig));
1074 'rcp_to' => $logins,
1088 foreach ($this->exercise->members_obj->getMembers() as $member_id) {
1090 $submission->updateTutorDownloadTime();
1096 foreach ($submission->getFiles() as $file) {
1097 if ($this->assignment->getAssignmentType()->isSubmissionAssignedToTeam()) {
1098 $storage_id = $file[
"team_id"];
1100 $storage_id = $file[
"user_id"];
1103 $members[$storage_id][
"files"][$file[
"returned_id"]] = $file;
1105 if ($this->assignment->getAssignmentType()->isSubmissionAssignedToTeam()) {
1106 $name =
"Team " . $submission->getTeam()->getId();
1109 $name = $tmp_obj->getFirstname() .
" " . $tmp_obj->getLastname();
1111 if ($storage_id > 0) {
1112 $members[$storage_id][
"name"] =
$name;
1124 if ($this->assignment) {
1127 $this->ctrl->redirect($this,
"members");
1130 foreach (array_keys(
$_POST[
"member"]) as $user_id) {
1132 $tmembers = $submission->getUserIds();
1133 if (!(
bool) $a_keep_teams) {
1134 foreach ($tmembers as $tuser_id) {
1135 $members[$tuser_id] = 1;
1139 $members[] = $tmembers;
1142 $members[] = $user_id;
1151 $this->ctrl->redirect($this,
"showParticipant");
1154 $user_id =
$_GET[
"part_id"];
1156 foreach (array_keys(
$_POST[
"ass"]) as $ass_id) {
1158 $tmembers = $submission->getUserIds();
1159 if (!(
bool) $a_keep_teams) {
1160 foreach ($tmembers as $tuser_id) {
1161 $members[$ass_id][] = $tuser_id;
1165 $members[$ass_id][] = $tmembers;
1168 $members[$ass_id][] = $user_id;
1184 ilUtil::sendSuccess($this->lng->txt(
"exc_sent"),
true);
1185 if ($this->assignment) {
1186 $this->exercise->sendAssignment($this->assignment, array_keys($members));
1187 $this->ctrl->redirect($this,
"members");
1189 foreach ($members as $ass_id => $users) {
1190 $this->exercise->sendAssignment(
new ilExAssignment($ass_id), $users);
1192 $this->ctrl->setParameter($this,
"part_id",
$_GET[
"part_id"]);
1193 $this->ctrl->redirect($this,
"showParticipant");
1209 $cgui->setFormAction(
$ilCtrl->getFormAction($this));
1210 $cgui->setHeaderText(
$lng->txt(
"exc_msg_sure_to_deassign_participant"));
1211 $cgui->setCancel(
$lng->txt(
"cancel"),
"members");
1212 $cgui->setConfirm(
$lng->txt(
"remove"),
"deassignMembers");
1214 foreach ($members as $k => $m) {
1222 $tpl->setContent($cgui->getHTML());
1235 foreach (array_keys($members) as $usr_id) {
1236 $this->exercise->members_obj->deassignMember((
int) $usr_id);
1239 ilUtil::sendSuccess(
$lng->txt(
"exc_msg_participants_removed"),
true);
1240 $ilCtrl->redirect($this,
"members");
1246 $storage->deleteUserSubmissionDirectory($user_id);
1251 if (!isset(
$_POST[
'comments_value'])) {
1255 $this->exercise->members_obj->setNoticeForMember(
1259 ilUtil::sendSuccess($this->lng->txt(
"exc_members_comments_saved"));
1270 $member_id = (int)
$_GET[
"part_id"];
1272 foreach (array_keys(
$_POST[
"id"]) as $ass_id) {
1273 if (is_array($a_selected) &&
1274 !in_array($ass_id, $a_selected)) {
1278 $data[$ass_id][$member_id] = array(
1282 if (array_key_exists(
"mark",
$_POST)) {
1285 if (array_key_exists(
"notice",
$_POST)) {
1290 $ilCtrl->setParameter($this,
"part_id", $member_id);
1297 $user_ids = (array) array_keys((array)
$_POST[
'id']);
1298 $filtered_user_ids =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
1299 'edit_submissions_grades',
1300 'edit_submissions_grades',
1301 $this->exercise->getRefId(),
1306 foreach ($filtered_user_ids as $user_id) {
1307 if (is_array($a_selected) &&
1308 !in_array($user_id, $a_selected)) {
1312 $data[-1][$user_id] = array(
1316 if (array_key_exists(
"mark",
$_POST)) {
1319 if (array_key_exists(
"notice",
$_POST)) {
1330 if ($this->assignment) {
1344 $saved_for = array();
1345 foreach ($a_data as $ass_id => $users) {
1346 $ass = ($ass_id < 0)
1349 foreach ($users as $user_id => $values) {
1352 foreach ($submission->getUserIds() as $sub_user_id) {
1354 $saved_for[$sub_user_id] = $uname[
"lastname"] .
", " . $uname[
"firstname"];
1356 $member_status = $ass->getMemberStatus($sub_user_id);
1359 $status = $values[
"status"];
1360 if ($status ==
"") {
1363 $member_status->setStatus($status);
1364 if (array_key_exists(
"mark", $values)) {
1365 $member_status->setMark($values[
"mark"]);
1367 if (array_key_exists(
"notice", $values)) {
1368 $member_status->setNotice($values[
"notice"]);
1370 $member_status->update();
1375 if (count($saved_for) > 0) {
1376 $save_for_str =
"(" . implode(
" - ", $saved_for) .
")";
1380 ilUtil::sendSuccess($this->lng->txt(
"exc_status_saved") .
" " . $save_for_str,
true);
1390 $res = array(
"result" =>
false);
1392 if ($this->ctrl->isAsynch()) {
1393 $ass_id = (int)
$_POST[
"ass_id"];
1394 $user_id = (int)
$_POST[
"mem_id"];
1397 if ($ass_id && $user_id) {
1399 $user_ids = $submission->getUserIds();
1402 $all_members = $all_members->getMembers();
1404 $reci_ids = array();
1405 foreach ($user_ids as $user_id) {
1406 if (in_array($user_id, $all_members)) {
1407 $member_status = $this->assignment->getMemberStatus($user_id);
1409 $member_status->setFeedback(
true);
1410 $member_status->update();
1413 $reci_ids[] = $user_id;
1418 if (
sizeof($reci_ids)) {
1420 $this->exercise->sendFeedbackFileNotification(
1428 $res = array(
"result" =>
true,
"snippet" => nl2br(
$comment));
1432 echo(json_encode(
$res));
1441 $this->exercise->exportGradesExcel();
1456 $new_members = array();
1458 foreach ($members as $group) {
1459 if (is_array($group)) {
1460 $new_members = array_merge($new_members, $group);
1462 $first_user = $group;
1463 $first_user = array_shift($first_user);
1465 foreach ($group as $user_id) {
1466 $team->removeTeamMember($user_id);
1469 $new_members[] = $group;
1473 if (
sizeof($new_members)) {
1476 $first_user = array_shift($new_members);
1478 if (
sizeof($new_members)) {
1479 foreach ($new_members as $user_id) {
1480 $team->addTeamMember($user_id);
1485 $submission =
new ilExSubmission($this->assignment, $first_user);
1486 $this->exercise->processExerciseStatus(
1488 $team->getMembers(),
1489 $submission->hasSubmitted(),
1490 $submission->validatePeerReviews()
1494 ilUtil::sendSuccess($this->lng->txt(
"msg_obj_modified"),
true);
1495 $ilCtrl->redirect($this,
"members");
1504 foreach ($members as $group) {
1506 if (is_array($group)) {
1509 $first_user = $group;
1510 $first_user = array_shift($first_user);
1512 foreach ($group as $user_id) {
1513 $team->removeTeamMember($user_id);
1517 $this->exercise->processExerciseStatus(
1525 ilUtil::sendSuccess($this->lng->txt(
"msg_obj_modified"),
true);
1526 $ilCtrl->redirect($this,
"members");
1536 $ilTabs->clearTargets();
1537 $ilTabs->setBackTarget(
1539 $ilCtrl->getLinkTarget($this, $this->getViewBack())
1545 $tpl->setContent($a_form->getHTML());
1553 $form->setTitle(
$lng->txt(
"exc_adopt_group_teams") .
" - " . $this->assignment->getTitle());
1554 $form->setFormAction($this->ctrl->getFormAction($this,
"createTeamsFromGroups"));
1556 $all_members = array();
1558 if (
sizeof($group[
"members"])) {
1560 $grp_value = $options = array();
1561 foreach ($group[
"members"] as $user_id) {
1563 $options[$user_id] = $user_name;
1564 if (!in_array($user_id, $all_members)) {
1565 $grp_value[] = $user_id;
1566 $all_members[] = $user_id;
1570 foreach ($options as $user_id => $user_name) {
1573 $grp_team->setValue($grp_value);
1574 $form->addItem($grp_team);
1577 $grp_team->setValue(
$lng->txt(
"exc_adopt_group_teams_no_members"));
1578 $form->addItem($grp_team);
1582 if (
sizeof($all_members)) {
1583 $form->addCommandButton(
"createTeamsFromGroups",
$lng->txt(
"save"));
1585 $form->addCommandButton(
"members",
$lng->txt(
"cancel"));
1595 if ($form->checkInput()) {
1597 $all_members = $teams = array();
1599 foreach (array_keys($map) as $grp_id) {
1600 $postvar =
"grpt_" . $grp_id;
1601 $members =
$_POST[$postvar];
1602 if (is_array($members)) {
1603 $teams[] = $members;
1604 $invalid_team_members = array();
1606 foreach ($members as $user_id) {
1607 if (!array_key_exists($user_id, $all_members)) {
1608 $all_members[$user_id] = $grp_id;
1611 $invalid_team_members[] = $user_id;
1615 if (
sizeof($invalid_team_members)) {
1619 foreach ($invalid_team_members as $user_id) {
1621 $grp_title = $map[$all_members[$user_id]][
"title"];
1622 $alert[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_conflict"), $user_name, $grp_title);
1624 $input = $form->getItemByPostVar($postvar);
1625 $input->setAlert(implode(
"<br/>", $alert));
1630 if (
sizeof($teams)) {
1634 $sum = array(
"added" => 0,
"blocked" => 0);
1635 foreach ($teams as $members) {
1636 foreach ($members as $user_id) {
1637 if (!$this->exercise->members_obj->isAssigned($user_id)) {
1638 $this->exercise->members_obj->assignMember($user_id);
1641 if (!in_array($user_id, $existing_users)) {
1648 $first = array_shift($members);
1654 if (
sizeof($members)) {
1655 foreach ($members as $user_id) {
1656 $team->addTeamMember($user_id);
1662 if ($sum[
"added"]) {
1663 $mess[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_added"), $sum[
"added"]);
1665 if ($sum[
"blocked"]) {
1666 $mess[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_blocked"), $sum[
"blocked"]);
1668 if ($sum[
"added"]) {
1669 ilUtil::sendSuccess(implode(
" ", $mess),
true);
1674 $this->ctrl->redirect($this,
"members");
1680 $form->setValuesByPost();
1694 $form->addCommandButton(
"uploadMultiFeedback",
$lng->txt(
"upload"));
1695 $form->addCommandButton(
"members",
$lng->txt(
"cancel"));
1699 $fi->setSuffixes(array(
"zip"));
1700 $fi->setRequired(
true);
1701 $form->addItem($fi);
1704 $form->setFormAction($this->ctrl->getFormAction($this,
"uploadMultiFeedback"));
1727 $button->setCaption(
"exc_download_zip_structure");
1728 $button->setUrl($this->ctrl->getLinkTarget($this,
"downloadMultiFeedbackZip"));
1729 $button->setOmitPreventDoubleSubmission(
true);
1730 $ilToolbar->addButtonInstance($button);
1736 $tpl->setContent($a_form->getHTML());
1744 $this->assignment->sendMultiFeedbackStructureFile($this->exercise);
1754 if ($form->checkInput()) {
1757 $this->ctrl->redirect($this,
"showMultiFeedbackConfirmationTable");
1760 $this->ctrl->redirect($this,
"showMultiFeedback");
1764 $form->setValuesByPost();
1789 $this->assignment->clearMultiFeedbackDirectory();
1790 $this->ctrl->redirect($this,
"members");
1798 $this->assignment->saveMultiFeedbackFiles(
$_POST[
"file"], $this->exercise);
1800 ilUtil::sendSuccess($this->lng->txt(
"msg_obj_modified"),
true);
1801 $this->ctrl->redirect($this,
"members");
1816 $modal->setHeading(
$lng->txt(
"exc_individual_deadline"));
1817 $modal->setId(
"ilExcIDl");
1818 $modal->setBody(
'<div id="ilExcIDlBody"></div>');
1819 $modal = $modal->getHTML();
1821 $ajax_url = $this->ctrl->getLinkTarget($this,
"handleIndividualDeadlineCalls",
"",
true,
false);
1823 $tpl->addJavaScript(
"./Modules/Exercise/js/ilExcIDl.js",
true, 3);
1824 $tpl->addOnloadCode(
'il.ExcIDl.init("' . $ajax_url .
'");');
1836 foreach ($a_data as $item) {
1837 $item = explode(
"_", $item);
1839 $user_id = $item[1];
1841 if (!array_key_exists($ass_id, $ass_tmp)) {
1842 if ($this->assignment &&
1843 $ass_id == $this->assignment->getId()) {
1850 $map[$ass_id][] = $user_id;
1853 return array($map, $ass_tmp);
1861 $this->ctrl->saveParameter($this,
"part_id");
1864 if ((
bool)
$_GET[
"dn"]) {
1865 ilUtil::sendSuccess($this->lng->txt(
"settings_saved"),
true);
1866 $this->ctrl->redirect($this, $this->assignment
1868 :
"showParticipant");
1872 if (
$_GET[
"idlid"]) {
1874 if (is_array($tmp)) {
1876 echo $form->getHTML() .
1877 $tpl->getOnLoadCodeForAsynch();
1883 foreach (array_keys(
$_POST) as $id) {
1884 if (substr($id, 0, 3) ==
"dl_") {
1885 $tmp[] = substr($id, 3);
1895 if (
$valid = $form->checkInput()) {
1896 foreach ($users as $ass_id => $users) {
1897 $ass = $ass_map[$ass_id];
1902 foreach ($users as $user_id) {
1903 $date_field = $form->getItemByPostVar(
"dl_" . $ass_id .
"_" . $user_id);
1908 $res[$ass_id][$user_id] = $date_field->getDate();
1915 $form->setValuesByPost();
1916 echo $form->getHTML() .
1917 $tpl->getOnLoadCodeForAsynch();
1919 foreach (
$res as $ass_id => $users) {
1920 $ass = $ass_map[$ass_id];
1922 foreach ($users as $id => $date) {
1923 $ass->setIndividualDeadline($id, $date);
1926 $ass->recalculateLateSubmissions();
1939 $form->setFormAction($this->ctrl->getFormAction($this));
1940 $form->setName(
"ilExcIDlForm");
1942 foreach ($ids as $ass_id => $users) {
1943 $ass = $a_ass_map[$ass_id];
1946 $section->setTitle($ass->getTitle());
1951 $values = $ass->getIndividualDeadlines();
1953 foreach ($users as $id) {
1955 if (is_numeric($id)) {
1962 $team_id = (int) substr($id, 1);
1963 if (array_key_exists($team_id, $teams)) {
1965 foreach ($teams[$team_id]->getMembers() as $member_id) {
1967 $name[] = $uname[
"lastname"] .
", " . $uname[
"firstname"];
1975 $dl->setShowTime(
true);
1976 $dl->setRequired(
true);
1977 $form->addItem($dl);
1979 if (array_key_exists($id, $values)) {
1985 $form->addCommandButton(
"", $this->lng->txt(
"save"));
1995 if ($this->assignment) {
2004 if (
$_POST[
"filter_status"]) {
2008 if (
$_POST[
"filter_feedback"]) {
2012 $this->lng->loadLanguageModule(
"search");
2014 $this->toolbar->setFormAction($this->ctrl->getFormAction($this,
"listTextAssignment"));
2018 if (
$_POST[
"filter_status"]) {
2022 $si_status =
new ilSelectInputGUI($this->lng->txt(
"exc_tbl_status"),
"filter_status");
2024 "" => $this->lng->txt(
"search_any"),
2025 self::GRADE_NOT_GRADED => $this->lng->txt(
"exc_notgraded"),
2026 self::GRADE_PASSED => $this->lng->txt(
"exc_passed"),
2027 self::GRADE_FAILED => $this->lng->txt(
"exc_failed")
2029 $si_status->setOptions($options);
2030 $si_status->setValue($this->filter[
"status"]);
2032 $si_feedback =
new ilSelectInputGUI($this->lng->txt(
"feedback"),
"filter_feedback");
2034 self::FEEDBACK_FULL_SUBMISSION => $this->lng->txt(
"submissions_feedback"),
2035 self::FEEDBACK_ONLY_SUBMISSION => $this->lng->txt(
"submissions_only")
2037 $si_feedback->setOptions($options);
2038 $si_feedback->setValue($this->filter[
"feedback"]);
2040 $this->toolbar->addInputItem($si_status,
true);
2044 if ($this->assignment->getPeerReview()) {
2045 if (
$_POST[
"filter_feedback"]) {
2048 $this->filter[
"feedback"] =
"submission_feedback";
2051 $si_feedback =
new ilSelectInputGUI($this->lng->txt(
"feedback"),
"filter_feedback");
2053 "submission_feedback" => $this->lng->txt(
"submissions_feedback"),
2054 "submission_only" => $this->lng->txt(
"submissions_only")
2056 $si_feedback->setOptions($options);
2057 $si_feedback->setValue($this->filter[
"feedback"]);
2059 $this->toolbar->addInputItem($si_feedback,
true);
2064 $submit->setCaption(
"filter");
2065 $submit->setCommand(
"listTextAssignment");
2066 $this->toolbar->addButtonInstance($submit);
2076 $ass_id = (int)
$_GET[
"ass_id"];
2077 $member_id = (int)
$_GET[
"member_id"];
2081 $last_opening = $submission->getLastOpeningHTMLView();
2083 $submission_time = $submission->getLastSubmission();
2089 list($obj_date, $obj_id) = explode(
"_", basename($zip_original_full_path));
2091 $obj_dir = $this->assignment->getAssignmentType()->getStringIdentifier() .
"_" . $obj_id;
2093 $index_html_file = ILIAS_WEB_DIR .
2094 DIRECTORY_SEPARATOR .
2096 DIRECTORY_SEPARATOR .
2097 dirname($zip_internal_path) .
2098 DIRECTORY_SEPARATOR .
2100 DIRECTORY_SEPARATOR .
2105 $web_filesystem =
$DIC->filesystem()->web();
2107 if ($last_opening > $submission_time && $web_filesystem->has($index_html_file)) {
2110 if ($zip_original_full_path) {
2111 $file_copied = $this->
copyFileToWebDir($zip_original_full_path, $zip_internal_path);
2116 $web_filesystem->delete($zip_internal_path);
2119 $submission_repository->updateWebDirAccessTime($this->assignment->getId(), $member_id);
2124 $error_msg = $this->lng->txt(
"exc_copy_zip_error");
2128 $error_msg = $this->lng->txt(
"exc_find_zip_error");
2141 $submitted = $submission->
getFiles();
2143 if (count($submitted) > 0) {
2144 $submitted = array_pop($submitted);
2146 return $submitted[
'filename'];
2158 protected function copyFileToWebDir(
string $origin_path_filename,
string $internal_file_path) : ?string
2162 $web_filesystem =
$DIC->filesystem()->web();
2163 $data_filesystem =
$DIC->filesystem()->storage();
2165 $internal_dirs = dirname($internal_file_path);
2166 $zip_file = basename($internal_file_path);
2168 if ($data_filesystem->has($internal_file_path)) {
2169 if (!$web_filesystem->hasDir($internal_dirs)) {
2170 $web_filesystem->createDir($internal_dirs);
2173 if (!$web_filesystem->has($internal_file_path)) {
2174 $stream = $data_filesystem->readStream($internal_file_path);
2175 $web_filesystem->writeStream($internal_file_path, $stream);
2177 return ILIAS_ABSOLUTE_PATH .
2178 DIRECTORY_SEPARATOR .
2180 DIRECTORY_SEPARATOR .
2182 DIRECTORY_SEPARATOR .
2184 DIRECTORY_SEPARATOR .
2199 list($external_path, $internal_file_path) = explode(CLIENT_ID .
"/", $external_file_path);
2201 return $internal_file_path;
2210 $this->tabs_gui->clearTargets();
2211 $this->tabs_gui->setBackTarget(
2212 $this->lng->txt(
"back"),
2213 $this->ctrl->getLinkTarget($this,
"members")
2224 $uname =
$user->getFirstname() .
" " .
$user->getLastname();
2227 "uid" => $a_data[
"user_id"],
2229 "udate" => $a_data[
"ts"],
2235 $data[
"peer"] = array();
2236 foreach ($peer_review->getPeerReviewsByPeerId($a_data[
'user_id']) as $key => $value) {
2237 $data[
"peer"][] = $value[
'giver_id'];
2241 $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($a_file, $overwrite=false, $a_flat=false)
unzip file
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