55     protected \ILIAS\Exercise\InternalDomainService 
$domain;
    56     protected \ILIAS\Exercise\Notification\NotificationManager 
$notification;
    59     protected \ILIAS\HTTP\Services 
$http;
   111         $this->gui = $gui = $service->
gui();
   112         $this->domain = $domain = $service->
domain();
   114         $this->
user = $domain->user();
   115         $this->log = $domain->logger()->exc();
   116         $this->
access = $domain->access();
   117         $this->
lng = $domain->lng();
   119         $this->
toolbar = $gui->toolbar();
   120         $this->ui_factory = $gui->ui()->factory();
   121         $this->ui_renderer = $gui->ui()->renderer();
   122         $this->
ctrl = $gui->ctrl();
   123         $this->tabs_gui = $gui->tabs();
   124         $this->tpl = $gui->ui()->mainTemplate();
   125         $this->
http = $gui->http();
   127         $this->task_factory = $domain->backgroundTasks()->taskFactory();
   128         $this->request = $gui->
request();
   132         if ($a_ass !== null) {
   133             $this->assignment = $a_ass;
   134             $this->ass_id = $this->assignment->getId();
   136         $this->requested_member_id = $request->
getMemberId();
   138         $this->requested_ass_id = $request->
getAssId();
   139         $this->requested_idl_id = $request->
getIdlId();
   140         $this->done = $request->
getDone();
   142         $this->requested_comment = $request->
getComment();
   148         $this->requested_marks = $request->
getMarks();
   149         $this->requested_status = $request->
getStatus();
   152         $this->requested_files = $request->
getFiles();
   158         $this->feedback_gui = $DIC->exercise()->internal()->gui()->getSubmissionFeedbackGUI(
   163         $this->
ctrl->saveParameter($this, array(
"vw", 
"member_id"));
   164         if ($this->ass_id > 0) {
   165             $this->tutor_feedback_file = $domain->assignment()->tutorFeedbackFile($this->ass_id);
   167         $this->zip = $domain->resources()->zip();
   168         $this->
ctrl->saveParameter($this, array(
"part_id"));
   181         $class = $ilCtrl->getNextClass($this);
   186             case strtolower(ilResourceCollectionGUI::class):
   187                 $ilTabs->clearTargets();
   188                 $ilTabs->setBackTarget(
   190                     $ilCtrl->getLinkTarget($this, $this->
getViewBack())
   192                 $this->domain->assignment()->tutorFeedbackFile($this->ass_id)->addObserver();
   193                 $this->tpl->setOnScreenMessage(
'info', $lng->
txt(
"exc_fb_tutor_info"));
   194                 $gui = $this->gui->
assignment()->getTutorFeedbackFileResourceCollectionGUI(
   195                     $this->exercise->getRefId(),
   196                     $this->assignment->getId(),
   199                 $this->
ctrl->forwardCommand($gui);
   202             case 'ilrepositorysearchgui':
   204                 $ref_id = $this->exercise->getRefId();
   205                 $rep_search->addUserAccessFilterCallable(
function ($a_user_ids) use (
$ref_id) {
   206                     return $GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
   207                         'edit_submissions_grades',
   208                         'edit_submissions_grades',
   213                 $rep_search->setTitle($this->
lng->txt(
"exc_add_participant"));
   214                 $rep_search->setCallback($this, 
'addMembersObject');
   218                 $this->
ctrl->setReturn($this, 
'members');
   220                 $this->
ctrl->forwardCommand($rep_search);
   223             case strtolower(ilRepoStandardUploadHandlerGUI::class):
   225                 $gui = $form->getRepoStandardUploadHandlerGUI(
"mfzip");
   226                 $this->
ctrl->forwardCommand($gui);
   229             case "ilexsubmissionteamgui":
   231                 $ilCtrl->forwardCommand($gui);
   234             case "ilexsubmissionfilegui":
   236                 $ilCtrl->forwardCommand($gui);
   239             case "ilexsubmissiontextgui":
   240                 $ilCtrl->saveParameter($this, array(
"part_id"));
   242                 $ilCtrl->forwardCommand($gui);
   245             case "ilexpeerreviewgui":
   247                 $ilCtrl->forwardCommand($gui);
   250             case "ilparticipantsperassignmenttablegui":
   255                     $this->assignment->getId(),
   258                 $this->
ctrl->forwardCommand($table);
   261             case "ilexercisesubmissionfeedbackgui":
   262                 $this->
ctrl->forwardCommand($this->feedback_gui);
   266                 $cmd = $ilCtrl->getCmd();
   268                     case 'downloadSubmissions':
   269                         $cmd = $ilCtrl->getCmd(
"downloadSubmissions");
   272                         $cmd = $ilCtrl->getCmd(
"listPublicSubmissions");
   275                 $this->{$cmd . 
"Object"}();
   282         switch ($this->request->getBackView()) {
   283             case self::VIEW_PARTICIPANT:
   284                 $back_cmd = 
"showParticipant";
   287             case self::VIEW_GRADES:
   288                 $back_cmd = 
"showGradesOverview";
   293                 $back_cmd = 
"members";
   302         $this->
ctrl->setReturn($this, $back_cmd);
   304         $this->tabs_gui->clearTargets();
   305         $this->tabs_gui->setBackTarget(
   306             $this->
lng->txt(
"back"),
   307             $this->
ctrl->getLinkTarget($this, $back_cmd)
   310         return new ilExSubmission($this->assignment, $this->requested_member_id, null, 
true);
   319         $ass_id = $this->assignment !== null ? $this->assignment->getId() : 0;
   322         $ilCtrl->setParameter($this, 
"vw", 
"");
   323         $ilCtrl->setParameter($this, 
"member_id", 
"");
   324         $ilCtrl->setParameter($this, 
"ass_id", 
"");
   325         $ilCtrl->setParameter($this, 
"part_id", 
"");
   329             $lng->
txt(
"exc_assignment_view"),
   330             $ilCtrl->getLinkTarget($this, 
"members")
   334             $lng->
txt(
"exc_participant_view"),
   335             $ilCtrl->getLinkTarget($this, 
"showParticipant")
   339             $lng->
txt(
"exc_grades_overview"),
   340             $ilCtrl->getLinkTarget($this, 
"showGradesOverview")
   342         $ilTabs->activateSubTab($a_activate);
   344         $ilCtrl->setParameter($this, 
"ass_id", $ass_id);
   345         $ilCtrl->setParameter($this, 
"part_id", $part_id);
   356         $ilCtrl->
setParameterByClass(
"ilExSubmissionFileGUI", 
"member_id", $this->requested_member_id);
   357         $url = $ilCtrl->getLinkTargetByClass(array(
"ilExerciseHandlerGUI", 
"ilObjExerciseGUI", 
"ilExerciseManagementGUI", 
"ilExSubmissionFileGUI"), 
"downloadNewReturned");
   358         $js_url = $ilCtrl->getLinkTargetByClass(array(
"ilExerciseHandlerGUI", 
"ilObjExerciseGUI", 
"ilExerciseManagementGUI", 
"ilExSubmissionFileGUI"), 
"downloadNewReturned", 
"", 
"", 
false);
   359         $this->tpl->setOnScreenMessage(
'info', $lng->
txt(
"exc_wait_for_files") . 
"<a href='$url'> " . $lng->
txt(
'exc_download_files') . 
"</a><script>window.location.href ='" . $js_url . 
"';</script>");
   375         $this->gui->permanentLink()->setGradesPermanentLink();
   380         if ($this->assignment === null && count($ass) > 0) {
   381             $this->assignment = current($ass);
   385         if (count($ass) > 1) {
   387             foreach ($ass as 
$a) {
   388                 $options[$a->getId()] = $a->getTitle();
   392             $si->setValue($this->assignment->getId());
   393             $ilToolbar->addStickyItem($si, 
true);
   395                 $this->
lng->txt(
"select"),
   397             )->submit()->toToolbar(
true);
   399             $ilToolbar->addSeparator();
   402         elseif ($this->assignment) {
   403             $ilCtrl->setParameter($this, 
"ass_id", $this->assignment->getId());
   409         $has_rbac_access = 
$GLOBALS[
'DIC']->access()->checkAccess(
   410             'edit_submissions_grades',
   412             $this->exercise->getRefId()
   414         if ($has_rbac_access) {
   419                     'auto_complete_name' => $lng->
txt(
'user'),
   420                     'submit_name' => $lng->
txt(
'add'),
   421                     'add_search' => 
true,
   422                     'add_from_container' => $this->exercise->getRefId()
   429             if ($has_rbac_access) {
   430                 $ilToolbar->addSeparator();
   434             $ilToolbar->setFormAction($ilCtrl->getFormAction($this));
   436             $ilCtrl->setParameter($this, 
"ass_id", $this->assignment->getId());
   440                     $ilToolbar->addButton(
   441                         $this->
lng->txt(
"exc_adopt_group_teams"),
   442                         $this->
ctrl->getLinkTarget($this, 
"adoptTeamsFromGroup")
   445                     $ilToolbar->addSeparator();
   447             } elseif ($this->exercise->hasTutorFeedbackFile()) {
   448                 if (!$this->assignment->getAssignmentType()->usesTeams()) {
   450                     $ilToolbar->addButton(
   451                         $this->
lng->txt(
"exc_multi_feedback"),
   452                         $this->
ctrl->getLinkTarget($this, 
"showMultiFeedback")
   455                     $ilToolbar->addSeparator();
   459             $submission_repository = $this->service->repo()->submission();
   461             if ($submission_repository->hasSubmissions($this->assignment->getId()) !== 0) {
   462                 $ass_type = $this->assignment->getType();
   465                     $ilToolbar->addFormButton($lng->
txt(
"exc_list_text_assignment"), 
"listTextAssignment");
   467                 $ilToolbar->addFormButton($lng->
txt(
"download_all_returned_files"), 
"downloadSubmissions");
   469             $this->
ctrl->setParameter($this, 
"vw", self::VIEW_ASSIGNMENT);
   475                 $this->assignment->getId(),
   479                 $exc_tab->getHTML() .
   483             $this->tpl->setOnScreenMessage(
'info', $lng->
txt(
"exc_no_assignments_available"));
   486         $ilCtrl->setParameter($this, 
"ass_id", 
"");
   491         if (count($this->selected_participants) > 0) {
   503             $this->exercise->getRefId(),
   504             $this->exercise->getId(),
   510         if ($download_task->run()) {
   511             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'exc_down_files_started_bg'), 
true);
   519         if ($this->assignment !== null) {
   520             $this->
ctrl->redirect($this, 
"members");
   522             $this->
ctrl->redirect($this, 
"showParticipant");
   536             $this->assignment->getId(),
   540         $exc_tab->writeFilterToSession();
   554             $this->assignment->getId(),
   558         $exc_tab->resetFilter();
   568         foreach ($this->requested_learning_comments as $k => $v) {
   569             $marks_obj = 
new ilLPMarks($this->exercise->getId(), (
int) $k);
   570             $marks_obj->setComment($v);
   571             $marks_obj->update();
   573         foreach ($this->requested_marks as $k => $v) {
   574             $marks_obj = 
new ilLPMarks($this->exercise->getId(), (
int) $k);
   575             $marks_obj->setMark($v);
   576             $marks_obj->update();
   578         $this->tpl->setOnScreenMessage(
'success', $lng->
txt(
"exc_msg_saved_grades"), 
true);
   579         $ilCtrl->redirect($this, 
"showGradesOverview");
   589     public function listTextAssignmentObject(): 
void   595         $button_print = $this->ui_factory->button()->standard($this->
lng->txt(
'print'), 
"#")
   597                 return "$('#$id').click(function() { window.print(); return false; });";
   599         $this->
toolbar->addSeparator();
   600         $this->
toolbar->addComponent($button_print);
   602         $group_panels_tpl = 
new ilTemplate(
"tpl.exc_group_report_panels.html", 
true, 
true, 
"components/ILIAS/Exercise");
   603         $group_panels_tpl->setVariable(
'TITLE', $this->
lng->txt(
"exc_list_text_assignment") . 
": " . $this->assignment->getTitle());
   612         $sm = $this->domain->submission($this->assignment->getId());
   613         foreach ($sm->getSubmissionsOfOwners($members) as $sub) {
   614             if (trim($sub->getText()) && $this->domain->profile()->exists($sub->getUserId())) {
   617                     $sub->getTimestamp(),
   620                 $submission_data = $this->assignment->getExerciseMemberAssignmentData($sub->getUserId(), $this->
filter[
"status"] ?? 
"");
   622                 if (is_array($submission_data)) {
   623                     $data = array_merge($feedback_data, $submission_data);
   629         if ($total_reports == 0) {
   630             $mess = $this->ui_factory->messageBox()->info($this->
lng->txt(
"fiter_no_results"));
   631             $report_html .= $this->ui_renderer->render($mess);
   634         $group_panels_tpl->setVariable(
'CONTENT', $report_html);
   635         $this->tpl->setContent($group_panels_tpl->get());
   646         $subm = $this->domain->submission($this->assignment->getId());
   648         $group_panels_tpl = 
new ilTemplate(
"tpl.exc_group_report_panels.html", 
true, 
true, 
"components/ILIAS/Exercise");
   649         $group_panels_tpl->setVariable(
'TITLE', $this->
lng->txt(
"exc_compare_selected_submissions"));
   655         foreach ($participants as $participant_id) {
   656             $subs = $subm->getSubmissionsOfUser($participant_id);
   659             if ($s = $subs->current()) {
   660                 $ts = $s->getTimestamp();
   661                 $text = $s->getText();
   670             $submission_data = $this->assignment->getExerciseMemberAssignmentData((
int) $participant_id, $this->
filter[
"status"] ?? 
"");
   672             if (is_array($submission_data)) {
   673                 $data = array_merge($feedback_data, $submission_data);
   678         $group_panels_tpl->setVariable(
'CONTENT', $report_html);
   679         $this->tpl->setContent($group_panels_tpl->get());
   689         $this->
ctrl->setParameter($this, 
"member_id", $a_data[
'uid']);
   691             $this->ui_factory->button()->shy($this->
lng->txt(
"grade_evaluate"), 
"#")->withOnClick($modal->getShowSignal())
   694         if ($this->exercise->hasTutorFeedbackMail()) {
   695             $actions[] = $this->ui_factory->button()->shy(
   696                 $this->
lng->txt(
"exc_tbl_action_feedback_mail"),
   697                 $this->
ctrl->getLinkTarget($this, 
"redirectFeedbackMail")
   700         if ($this->exercise->hasTutorFeedbackFile()) {
   701             $actions[] = $this->ui_factory->button()->shy(
   702                 $this->
lng->txt(
"exc_tbl_action_feedback_file"),
   703                 $this->
ctrl->getLinkTargetByClass(ilResourceCollectionGUI::class)
   707         $this->
ctrl->setParameter($this, 
"member_id", 
"");
   709         $actions_dropdown = $this->ui_factory->dropdown()->standard($actions);
   710         if ($a_data[
'status'] == self::GRADE_NOT_GRADED) {
   711             $str_status_key = $this->
lng->txt(
'exc_tbl_status') . 
": ";
   712             $str_status_value = 
"-";
   714             $str_status_key = $this->
lng->txt(
'exc_tbl_status_time') . 
": ";
   718         $str_mark_key = $this->
lng->txt(
"exc_tbl_mark") . 
": ";
   719         $str_mark_value = 
"-";
   721         if (($a_data[
'mark'] != 
"")) {
   722             $str_mark_value = $a_data[
'mark'];
   725         if ($a_data[
'feedback_time']) {
   726             $str_evaluation_key = $this->
lng->txt(
'exc_tbl_feedback_time') . 
": ";
   729             $str_evaluation_key = $this->
lng->txt(
'exc_settings_feedback') . 
": ";
   730             $str_evaluation_value = 
"-";
   733         $card_content = array(
   735             $str_status_key => $str_status_value,
   736             $str_mark_key => $str_mark_value,
   737             $str_evaluation_key => $str_evaluation_value,
   738             $this->
lng->txt(
'feedback_given') . 
": " => $a_data[
'fb_given'],
   739             $this->
lng->txt(
'feedback_received') . 
": " => $a_data[
'fb_received']
   741         $card_tpl = 
new ilTemplate(
"tpl.exc_report_details_card.html", 
true, 
true, 
"components/ILIAS/Exercise");
   742         foreach ($card_content as $key => $value) {
   743             $card_tpl->setCurrentBlock(
"assingment_card");
   744             $card_tpl->setVariable(
"ROW_KEY", $key);
   745             $card_tpl->setVariable(
"ROW_VALUE", $value);
   746             $card_tpl->parseCurrentBlock();
   749         $main_panel = $this->ui_factory->panel()->sub($a_data[
'uname'], $this->ui_factory->legacy($a_data[
'utext']))
   750             ->withFurtherInformation($this->ui_factory->card()->standard($this->
lng->txt(
'text_assignment'))->withSections(array($this->ui_factory->legacy($card_tpl->get()))))->withActions($actions_dropdown);
   752         $feedback_tpl = 
new ilTemplate(
"tpl.exc_report_feedback.html", 
true, 
true, 
"components/ILIAS/Exercise");
   754         $filter_feedback = $this->
filter[
"feedback"] ?? 
"";
   755         if (array_key_exists(
"peer", $a_data) && (($filter_feedback == self::FEEDBACK_FULL_SUBMISSION) || $filter_feedback == 
"")) {
   756             $feedback_tpl->setCurrentBlock(
"feedback");
   757             foreach ($a_data[
"peer"] as $peer_id) {
   762                     $peer_name = $this->
lng->txt(
"exc_deleted_user");
   765                 $feedback_tpl->setCurrentBlock(
"peer_feedback");
   766                 $feedback_tpl->setVariable(
"PEER_NAME", $peer_name);
   768                 $submission = 
new ilExSubmission($this->assignment, $a_data[
"uid"]);
   769                 $values = $submission->getPeerReview()->getPeerReviewValues($peer_id, $a_data[
"uid"]);
   772                 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
   773                     $crit_id = $crit->getId()
   776                     $crit->setPeerReviewContext($this->assignment, $peer_id, $a_data[
"uid"]);
   779                         '<div class="ilBlockPropertyCaption">' . $crit->getTitle() . 
'</div>' .
   780                         '<div style="margin:2px 0;">' . $crit->getHTML($values[$crit_id] ?? null) . 
'</div>';
   782                 $feedback_tpl->setVariable(
"PEER_FEEDBACK", $review_html);
   783                 $feedback_tpl->parseCurrentBlock();
   785             $feedback_tpl->parseCurrentBlock();
   787         $feedback_tpl->setVariable(
"GRADE", $this->
lng->txt(
'exc_grading') . 
": " . $this->
lng->txt(
'exc_' . $a_data[
'status']));
   788         $comment = ($a_data[
'comment'] === 
"")
   790             : $a_data[
'comment'];
   791         $feedback_tpl->setVariable(
"COMMENT", $this->
lng->txt(
'exc_comment') . 
": <br>" . 
$comment);
   793         $feedback_panel = $this->ui_factory->panel()->sub(
"", $this->ui_factory->legacy($feedback_tpl->get()));
   795         $report = $this->ui_factory->panel()->report(
"", array($main_panel, $feedback_panel));
   797         return $this->ui_renderer->render([$modal,$report]);
   803         $modal_tpl = 
new ilTemplate(
"tpl.exc_report_evaluation_modal.html", 
true, 
true, 
"components/ILIAS/Exercise");
   804         $modal_tpl->setVariable(
"USER_NAME", $a_data[
'uname']);
   808         if ($this->exercise->hasTutorFeedbackText()) {
   811             $u_text = strip_tags($a_data[
"utext"]); 
   814             if (strlen($u_text) > $max_chars) {
   815                 $text = 
"<input type='checkbox' class='read-more-state' id='post-1' />";
   816                 $text .= 
"<div class='read-more-wrap'>";
   817                 $text .= mb_substr($u_text, 0, $max_chars);
   818                 $text .= 
"<span class='read-more-target'>";
   819                 $text .= mb_substr($u_text, $max_chars);
   820                 $text .= 
"</span></div>";
   821                 $text .= 
"<label for='post-1' class='read-more-trigger'></label>";
   823             $modal_tpl->setVariable(
"USER_TEXT", 
$text);
   826         $modal_tpl->setVariable(
"FORM", $form->getHTML());
   828         $form_id = 
'form_' . $form->getId();
   829         $submit_btn = $this->ui_factory->button()->primary($this->
lng->txt(
"save"), 
'#')
   831                 return "$('#$id').click(function() { $('#$form_id').submit(); return false; });";
   834         return  $this->ui_factory->modal()->roundtrip(strtoupper($this->
lng->txt(
"grade_evaluate")), $this->ui_factory->legacy($modal_tpl->get()))->withActionButtons([$submit_btn]);
   841         $form->setFormAction($this->
ctrl->getFormAction($this, 
"saveEvaluationFromModal"));
   842         $form->setId(uniqid(
'form'));
   846             self::GRADE_NOT_GRADED => $this->
lng->txt(
"exc_notgraded"),
   847             self::GRADE_PASSED => $this->
lng->txt(
"exc_passed"),
   848             self::GRADE_FAILED => $this->
lng->txt(
"exc_failed")
   852         $si->setValue($a_data[
'status'] ?? 
"");
   857         $mark_input->setValue($a_data[
'mark'] ?? 
"");
   858         $mark_input->setMaxLength(32);
   859         $mark_input->setSize(4);
   860         $form->addItem($mark_input);
   863         $item->setValue($a_data[
'uid'] ?? 
"");
   864         $form->addItem($item);
   867         if ($this->exercise->hasTutorFeedbackText()) {
   869             $ta->
setInfo($this->
lng->txt(
"exc_comment_for_learner_info"));
   870             $ta->setValue($a_data[
'comment'] ?? 
"");
   889         if ($form->checkInput()) {
   890             $comment = trim($form->getInput(
'comment'));
   892             $grade = trim($form->getInput(
'grade'));
   893             $mark = trim($form->getInput(
'mark'));
   896         if ($this->assignment->getId() && 
$user_id > 0) {
   897             $member_status = $this->assignment->getMemberStatus(
$user_id);
   900                 $member_status->setStatus($grade);
   902             $member_status->setMark($mark);
   904                 $member_status->setFeedback(
true);
   906             $member_status->update();
   908         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"exc_status_saved"), 
true);
   909         $this->
ctrl->redirect($this, 
"listTextAssignment");
   919         if ($this->requested_user_login == 
"") {
   920             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'msg_no_search_string'));
   924         $users = explode(
',', $this->requested_user_login);
   927         foreach ($users as $user) {
   931                 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'user_not_known'));
   945         if (!count($a_user_ids)) {
   946             $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"no_checkbox"), 
true);
   948             if (!$this->exercise->members_obj->assignMembers($a_user_ids)) {
   949                 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"exc_members_already_assigned"), 
true);
   951                 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"exc_members_assigned"), 
true);
   954         $this->
ctrl->redirect($this, 
"members");
   963         $ctrl->
setParameter($this, 
"ass_id", $this->requested_ass_id);
   979         $this->
ctrl->setParameter($this, 
"ass_id", 
"");
   982         $members = $this->exercise->members_obj->getMembers();
   985             'edit_submissions_grades',
   986             'edit_submissions_grades',
   987             $this->exercise->getRefId(),
   992         if (count($members) == 0) {
   993             $this->tpl->setOnScreenMessage(
'info', $lng->
txt(
"exc_no_participants"));
   998         foreach ($members as $mem_id) {
  1001                 if (trim($name[
"login"]) != 
"") {               
  1002                     $mems[$mem_id] = $name;
  1009         if ($this->requested_part_id == 0 && $mems !== [] && key($mems) > 0) {
  1010             $ilCtrl->setParameter($this, 
"part_id", key($mems));
  1011             $ilCtrl->redirect($this, 
"showParticipant");
  1017         if (count($mems) > 1) {
  1019             foreach ($mems as $k => $m) {
  1021                     $m[
"lastname"] . 
", " . $m[
"firstname"] . 
" [" . $m[
"login"] . 
"]";
  1025             $si->setValue($current_participant);
  1026             $ilToolbar->addStickyItem($si, 
true);
  1029                 $this->
lng->txt(
"select"),
  1031             )->submit()->toToolbar(
true);
  1035             $this->
ctrl->setParameter($this, 
"vw", self::VIEW_PARTICIPANT);
  1036             $this->
ctrl->setParameter($this, 
"part_id", $current_participant);
  1038             $ilToolbar->addSeparator();
  1039             $ilToolbar->setFormAction($ilCtrl->getFormAction($this));
  1040             $ilToolbar->addFormButton($lng->
txt(
"download_all_returned_files"), 
"downloadSubmissions");
  1046                 $current_participant,
  1052             $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
"exc_no_assignments_available"));
  1064             $this->requested_part_id,
  1067         $exc_tab->resetOffset();
  1068         $exc_tab->writeFilterToSession();
  1081             $this->requested_part_id,
  1084         $exc_tab->resetOffset();
  1085         $exc_tab->resetFilter();
  1096         $ctrl->
setParameter($this, 
"part_id", $this->requested_part_id);
  1097         $ctrl->
redirect($this, 
"showParticipant");
  1110         $mems = $mem_obj->getMembers();
  1112         $mems = 
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
  1113             'edit_submissions_grades',
  1114             'edit_submissions_grades',
  1115             $this->exercise->getRefId(),
  1118         if (count($mems) > 0) {
  1119             $ilToolbar->addButton(
  1120                 $lng->
txt(
"exc_export_excel"),
  1121                 $ilCtrl->getLinkTarget($this, 
"exportExcel")
  1125         $this->
ctrl->setParameter($this, 
"vw", self::VIEW_GRADES);
  1129             "showGradesOverview",
  1141         if ($this->requested_member_id > 0) {
  1142             $submission = 
new ilExSubmission($this->assignment, $this->requested_member_id);
  1143             $members = $submission->getUserIds();
  1145             $members = array_keys($members);
  1148         if ($members !== []) {
  1151                 $member_status = $this->assignment->getMemberStatus($user_id);
  1152                 $member_status->setFeedback(
true);
  1153                 $member_status->update();
  1157             $logins = implode(
",", $logins);
  1160             $sig = chr(13) . chr(10) . chr(13) . chr(10);
  1161             $sig .= $this->
lng->txt(
'exc_mail_permanent_link');
  1162             $sig .= chr(13) . chr(10) . chr(13) . chr(10);
  1163             $sig .= ilLink::_getLink($this->exercise->getRefId());
  1164             $sig = rawurlencode(base64_encode($sig));
  1172                     'rcp_to' => $logins,
  1188         if ($this->assignment !== null) {
  1189             if (count($this->selected_participants) == 0) {
  1190                 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"no_checkbox"), 
true);
  1191                 $this->
ctrl->redirect($this, 
"members");
  1194             foreach ($this->selected_participants as 
$user_id) {
  1196                 $tmembers = $submission->getUserIds();
  1197                 if (!$a_keep_teams) {
  1198                     foreach ($tmembers as $tuser_id) {
  1199                         $members[$tuser_id] = 1;
  1203                         $members[] = $tmembers;
  1213             if (count($this->selected_ass_ids) == 0) {
  1214                 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"no_checkbox"), 
true);
  1215                 $this->
ctrl->redirect($this, 
"showParticipant");
  1220             foreach ($this->selected_ass_ids as $ass_id) {
  1222                 $tmembers = $submission->getUserIds();
  1223                 if (!$a_keep_teams) {
  1224                     foreach ($tmembers as $tuser_id) {
  1225                         $members[
$ass_id][] = $tuser_id;
  1229                         $members[
$ass_id][] = $tmembers;
  1250         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"exc_sent"), 
true);
  1251         if ($this->assignment !== null) {
  1252             $this->exercise->sendAssignment($this->assignment, array_keys($members));
  1253             $this->
ctrl->redirect($this, 
"members");
  1255             foreach ($members as $ass_id => $users) {
  1256                 $this->exercise->sendAssignment(
new ilExAssignment($ass_id), $users);
  1258             $this->
ctrl->setParameter($this, 
"part_id", $this->requested_part_id); 
  1259             $this->
ctrl->redirect($this, 
"showParticipant");
  1275         $cgui->setFormAction($ilCtrl->getFormAction($this));
  1276         $cgui->setHeaderText($lng->
txt(
"exc_msg_sure_to_deassign_participant"));
  1277         $cgui->setCancel($lng->
txt(
"cancel"), 
"members");
  1278         $cgui->setConfirm($lng->
txt(
"remove"), 
"deassignMembers");
  1279         foreach ($members as $k => $m) {
  1300         $member_ids = $this->request->getMemberIds();
  1302         foreach ($member_ids as $usr_id) {
  1303             $this->exercise->members_obj->deassignMember((
int) $usr_id);
  1305         $this->tpl->setOnScreenMessage(
'success', $lng->
txt(
"exc_msg_participants_removed"), 
true);
  1306         $ilCtrl->redirect($this, 
"members");
  1322         foreach ($this->listed_ass_ids as $ass_id) {
  1323             if (is_array($selected_ass_ids) &&
  1324                 !in_array($ass_id, $selected_ass_ids)) {
  1329                 "status" => $status[$ass_id]
  1331             if (isset($marks[$ass_id])) {
  1334             if (isset($notices[$ass_id])) {
  1339         $ilCtrl->setParameter($this, 
"part_id", $member_id); 
  1347         array $a_selected = null,
  1348         bool $a_redirect = 
true  1354         $filtered_user_ids = 
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
  1355             'edit_submissions_grades',
  1356             'edit_submissions_grades',
  1357             $this->exercise->getRefId(),
  1362         foreach ($filtered_user_ids as 
$user_id) {
  1363             if (is_array($a_selected) &&
  1364                 !in_array($user_id, $a_selected)) {
  1369                 "status" => $status[$user_id] ?? null
  1372             if (isset($marks[$user_id])) {
  1375             if (isset($notices[$user_id])) {
  1389         if ($this->assignment !== null) {
  1403         bool $a_redirect = 
true  1406         $saved_for = array();
  1407         foreach ($a_data as $ass_id => $users) {
  1408             $ass = ($ass_id < 0)
  1411             foreach ($users as 
$user_id => $values) {
  1416                 foreach ($submission->getUserIds() as $sub_user_id) {
  1418                     $saved_for[$sub_user_id] = $uname[
"lastname"] . 
", " . $uname[
"firstname"];
  1420                     $member_status = $ass->getMemberStatus($sub_user_id);
  1423                     $status = $values[
"status"];
  1424                     if ($status == 
"") {
  1425                         $status = self::GRADE_NOT_GRADED;
  1427                     $member_status->setStatus($status);
  1428                     if (array_key_exists(
"mark", $values)) {
  1429                         $member_status->setMark($values[
"mark"]);
  1431                     if (array_key_exists(
"notice", $values)) {
  1432                         $member_status->setNotice($values[
"notice"]);
  1434                     $member_status->update();
  1440         if ($saved_for !== []) {
  1441             $save_for_str = 
"(" . implode(
" - ", $saved_for) . 
")";
  1445             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"exc_status_saved") . 
" " . $save_for_str, 
true);
  1452         $this->exercise->exportGradesExcel();
  1470         $new_members = array();
  1472         foreach ($members as $group) {
  1473             if (is_array($group)) {
  1474                 $new_members = array_merge($new_members, $group);
  1476                 $first_user = $group;
  1477                 $first_user = array_shift($first_user);
  1480                     $team->removeTeamMember($user_id);
  1483                 $new_members[] = $group;
  1487         if ($new_members !== []) {
  1490             $first_user = array_shift($new_members);
  1492             foreach ($new_members as 
$user_id) {
  1493                 $team->addTeamMember($user_id);
  1497             $submission = 
new ilExSubmission($this->assignment, $first_user);
  1498             $this->exercise->processExerciseStatus(
  1500                 $team->getMembers(),
  1501                 $submission->hasSubmitted(),
  1502                 $submission->validatePeerReviews()
  1506         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"msg_obj_modified"), 
true);
  1507         $ilCtrl->redirect($this, 
"members");
  1519         foreach ($members as $group) {
  1521             if (is_array($group)) {
  1524                 $first_user = $group;
  1525                 $first_user = array_shift($first_user);
  1528                     $team->removeTeamMember($user_id);
  1532                 $this->exercise->processExerciseStatus(
  1540         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"msg_obj_modified"), 
true);
  1541         $ilCtrl->redirect($this, 
"members");
  1552         $ilTabs->clearTargets();
  1553         $ilTabs->setBackTarget(
  1555             $ilCtrl->getLinkTarget($this, $this->
getViewBack())
  1558         if ($a_form === null) {
  1569         $form->setTitle($lng->
txt(
"exc_adopt_group_teams") . 
" - " . $this->assignment->getTitle());
  1570         $form->setFormAction($this->
ctrl->getFormAction($this, 
"createTeamsFromGroups"));
  1572         $all_members = array();
  1574             if (count($group[
"members"]) !== 0) {
  1576                 $grp_value = $options = array();
  1577                 foreach ($group[
"members"] as 
$user_id) {
  1580                     if (!in_array($user_id, $all_members)) {
  1586                 foreach ($options as $user_id => $user_name) {
  1589                 $grp_team->setValue($grp_value);
  1592                 $grp_team->setValue($lng->
txt(
"exc_adopt_group_teams_no_members"));
  1594             $form->addItem($grp_team);
  1597         if ($all_members !== []) {
  1598             $form->addCommandButton(
"createTeamsFromGroups", $lng->
txt(
"save"));
  1600         $form->addCommandButton(
"members", $lng->
txt(
"cancel"));
  1615         if ($form->checkInput()) {
  1617             $all_members = $teams = array();
  1619             foreach (array_keys($map) as $grp_id) {
  1620                 if (isset($req_members[$grp_id]) && is_array($req_members[$grp_id])) {
  1621                     $members = $req_members[$grp_id];
  1622                     $teams[] = $members;
  1623                     $invalid_team_members = array();
  1626                         if (!array_key_exists($user_id, $all_members)) {
  1630                             $invalid_team_members[] = 
$user_id;
  1634                     if ($invalid_team_members !== []) {
  1638                         foreach ($invalid_team_members as $user_id) {
  1640                             $grp_title = $map[$all_members[
$user_id]][
"title"];
  1641                             $alert[] = sprintf($lng->
txt(
"exc_adopt_group_teams_conflict"), $user_name, $grp_title);
  1643                         $input = $form->getItemByPostVar(
"grpt[" . $grp_id . 
"]");
  1644                         $input->setAlert(implode(
"<br/>", $alert));
  1649                 if ($teams !== []) {
  1653                     $sum = array(
"added" => 0, 
"blocked" => 0);
  1654                     foreach ($teams as $members) {
  1656                             if (!$this->exercise->members_obj->isAssigned($user_id)) {
  1657                                 $this->exercise->members_obj->assignMember($user_id);
  1660                             if (!in_array($user_id, $existing_users)) {
  1667                         $first = array_shift($members);
  1673                         foreach ($members as $user_id) {
  1674                             $team->addTeamMember($user_id);
  1679                     if ($sum[
"added"] !== 0) {
  1680                         $mess[] = sprintf($lng->
txt(
"exc_adopt_group_teams_added"), $sum[
"added"]);
  1682                     if ($sum[
"blocked"] !== 0) {
  1683                         $mess[] = sprintf($lng->
txt(
"exc_adopt_group_teams_blocked"), $sum[
"blocked"]);
  1685                     if ($sum[
"added"] !== 0) {
  1686                         $this->tpl->setOnScreenMessage(
'success', implode(
" ", $mess), 
true);
  1688                         $this->tpl->setOnScreenMessage(
'failure', implode(
" ", $mess), 
true);
  1691                 $this->
ctrl->redirect($this, 
"members");
  1693                 $this->tpl->setOnScreenMessage(
'failure', $lng->
txt(
"form_input_not_valid"));
  1697         $form->setValuesByPost();
  1710         $form = $this->gui->form([self::class], 
"uploadMultiFeedback")
  1714                 $lng->
txt(
"exc_multi_feedback_file"),
  1728         $feedback_zip = $this->domain->assignment()->tutorFeedbackZip();
  1729         $rid = $feedback_zip->importFromUploadResult(
  1731             $this->
user->getId(),
  1734         return new \ILIAS\FileUpload\Handler\BasicHandlerResult(
  1755             $this->
lng->txt(
"exc_download_zip_structure"),
  1756             $this->
ctrl->getLinkTarget($this, 
"downloadMultiFeedbackZip")
  1759         if ($form === null) {
  1771         $st_file = $this->domain->assignment()->tutorFeedbackZip()->getMultiFeedbackStructureFile(
  1775         $this->gui->httpUtil()->deliverString(
  1789         if ($form->isValid()) {
  1790             $this->
ctrl->redirect($this, 
"showMultiFeedbackConfirmationTable");
  1814         $this->
ctrl->redirect($this, 
"members");
  1822         $feedback_zip = $this->domain->assignment()->tutorFeedbackZip();
  1823         $feedback_zip->saveMultiFeedbackFiles(
  1825             $this->assignment->getId(),
  1826             $this->
user->getId(),
  1830         $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"msg_obj_modified"), 
true);
  1831         $this->
ctrl->redirect($this, 
"members");
  1845         $modal = $this->ui_factory->modal()->roundtrip(
  1846             $lng->
txt(
"exc_individual_deadline"),
  1847             $this->ui_factory->legacy(
'<div id="ilExcIDlBody"></div>')
  1849         $show = $modal->getShowSignal()->getId();
  1850         $close = $modal->getCloseSignal()->getId();
  1852         $ajax_url = $this->
ctrl->getLinkTarget($this, 
"handleIndividualDeadlineCalls", 
"", 
true, 
false);
  1855         $tpl->
addOnLoadCode(
"il.ExcIDl.init('" . $ajax_url . 
"','" . $show . 
"','" . $close . 
"');");
  1859         return $this->ui_renderer->render($modal);
  1871             foreach ($a_data as $item) {
  1872                 $item = explode(
"_", $item);
  1876                 if (!array_key_exists($ass_id, $ass_tmp)) {
  1877                     if ($this->assignment &&
  1878                         $ass_id == $this->assignment->getId()) {
  1888             return array($map, $ass_tmp);
  1901         $this->
ctrl->saveParameter($this, 
"part_id");
  1905             $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"), 
true);
  1906             $this->
ctrl->redirect($this, $this->assignment !== null
  1908                 : 
"showParticipant");
  1912         if ($this->requested_idl_id != 
"") {
  1914             if (is_array($tmp)) {
  1916                 echo $form->getHTML() .
  1923             $post = $this->
http->request()->getParsedBody();
  1924             foreach (array_keys(
$post) as 
$id) {
  1925                 if (substr($id, 0, 3) == 
"dl_") {
  1926                     $tmp[] = substr($id, 3);
  1936             if (
$valid = $form->checkInput()) {
  1937                 foreach ($users as $ass_id => $users2) {
  1944                         $date_field = $form->getItemByPostVar(
"dl_" . $ass_id . 
"_" . $user_id);
  1956                 $form->setValuesByPost();
  1957                 echo $form->getHTML() .
  1960                 foreach (
$res as $ass_id => $users) {
  1963                     foreach ($users as $id => $date) {
  1964                         $ass->setIndividualDeadline($id, $date);
  1965                         if (is_numeric($id)) {
  1966                             $this->
notification->sendDeadlineSetNotification($ass_id, $id);
  1970                     $subm = $this->domain->submission($ass->getId());
  1971                     $subm->recalculateLateSubmissions();
  1989         $form->setFormAction($this->
ctrl->getFormAction($this));
  1990         $form->setName(
"ilExcIDlForm");
  1992         foreach ($ids as $ass_id => $users) {
  1996             $section->setTitle($ass->getTitle());
  1997             $form->addItem($section);
  2001             $values = $ass->getIndividualDeadlines();
  2003             foreach ($users as 
$id) {
  2005                 if (is_numeric($id)) {
  2007                     $name = $name[
"lastname"] . 
", " . $name[
"firstname"];
  2012                     $team_id = (
int) substr($id, 1);
  2013                     if (array_key_exists($team_id, $teams)) {
  2015                         foreach ($teams[$team_id]->getMembers() as $member_id) {
  2017                             $name[] = $uname[
"lastname"] . 
", " . $uname[
"firstname"];
  2020                         $name = implode(
"<br />", $name);
  2025                 $dl->setShowTime(
true);
  2026                 $dl->setRequired(
true);
  2027                 $form->addItem($dl);
  2029                 if (array_key_exists($id, $values)) {
  2035         $form->addCommandButton(
"", $this->
lng->txt(
"save"));
  2046         $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"select_one"));
  2048         if ($this->assignment !== null) {
  2057         if ($this->requested_filter_status != 
"") {
  2061         $this->
lng->loadLanguageModule(
"search");
  2063         $this->
toolbar->setFormAction($this->
ctrl->getFormAction($this, 
"listTextAssignment"));
  2069             "" => $this->
lng->txt(
"search_any"),
  2070             self::GRADE_NOT_GRADED => $this->
lng->txt(
"exc_notgraded"),
  2071             self::GRADE_PASSED => $this->
lng->txt(
"exc_passed"),
  2072             self::GRADE_FAILED => $this->
lng->txt(
"exc_failed")
  2075         $si_status->setValue($this->
filter[
"status"] ?? 
"");
  2079             self::FEEDBACK_FULL_SUBMISSION => $this->
lng->txt(
"submissions_feedback"),
  2080             self::FEEDBACK_ONLY_SUBMISSION => $this->
lng->txt(
"submissions_only")
  2083         $si_feedback->setValue($this->
filter[
"feedback"] ?? 
"");
  2085         $this->
toolbar->addInputItem($si_status, 
true);
  2089         if ($this->assignment->getPeerReview()) {
  2090             if ($this->requested_filter_feedback != 
"") {
  2093                 $this->
filter[
"feedback"] = 
"submission_feedback";
  2098                 "submission_feedback" => $this->
lng->txt(
"submissions_feedback"),
  2099                 "submission_only" => $this->
lng->txt(
"submissions_only")
  2102             $si_feedback->setValue($this->
filter[
"feedback"] ?? 
"");
  2104             $this->
toolbar->addInputItem($si_feedback, 
true);
  2108             $this->
lng->txt(
"filter"),
  2109             "listTextAssignment"  2110         )->submit()->toToolbar();
  2131         $entry = $submission->getSubmittedEntry($print_version);
  2132         if (is_null($entry)) {
  2133             throw new ilExerciseException(
"No submission entry for " . $this->assignment->getId() . 
" / " .
  2136         $rid = $entry->getRid();
  2138         $last_opening = $submission->getLastOpeningHTMLView();
  2139         $submission_time = $submission->getLastSubmission();
  2143                 $this->assignment->getExerciseId(),
  2145             ) . 
"/subm_" . $this->assignment->getId() . 
"/" . $member_id . 
"/resource.zip";
  2146             $obj_id = str_replace([
".zip", 
"print"], 
"", $entry->getTitle());
  2147             $obj_id = $this->assignment->getAssignmentType()->getExportObjIdForResourceId($obj_id);
  2149         if ($print_version) {
  2153         $obj_dir = $this->assignment->getAssignmentType()->getStringIdentifier() . 
"_" . $obj_id;
  2157             DIRECTORY_SEPARATOR .
  2159             DIRECTORY_SEPARATOR .
  2160             dirname($zip_internal_path) .
  2163             DIRECTORY_SEPARATOR .
  2165         $this->log->debug(
"index html file: " . $index_html_file);
  2167         $web_filesystem = $DIC->filesystem()->web();
  2168         if ($last_opening > $submission_time && $web_filesystem->has($index_html_file)) {
  2174             $file_copied = $this->domain->submission($this->ass_id)->copyRidToWebDir($rid, $zip_internal_path);
  2179             $this->zip->unzipFile($file_copied);
  2180             $web_filesystem->delete($zip_internal_path);
  2181             $this->log->debug(
"deleting: " . $zip_internal_path);
  2183             $submission_repository = $this->service->repo()->submission();
  2184             $submission_repository->updateWebDirAccessTime($this->assignment->getId(), $member_id);
  2189         $error_msg = $this->
lng->txt(
"exc_copy_zip_error");
  2191         if ($error_msg === 
'' || $error_msg === 
'0') {
  2192             $error_msg = $this->
lng->txt(
"exc_find_zip_error");
  2195         $this->tpl->setOnScreenMessage(
'failure', $error_msg);
  2202         string $external_file_path
  2204         list($external_path, $internal_file_path) = explode(
CLIENT_ID . 
"/ilExercise", $external_file_path);
  2205         $internal_file_path = 
"ilExercise" . $internal_file_path;
  2206         return $internal_file_path;
  2215         $this->tabs_gui->clearTargets();
  2216         $this->tabs_gui->setBackTarget(
  2217             $this->
lng->txt(
"back"),
  2218             $this->
ctrl->getLinkTarget($this, 
"members")
  2239         $data[
"peer"] = array();
  2240         foreach ($peer_review->getPeerReviewsByPeerId($user_id) as $value) {
  2241             $data[
"peer"][] = $value[
'giver_id'];
  2245         $data[
"fb_given"] = $peer_review->countGivenFeedback(
true, $user_id);
  2253         $ass_id = $this->request->getAssId();
  2254         $selected_users = $this->request->getSelectedParticipants();
  2256         $graded_users = array_filter($selected_users, 
function (
$user_id) {
  2257             return $this->assignment->getMemberStatus(
$user_id)->getStatus() !== 
"notgraded";
  2260         if (count($graded_users) === 0) {
  2261             $this->tpl->setOnScreenMessage(
"failure", $this->
lng->txt(
"exc_no_graded_mem_selected"), 
true);
  2267         $not->setAssignmentId($ass_id);
  2268         $not->setObjId($this->exercise->getId());
  2269         $not->setRefId($this->exercise->getRefId());
  2270         $not->setRecipients($graded_users);
  2272         $this->tpl->setOnScreenMessage(
"success", $this->
lng->txt(
"exc_graded_mem_notified"), 
true);
  2280         if ($this->assignment !== null) {
  2281             foreach (array_keys($members) as $mem) {
  2286                 $this->tpl->setOnScreenMessage(
"success", $this->
lng->txt(
"msg_obj_modified"), 
true);
  2289         $this->
ctrl->redirect($this, 
"members");
  2296         if ($this->assignment !== null) {
  2297             foreach (array_keys($members) as $mem) {
  2302                 $this->tpl->setOnScreenMessage(
"success", $this->
lng->txt(
"msg_obj_modified"), 
true);
  2305         $this->
ctrl->redirect($this, 
"members");
  2312         $member_status = $ass->getMemberStatus($part_id);
  2313         $member_status->setStatus($status);
  2314         $member_status->update();
 array $listed_participants
 
static _replaceMediaObjectImageSrc(string $a_text, int $a_direction=0, string $nic='')
Replaces image source from mob image urls with the mob id or replaces mob id with the correct image s...
 
addMembersObject($a_user_ids=array())
 
showMultiFeedbackObject(FormAdapterGUI $form=null)
 
__construct(InternalService $service, ilExAssignment $a_ass=null)
Constructor. 
 
Exercise UI frontend presentation service class. 
 
showParticipantObject()
Show Participant. 
 
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ilObjUser $user=null,)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
ilGlobalTemplateInterface $tpl
 
showGradesOverviewObject()
 
string $requested_user_login
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
handleMultiFeedbackUploadResult(FileUpload $upload, UploadResult $result)
 
TutorFeedbackFileManager $tutor_feedback_file
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
 
static initDateTimePicker()
 
redirect(object $a_gui_obj, string $a_cmd=null, string $a_anchor=null, bool $is_async=false)
 
getEvaluationModal(array $a_data)
 
createTeamsFromGroupsObject()
 
static _before(ilDateTime $start, ilDateTime $end, string $a_compare_field='', string $a_tz='')
compare two dates and check start is before end This method does not consider tz offsets. 
 
setOnScreenMessage(string $type, string $a_txt, bool $a_keep=false)
Set a message to be displayed to the user. 
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
ILIAS Exercise Notification NotificationManager $notification
 
Interface Observer  Contains several chained tasks and infos about them. 
 
ilExAssignment $assignment
 
getTutorNotices()
key might be ass_ids or user_ids! 
 
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
 
parseIndividualDeadlineData(array $a_data)
 
static lookupTitle(int $a_id)
 
getStatus()
key might be ass_ids or user_ids! 
 
getEvaluationModalForm(array $a_data)
 
getMarks()
key might be ass_ids or user_ids! 
 
static _lookupName(int $a_user_id)
lookup user name 
 
Exercise internal service. 
 
getWebFilePathFromExternalFilePath(string $external_file_path)
Get the object specific file path from an external full file path. 
 
array $requested_tutor_notices
 
static _lookupId($a_user_str)
 
setParameterByClass(string $a_class, string $a_parameter, $a_value)
 
request(?array $query_params=null, ?array $post_data=null)
Get request wrapper. 
 
static getInstanceByUserId(int $a_assignment_id, int $a_user_id, bool $a_create_on_demand=false)
 
addUserFromAutoCompleteObject()
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
setSingleStatus($ass_id, $part_id, $status)
 
filterParticipantsByAccess()
Filter manageable members by position or rbac access. 
 
addSubTabs(string $a_activate)
 
static getAssignmentParticipants(int $a_exercise_id, int $a_ass_id)
 
notification()
 description: > Example for rendring a notification glyph. 
 
withOnLoadCode(Closure $binder)
 
static getAdoptableGroups(int $a_exc_ref_id)
 
showParticipantResetObject()
 
selectParticipantObject()
 
saveStatusAllObject(array $a_selected=null, bool $a_redirect=true)
 
saveStatusParticipantObject(array $selected_ass_ids=null)
Save assignment status (participant view) 
 
getMultiFeedbackForm(int $a_ass_id)
 
resetOffset(bool $a_in_determination=false)
 
sendGradingNotificationObject()
 
string $requested_comment
 
redirectFeedbackMailObject()
 
filterUserIdsByRbacOrPositionOfCurrentUser(string $rbac_perm, string $pos_perm, int $ref_id, array $user_ids)
 
compareTextAssignmentsObject()
TODO -> Deal with the redirection after update the grade via action button. 
 
handleIndividualDeadlineCallsObject()
 
array $requested_learning_comments
 
static http()
Fetches the global http state from ILIAS. 
 
getReportPanel(array $a_data)
 
static getNamePresentation( $a_user_id, bool $a_user_image=false, bool $a_profile_link=false, string $a_profile_back_link='', bool $a_force_first_lastname=false, bool $a_omit_login=false, bool $a_sortable=true, bool $a_return_data_array=false, $a_ctrl_path='ilpublicuserprofilegui')
Default behaviour is: 
 
setContent(string $a_html)
Sets content for standard template. 
 
static signFolderOfStartFile(string $start_file_path)
 
Download submissions and feedback for exercises. 
 
This is how the factory for UI elements looks. 
 
static createPathFromId(int $a_container_id, string $a_name)
 
TaskFactory $task_factory
 
downloadSubmissionsObject(?array $selected_participants=null)
 
string $requested_filter_feedback
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
uploadMultiFeedbackObject()
Upload multi feedback file. 
 
downloadMultiFeedbackZipObject()
Download multi-feedback structrue file. 
 
Class BasicHandlerResult. 
 
static fillAutoCompleteToolbar(object $parent_object, ilToolbarGUI $toolbar=null, array $a_options=[], bool $a_sticky=false)
array( auto_complete_name = $lng->txt('user'), auto_complete_size = 15, user_type = array(ilCoursePar...
 
addJavaScript(string $a_js_file, bool $a_add_version_parameter=true, int $a_batch=2)
Add a javascript file that should be included in the header. 
 
array $requested_group_members
 
collectFeedbackDataFromPeer(int $user_id, string $ts, string $text)
 
showParticipantApplyObject()
 
addOnLoadCode(string $a_code, int $a_batch=2)
Add on load code. 
 
static getAssignmentTeamMap(int $a_ass_id)
 
static redirect(string $a_script)
 
ilExerciseManagementGUI: ilRepositorySearchGUI  ilExerciseManagementGUI: ilExSubmissionTeamGUI, ilExSubmissionFileGUI  ilExerciseManagementGUI: ilExSubmissionTextGUI, ilExPeerReviewGUI  ilExerciseManagementGUI: ilParticipantsPerAssignmentTableGUI  ilExerciseManagementGUI: ilResourceCollectionGUI, ilRepoStandardUploadHandlerGUI  ilExerciseManagementGUI: ilExerciseSubmissionFeedbackGUI 
 
static getInstancesByExercise(int $a_exc_id)
 
confirmDeassignMembersObject()
 
cancelMultiFeedbackObject()
Cancel Multi Feedback. 
 
openSubmissionViewObject(bool $print_version=false)
Open HTML view for portfolio submissions. 
 
membersObject()
All participants and submission of one assignment. 
 
array $selected_participants
 
initIndividualDeadlineModal()
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
saveEvaluationFromModalObject()
 
This class represents a text area property in a property form. 
 
ILIAS HTTP Services $http
 
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples 
 
adoptTeamsFromGroupObject(ilPropertyFormGUI $a_form=null)
 
ilExerciseSubmissionFeedbackGUI $feedback_gui
 
const FEEDBACK_ONLY_SUBMISSION
 
showMultiFeedbackConfirmationTableObject()
Show multi feedback confirmation table. 
 
Exercise submission //TODO: This class has many static methods related to delivered "files"...
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
getOnLoadCodeForAsynch()
Get js onload code for ajax calls. 
 
saveMultiFeedbackObject()
Save multi feedback. 
 
filter(string $filter_id, $class_path, string $cmd, bool $activated=true, bool $expanded=true)
 
setParameter(object $a_gui_obj, string $a_parameter, $a_value)
 
static getGroupMembersMap(int $a_exc_ref_id)
 
static _lookupType(int $id, bool $reference=false)
 
Exercise gui request wrapper. 
 
saveStatusSelectedObject()
 
Exercise participant table. 
 
getMultiActionUserIds(bool $a_keep_teams=false)
 
ILIAS Exercise InternalDomainService $domain
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
getSelectedParticipants()
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
initIndividualDeadlineForm(array $a_ass_map, array $ids)
 
saveStatus(array $a_data, bool $a_redirect=true)
 
const FEEDBACK_FULL_SUBMISSION
 
string $requested_filter_status
 
openSubmissionPrintViewObject()
Open HTML view for portfolio submissions. 
 
static getInstancesFromMap(int $a_assignment_id)
 
setIndividualDeadlineObject()
 
static sortArray(array $array, string $a_array_sortby_key, string $a_array_sortorder="asc", bool $a_numeric=false, bool $a_keep_keys=false)
 
static _lookupLogin(int $a_user_id)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...