29 protected \ILIAS\Survey\InternalGUIService
$gui;
53 bool $a_has_write_access
57 $this->survey_service =
$DIC->survey()->internal();
59 $this->
tabs = $DIC->tabs();
60 $this->
toolbar = $DIC->toolbar();
61 $this->
access = $DIC->access();
62 $this->rbacsystem =
$DIC->rbac()->system();
63 $this->
user = $DIC->user();
64 $this->log =
$DIC[
"ilLog"];
65 $ilCtrl =
$DIC->ctrl();
69 $this->parent_gui = $a_parent_gui;
72 $this->
object = $survey;
73 $this->ref_id = $this->
object->getRefId();
74 $this->has_write = $a_has_write_access;
76 $this->
ctrl = $ilCtrl;
79 $this->invitation_manager = $this
84 $this->code_manager = $this
87 ->code($this->
object, $this->
user->getId());
88 $this->data_manager = $this
91 $this->feature_config = $this
93 ->domain()->modeFeatureConfig($this->
object->getMode());
94 $this->edit_manager = $this->survey_service
97 $this->edit_request = $this->survey_service
101 $this->gui = $this->survey_service->gui();
111 if (!$this->has_write) {
122 $cmd = $ilCtrl->getCmd(
"maintenance");
123 $next_class = $this->
ctrl->getNextClass($this);
125 switch ($next_class) {
126 case 'ilrepositorysearchgui':
129 if (!$this->edit_request->getAppr360() && !$this->edit_request->getRate360()) {
130 $ilTabs->clearTargets();
131 $ilTabs->setBackTarget(
132 $this->
lng->txt(
"btn_back"),
133 $this->ctrl->getLinkTarget($this,
"maintenance")
136 $rep_search->setCallback(
142 $rep_search->setTitle(
$lng->
txt(
"svy_invite_participants"));
144 $this->
ctrl->setReturn($this,
'maintenance');
145 $this->
ctrl->forwardCommand($rep_search);
146 $ilTabs->setTabActive(
'maintenance');
147 } elseif ($this->edit_request->getRate360()) {
148 $ilTabs->clearTargets();
149 $ilTabs->setBackTarget(
150 $this->
lng->txt(
"btn_back"),
151 $this->ctrl->getLinkTarget($this,
"listAppraisees")
154 $this->
ctrl->setParameter($this,
"rate360", 1);
155 $this->
ctrl->saveParameter($this,
"appr_id");
157 $rep_search->setCallback(
165 $this->
ctrl->setReturn($this,
'editRaters');
166 $this->
ctrl->forwardCommand($rep_search);
168 $ilTabs->activateTab(
"survey_360_appraisees");
169 $this->
ctrl->setParameter($this,
"appr360", 1);
171 $rep_search->setCallback(
179 $this->
ctrl->setReturn($this,
'listAppraisees');
180 $this->
ctrl->forwardCommand($rep_search);
184 case 'ilsurveyratergui':
185 $ilTabs->activateTab(
"survey_360_edit_raters");
187 $this->
ctrl->forwardCommand($rater_gui);
198 ?array $a_finished_ids =
null
200 $all_participants = $this->
object->getSurveyParticipants($a_finished_ids, false,
true);
201 $participant_ids = [];
202 foreach ($all_participants as $participant) {
203 if (isset($participant[
'usr_id'])) {
204 $participant_ids[] = $participant[
'usr_id'];
208 $filtered_participant_ids = $this->
access->filterUserIdsByRbacOrPositionOfCurrentUser(
211 $this->
object->getRefId(),
216 foreach ($all_participants as $username => $user_data) {
217 if (!($user_data[
'usr_id'] ??
false)) {
218 $participants[$username] = $user_data;
220 if (in_array(($user_data[
'usr_id'] ?? -1), $filtered_participant_ids)) {
221 $participants[$username] = $user_data;
225 return $participants;
234 $ilToolbar = $this->toolbar;
236 if ($this->
object->get360Mode()) {
237 $this->listAppraiseesObject();
244 if ($this->
object->getSkillService() && $skmg_set->isActivated()) {
245 $ilToolbar->addButton(
246 $this->
lng->txt(
"survey_calc_skills"),
247 $this->ctrl->getLinkTargetByClass(
"ilsurveyskilldeterminationgui"),
253 $this->handleWriteAccess();
254 $this->setParticipantSubTabs(
"overview");
256 $ilToolbar->addButton(
257 $this->
lng->txt(
'svy_remove_all_participants'),
258 $this->ctrl->getLinkTarget($this,
'deleteAllUserData')
261 $ilToolbar->addSeparator();
263 if ($this->
object->isAccessibleWithoutCode()) {
264 $ilToolbar->addButton(
265 $this->
lng->txt(
"svy_invite_participants"),
266 $this->ctrl->getLinkTargetByClass(
'ilRepositorySearchGUI',
'')
272 $total = $this->filterSurveyParticipantsByAccess();
274 foreach ($total as $user_data) {
276 if ($user_data[
"finished"]) {
277 $finished = $user_data[
"finished_tstamp"];
279 if (isset($user_data[
"active_id"])) {
280 $wt = $this->
object->getWorkingtimeForParticipant($user_data[
"active_id"]);
281 $last_access = $this->
object->getLastAccess($user_data[
"active_id"]);
282 $active_id = $user_data[
"active_id"];
290 'name' => $user_data[
"sortname"],
291 'usr_id' => $user_data[
"usr_id"] ??
null,
292 'login' => $user_data[
"login"],
293 'last_access' => $last_access,
294 'workingtime' => $wt,
295 'finished' => $finished,
296 'invited' => $user_data[
"invited"] ??
false
299 $table_gui->setData(
$data);
300 $this->tpl->setVariable(
'ADM_CONTENT', $table_gui->getHTML());
305 $surveySetting =
new ilSetting(
"survey");
307 if ($surveySetting->get(
"anonymous_participants",
false) && $this->object->hasAnonymizedResults() &&
308 $this->object->hasAnonymousUserList()) {
309 $end = $this->
object->getEndDate();
310 if ($end && $end < date(
"YmdHis")) {
311 $min = (
int) $surveySetting->get(
"anonymous_participants_min",
'0');
312 $total = $this->
object->getSurveyParticipants();
313 if (!$min || count($total) >= $min) {
324 $ilTabs = $this->
tabs;
331 $this->
lng->txt(
"svy_part_overview"),
332 $this->ctrl->getLinkTarget($this,
'maintenance')
335 if ($this->isAnonymousListActive()) {
338 $this->
lng->txt(
"svy_anonymous_participants_svy"),
339 $this->ctrl->getLinkTarget($this,
'listParticipants')
343 if (!$this->
object->isAccessibleWithoutCode()) {
346 $this->
lng->txt(
"svy_codes"),
347 $this->ctrl->getLinkTarget($this,
'codes')
352 $data = $this->
object->getExternalCodeRecipients();
356 $this->
lng->txt(
"mail_survey_codes"),
357 $this->ctrl->getLinkTarget($this,
"mailCodes")
361 $ilTabs->activateSubTab($active);
371 $cgui->setHeaderText($this->
lng->txt(
"confirm_delete_all_user_data"));
372 $cgui->setFormAction($this->
ctrl->getFormAction($this,
"deleteAllUserData"));
373 $cgui->setCancel($this->
lng->txt(
"cancel"),
"cancelDeleteAllUserData");
374 $cgui->setConfirm($this->
lng->txt(
"confirm"),
"confirmDeleteAllUserData");
375 $this->tpl->setContent($cgui->getHTML());
383 if ($this->
access->checkAccess(
'write',
'', $this->object->getRefId())) {
384 $this->
object->deleteAllUserData();
386 $participants = $this->filterSurveyParticipantsByAccess();
387 foreach ($participants as $something => $participant_data) {
388 $this->
object->removeSelectedSurveyResults([$participant_data[
'active_id']]);
393 if ($this->
object->get360Mode()) {
394 $this->
object->openAllAppraisees();
397 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"svy_all_user_data_deleted"),
true);
398 $this->
ctrl->redirect($this,
"maintenance");
406 $this->
ctrl->redirect($this,
"maintenance");
414 $user_ids = $this->edit_request->getUserIds();
415 if (count($user_ids) > 0) {
416 $this->
object->removeSelectedSurveyResults(array_filter($user_ids,
static function ($i):
bool {
417 return is_numeric($i);
420 $invitations = array_filter($user_ids,
static function ($i):
bool {
421 return strpos($i,
"inv") === 0;
423 foreach ($invitations as $i) {
424 $this->invitation_manager->remove($this->
object->getSurveyId(), (
int) substr($i, 3));
427 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"svy_selected_user_data_deleted"),
true);
429 $this->
ctrl->redirect($this,
"maintenance");
437 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'msg_cancel'),
true);
438 $this->
ctrl->redirect($this,
"maintenance");
446 $this->handleWriteAccess();
448 $user_ids = $this->edit_request->getUserIds();
449 if (count($user_ids) === 0) {
450 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'no_checkbox'),
true);
451 $this->
ctrl->redirect($this,
"maintenance");
454 $this->tpl->setOnScreenMessage(
'question', $this->
lng->txt(
"confirm_delete_single_user_data"));
456 $total = $this->
object->getSurveyParticipants(
null,
false,
true);
458 foreach ($total as $user_data) {
459 if (in_array(($user_data[
'active_id'] ??
null), $user_ids)
460 || (($user_data[
'invited'] ??
false) && in_array(
"inv" . $user_data[
'usr_id'], $user_ids))) {
461 $last_access = $this->
object->getLastAccess($user_data[
"active_id"] ?? 0);
463 'id' => $user_data[
"active_id"] ??
null,
464 'name' => $user_data[
"sortname"],
465 'login' => $user_data[
"login"] ??
null,
466 'last_access' => $last_access,
467 'finished' => $user_data[
"finished_tstamp"] ?? 0,
468 'usr_id' => $user_data[
"usr_id"] ??
null,
469 'invited' => $user_data[
"invited"] ??
null
473 $table_gui->setData(
$data);
474 $this->tpl->setVariable(
'ADM_CONTENT', $table_gui->getHTML());
482 if (strcmp($this->edit_request->getLang(),
"-1") !== 0) {
483 $ilUser = $this->user;
484 $ilUser->writePref(
"survey_code_language", $this->edit_request->getLang());
486 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'language_changed'),
true);
487 $this->
ctrl->redirect($this,
'codes');
495 $ilUser = $this->user;
496 $ilToolbar = $this->toolbar;
498 $this->handleWriteAccess();
499 $this->setParticipantSubTabs(
"codes");
501 if ($this->
object->isAccessibleWithoutCode()) {
502 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
"survey_codes_no_anonymization"));
506 $default_lang = $ilUser->getPref(
"survey_code_language");
509 $ilToolbar->setFormAction($this->
ctrl->getFormAction($this));
514 $ilToolbar->addInputItem($si,
true);
517 $this->
lng->txt(
"create"),
519 )->submit()->toToolbar();
521 $ilToolbar->addSeparator();
524 $this->
lng->txt(
"import_from_file"),
525 "importExternalMailRecipientsFromFileForm"
526 )->submit()->toToolbar();
529 $this->
lng->txt(
"import_from_text"),
530 "importExternalMailRecipientsFromTextForm"
531 )->submit()->toToolbar();
533 $ilToolbar->addSeparator();
536 $this->
lng->txt(
"svy_import_codes"),
538 )->submit()->toToolbar();
540 $ilToolbar->addSeparator();
542 $languages = $this->
lng->getInstalledLanguages();
544 $this->
lng->loadLanguageModule(
"meta");
545 foreach ($languages as
$lang) {
546 $options[
$lang] = $this->
lng->txt(
"meta_l_" . $lang);
549 $si->setOptions($options);
550 $si->setValue($default_lang);
551 $ilToolbar->addInputItem($si,
true);
554 $this->
lng->txt(
"set"),
556 )->submit()->toToolbar();
560 $survey_codes = $this->
object->getSurveyCodesTableData(
null, $default_lang);
561 $table_gui->setData($survey_codes);
562 $this->tpl->setContent($table_gui->getHTML());
567 $ids = $this->edit_request->getCodeIds();
568 if (count($ids) === 0) {
569 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'no_checkbox'),
true);
570 $this->
ctrl->redirect($this,
'codes');
573 $this->handleWriteAccess();
574 $this->setParticipantSubTabs(
"codes");
577 $table_gui->setData($this->
object->getSurveyCodesTableData($ids));
578 $this->tpl->setContent($table_gui->getHTML());
583 $codes = $this->edit_request->getCodes();
584 $mails = $this->edit_request->getCodesPar(
"mail");
585 $lnames = $this->edit_request->getCodesPar(
"lname");
586 $fnames = $this->edit_request->getCodesPar(
"fname");
587 $sents = $this->edit_request->getCodesPar(
"sent");
588 if (count($codes) === 0) {
589 $this->
ctrl->redirect($this,
'codes');
594 foreach ($codes as
$id) {
595 if (!$this->
object->updateCode(
602 $errors[] = array($mails[
$id], $lnames[
$id], $fnames[
$id]);
605 if (empty($errors)) {
606 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'settings_saved'),
true);
608 foreach ($errors as $error) {
609 $error_message .= sprintf($this->
lng->txt(
"error_save_code"), $error[0], $error[1], $error[2]);
611 $this->tpl->setOnScreenMessage(
'failure', $error_message,
true);
614 $this->
ctrl->redirect($this,
'codes');
619 $codes = $this->edit_request->getCodes();
621 $data = $this->
object->getSurveyCodesTableData($codes);
622 $data = array_filter(
$data,
static function ($item):
bool {
623 return !$item[
"used"];
625 if (count(
$data) > 0) {
627 $cgui->setHeaderText($this->
lng->txt(
"survey_code_delete_sure"));
629 $cgui->setFormAction($this->
ctrl->getFormAction($this));
630 $cgui->setCancel($this->
lng->txt(
"cancel"),
"codes");
631 $cgui->setConfirm($this->
lng->txt(
"confirm"),
"deleteCodes");
633 foreach (
$data as $item) {
634 $title = array($item[
"code"]);
635 $title[] = $item[
"email"] ??
"";
636 $title[] = $item[
"last_name"] ??
"";
637 $title[] = $item[
"first_name"] ??
"";
638 $title = implode(
", ", $title);
640 $cgui->addItem(
"chb_code[]", $item[
"code"], $title);
643 $this->tpl->setContent($cgui->getHTML());
645 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'svy_please_select_unused_codes'),
true);
646 $this->
ctrl->redirect($this,
'codes');
655 $codes = $this->edit_request->getCodes();
656 if (count($codes) > 0) {
657 foreach ($codes as $survey_code) {
658 $this->
object->deleteSurveyCode($survey_code);
660 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'codes_deleted'),
true);
662 $this->tpl->setOnScreenMessage(
'info', $this->
lng->txt(
'no_checkbox'),
true);
664 $this->
ctrl->redirect($this,
'codes');
672 $codes = $this->edit_request->getCodes();
673 if (count($codes) > 0) {
674 $export = $this->
object->getSurveyCodesForExport(
null, $codes);
677 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"no_checkbox"),
true);
678 $this->
ctrl->redirect($this,
'codes');
687 $export = $this->
object->getSurveyCodesForExport();
696 $this->handleWriteAccess();
697 $this->setParticipantSubTabs(
"codes");
698 $form_import_file = $this->getAccessCodeImportForm();
699 $this->tpl->setContent($form_import_file->getHTML());
705 $form_import_file->setFormAction($this->
ctrl->getFormAction($this));
706 $form_import_file->setTableWidth(
"100%");
707 $form_import_file->setId(
"codes_import_file");
710 $headerfile->setTitle($this->
lng->txt(
"svy_import_codes"));
711 $form_import_file->addItem($headerfile);
714 $export_file->setInfo(sprintf(
715 $this->
lng->txt(
'svy_import_codes_info'),
716 $this->lng->txt(
"export_all_survey_codes")
718 $export_file->setSuffixes(array(
"csv"));
719 $export_file->setRequired(
true);
720 $form_import_file->addItem($export_file);
722 $form_import_file->addCommandButton(
"importAccessCodesAction", $this->
lng->txt(
"import"));
723 $form_import_file->addCommandButton(
"codes", $this->
lng->txt(
"cancel"));
725 return $form_import_file;
733 $form = $this->getAccessCodeImportForm();
735 if ($form->checkInput()) {
737 foreach ($this->
object->getSurveyCodesTableData() as $item) {
738 $existing[$item[
"code"]] = $item[
"id"];
742 $reader->open($_FILES[
'codes'][
'tmp_name']);
743 foreach ($reader->getCsvAsArray() as $row) {
745 $code = $row[0] ??
"";
749 $email = $row[1] ??
"";
750 if (!is_int(strpos($email,
"@")) && $email !==
"") {
753 $last_name = $row[2] ??
"";
754 $first_name = $row[3] ??
"";
758 if (!array_key_exists($code, $existing)) {
774 ,
"lastname" => $last_name
775 ,
"firstname" => $first_name
777 $this->
object->importSurveyCode($code, $created, $user_data);
781 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'codes_created'),
true);
782 $this->
ctrl->redirect($this,
'codes');
784 $form->setValuesByPost();
785 $this->handleWriteAccess();
786 $this->setParticipantSubTabs(
"codes");
787 $this->tpl->setContent($form->getHTML());
796 if ($this->edit_request->getNrOfCodes() > 0) {
797 $ids = $this->code_manager->addCodes($this->edit_request->getNrOfCodes());
798 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'codes_created'),
true);
799 $this->
ctrl->setParameter($this,
"new_ids", implode(
";", $ids));
800 $this->
ctrl->redirect($this,
'editCodes');
802 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"enter_valid_number_of_codes"),
true);
803 $this->
ctrl->redirect($this,
'codes');
809 $this->handleWriteAccess();
810 $this->setParticipantSubTabs(
"codes");
813 $form_gui->setValuesByPost();
815 if ($form_gui->getSavedMessages()->getValue() > 0) {
816 $ilUser = $this->user;
817 $settings = $this->
object->getUserSettings($ilUser->getId(),
'savemessage');
818 $form_gui->getMailMessage()->setValue($settings[$form_gui->getSavedMessages()->getValue()][
'value']);
819 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'msg_message_inserted'));
821 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'msg_no_message_inserted'));
823 }
catch (Exception
$e) {
825 $ilLog->write(
'Error: ' .
$e->getMessage());
827 $this->tpl->setVariable(
"ADM_CONTENT", $form_gui->getHTML());
832 $this->handleWriteAccess();
833 $this->setParticipantSubTabs(
"codes");
836 $form_gui->setValuesByPost();
838 if ($form_gui->getSavedMessages()->getValue() > 0) {
839 $this->
object->deleteUserSettings($form_gui->getSavedMessages()->getValue());
841 $form_gui->setValuesByPost();
842 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'msg_message_deleted'));
844 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'msg_no_message_deleted'));
846 }
catch (Exception
$e) {
848 $ilLog->write(
'Error: ' .
$e->getMessage());
850 $this->tpl->setVariable(
"ADM_CONTENT", $form_gui->getHTML());
855 $this->handleWriteAccess();
856 $this->setParticipantSubTabs(
"mail_survey_codes");
858 $mailData[
'm_subject'] =
859 $this->edit_request->getCodeMailPart(
"subject")
860 ?: sprintf($this->
lng->txt(
'default_codes_mail_subject'), $this->object->getTitle());
861 $mailData[
'm_message'] =
862 $this->edit_request->getCodeMailPart(
"message")
863 ?: $this->
lng->txt(
'default_codes_mail_message');
864 $mailData[
'm_notsent'] =
865 $this->edit_request->getCodeMailPart(
"notsent")
869 $form_gui->setValuesByArray($mailData);
870 $this->tpl->setVariable(
"ADM_CONTENT", $form_gui->getHTML());
875 $ilUser = $this->user;
877 $this->handleWriteAccess();
878 $this->setParticipantSubTabs(
"mail_survey_codes");
881 if ($form_gui->checkInput()) {
882 $url_exists = strpos($this->edit_request->getCodeMailPart(
"message"),
'[url]') !==
false;
884 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'please_enter_mail_url'));
885 $form_gui->setValuesByPost();
887 if ($this->edit_request->getSaveMessage() === 1) {
888 $ilUser = $this->user;
889 $title = ($this->edit_request->getSaveMessageTitle())
890 ?:
ilStr::subStr($this->edit_request->getCodeMailPart(
"message"), 0, 40) .
'...';
891 $this->
object->saveUserSettings($ilUser->getId(),
'savemessage', $title, $this->edit_request->getCodeMailPart(
"message"));
894 $lang = $ilUser->getPref(
"survey_code_language");
896 $lang = $this->
lng->getDefaultLanguage();
898 $this->
object->sendCodes(
899 $this->edit_request->getCodeMailPart(
"notsent"),
900 $this->edit_request->getCodeMailPart(
"subject"),
901 nl2br($this->edit_request->getCodeMailPart(
"message")),
904 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'mail_sent'),
true);
905 $this->
ctrl->redirect($this,
'mailCodes');
908 $form_gui->setValuesByPost();
910 $this->tpl->setVariable(
"ADM_CONTENT", $form_gui->getHTML());
915 if (trim($this->edit_request->getExternalText())) {
916 $data = preg_split(
"/[\n\r]/", $this->edit_request->getExternalText());
917 $fields = explode(
";", array_shift(
$data));
918 if (!in_array(
'email', $fields,
true)) {
919 $this->edit_manager->setExternalText($this->edit_request->getExternalText());
920 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_external_rcp_no_email_column'),
true);
921 $this->
ctrl->redirect($this,
'importExternalMailRecipientsFromTextForm');
923 $existingdata = $this->
object->getExternalCodeRecipients();
924 $existingcolumns = array();
925 if (count($existingdata)) {
926 $first = array_shift($existingdata);
927 foreach ($first as $key => $value) {
928 $existingcolumns[] = $key;
931 $founddata = array();
932 foreach (
$data as $datarow) {
933 $row = explode(
";", $datarow);
934 if (count($row) === count($fields)) {
936 foreach ($fields as $idx => $fieldname) {
937 if (count($existingcolumns)) {
938 if (array_key_exists($idx, $existingcolumns)) {
939 $dataset[$fieldname] = $row[$idx];
942 $dataset[$fieldname] = $row[$idx];
945 if ($dataset[
'email'] !==
'') {
946 $this->addCodeForExternal(
948 $dataset[
'lastname'] ??
"",
949 $dataset[
'firstname'] ??
""
954 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'external_recipients_imported'),
true);
955 $this->
ctrl->redirect($this,
'codes');
958 $this->
ctrl->redirect($this,
'importExternalMailRecipientsFromTextForm');
969 $code = $this->data_manager->code(
"")
971 ->withLastName($lastname)
972 ->withFirstName($firstname);
973 $code_id = $this->code_manager->add($code);
981 string $a_from_charset =
"",
982 string $a_to_charset =
"UTF-8"
984 if (extension_loaded(
"mbstring")) {
985 if (!$a_from_charset) {
986 mb_detect_order(
"UTF-8, ISO-8859-1, Windows-1252, ASCII");
987 $a_from_charset = mb_detect_encoding($a_string);
989 if (strtoupper($a_from_charset) !== $a_to_charset) {
990 return mb_convert_encoding($a_string, $a_to_charset, $a_from_charset);
999 $bom = pack(
'H*',
'EFBBBF');
1000 return preg_replace(
'/^' . $bom .
'/',
'', $a_text);
1005 $this->handleWriteAccess();
1006 $form = $this->getImportExternalMailRecipientsFromFileForm();
1008 if (!$form->checkInput()) {
1009 $this->setParticipantSubTabs(
"codes");
1010 $this->tpl->setContent($form->getHTML());
1014 if (trim($_FILES[
'externalmails'][
'tmp_name'])) {
1016 $reader->open($_FILES[
'externalmails'][
'tmp_name']);
1017 $data = $reader->getCsvAsArray();
1018 $fields = array_shift(
$data);
1019 foreach ($fields as $idx => $field) {
1020 $fields[$idx] = $this->removeUTF8Bom($field);
1022 if (!in_array(
'email', $fields,
true)) {
1024 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
'err_external_rcp_no_email'),
true);
1025 $this->
ctrl->redirect($this,
'codes');
1027 $existingdata = $this->
object->getExternalCodeRecipients();
1028 $existingcolumns = array();
1029 if (count($existingdata)) {
1030 $first = array_shift($existingdata);
1031 foreach ($first as $key => $value) {
1032 $existingcolumns[] = $key;
1036 $founddata = array();
1037 foreach (
$data as $row) {
1038 if (count($row) === count($fields)) {
1040 foreach ($fields as $idx => $fieldname) {
1042 $row[$idx] = $this->_convertCharset($row[$idx]);
1044 if (count($existingcolumns)) {
1045 if (array_key_exists($idx, $existingcolumns)) {
1046 $dataset[$fieldname] = $row[$idx];
1049 $dataset[$fieldname] = $row[$idx];
1052 if ($dataset[
'email'] !==
'') {
1053 $founddata[] = $dataset;
1054 $this->addCodeForExternal(
1056 $dataset[
'lastname'] ??
"",
1057 $dataset[
'firstname'] ??
""
1064 if (count($founddata)) {
1065 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
'external_recipients_imported'),
true);
1069 $this->
ctrl->redirect($this,
'codes');
1074 $this->handleWriteAccess();
1075 $this->setParticipantSubTabs(
"codes");
1076 $form = $this->getImportExternalMailRecipientsFromFileForm();
1077 $this->tpl->setContent($form->getHTML());
1082 $ilAccess = $this->access;
1085 $form_import_file->setFormAction($this->
ctrl->getFormAction($this));
1086 $form_import_file->setTableWidth(
"100%");
1087 $form_import_file->setId(
"codes_import_file");
1090 $headerfile->setTitle($this->
lng->txt(
"import_from_file"));
1091 $form_import_file->addItem($headerfile);
1093 $externalmails =
new ilFileInputGUI($this->
lng->txt(
"externalmails"),
"externalmails");
1094 $externalmails->setInfo($this->
lng->txt(
'externalmails_info'));
1095 $externalmails->setRequired(
true);
1096 $form_import_file->addItem($externalmails);
1097 if ($ilAccess->checkAccess(
"write",
"", $this->edit_request->getRefId())) {
1098 $form_import_file->addCommandButton(
"importExternalRecipientsFromFile", $this->
lng->txt(
"import"));
1100 if ($ilAccess->checkAccess(
"write",
"", $this->edit_request->getRefId())) {
1101 $form_import_file->addCommandButton(
"codes", $this->
lng->txt(
"cancel"));
1103 return $form_import_file;
1108 $ilAccess = $this->access;
1110 $this->handleWriteAccess();
1111 $this->setParticipantSubTabs(
"mail_survey_codes");
1114 $form_import_text->setFormAction($this->
ctrl->getFormAction($this));
1115 $form_import_text->setTableWidth(
"100%");
1116 $form_import_text->setId(
"codes_import_text");
1119 $headertext->setTitle($this->
lng->txt(
"import_from_text"));
1120 $form_import_text->addItem($headertext);
1123 $external_text = $this->edit_manager->getExternalText();
1124 if ($external_text !==
"") {
1125 $inp->setValue($external_text);
1128 $inp->setValue(
"email;firstname;lastname\n" . $this->
lng->txt(
'mail_import_example2') .
"\n" . $this->lng->txt(
'mail_import_example3') .
"\n");
1130 $inp->setRequired(
true);
1133 $inp->setInfo($this->
lng->txt(
'externaltext_info'));
1134 $form_import_text->addItem($inp);
1135 $this->edit_manager->setExternalText(
"");
1137 if ($ilAccess->checkAccess(
"write",
"", $this->edit_request->getRefId())) {
1138 $form_import_text->addCommandButton(
"importExternalRecipientsFromText", $this->
lng->txt(
"import"));
1140 if ($ilAccess->checkAccess(
"write",
"", $this->edit_request->getRefId())) {
1141 $form_import_text->addCommandButton(
"codes", $this->
lng->txt(
"cancel"));
1144 $this->tpl->setContent($form_import_text->getHTML());
1153 $ilToolbar = $this->toolbar;
1155 $ilCtrl = $this->ctrl;
1157 $this->handleWriteAccess();
1159 $this->
ctrl->setParameter($this,
"appr360", 1);
1165 'auto_complete_name' => $this->
lng->txt(
'user'),
1166 'submit_name' => $this->lng->txt(
'add'),
1167 'add_search' =>
true,
1168 'add_from_container' => $this->ref_id
1174 if ($this->
object->getSkillService() && $skmg_set->isActivated()) {
1175 $ilToolbar->addSeparator();
1176 $ilToolbar->addButton(
1177 $lng->txt(
"survey_calc_skills"),
1178 $ilCtrl->getLinkTargetByClass(
"ilsurveyskilldeterminationgui"),
1183 $ilToolbar->addSeparator();
1184 $ilToolbar->addButton(
1185 $this->
lng->txt(
'svy_delete_all_user_data'),
1186 $this->ctrl->getLinkTarget($this,
'deleteAllUserData')
1189 $this->
ctrl->setParameter($this,
"appr360",
"");
1192 $tbl->setData($this->
object->getAppraiseesData());
1193 $this->tpl->setContent($tbl->getHTML());
1199 if (count($a_user_ids)) {
1201 foreach (array_unique($a_user_ids) as
$user_id) {
1202 $this->
object->addAppraisee($user_id);
1205 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"),
true);
1207 $this->
ctrl->redirect($this,
"listAppraisees");
1212 $ilTabs = $this->tabs;
1214 $appr_ids = $this->edit_request->getAppraiseeIds();
1215 if (count($appr_ids) === 0) {
1216 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"select_one"),
true);
1217 $this->
ctrl->redirect($this,
"listAppraisees");
1220 $ilTabs->clearTargets();
1221 $ilTabs->setBackTarget(
1222 $this->
lng->txt(
"btn_back"),
1223 $this->ctrl->getLinkTarget($this,
"listAppraisees")
1227 $cgui->setHeaderText($this->
lng->txt(
"survey_360_sure_delete_appraises"));
1229 $cgui->setFormAction($this->
ctrl->getFormAction($this,
"deleteAppraisees"));
1230 $cgui->setCancel($this->
lng->txt(
"cancel"),
"listAppraisees");
1231 $cgui->setConfirm($this->
lng->txt(
"confirm"),
"deleteAppraisees");
1233 $data = $this->
object->getAppraiseesData();
1236 foreach ($appr_ids as
$id) {
1244 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"select_one"),
true);
1245 $this->
ctrl->redirect($this,
"listAppraisees");
1248 $this->tpl->setContent($cgui->getHTML());
1253 $appr_ids = $this->edit_request->getAppraiseeIds();
1254 if (count($appr_ids) > 0) {
1255 $data = $this->
object->getAppraiseesData();
1257 foreach ($appr_ids as
$id) {
1260 $this->
object->deleteAppraisee($id);
1264 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"),
true);
1267 $this->
ctrl->redirect($this,
"listAppraisees");
1272 $ilAccess = $this->access;
1273 $ilUser = $this->user;
1275 if ($ilAccess->checkAccess(
"write",
"", $this->ref_id)) {
1276 $appr_id = $this->edit_request->getAppraiseeId();
1278 $this->
ctrl->redirect($this,
"listAppraisees");
1281 } elseif ($this->feature_config->usesAppraisees() &&
1282 $this->object->get360SelfRaters() &&
1283 $this->object->isAppraisee($ilUser->getId()) &&
1284 !$this->object->isAppraiseeClosed($ilUser->getId())) {
1285 return $ilUser->getId();
1287 $this->
ctrl->redirect($this->parent_gui,
"infoScreen");
1293 $appr_id = $this->handleRatersAccess();
1294 $all_data = $this->
object->getRatersData($appr_id);
1296 $recs = json_decode(base64_decode($this->edit_request->getRecipients()));
1297 foreach ($all_data as $rec_id => $rater) {
1299 if (($rater[
"login"] !=
"" && in_array($rater[
"login"], $recs,
true)) ||
1300 ($rater[
"email"] !=
"" && in_array($rater[
"email"], $recs,
true))) {
1304 $this->
object->set360RaterSent(
1306 strpos($rec_id,
"a") === 0 ? 0 : (
int) substr($rec_id, 1),
1307 strpos($rec_id,
"u") === 0 ? 0 : (
int) substr($rec_id, 1)
1311 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1312 $this->
ctrl->redirect($this,
"editRaters");
1317 if ($this->edit_request->getReturnedFromMail() === 1) {
1318 $this->storeMailSent();
1321 $ilTabs = $this->tabs;
1322 $ilToolbar = $this->toolbar;
1323 $ilAccess = $this->access;
1324 $ilTabs->activateTab(
"survey_360_edit_raters");
1325 $appr_id = $this->handleRatersAccess();
1327 $has_write = $ilAccess->checkAccess(
"write",
"", $this->ref_id);
1329 $ilTabs->clearTargets();
1330 $ilTabs->setBackTarget(
1331 $this->
lng->txt(
"btn_back"),
1332 $this->ctrl->getLinkTarget($this,
"listAppraisees")
1336 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1337 $this->
ctrl->setParameter($this,
"rate360", 1);
1339 $ilToolbar->addButton(
1340 $this->
lng->txt(
"svy_add_rater"),
1341 $this->ctrl->getLinkTargetByClass(
"ilSurveyRaterGUI",
"add")
1348 $tbl->setData($this->
object->getRatersData($appr_id));
1349 $this->tpl->setContent($tbl->getHTML());
1355 $ilTabs = $this->
tabs;
1356 $ilAccess = $this->access;
1358 $appr_id = $this->handleRatersAccess();
1359 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1361 $has_write = $ilAccess->checkAccess(
"write",
"", $this->ref_id);
1363 $ilTabs->clearTargets();
1364 $ilTabs->setBackTarget(
1365 $this->
lng->txt(
"btn_back"),
1366 $this->ctrl->getLinkTarget($this,
"editRaters")
1371 $a_form = $this->initExternalRaterForm($appr_id);
1374 $this->tpl->setContent($a_form->getHTML());
1382 $form->setTitle($this->
lng->txt(
"survey_360_add_external_rater") .
1386 $email->setRequired(
true);
1387 $form->addItem($email);
1390 $lname->setSize(30);
1391 $form->addItem($lname);
1394 $fname->setSize(30);
1395 $form->addItem($fname);
1397 $form->addCommandButton(
"addExternalRater", $this->
lng->txt(
"save"));
1398 $form->addCommandButton(
"editRaters", $this->
lng->txt(
"cancel"));
1405 $appr_id = $this->edit_request->getAppraiseeId();
1407 $this->
ctrl->redirect($this,
"listAppraisees");
1410 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1412 $form = $this->initExternalRaterForm($appr_id);
1413 if ($form->checkInput()) {
1414 $code_id = $this->addCodeForExternal(
1415 $form->getInput(
"email"),
1416 $form->getInput(
"lname"),
1417 $form->getInput(
"fname")
1420 $this->
object->addRater($appr_id, 0, $code_id);
1422 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"),
true);
1423 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1424 $this->
ctrl->redirect($this,
"editRaters");
1427 $form->setValuesByPost();
1428 $this->addExternalRaterFormObject($form);
1434 $ilAccess = $this->
access;
1435 $ilUser = $this->user;
1437 $appr_id = $this->handleRatersAccess();
1439 if (count($a_user_ids)) {
1441 foreach (array_unique($a_user_ids) as
$user_id) {
1442 if ($ilAccess->checkAccess(
"write",
"", $this->ref_id) ||
1443 $this->object->get360SelfEvaluation() ||
1446 $this->
object->addRater($appr_id,
$user_id);
1447 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"),
true);
1449 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"svy_appraisses_cannot_be_raters"),
true);
1455 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1456 $this->
ctrl->redirect($this,
"editRaters");
1461 $ilTabs = $this->tabs;
1463 $rater_ids = $this->edit_request->getRaterIds();
1464 $appr_id = $this->handleRatersAccess();
1465 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1466 if (count($rater_ids) === 0) {
1467 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"select_one"),
true);
1468 $this->
ctrl->redirect($this,
"editRaters");
1471 $ilTabs->clearTargets();
1472 $ilTabs->setBackTarget(
1473 $this->
lng->txt(
"btn_back"),
1474 $this->ctrl->getLinkTarget($this,
"editRaters")
1478 $cgui->setHeaderText(sprintf(
1479 $this->
lng->txt(
"survey_360_sure_delete_raters"),
1483 $cgui->setFormAction($this->
ctrl->getFormAction($this,
"deleteRaters"));
1484 $cgui->setCancel($this->
lng->txt(
"cancel"),
"editRaters");
1485 $cgui->setConfirm($this->
lng->txt(
"confirm"),
"deleteRaters");
1487 $data = $this->
object->getRatersData($appr_id);
1489 foreach ($rater_ids as
$id) {
1491 $cgui->addItem(
"rtr_id[]",
$id,
$data[
$id][
"lastname"] .
", " .
1496 $this->tpl->setContent($cgui->getHTML());
1501 $appr_id = $this->handleRatersAccess();
1502 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1504 $rater_ids = $this->edit_request->getRaterIds();
1505 if (count($rater_ids) > 0) {
1506 $data = $this->
object->getRatersData($appr_id);
1508 foreach ($rater_ids as
$id) {
1510 if (strpos(
$id,
"u") === 0) {
1511 $this->
object->deleteRater($appr_id, substr(
$id, 1));
1513 $this->
object->deleteRater($appr_id, 0, substr(
$id, 1));
1518 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"settings_saved"),
true);
1521 $this->
ctrl->redirect($this,
"editRaters");
1526 $ilUser = $this->user;
1528 if ($this->
object->get360SelfAppraisee() &&
1529 !$this->object->isAppraisee($ilUser->getId())) {
1530 $this->
object->addAppraisee($ilUser->getId());
1533 $this->
ctrl->redirect($this->parent_gui,
"run");
1542 $form->setTitle($this->
lng->txt(
'compose'));
1544 $all_data = $this->
object->getRatersData($appr_id);
1545 $rec_data = array();
1546 foreach ($rec_ids as $rec_id) {
1547 if (isset($all_data[$rec_id])) {
1548 $rec_data[] = $all_data[$rec_id][
"lastname"] .
", " .
1549 $all_data[$rec_id][
"firstname"] .
1550 " (" . $all_data[$rec_id][
"email"] .
")";
1555 $rec->setHtml(implode(
"<br />", $rec_data));
1556 $form->addItem($rec);
1559 $subject->setSize(50);
1560 $subject->setRequired(
true);
1561 $form->addItem($subject);
1563 $existingdata = $this->
object->getExternalCodeRecipients();
1564 $existingcolumns = array();
1565 if (count($existingdata)) {
1566 $first = array_shift($existingdata);
1567 foreach ($first as $key => $value) {
1568 if (strcmp($key,
'code') !== 0 && strcmp($key,
'email') !== 0 && strcmp($key,
'sent') !== 0) {
1569 $existingcolumns[] =
'[' . $key .
']';
1574 $mailmessage_u =
new ilTextAreaInputGUI($this->
lng->txt(
'survey_360_rater_message_content_registered'),
'message_u');
1575 $mailmessage_u->setRequired(
true);
1576 $mailmessage_u->setCols(80);
1577 $mailmessage_u->setRows(10);
1578 $form->addItem($mailmessage_u);
1580 $mailmessage_a =
new ilTextAreaInputGUI($this->
lng->txt(
'survey_360_rater_message_content_anonymous'),
'message_a');
1581 $mailmessage_a->setRequired(
true);
1582 $mailmessage_a->setCols(80);
1583 $mailmessage_a->setRows(10);
1584 $mailmessage_a->setInfo(sprintf($this->
lng->txt(
'message_content_info'), implode(
', ', $existingcolumns)));
1585 $form->addItem($mailmessage_a);
1588 $recf->setValue(implode(
";", $rec_ids));
1589 $form->addItem($recf);
1591 $form->addCommandButton(
"mailRatersAction", $this->
lng->txt(
"send"));
1592 $form->addCommandButton(
"editRaters", $this->
lng->txt(
"cancel"));
1594 $subject->setValue(sprintf($this->
lng->txt(
'survey_360_rater_subject_default'), $this->object->getTitle()));
1595 $mailmessage_u->setValue($this->
lng->txt(
'survey_360_rater_message_content_registered_default'));
1596 $mailmessage_a->setValue($this->
lng->txt(
'survey_360_rater_message_content_anonymous_default'));
1603 $appr_id = $this->handleRatersAccess();
1604 $all_data = $this->
object->getRatersData($appr_id);
1605 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1607 $raters = $this->edit_request->getRaterIds();
1610 $external_rater =
false;
1612 foreach ($raters as
$id) {
1613 if (isset($all_data[
$id])) {
1614 if ($all_data[
$id][
"login"] !=
"") {
1615 $rec[] = $all_data[
$id][
"login"];
1616 } elseif ($all_data[
$id][
"email"] !=
"") {
1617 $rec[] = $all_data[
$id][
"email"];
1618 $external_rater =
true;
1619 $rater_id = $all_data[
$id][
"user_id"];
1623 if ($external_rater && count($rec) > 1) {
1624 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"svy_only_max_one_external_rater"),
true);
1625 $this->
ctrl->redirect($this,
"editRaters");
1630 $contextParameters = [
1631 'ref_id' => $this->
object->getRefId(),
1633 'appr_id' => $appr_id,
1634 'rater_id' => $rater_id,
1642 'recipients' => base64_encode(json_encode($rec, JSON_THROW_ON_ERROR)),
1646 'sig' => rawurlencode(base64_encode(
"\n\n" . $this->
lng->txt(
"svy_link_to_svy") .
": {{SURVEY_LINK}}"))
1655 $ilTabs = $this->
tabs;
1656 $rater_ids = $this->edit_request->getRaterIds();
1658 $appr_id = $this->handleRatersAccess();
1659 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1661 if (count($rater_ids) === 0) {
1662 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"select_one"),
true);
1663 $this->
ctrl->redirect($this,
"editRaters");
1666 $a_form = $this->initMailRatersForm($appr_id, $rater_ids);
1669 $ilTabs->clearTargets();
1670 $ilTabs->setBackTarget(
1671 $this->
lng->txt(
"btn_back"),
1672 $this->ctrl->getLinkTarget($this,
"editRaters")
1675 $this->tpl->setContent($a_form->getHTML());
1680 $ilUser = $this->user;
1681 $appr_id = $this->handleRatersAccess();
1682 $this->
ctrl->setParameter($this,
"appr_id", $appr_id);
1684 $rec_ids = $this->edit_request->getRaterIds();
1685 if (count($rec_ids) === 0) {
1686 $this->
ctrl->redirect($this,
"editRaters");
1689 $form = $this->initMailRatersForm($appr_id, $rec_ids);
1690 if ($form->checkInput()) {
1691 $txt_u = $form->getInput(
"message_u");
1692 $txt_a = $form->getInput(
"message_a");
1693 $subj = $form->getInput(
"subject");
1696 $sender_id = (trim($ilUser->getEmail()))
1700 $all_data = $this->
object->getRatersData($appr_id);
1701 foreach ($rec_ids as $rec_id) {
1702 if (isset($all_data[$rec_id])) {
1703 $user = $all_data[$rec_id];
1706 if (strpos($rec_id,
"a") === 0) {
1708 $url = $user[
"href"];
1709 $rcp = $user[
"email"];
1714 $user[
"code"] = $this->
lng->txt(
"survey_code_mail_on_demand");
1716 $rcp = $user[
"login"];
1719 $mytxt = str_replace(
1720 [
"[lastname]",
"[firstname]",
"[url]",
"[code]"],
1721 [$user[
"lastname"], $user[
"firstname"],
$url, $user[
"code"]],
1725 $mail =
new ilMail($sender_id);
1735 $this->
object->set360RaterSent(
1737 (strpos($rec_id,
"a") === 0) ? 0 : (
int) substr($rec_id, 1),
1738 (strpos($rec_id,
"u") === 0) ? 0 : (
int) substr($rec_id, 1)
1743 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"mail_sent"),
true);
1744 $this->
ctrl->redirect($this,
"editRaters");
1747 $form->setValuesByPost();
1748 $this->mailRatersObject();
1753 $ilUser = $this->user;
1755 $ilTabs = $this->tabs;
1757 $ilTabs->clearTargets();
1758 $ilTabs->setBackTarget(
1759 $this->
lng->txt(
"menuback"),
1760 $this->ctrl->getLinkTarget($this->parent_gui,
"run")
1763 if (!$this->
object->isAppraisee($ilUser->getId())) {
1764 $this->
ctrl->redirect($this->parent_gui,
"run");
1768 $cgui->setHeaderText($this->
lng->txt(
"survey_360_sure_appraisee_close"));
1770 $cgui->setFormAction($this->
ctrl->getFormAction($this,
"appraiseeClose"));
1771 $cgui->setCancel($this->
lng->txt(
"cancel"),
"confirmAppraiseeCloseCancel");
1772 $cgui->setConfirm($this->
lng->txt(
"confirm"),
"appraiseeClose");
1779 $this->
ctrl->redirect($this->parent_gui,
"run");
1784 $ilUser = $this->user;
1786 if (!$this->
object->isAppraisee($ilUser->getId())) {
1787 $this->
ctrl->redirect($this->parent_gui,
"run");
1790 $this->
object->closeAppraisee($ilUser->getId());
1791 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"survey_360_appraisee_close_action_success"),
true);
1792 $this->
ctrl->redirect($this->parent_gui,
"run");
1799 $this->handleWriteAccess();
1801 $appr_ids = $this->edit_request->getAppraiseeIds();
1803 if (count($appr_ids) === 0) {
1804 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"select_one"),
true);
1805 $this->
ctrl->redirect($this,
"listAppraisees");
1809 $cgui->setHeaderText($this->
lng->txt(
"survey_360_sure_appraisee_close_admin"));
1811 $cgui->setFormAction($this->
ctrl->getFormAction($this,
"adminAppraiseesClose"));
1812 $cgui->setCancel($this->
lng->txt(
"cancel"),
"listAppraisees");
1813 $cgui->setConfirm($this->
lng->txt(
"confirm"),
"adminAppraiseesClose");
1815 foreach ($appr_ids as $appr_id) {
1824 $this->handleWriteAccess();
1826 $appr_ids = $this->edit_request->getAppraiseeIds();
1828 if (count($appr_ids) === 0) {
1829 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"select_one"),
true);
1830 $this->
ctrl->redirect($this,
"listAppraisees");
1833 $appr_data = $this->
object->getAppraiseesData();
1834 foreach ($appr_ids as $appr_id) {
1835 if (isset($appr_data[$appr_id]) && !$appr_data[$appr_id][
"closed"]) {
1836 $this->
object->closeAppraisee($appr_id);
1840 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"survey_360_appraisee_close_action_success_admin"),
true);
1841 $this->
ctrl->redirect($this,
"listAppraisees");
1846 $ilToolbar = $this->toolbar;
1848 if (!$this->isAnonymousListActive()) {
1849 $this->
ctrl->redirect($this,
"maintenance");
1852 $this->handleWriteAccess();
1853 $this->setParticipantSubTabs(
"anon_participants");
1856 $this->
lng->txt(
"print"),
1858 )->onClick(
"window.print(); return false;")->toToolbar();
1861 $this->tpl->setContent($tbl->getHTML());
1871 $ctrl = $this->ctrl;
1874 $this->invitation_manager->add($this->
object->getSurveyId(), $user_id);
1876 $this->tpl->setOnScreenMessage(
'success',
$lng->txt(
"svy_users_invited"),
true);
1877 $ctrl->
redirect($this,
"maintenance");
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilCtrl provides processing control methods.
redirect(object $a_gui_obj, ?string $a_cmd=null, ?string $a_anchor=null, bool $is_async=false)
@inheritDoc
static getASCIIFilename(string $a_filename)
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 _getStaticLink(?int $a_ref_id, string $a_type='', bool $a_fallback_goto=true, string $append="")
Component logger with individual log levels by component id.
@ilCtrl_Calls ilObjSurveyGUI: ilSurveyEvaluationGUI, ilSurveyExecutionGUI @ilCtrl_Calls ilObjSurveyGU...
class ilRbacSystem system function like checkAccess, addActiveRole ... Supporting system functions ar...
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...
Skill management settings.
static subStr(string $a_str, int $a_start, ?int $a_length=null)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilSurveyParticipantsGUI.
exportCodesObject()
Exports a list of survey codes.
ilObjSurveyGUI $parent_gui
getImportExternalMailRecipientsFromFileForm()
cancelDeleteAllUserDataObject()
Cancels delete of all user data in maintenance.
importExternalRecipientsFromFileObject()
ilGlobalTemplateInterface $tpl
ILIAS Survey Editing EditingGUIRequest $edit_request
deleteSavedMessageObject()
inviteUsers(array $user_ids)
ILIAS Survey Mode FeatureConfig $feature_config
deleteCodesConfirmObject()
confirmAppraiseeCloseObject()
ILIAS Survey InternalDataService $data_manager
addAppraisee(array $a_user_ids)
addExternalRaterFormObject(?ilPropertyFormGUI $a_form=null)
ILIAS Survey Editing EditManager $edit_manager
ILIAS Survey InternalService $survey_service
deleteAllUserDataObject()
Creates a confirmation form for delete all user data.
initExternalRaterForm(int $appr_id)
mailRatersObjectOld(?ilPropertyFormGUI $a_form=null)
removeUTF8Bom(string $a_text)
maintenanceObject()
Participants maintenance.
getAccessCodeImportForm()
importExternalMailRecipientsFromFileFormObject()
addCodeForExternal(string $email, string $lastname, string $firstname)
Add code for an external rater.
importExternalMailRecipientsFromTextFormObject()
ILIAS Survey Code CodeManager $code_manager
confirmAppraiseeCloseCancelObject()
insertSavedMessageObject()
importAccessCodesActionObject()
Import codes from export codes file.
codesObject()
Display the survey access codes tab.
confirmDeleteAllUserDataObject()
Deletes all user data of the survey after confirmation.
createSurveyCodesObject()
Create access codes for the survey.
addRater(array $a_user_ids)
exportAllCodesObject()
Exports all survey codes.
deleteCodesObject()
Delete a list of survey codes.
ILIAS Survey InternalGUIService $gui
confirmDeleteAppraiseesObject()
deleteSingleUserResultsObject()
Asks for a confirmation to delete selected user data.
setCodeLanguageObject()
Change survey language for direct access URL's.
Participants InvitationsManager $invitation_manager
initMailRatersForm(int $appr_id, array $rec_ids)
importAccessCodesObject()
Import codes from export codes file (upload form)
confirmAdminAppraiseesCloseObject()
filterSurveyParticipantsByAccess(?array $a_finished_ids=null)
adminAppraiseesCloseObject()
cancelDeleteSelectedUserDataObject()
Cancels the deletion of all user data.
confirmDeleteRatersObject()
_convertCharset(string $a_string, string $a_from_charset="", string $a_to_charset="UTF-8")
setParticipantSubTabs(string $active)
confirmDeleteSelectedUserDataObject()
Deletes all user data for the test object.
importExternalRecipientsFromTextObject()
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
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, 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=null)
Default behaviour is:
static deliverData(string $a_data, string $a_filename, string $mime="application/octet-stream")
setContent(string $a_html)
Sets content for standard template.
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
if(!file_exists('../ilias.ini.php'))