4include_once
"Modules/Exercise/classes/class.ilExSubmission.php";
5include_once
"Modules/Exercise/classes/class.ilExSubmissionBaseGUI.php";
91 $this->ui_factory =
$DIC->ui()->factory();
92 $this->ui_renderer =
$DIC->ui()->renderer();
93 $this->
user = $DIC->user();
94 $this->toolbar =
$DIC->toolbar();
96 $this->ctrl =
$DIC->ctrl();
97 $this->tabs_gui =
$DIC->tabs();
98 $this->lng =
$DIC->language();
99 $this->tpl =
$DIC[
"tpl"];
101 $this->task_factory =
$DIC->backgroundTasks()->taskFactory();
104 $this->exercise = $a_exercise;
106 $this->assignment = $a_ass;
107 $this->ass_id = $this->assignment->
getId();
110 $this->ctrl->saveParameter($this, array(
"vw",
"member_id"));
119 $class =
$ilCtrl->getNextClass($this);
123 case "ilfilesystemgui":
124 $ilTabs->clearTargets();
125 $ilTabs->setBackTarget(
127 $ilCtrl->getLinkTarget($this, $this->getViewBack())
132 include_once(
"./Modules/Exercise/classes/class.ilFSStorageExercise.php");
137 $feedback_id = $submission->getFeedbackId();
138 $noti_rec_ids = $submission->getUserIds();
140 include_once(
"./Services/User/classes/class.ilUserUtil.php");
142 foreach ($noti_rec_ids as $rec_id) {
145 $fs_title = implode(
" / ", $fs_title);
147 include_once(
"./Services/FileSystem/classes/class.ilFileSystemGUI.php");
148 $fs_gui =
new ilFileSystemGUI($fstorage->getFeedbackPath($feedback_id));
149 $fs_gui->setTableId(
"excfbfil" . $this->assignment->getId() .
"_" . $feedback_id);
150 $fs_gui->setAllowDirectories(
false);
151 $fs_gui->setTitle(
$lng->txt(
"exc_fb_files") .
" - " .
152 $this->assignment->getTitle() .
" - " .
154 $pcommand = $fs_gui->getLastPerformedCommand();
155 if (is_array($pcommand) && $pcommand[
"cmd"] ==
"create_file") {
156 foreach ($noti_rec_ids as $user_id) {
157 $member_status = $this->assignment->getMemberStatus($user_id);
158 $member_status->setFeedback(
true);
159 $member_status->update();
162 $this->exercise->sendFeedbackFileNotification(
165 $this->assignment->getId()
168 $this->ctrl->forwardCommand($fs_gui);
171 case 'ilrepositorysearchgui':
172 include_once(
'./Services/Search/classes/class.ilRepositorySearchGUI.php');
174 $ref_id = $this->exercise->getRefId();
175 $rep_search->addUserAccessFilterCallable(
function ($a_user_ids) use ($ref_id) {
176 return $GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
177 'edit_submissions_grades',
178 'edit_submissions_grades',
183 $rep_search->setTitle($this->lng->txt(
"exc_add_participant"));
184 $rep_search->setCallback($this,
'addMembersObject');
188 $this->ctrl->setReturn($this,
'members');
190 $this->ctrl->forwardCommand($rep_search);
193 case "ilexsubmissionteamgui":
194 include_once
"Modules/Exercise/classes/class.ilExSubmissionTeamGUI.php";
199 case "ilexsubmissionfilegui":
200 include_once
"Modules/Exercise/classes/class.ilExSubmissionFileGUI.php";
205 case "ilexsubmissiontextgui":
206 $ilCtrl->saveParameter($this, array(
"part_id"));
207 include_once
"Modules/Exercise/classes/class.ilExSubmissionTextGUI.php";
212 case "ilexpeerreviewgui":
213 include_once
"Modules/Exercise/classes/class.ilExPeerReviewGUI.php";
221 case 'downloadSubmissions':
222 $cmd =
$ilCtrl->getCmd(
"downloadSubmissions");
225 $cmd =
$ilCtrl->getCmd(
"listPublicSubmissions");
228 $this->{$cmd .
"Object"}();
235 switch ($_REQUEST[
"vw"]) {
237 $back_cmd =
"showParticipant";
241 $back_cmd =
"showGradesOverview";
246 $back_cmd =
"members";
255 $this->ctrl->setReturn($this, $back_cmd);
257 $this->tabs_gui->clearTargets();
258 $this->tabs_gui->setBackTarget(
259 $this->lng->txt(
"back"),
260 $this->ctrl->getLinkTarget($this, $back_cmd)
263 include_once
"Modules/Exercise/classes/class.ilExSubmission.php";
264 return new ilExSubmission($this->assignment, $_REQUEST[
"member_id"],
null,
true);
278 $ass_id =
$_GET[
"ass_id"];
279 $part_id =
$_GET[
"part_id"];
281 $ilCtrl->setParameter($this,
"vw",
"");
282 $ilCtrl->setParameter($this,
"member_id",
"");
283 $ilCtrl->setParameter($this,
"ass_id",
"");
284 $ilCtrl->setParameter($this,
"part_id",
"");
288 $lng->txt(
"exc_assignment_view"),
289 $ilCtrl->getLinkTarget($this,
"members")
293 $lng->txt(
"exc_participant_view"),
294 $ilCtrl->getLinkTarget($this,
"showParticipant")
298 $lng->txt(
"exc_grades_overview"),
299 $ilCtrl->getLinkTarget($this,
"showGradesOverview")
301 $ilTabs->activateSubTab($a_activate);
303 $ilCtrl->setParameter($this,
"ass_id", $ass_id);
304 $ilCtrl->setParameter($this,
"part_id", $part_id);
312 $ilCtrl->setParameterByClass(
"ilExSubmissionFileGUI",
"member_id", (
int)
$_GET[
"member_id"]);
313 $url =
$ilCtrl->getLinkTargetByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI",
"ilExerciseManagementGUI",
"ilExSubmissionFileGUI"),
"downloadNewReturned");
314 $js_url =
$ilCtrl->getLinkTargetByClass(array(
"ilRepositoryGUI",
"ilExerciseHandlerGUI",
"ilObjExerciseGUI",
"ilExerciseManagementGUI",
"ilExSubmissionFileGUI"),
"downloadNewReturned",
"",
"",
false);
315 ilUtil::sendInfo(
$lng->txt(
"exc_wait_for_files") .
"<a href='$url'> " .
$lng->txt(
'exc_download_files') .
"</a><script>window.location.href ='" . $js_url .
"';</script>");
329 include_once
'Services/Tracking/classes/class.ilLPMarks.php';
334 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
337 if (!$this->assignment) {
338 $this->assignment = current($ass);
342 if (count($ass) > 1) {
344 foreach ($ass as $a) {
345 $options[$a->getId()] = $a->getTitle();
347 include_once(
"./Services/Form/classes/class.ilSelectInputGUI.php");
350 $si->setValue($this->assignment->getId());
351 $ilToolbar->addStickyItem(
$si);
353 include_once(
"./Services/UIComponent/Button/classes/class.ilSubmitButton.php");
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) {
375 include_once
'./Services/Search/classes/class.ilRepositorySearchGUI.php';
380 'auto_complete_name' =>
$lng->txt(
'user'),
381 'submit_name' =>
$lng->txt(
'add'),
382 'add_search' =>
true,
383 'add_from_container' => $this->exercise->getRefId()
389 if (count($ass) > 0) {
390 if ($has_rbac_access) {
391 $ilToolbar->addSeparator();
395 $ilToolbar->setFormAction(
$ilCtrl->getFormAction($this));
397 $ilCtrl->setParameter($this,
"ass_id", $this->assignment->getId());
400 include_once(
"./Modules/Exercise/classes/class.ilExAssignmentTeam.php");
402 $ilToolbar->addButton(
403 $this->lng->txt(
"exc_adopt_group_teams"),
404 $this->ctrl->getLinkTarget($this,
"adoptTeamsFromGroup")
407 $ilToolbar->addSeparator();
409 } elseif ($this->exercise->hasTutorFeedbackFile()) {
410 if (!$this->assignment->getAssignmentType()->usesTeams()) {
412 $ilToolbar->addButton(
413 $this->lng->txt(
"exc_multi_feedback"),
414 $this->ctrl->getLinkTarget($this,
"showMultiFeedback")
417 $ilToolbar->addSeparator();
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);
431 include_once(
"./Modules/Exercise/classes/class.ilExerciseMemberTableGUI.php");
434 $exc_tab->getHTML() .
435 $this->initIndividualDeadlineModal()
441 $ilCtrl->setParameter($this,
"ass_id",
"");
448 include_once
'./Modules/Exercise/classes/BackgroundTasks/class.ilDownloadSubmissionsBackgroundTask.php';
450 $participant_id = $_REQUEST[
'part_id'];
454 (
int) $this->exercise->getRefId(),
455 (
int) $this->exercise->getId(),
457 (
int) $participant_id
460 if ($download_task->run()) {
461 ilUtil::sendSuccess($this->lng->txt(
'exc_down_files_started_bg'),
true);
464 if ($this->assignment) {
465 $this->ctrl->redirect($this,
"members");
467 $this->ctrl->redirect($this,
"showParticipant");
474 include_once(
"./Modules/Exercise/classes/class.ilExerciseMemberTableGUI.php");
476 $exc_tab->resetOffset();
477 $exc_tab->writeFilterToSession();
484 include_once(
"./Modules/Exercise/classes/class.ilExerciseMemberTableGUI.php");
486 $exc_tab->resetOffset();
487 $exc_tab->resetFilter();
500 include_once
'Services/Tracking/classes/class.ilLPMarks.php';
502 if (is_array(
$_POST[
"lcomment"])) {
503 foreach (
$_POST[
"lcomment"] as $k => $v) {
504 $marks_obj =
new ilLPMarks($this->exercise->getId(), (
int) $k);
507 $marks_obj->update();
510 ilUtil::sendSuccess(
$lng->txt(
"exc_msg_saved_grades"),
true);
511 $ilCtrl->redirect($this,
"showGradesOverview");
525 $this->tabs_gui->clearTargets();
526 $this->tabs_gui->setBackTarget(
527 $this->lng->txt(
"back"),
528 $this->ctrl->getLinkTarget($this,
"members")
531 $button_print = $this->ui_factory->button()->standard($this->lng->txt(
'print'),
"#")
532 ->withOnLoadCode(
function (
$id) {
533 return "$('#{$id}').click(function() { window.print(); return false; });";
535 $this->toolbar->addSeparator();
536 $this->toolbar->addComponent($button_print);
540 $peer_data = $peer_review->getAllPeerReviews();
542 include_once
"Services/User/classes/class.ilUserUtil.php";
543 include_once
"Services/RTE/classes/class.ilRTE.php";
547 $report_title = $this->lng->txt(
"exc_list_text_assignment") .
": " . $this->assignment->getTitle();
548 $report_html .=
"<h1>" . $report_title .
"</h1>";
553 $members = $members_filter->filterParticipantsByAccess();
558 $uname =
$user->getFirstname() .
" " .
$user->getLastname();
560 "uid" => $file[
"user_id"],
562 "udate" => $file[
"ts"],
566 if (isset($peer_data[$file[
"user_id"]])) {
567 $data[
"peer"] = array_keys($peer_data[$file[
"user_id"]]);
570 $data[
"fb_received"] = (is_array(
$data[
"peer"]))
571 ? count(
$data[
"peer"])
573 $data[
"fb_given"] = $peer_review->countGivenFeedback(
true, $file[
"user_id"]);
575 $submission_data = $this->assignment->getExerciseMemberAssignmentData($file[
"user_id"], $this->filter[
"status"]);
577 if (is_array($submission_data)) {
584 if ($total_reports == 0) {
585 $mtpl =
new ilTemplate(
"tpl.message.html",
true,
true,
"Services/Utilities");
586 $mtpl->setCurrentBlock(
"info_message");
587 $mtpl->setVariable(
"TEXT", $this->lng->txt(
"fiter_no_results"));
588 $mtpl->parseCurrentBlock();
589 $report_html .= $mtpl->get();
592 $this->tpl->setContent($report_html);
599 $this->ctrl->setParameter($this,
"member_id", $a_data[
'uid']);
601 $this->ui_factory->button()->shy($this->lng->txt(
"grade_evaluate"),
"#")->withOnClick($modal->getShowSignal())
603 if ($this->exercise->hasTutorFeedbackMail()) {
604 $actions[] = $this->ui_factory->button()->shy(
605 $this->lng->txt(
"exc_tbl_action_feedback_mail"),
606 $this->ctrl->getLinkTarget($this,
"redirectFeedbackMail")
609 if ($this->exercise->hasTutorFeedbackFile()) {
610 $actions[] = $this->ui_factory->button()->shy(
611 $this->lng->txt(
"exc_tbl_action_feedback_file"),
612 $this->ctrl->getLinkTargetByClass(
"ilFileSystemGUI",
"listFiles")
616 $this->ctrl->setParameter($this,
"member_id",
"");
618 $actions_dropdown = $this->ui_factory->dropdown()->standard($actions);
620 if ($a_data[
'status'] == self::GRADE_NOT_GRADED) {
621 $str_status_key = $this->lng->txt(
'exc_tbl_status');
622 $str_status_value = $this->lng->txt(
'not_yet');
624 $str_status_key = $this->lng->txt(
'exc_tbl_status_time');
628 $str_mark_key = $this->lng->txt(
"exc_tbl_mark");
629 $str_mark_value = $this->lng->txt(
'not_yet');
631 if (($a_data[
'mark'] !=
"")) {
632 $str_mark_value = $a_data[
'mark'];
635 if ($a_data[
'feedback_time']) {
636 $str_evaluation_key = $this->lng->txt(
'exc_tbl_feedback_time');
639 $str_evaluation_key = $this->lng->txt(
'exc_settings_feedback');
640 $str_evaluation_value = $this->lng->txt(
'not_yet');
643 $card_content = array(
645 $str_status_key => $str_status_value,
646 $str_mark_key => $str_mark_value,
647 $str_evaluation_key => $str_evaluation_value,
648 $this->lng->txt(
'feedback_given') => $a_data[
'fb_given'],
649 $this->lng->txt(
'feedback_received') => $a_data[
'fb_received']
651 $card_tpl =
new ilTemplate(
"tpl.exc_report_details_card.html",
true,
true,
"Modules/Exercise");
652 foreach ($card_content as
$key => $value) {
653 $card_tpl->setCurrentBlock(
"assingment_card");
654 $card_tpl->setVariable(
"ROW_KEY",
$key);
655 $card_tpl->setVariable(
"ROW_VALUE", $value);
656 $card_tpl->parseCurrentBlock();
659 $main_panel = $this->ui_factory->panel()->sub($a_data[
'uname'], $this->ui_factory->legacy($a_data[
'utext']))
660 ->withCard($this->ui_factory->card()->standard($this->lng->txt(
'text_assignment'))->withSections(array($this->ui_factory->legacy($card_tpl->get()))))->withActions($actions_dropdown);
662 $feedback_tpl =
new ilTemplate(
"tpl.exc_report_feedback.html",
true,
true,
"Modules/Exercise");
663 if (array_key_exists(
"peer", $a_data) && $this->filter[
"feedback"] ==
"submission_feedback") {
664 $feedback_tpl->setCurrentBlock(
"feedback");
665 foreach ($a_data[
"peer"] as $peer_id) {
668 $peer_name =
$user->getFirstname() .
" " .
$user->getLastname();
670 $peer_name = $this->lng->txt(
"exc_deleted_user");
673 $feedback_tpl->setCurrentBlock(
"peer_feedback");
674 $feedback_tpl->setVariable(
"PEER_NAME", $peer_name);
676 $submission =
new ilExSubmission($this->assignment, $a_data[
"uid"]);
677 $values = $submission->getPeerReview()->getPeerReviewValues($peer_id, $a_data[
"uid"]);
680 foreach ($this->assignment->getPeerReviewCriteriaCatalogueItems() as $crit) {
681 $crit_id = $crit->getId()
684 $crit->setPeerReviewContext($this->assignment, $peer_id, $a_data[
"uid"]);
687 '<div class="ilBlockPropertyCaption">' . $crit->getTitle() .
'</div>' .
688 '<div style="margin:2px 0;">' . $crit->getHTML(
$values[$crit_id]) .
'</div>';
690 $feedback_tpl->setVariable(
"PEER_FEEDBACK", $review_html);
691 $feedback_tpl->parseCurrentBlock();
693 $feedback_tpl->parseCurrentBlock();
695 $feedback_tpl->setVariable(
"GRADE", $this->lng->txt(
'grade') .
": " . $this->lng->txt(
'exc_' . $a_data[
'status']));
696 $feedback_tpl->setVariable(
"COMMENT", $this->lng->txt(
'exc_comment') .
"<br>" . $a_data[
'comment']);
698 $feedback_panel = $this->ui_factory->panel()->sub(
"", $this->ui_factory->legacy($feedback_tpl->get()));
700 $report = $this->ui_factory->panel()->report(
"", array($main_panel, $feedback_panel));
702 return $this->ui_renderer->render([$modal,$report]);
707 $modal_tpl =
new ilTemplate(
"tpl.exc_report_evaluation_modal.html",
true,
true,
"Modules/Exercise");
708 $modal_tpl->setVariable(
"USER_NAME", $a_data[
'uname']);
711 $form->setFormAction($this->ctrl->getFormAction($this,
"saveEvaluationFromModal"));
712 $form->setId(uniqid(
'form'));
716 self::GRADE_NOT_GRADED => $this->lng->txt(
"exc_notgraded"),
717 self::GRADE_PASSED => $this->lng->txt(
"exc_passed"),
718 self::GRADE_FAILED => $this->lng->txt(
"exc_failed")
722 $si->setValue($a_data[
'status']);
726 $mark_input =
new ilTextInputGUI($this->lng->txt(
"exc_tbl_mark"),
"mark");
727 $mark_input->setValue($a_data[
'mark']);
728 $mark_input->setMaxLength(32);
729 $mark_input->setSize(4);
730 $form->addItem($mark_input);
733 $item->setValue($a_data[
'uid']);
734 $form->addItem($item);
737 if ($this->exercise->hasTutorFeedbackText()) {
740 $u_text = strip_tags($a_data[
"utext"]);
743 if (strlen($u_text) > $max_chars) {
744 $text =
"<input type='checkbox' class='read-more-state' id='post-1' />";
745 $text .=
"<div class='read-more-wrap'>";
746 $text .= mb_substr($u_text, 0, $max_chars);
747 $text .=
"<span class='read-more-target'>";
748 $text .= mb_substr($u_text, $max_chars);
749 $text .=
"</span></div>";
750 $text .=
"<label for='post-1' class='read-more-trigger'></label>";
752 $modal_tpl->setVariable(
"USER_TEXT",
$text);
755 $ta->setInfo($this->lng->txt(
"exc_comment_for_learner_info"));
756 $ta->setValue($a_data[
'comment']);
761 $modal_tpl->setVariable(
"FORM",
$form->getHTML());
763 $form_id =
'form_' .
$form->getId();
764 $submit_btn = $this->ui_factory->button()->primary($this->lng->txt(
"save"),
'#')
765 ->withOnLoadCode(
function (
$id) use ($form_id) {
766 return "$('#{$id}').click(function() { $('#{$form_id}').submit(); return false; });";
769 return $this->ui_factory->modal()->roundtrip(strtoupper($this->lng->txt(
"grade_evaluate")), $this->ui_factory->legacy($modal_tpl->get()))->withActionButtons([$submit_btn]);
778 $user_id = (int)
$_POST[
'mem_id'];
779 $grade = trim(
$_POST[
"grade"]);
780 $mark = trim(
$_POST[
'mark']);
782 if ($this->assignment->getId() && $user_id) {
783 $member_status = $this->assignment->getMemberStatus($user_id);
785 $member_status->setStatus($grade);
786 $member_status->setMark($mark);
788 $member_status->setFeedback(
true);
790 $member_status->update();
792 ilUtil::sendSuccess($this->lng->txt(
"exc_status_saved"),
true);
793 $this->ctrl->redirect($this,
"listTextAssignment");
801 if (!strlen(trim(
$_POST[
'user_login']))) {
817 $user_ids[] = $user_id;
832 if (!count($a_user_ids)) {
837 if (!$this->exercise->members_obj->assignMembers($a_user_ids)) {
857 ilUtil::sendSuccess($this->lng->txt(
"exc_members_assigned"),
true);
860 $this->ctrl->redirect($this,
"members");
885 $this->ctrl->setParameter($this,
"ass_id",
"");
888 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
890 $members = $this->exercise->members_obj->getMembers();
892 $members =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
893 'edit_submissions_grades',
894 'edit_submissions_grades',
895 $this->exercise->getRefId(),
900 if (count($members) == 0) {
906 foreach ($members as $mem_id) {
908 include_once(
"./Services/User/classes/class.ilObjUser.php");
910 if (trim(
$name[
"login"]) !=
"") {
911 $mems[$mem_id] =
$name;
918 if (
$_GET[
"part_id"] ==
"" && count($mems) > 0) {
919 $_GET[
"part_id"] = key($mems);
922 $current_participant =
$_GET[
"part_id"];
925 if (count($mems) > 1) {
927 foreach ($mems as $k =>
$m) {
929 $m[
"lastname"] .
", " .
$m[
"firstname"] .
" [" .
$m[
"login"] .
"]";
931 include_once(
"./Services/Form/classes/class.ilSelectInputGUI.php");
934 $si->setValue($current_participant);
935 $ilToolbar->addStickyItem(
$si);
937 include_once(
"./Services/UIComponent/Button/classes/class.ilSubmitButton.php");
939 $button->setCaption(
"exc_select_part");
940 $button->setCommand(
"selectParticipant");
941 $ilToolbar->addStickyItem($button);
944 if (count($mems) > 0) {
945 $this->ctrl->setParameter($this,
"vw", self::VIEW_PARTICIPANT);
946 $this->ctrl->setParameter($this,
"part_id", $current_participant);
948 $ilToolbar->setFormAction(
$ilCtrl->getFormAction($this));
949 $ilToolbar->addFormButton(
$lng->txt(
"download_all_returned_files"),
"downloadSubmissions");
951 include_once(
"./Modules/Exercise/classes/class.ilExParticipantTableGUI.php");
958 $tpl->setContent($part_tab->getHTML() .
959 $this->initIndividualDeadlineModal());
967 include_once(
"./Modules/Exercise/classes/class.ilExParticipantTableGUI.php");
969 $exc_tab->resetOffset();
970 $exc_tab->writeFilterToSession();
977 include_once(
"./Modules/Exercise/classes/class.ilExParticipantTableGUI.php");
979 $exc_tab->resetOffset();
980 $exc_tab->resetFilter();
1006 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
1008 $mems = $mem_obj->getMembers();
1010 $mems =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
1011 'edit_submissions_grades',
1012 'edit_submissions_grades',
1013 $this->exercise->getRefId(),
1016 if (count($mems) > 0) {
1017 $ilToolbar->addButton(
1018 $lng->txt(
"exc_export_excel"),
1019 $ilCtrl->getLinkTarget($this,
"exportExcel")
1023 $this->ctrl->setParameter($this,
"vw", self::VIEW_GRADES);
1025 include_once(
"./Modules/Exercise/classes/class.ilExGradesTableGUI.php");
1028 "showGradesOverview",
1032 $tpl->setContent($grades_tab->getHTML());
1042 if (
$_GET[
"member_id"] !=
"") {
1044 $members = $submission->getUserIds();
1046 $members = array_keys($members);
1051 foreach ($members as $user_id) {
1052 $member_status = $this->assignment->getMemberStatus($user_id);
1053 $member_status->setFeedback(
true);
1054 $member_status->update();
1058 $logins = implode($logins,
",");
1061 $sig = chr(13) . chr(10) . chr(13) . chr(10);
1062 $sig .= $this->lng->txt(
'exc_mail_permanent_link');
1063 $sig .= chr(13) . chr(10) . chr(13) . chr(10);
1064 include_once
'./Services/Link/classes/class.ilLink.php';
1066 $sig = rawurlencode(base64_encode($sig));
1068 require_once
'Services/Mail/classes/class.ilMailFormCall.php';
1075 'rcp_to' => $logins,
1089 foreach ($this->exercise->members_obj->getMembers() as $member_id) {
1091 $submission->updateTutorDownloadTime();
1097 foreach ($submission->getFiles() as $file) {
1098 if ($this->assignment->getAssignmentType()->isSubmissionAssignedToTeam()) {
1099 $storage_id = $file[
"team_id"];
1101 $storage_id = $file[
"user_id"];
1104 $members[$storage_id][
"files"][$file[
"returned_id"]] = $file;
1106 if ($this->assignment->getAssignmentType()->isSubmissionAssignedToTeam()) {
1107 $name =
"Team " . $submission->getTeam()->getId();
1110 $name = $tmp_obj->getFirstname() .
" " . $tmp_obj->getLastname();
1112 if ($storage_id > 0) {
1113 $members[$storage_id][
"name"] =
$name;
1125 if ($this->assignment) {
1128 $this->ctrl->redirect($this,
"members");
1131 foreach (array_keys(
$_POST[
"member"]) as $user_id) {
1133 $tmembers = $submission->getUserIds();
1134 if (!(
bool) $a_keep_teams) {
1135 foreach ($tmembers as $tuser_id) {
1136 $members[$tuser_id] = 1;
1140 $members[] = $tmembers;
1143 $members[] = $user_id;
1152 $this->ctrl->redirect($this,
"showParticipant");
1155 $user_id =
$_GET[
"part_id"];
1157 include_once
"Modules/Exercise/classes/class.ilExAssignment.php";
1158 foreach (array_keys(
$_POST[
"ass"]) as $ass_id) {
1160 $tmembers = $submission->getUserIds();
1161 if (!(
bool) $a_keep_teams) {
1162 foreach ($tmembers as $tuser_id) {
1163 $members[$ass_id][] = $tuser_id;
1167 $members[$ass_id][] = $tmembers;
1170 $members[$ass_id][] = $user_id;
1186 ilUtil::sendSuccess($this->lng->txt(
"exc_sent"),
true);
1187 if ($this->assignment) {
1188 $this->exercise->sendAssignment($this->assignment, array_keys($members));
1189 $this->ctrl->redirect($this,
"members");
1191 foreach ($members as $ass_id =>
$users) {
1194 $this->ctrl->setParameter($this,
"part_id",
$_GET[
"part_id"]);
1195 $this->ctrl->redirect($this,
"showParticipant");
1210 include_once(
"./Services/Utilities/classes/class.ilConfirmationGUI.php");
1212 $cgui->setFormAction(
$ilCtrl->getFormAction($this));
1213 $cgui->setHeaderText(
$lng->txt(
"exc_msg_sure_to_deassign_participant"));
1214 $cgui->setCancel(
$lng->txt(
"cancel"),
"members");
1215 $cgui->setConfirm(
$lng->txt(
"remove"),
"deassignMembers");
1217 include_once(
"./Services/User/classes/class.ilUserUtil.php");
1218 foreach ($members as $k =>
$m) {
1226 $tpl->setContent($cgui->getHTML());
1239 foreach (array_keys($members) as $usr_id) {
1240 $this->exercise->members_obj->deassignMember((
int) $usr_id);
1242 ilUtil::sendSuccess(
$lng->txt(
"exc_msg_participants_removed"),
true);
1243 $ilCtrl->redirect($this,
"members");
1248 if (!isset(
$_POST[
'comments_value'])) {
1252 $this->exercise->members_obj->setNoticeForMember(
1256 ilUtil::sendSuccess($this->lng->txt(
"exc_members_comments_saved"));
1267 $member_id = (int)
$_GET[
"part_id"];
1269 foreach (array_keys(
$_POST[
"id"]) as $ass_id) {
1270 if (is_array($a_selected) &&
1271 !in_array($ass_id, $a_selected)) {
1275 $data[$ass_id][$member_id] = array(
1279 if (array_key_exists(
"mark",
$_POST)) {
1282 if (array_key_exists(
"notice",
$_POST)) {
1287 $ilCtrl->setParameter($this,
"part_id", $member_id);
1294 $user_ids = (array) array_keys((array)
$_POST[
'id']);
1295 $filtered_user_ids =
$GLOBALS[
'DIC']->access()->filterUserIdsByRbacOrPositionOfCurrentUser(
1296 'edit_submissions_grades',
1297 'edit_submissions_grades',
1298 $this->exercise->getRefId(),
1303 foreach ($filtered_user_ids as $user_id) {
1304 if (is_array($a_selected) &&
1305 !in_array($user_id, $a_selected)) {
1309 $data[-1][$user_id] = array(
1313 if (array_key_exists(
"mark",
$_POST)) {
1316 if (array_key_exists(
"notice",
$_POST)) {
1327 if ($this->assignment) {
1341 include_once(
"./Modules/Exercise/classes/class.ilExAssignment.php");
1343 $saved_for = array();
1344 foreach ($a_data as $ass_id =>
$users) {
1345 $ass = ($ass_id < 0)
1351 foreach ($submission->getUserIds() as $sub_user_id) {
1353 $saved_for[$sub_user_id] = $uname[
"lastname"] .
", " . $uname[
"firstname"];
1355 $member_status = $ass->getMemberStatus($sub_user_id);
1359 if ($status ==
"") {
1362 $member_status->setStatus($status);
1363 if (array_key_exists(
"mark",
$values)) {
1364 $member_status->setMark(
$values[
"mark"]);
1366 if (array_key_exists(
"notice",
$values)) {
1367 $member_status->setNotice(
$values[
"notice"]);
1369 $member_status->update();
1374 if (count($saved_for) > 0) {
1375 $save_for_str =
"(" . implode($saved_for,
" - ") .
")";
1379 ilUtil::sendSuccess($this->lng->txt(
"exc_status_saved") .
" " . $save_for_str,
true);
1389 $res = array(
"result" =>
false);
1391 if ($this->ctrl->isAsynch()) {
1392 $ass_id = (int)
$_POST[
"ass_id"];
1393 $user_id = (int)
$_POST[
"mem_id"];
1396 if ($ass_id && $user_id) {
1398 $user_ids = $submission->getUserIds();
1401 $all_members = $all_members->getMembers();
1403 $reci_ids = array();
1404 foreach ($user_ids as $user_id) {
1405 if (in_array($user_id, $all_members)) {
1406 $member_status = $this->assignment->getMemberStatus($user_id);
1408 $member_status->setFeedback(
true);
1409 $member_status->update();
1412 $reci_ids[] = $user_id;
1417 if (
sizeof($reci_ids)) {
1419 $this->exercise->sendFeedbackFileNotification(
1427 $res = array(
"result" =>
true,
"snippet" => nl2br(
$comment));
1431 echo(json_encode(
$res));
1440 $this->exercise->exportGradesExcel();
1455 $new_members = array();
1457 include_once
"Modules/Exercise/classes/class.ilExAssignmentTeam.php";
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 include_once
"Modules/Exercise/classes/class.ilExAssignmentTeam.php";
1505 foreach ($members as $group) {
1507 if (is_array($group)) {
1510 $first_user = $group;
1511 $first_user = array_shift($first_user);
1513 foreach ($group as $user_id) {
1514 $team->removeTeamMember($user_id);
1518 $this->exercise->processExerciseStatus(
1526 ilUtil::sendSuccess($this->lng->txt(
"msg_obj_modified"),
true);
1527 $ilCtrl->redirect($this,
"members");
1537 $ilTabs->clearTargets();
1538 $ilTabs->setBackTarget(
1540 $ilCtrl->getLinkTarget($this, $this->getViewBack())
1546 $tpl->setContent($a_form->getHTML());
1553 include_once(
"Services/Form/classes/class.ilPropertyFormGUI.php");
1555 $form->setTitle(
$lng->txt(
"exc_adopt_group_teams") .
" - " . $this->assignment->getTitle());
1556 $form->setFormAction($this->ctrl->getFormAction($this,
"createTeamsFromGroups"));
1558 include_once
"Modules/Exercise/classes/class.ilExAssignmentTeam.php";
1559 include_once
"Services/User/classes/class.ilUserUtil.php";
1560 $all_members = array();
1562 if (
sizeof($group[
"members"])) {
1565 foreach ($group[
"members"] as $user_id) {
1568 if (!in_array($user_id, $all_members)) {
1569 $grp_value[] = $user_id;
1570 $all_members[] = $user_id;
1574 foreach (
$options as $user_id => $user_name) {
1577 $grp_team->setValue($grp_value);
1578 $form->addItem($grp_team);
1581 $grp_team->setValue(
$lng->txt(
"exc_adopt_group_teams_no_members"));
1582 $form->addItem($grp_team);
1586 if (
sizeof($all_members)) {
1587 $form->addCommandButton(
"createTeamsFromGroups",
$lng->txt(
"save"));
1589 $form->addCommandButton(
"members",
$lng->txt(
"cancel"));
1599 if (
$form->checkInput()) {
1600 include_once
"Services/User/classes/class.ilUserUtil.php";
1602 $all_members = $teams = array();
1604 foreach (array_keys(
$map) as $grp_id) {
1605 $postvar =
"grpt_" . $grp_id;
1606 $members =
$_POST[$postvar];
1607 if (is_array($members)) {
1608 $teams[] = $members;
1609 $invalid_team_members = array();
1611 foreach ($members as $user_id) {
1612 if (!array_key_exists($user_id, $all_members)) {
1613 $all_members[$user_id] = $grp_id;
1616 $invalid_team_members[] = $user_id;
1620 if (
sizeof($invalid_team_members)) {
1624 foreach ($invalid_team_members as $user_id) {
1626 $grp_title =
$map[$all_members[$user_id]][
"title"];
1627 $alert[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_conflict"), $user_name, $grp_title);
1630 $input->setAlert(implode(
"<br/>", $alert));
1635 if (
sizeof($teams)) {
1639 $sum = array(
"added" => 0,
"blocked" => 0);
1640 foreach ($teams as $members) {
1641 foreach ($members as $user_id) {
1642 if (!$this->exercise->members_obj->isAssigned($user_id)) {
1643 $this->exercise->members_obj->assignMember($user_id);
1646 if (!in_array($user_id, $existing_users)) {
1653 $first = array_shift($members);
1659 if (
sizeof($members)) {
1660 foreach ($members as $user_id) {
1661 $team->addTeamMember($user_id);
1667 if ($sum[
"added"]) {
1668 $mess[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_added"), $sum[
"added"]);
1670 if ($sum[
"blocked"]) {
1671 $mess[] = sprintf(
$lng->txt(
"exc_adopt_group_teams_blocked"), $sum[
"blocked"]);
1673 if ($sum[
"added"]) {
1674 ilUtil::sendSuccess(implode(
" ", $mess),
true);
1679 $this->ctrl->redirect($this,
"members");
1685 $form->setValuesByPost();
1698 include_once(
"Services/Form/classes/class.ilPropertyFormGUI.php");
1700 $form->addCommandButton(
"uploadMultiFeedback",
$lng->txt(
"upload"));
1701 $form->addCommandButton(
"members",
$lng->txt(
"cancel"));
1705 $fi->setSuffixes(array(
"zip"));
1706 $fi->setRequired(
true);
1707 $form->addItem($fi);
1710 $form->setFormAction($this->ctrl->getFormAction($this,
"uploadMultiFeedback"));
1732 include_once(
"./Services/UIComponent/Button/classes/class.ilLinkButton.php");
1734 $button->setCaption(
"exc_download_zip_structure");
1735 $button->setUrl($this->ctrl->getLinkTarget($this,
"downloadMultiFeedbackZip"));
1736 $button->setOmitPreventDoubleSubmission(
true);
1737 $ilToolbar->addButtonInstance($button);
1743 $tpl->setContent($a_form->getHTML());
1751 $this->assignment->sendMultiFeedbackStructureFile($this->exercise);
1761 if (
$form->checkInput()) {
1764 $this->ctrl->redirect($this,
"showMultiFeedbackConfirmationTable");
1767 $this->ctrl->redirect($this,
"showMultiFeedback");
1771 $form->setValuesByPost();
1787 include_once(
"./Modules/Exercise/classes/class.ilFeedbackConfirmationTable2GUI.php");
1797 $this->assignment->clearMultiFeedbackDirectory();
1798 $this->ctrl->redirect($this,
"members");
1806 $this->assignment->saveMultiFeedbackFiles(
$_POST[
"file"], $this->exercise);
1808 ilUtil::sendSuccess($this->lng->txt(
"msg_obj_modified"),
true);
1809 $this->ctrl->redirect($this,
"members");
1823 include_once
"./Services/UIComponent/Modal/classes/class.ilModalGUI.php";
1825 $modal->setHeading(
$lng->txt(
"exc_individual_deadline"));
1826 $modal->setId(
"ilExcIDl");
1827 $modal->setBody(
'<div id="ilExcIDlBody"></div>');
1828 $modal = $modal->getHTML();
1830 $ajax_url = $this->ctrl->getLinkTarget($this,
"handleIndividualDeadlineCalls",
"",
true,
false);
1832 $tpl->addJavaScript(
"./Modules/Exercise/js/ilExcIDl.js",
true, 3);
1833 $tpl->addOnloadCode(
'il.ExcIDl.init("' . $ajax_url .
'");');
1835 include_once
"Services/Calendar/classes/class.ilCalendarUtil.php";
1846 foreach ($a_data as $item) {
1847 $item = explode(
"_", $item);
1849 $user_id = $item[1];
1851 if (!array_key_exists($ass_id, $ass_tmp)) {
1852 if ($this->assignment &&
1853 $ass_id == $this->assignment->getId()) {
1860 $map[$ass_id][] = $user_id;
1863 return array(
$map, $ass_tmp);
1871 $this->ctrl->saveParameter($this,
"part_id");
1874 if ((
bool)
$_GET[
"dn"]) {
1875 ilUtil::sendSuccess($this->lng->txt(
"settings_saved"),
true);
1876 $this->ctrl->redirect($this, $this->assignment
1878 :
"showParticipant");
1881 include_once
"Modules/Exercise/classes/class.ilExAssignment.php";
1884 if (
$_GET[
"idlid"]) {
1886 if (is_array($tmp)) {
1888 echo
$form->getHTML() .
1889 $tpl->getOnLoadCodeForAsynch();
1896 if (substr(
$id, 0, 3) ==
"dl_") {
1897 $tmp[] = substr(
$id, 3);
1909 $ass = $ass_map[$ass_id];
1914 foreach (
$users as $user_id) {
1915 $date_field =
$form->getItemByPostVar(
"dl_" . $ass_id .
"_" . $user_id);
1920 $res[$ass_id][$user_id] = $date_field->getDate();
1927 $form->setValuesByPost();
1928 echo
$form->getHTML() .
1929 $tpl->getOnLoadCodeForAsynch();
1932 $ass = $ass_map[$ass_id];
1935 $ass->setIndividualDeadline(
$id, $date);
1938 $ass->recalculateLateSubmissions();
1950 include_once
"Services/Form/classes/class.ilPropertyFormGUI.php";
1952 $form->setFormAction($this->ctrl->getFormAction($this));
1953 $form->setName(
"ilExcIDlForm");
1955 include_once
"Services/User/classes/class.ilUserUtil.php";
1956 foreach ($ids as $ass_id =>
$users) {
1957 $ass = $a_ass_map[$ass_id];
1960 $section->setTitle($ass->getTitle());
1963 include_once(
"./Modules/Exercise/classes/class.ilExAssignmentTeam.php");
1966 $values = $ass->getIndividualDeadlines();
1970 if (is_numeric(
$id)) {
1977 $team_id = (int) substr(
$id, 1);
1978 if (array_key_exists($team_id, $teams)) {
1980 foreach ($teams[$team_id]->getMembers() as $member_id) {
1982 $name[] = $uname[
"lastname"] .
", " . $uname[
"firstname"];
1990 $dl->setShowTime(
true);
1991 $dl->setRequired(
true);
1992 $form->addItem($dl);
2000 $form->addCommandButton(
"", $this->lng->txt(
"save"));
2010 if ($this->assignment) {
2019 $this->lng->loadLanguageModule(
"search");
2021 $this->toolbar->setFormAction($this->ctrl->getFormAction($this,
"listTextAssignment"));
2025 if (
$_POST[
"filter_status"]) {
2029 $si_status =
new ilSelectInputGUI($this->lng->txt(
"exc_tbl_status"),
"filter_status");
2031 "" => $this->lng->txt(
"search_any"),
2032 self::GRADE_NOT_GRADED => $this->lng->txt(
"exc_notgraded"),
2033 self::GRADE_PASSED => $this->lng->txt(
"exc_passed"),
2034 self::GRADE_FAILED => $this->lng->txt(
"exc_failed")
2037 $si_status->setValue($this->filter[
"status"]);
2039 $this->toolbar->addInputItem($si_status,
true);
2043 if ($this->assignment->getPeerReview()) {
2044 if (
$_POST[
"filter_feedback"]) {
2047 $this->filter[
"feedback"] =
"submission_feedback";
2050 $si_feedback =
new ilSelectInputGUI($this->lng->txt(
"feedback"),
"filter_feedback");
2052 "submission_feedback" => $this->lng->txt(
"submissions_feedback"),
2053 "submission_only" => $this->lng->txt(
"submissions_only")
2055 $si_feedback->setOptions(
$options);
2056 $si_feedback->setValue($this->filter[
"feedback"]);
2058 $this->toolbar->addInputItem($si_feedback,
true);
2062 include_once
"Services/UIComponent/Button/classes/class.ilSubmitButton.php";
2064 $submit->setCaption(
"filter");
2065 $submit->setCommand(
"listTextAssignment");
2066 $this->toolbar->addButtonInstance($submit);
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 hasAnySubmissions($a_ass_id)
static getAssignmentFilesByUsers(int $a_exc_id, int $a_ass_id, array $a_users)
static getAssignmentParticipants(int $a_exercise_id, int $a_ass_id)
Exercise exceptions class.
Class ilExerciseManagementGUI.
initIndividualDeadlineModal()
initIndividualDeadlineForm(array $a_ass_map, array $ids)
selectAssignmentObject()
Select assignment.
exportExcelObject()
Export as excel.
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.
deassignMembersObject()
Deassign members from exercise.
saveStatusSelectedObject()
showMultiFeedbackConfirmationTableObject()
Show multi feedback confirmation table.
saveMultiFeedbackObject()
Save multi feedback.
setIndividualDeadlineObject()
downloadSubmissionsObject()
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.
listTextAssignmentObject()
todo: Pagination.
selectParticipantObject()
Select participant.
showParticipantObject()
Show Participant.
saveGradesObject()
Save grades.
downloadAllObject()
Download all submitted files (of all members).
const FEEDBACK_ONLY_SUBMISSION
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
__construct(ilObjExercise $a_exercise, ilExAssignment $a_ass=null)
Constructor.
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 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
getId()
get object id @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 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.
if(!array_key_exists('StateId', $_REQUEST)) $id
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
if(isset($_POST['submit'])) $form
foreach($_POST as $key=> $value) $res