70 $this->tabs = $DIC->tabs();
71 $this->access = $DIC->access();
72 $this->
user = $DIC->user();
73 $this->rbacsystem = $DIC->rbac()->system();
74 $this->tree = $DIC->repositoryTree();
75 $this->toolbar = $DIC->toolbar();
76 $this->ui = $DIC->ui();
77 $lng = $DIC->language();
84 $this->
object = $a_object;
86 $this->array_panels = array();
98 include_once(
"./Services/Skill/classes/class.ilSkillManagementSettings.php");
100 if ($this->object->getSkillService() && $skmg_set->isActivated()) {
101 $cmd = $this->ctrl->getCmd(
"competenceEval");
103 $cmd = $this->ctrl->getCmd(
"evaluation");
106 $next_class = $this->ctrl->getNextClass($this);
109 switch ($next_class) {
111 $this->setEvalSubTabs();
112 $ret = &$this->$cmd();
133 include_once(
"./Services/Skill/classes/class.ilSkillManagementSettings.php");
135 if ($this->object->getSkillService() && $skmg_set->isActivated()) {
136 $ilTabs->addSubTabTarget(
137 "svy_eval_competences",
138 $this->ctrl->getLinkTarget($this,
"competenceEval"),
139 array(
"competenceEval")
143 $ilTabs->addSubTabTarget(
144 "svy_eval_cumulated",
145 $this->ctrl->getLinkTarget($this,
"evaluation"),
146 array(
"evaluation",
"checkEvaluationAccess")
149 $ilTabs->addSubTabTarget(
151 $this->ctrl->getLinkTarget($this,
"evaluationdetails"),
152 array(
"evaluationdetails")
156 $ilTabs->addSubTabTarget(
158 $this->ctrl->getLinkTarget($this,
"evaluationuser"),
159 array(
"evaluationuser")
172 $this->appr_id = $a_val;
196 if ($_REQUEST[
"appr_id"] ==
"") {
197 $req_appr_id =
$ilUser->getId();
199 $req_appr_id = (int) $_REQUEST[
"appr_id"];
203 if ($req_appr_id > 0 && $this->object->get360Mode()) {
207 foreach ($this->object->getAppraiseesData() as $item) {
208 if ($item[
"closed"] &&
209 ($item[
"user_id"] ==
$ilUser->getId() ||
210 $rbacsystem->checkAccess(
"write", $this->object->getRefId()) ||
212 $valid[] = $item[
"user_id"];
215 if (in_array($req_appr_id,
$valid)) {
225 $this->ctrl->setParameter($this,
"appr_id",
$appr_id);
241 if ($this->object->getAnonymize() == 1 &&
246 include_once
"Modules/Survey/classes/class.ilObjSurveyAccess.php";
248 if ($this->object->getAnonymize() == 1) {
254 if ($this->object->getAnonymize() == 1) {
256 $surveycode = $this->
object->getUserAccessCode(
$ilUser->getId());
257 if ($this->object->isAnonymizedParticipant($surveycode)) {
271 $this->tpl->setVariable(
"TABS",
"");
272 $this->tpl->addBlockFile(
"ADM_CONTENT",
"adm_content",
"tpl.il_svy_svy_evaluation_checkaccess.html",
"Modules/Survey");
273 $this->tpl->setCurrentBlock(
"adm_content");
274 $this->tpl->setVariable(
"AUTHENTICATION_NEEDED", $this->lng->txt(
"svy_check_evaluation_authentication_needed"));
275 $this->tpl->setVariable(
"FORM_ACTION", $this->ctrl->getFormAction($this,
"checkEvaluationAccess"));
276 $this->tpl->setVariable(
"EVALUATION_CHECKACCESS_INTRODUCTION", $this->lng->txt(
"svy_check_evaluation_access_introduction"));
277 $this->tpl->setVariable(
"VALUE_CHECK", $this->lng->txt(
"ok"));
278 $this->tpl->setVariable(
"VALUE_CANCEL", $this->lng->txt(
"cancel"));
279 $this->tpl->setVariable(
"TEXT_SURVEY_CODE", $this->lng->txt(
"survey_code"));
280 $this->tpl->parseCurrentBlock();
283 $_SESSION[
"anon_evaluation_access"] = null;
296 $surveycode =
$_POST[
"surveycode"];
297 if ($this->object->isAnonymizedParticipant($surveycode)) {
317 $path =
$tree->getPathFull($this->object->getRefID());
323 $ilCtrl->redirectByClass(
"ilrepositorygui",
"frameset");
340 $finished_ids = null;
341 if ($this->object->get360Mode()) {
344 $this->ctrl->redirect($this, $details ?
"evaluationdetails" :
"evaluation");
346 $finished_ids = $this->
object->getFinishedIdsForAppraiseeId(
$appr_id);
347 if (!
sizeof($finished_ids)) {
348 $finished_ids = array(-1);
353 $title_row = array();
354 $do_title = $do_label =
true;
355 switch (
$_POST[
'export_label']) {
357 $title_row[] = $this->lng->txt(
"label");
362 $title_row[] = $this->lng->txt(
"title");
367 $title_row[] = $this->lng->txt(
"title");
368 $title_row[] = $this->lng->txt(
"label");
371 $title_row[] = $this->lng->txt(
"question");
372 $title_row[] = $this->lng->txt(
"question_type");
373 $title_row[] = $this->lng->txt(
"users_answered");
374 $title_row[] = $this->lng->txt(
"users_skipped");
375 $title_row[] = $this->lng->txt(
"mode");
376 $title_row[] = $this->lng->txt(
"mode_text");
377 $title_row[] = $this->lng->txt(
"mode_nr_of_selections");
378 $title_row[] = $this->lng->txt(
"median");
379 $title_row[] = $this->lng->txt(
"arithmetic_mean");
382 switch (
$_POST[
"export_format"]) {
384 include_once
"Services/Excel/classes/class.ilExcel.php";
386 $excel->addSheet($this->lng->txt(
"svy_eval_cumulated"));
387 $excel->setCellArray(array($title_row),
"A1");
388 $excel->setBold(
"A1:" . $excel->getColumnCoord(
sizeof($title_row) - 1) .
"1");
392 $csvfile = array($title_row);
399 include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
400 foreach ($this->object->getSurveyQuestions() as $qdata) {
402 $q_res = $q_eval->getResults();
403 $ov_rows = $q_eval->exportResults($q_res, $do_title, $do_label);
405 switch (
$_POST[
"export_format"]) {
407 $excel->setActiveSheet(0);
408 foreach ($ov_rows as
$row) {
409 foreach ($row as $col => $value) {
410 $excel->setCell($ov_row, $col, $value);
417 foreach ($ov_rows as $row) {
424 switch (
$_POST[
"export_format"]) {
434 ? $this->lng->txt(
"svy_eval_cumulated")
435 : $this->lng->txt(
"svy_eval_detail");
437 $surveyname = $this->
object->getTitle() .
" " .
$type .
" " . date(
"Y-m-d");
438 $surveyname = preg_replace(
"/\s/",
"_", trim($surveyname));
442 switch (
$_POST[
"export_format"]) {
444 $excel->sendToClient($surveyname);
450 foreach ($csvfile as $csvrow) {
452 $csv .= join($separator, $csvrow) .
"\n";
471 $question_res = $a_results;
473 if (is_array($question_res)) {
474 $question_res = $question_res[0][1];
477 $question = $question_res->getQuestion();
479 $a_excel->
addSheet($question->getTitle());
487 $kv[$this->lng->txt(
"title")] = $question->getTitle();
490 $kv[$this->lng->txt(
"label")] = $question->label;
494 $kv[$this->lng->txt(
"question")] = $question->getQuestiontext();
502 $kv[$this->lng->txt(
"users_answered")] = (int) $question_res->getUsersAnswered();
503 $kv[$this->lng->txt(
"users_skipped")] = (int) $question_res->getUsersSkipped();
507 foreach ($kv as
$key => $value) {
509 $a_excel->
setCell($excel_row++, 1, $value);
534 foreach ($a_results as $row_results) {
535 $row_title = $row_results[0];
537 $a_excel->
setCell($excel_row, 0, $this->lng->txt(
"row"));
538 $a_excel->
setCell($excel_row++, 1, $row_title);
545 is_array($texts[$row_title])
546 ? array(
"" => $texts[$row_title])
554 $a_excel->
setCell($excel_row++, 0, $this->lng->txt(
"overview"));
558 $cats = $question->getColumns();
559 foreach ($cats->getCategories() as $cat) {
561 $a_excel->
setCell($excel_row, 1 + $counter, $cat->title);
566 foreach ($a_results as $row_results) {
567 $row_title = $row_results[0];
569 $a_excel->
setCell($excel_row, 0, $row_title);
571 $vars = $row_results[1]->getVariables();
573 foreach ($vars as $var) {
574 $a_excel->
setCell($excel_row, ++$counter, $var->abs);
582 $a_excel->
setBold(
"A1:A" . $excel_row);
589 if ($a_include_mode) {
592 $kv[$this->lng->txt(
"mode")] = is_array($a_results->
getModeValue())
604 if ($a_results->
getMean() !== null) {
605 $kv[$this->lng->txt(
"arithmetic_mean")] = $a_results->
getMean();
609 foreach ($kv as
$key => $value) {
611 $a_excel->
setCell($a_excel_row++, 1, $value);
618 $a_excel->
setCell($a_excel_row, 0, $this->lng->txt(
"categories"));
619 foreach ($a_grid[
"cols"] as $col_idx => $col) {
620 $a_excel->
setCell($a_excel_row, $col_idx + 1, $col);
625 foreach ($a_grid[
"rows"] as
$cols) {
626 foreach ($cols as $col_idx => $col) {
627 $a_excel->
setCell($a_excel_row, $col_idx + 1, $col);
634 if ($a_text_answers) {
636 $a_excel->
setCell($a_excel_row, 0, $this->lng->txt(
"freetext_answers"));
639 if (!is_array($a_text_answers[
""])) {
641 $a_excel->
setCell($a_excel_row, 1, $this->lng->txt(
"title"));
642 $a_excel->
setCell($a_excel_row++, 2, $this->lng->txt(
"answer"));
647 $a_excel->
setCell($a_excel_row++, 1, $this->lng->txt(
"answer"));
650 foreach ($a_text_answers as $var => $items) {
651 foreach ($items as $item) {
652 if (!is_array($a_text_answers[
""])) {
653 $a_excel->
setCell($a_excel_row, 1, $var);
654 $a_excel->
setCell($a_excel_row++, 2, $item);
656 $a_excel->
setCell($a_excel_row++, 1, $item);
665 if (strlen(
$_POST[
"export_format"])) {
669 $this->ctrl->redirect($this,
'evaluation');
675 if (strlen(
$_POST[
"export_format"])) {
679 $this->ctrl->redirect($this,
'evaluation');
686 $this->ctrl->redirect($this,
'evaluation');
693 $form_id =
"svymdfrm";
696 $tpl->addOnLoadCode(
'$("#form_' . $form_id .
'").submit(function() { $("#' . $a_id .
'").modal("hide"); });');
698 include_once
"Services/UIComponent/Modal/classes/class.ilModalGUI.php";
700 $modal->setId($a_id);
701 $modal->setHeading(($this->lng->txt(
"svy_export_format")));
703 include_once
"Services/Form/classes/class.ilPropertyFormGUI.php";
705 $form->setId($form_id);
706 $form->setFormAction($this->ctrl->getFormAction($this, $a_cmd));
710 self::TYPE_XLS => $this->lng->txt(
'exp_type_excel'),
717 'label_only' => $this->lng->txt(
'export_label_only'),
718 'title_only' => $this->lng->txt(
'export_title_only'),
719 'title_label' => $this->lng->txt(
'export_title_label')
721 $form->addItem($label);
723 $form->addCommandButton($a_cmd, $this->lng->txt(
"export"));
724 $form->setPreventDoubleSubmission(
false);
726 $modal->setBody(
$form->getHTML());
728 return $modal->getHTML();
738 $ui_factory = $ui->factory();
739 $ui_renderer = $ui->renderer();
743 if (!$this->access->checkAccess(
'read',
'', $this->object->getRefId())) {
748 switch ($this->object->getEvaluationAccess()) {
763 $ilToolbar->setFormAction($this->ctrl->getFormAction($this));
764 include_once
"Services/Form/classes/class.ilPropertyFormGUI.php";
766 $this->tpl->addBlockFile(
"ADM_CONTENT",
"adm_content",
"tpl.il_svy_svy_evaluation.html",
"Modules/Survey");
768 if ($this->object->get360Mode()) {
774 if (!$this->object->get360Mode() ||
$appr_id) {
776 $captions =
new ilSelectInputGUI($this->lng->txt(
"svy_eval_captions"),
"cp");
778 "ap" => $this->lng->txt(
"svy_eval_captions_abs_perc"),
779 "a" => $this->lng->txt(
"svy_eval_captions_abs"),
780 "p" => $this->lng->txt(
"svy_eval_captions_perc")
782 $captions->setValue(
$_POST[
"cp"]);
783 $ilToolbar->addInputItem($captions,
true);
787 "tc" => $this->lng->txt(
"svy_eval_view_tables_charts"),
788 "t" => $this->lng->txt(
"svy_eval_view_tables"),
789 "c" => $this->lng->txt(
"svy_eval_view_charts")
791 $view->setValue(
$_POST[
"vw"]);
792 $ilToolbar->addInputItem($view,
true);
794 include_once
"Services/UIComponent/Button/classes/class.ilSubmitButton.php";
796 $button->setCaption(
"ok");
797 $button->setCommand(
"evaluationdetails");
798 $button->setOmitPreventDoubleSubmission(
true);
799 $ilToolbar->addButtonInstance($button);
801 $ilToolbar->addSeparator();
804 $dtmpl =
new ilTemplate(
"tpl.il_svy_svy_results_details.html",
true,
true,
"Modules/Survey");
805 $toc_tpl =
new ilTemplate(
"tpl.svy_results_table_contents.html",
true,
true,
"Modules/Survey");
806 $this->lng->loadLanguageModule(
"content");
807 $toc_tpl->setVariable(
"TITLE_TOC", $this->lng->txt(
'cont_toc'));
810 $modal_id =
"svy_ev_exp";
815 include_once
"Services/UIComponent/Button/classes/class.ilLinkButton.php";
817 $button->setCaption(
"export");
818 $button->setOnClick(
'$(\'#' . $modal_id .
'\').modal(\
'show\')');
819 $ilToolbar->addButtonInstance($button);
821 $ilToolbar->addSeparator();
823 include_once
"Services/UIComponent/Button/classes/class.ilLinkButton.php";
825 $button->setCaption(
"print");
826 $button->setOnClick(
"if(il.Accordion) { il.Accordion.preparePrint(); } window.print(); return false;");
827 $button->setOmitPreventDoubleSubmission(
true);
828 $ilToolbar->addButtonInstance($button);
830 $finished_ids = null;
832 $finished_ids = $this->
object->getFinishedIdsForAppraiseeId(
$appr_id);
833 if (!
sizeof($finished_ids)) {
834 $finished_ids = array(-1);
838 $details_figure =
$_POST[
"cp"]
841 $details_view =
$_POST[
"vw"]
847 $finished_ids2 = $this->access->filterUserIdsByRbacOrPositionOfCurrentUser(
850 $this->object->getRefId(),
851 (array) $finished_ids
855 include_once(
"./Services/UIComponent/NestedList/classes/class.ilNestedList.php");
858 include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
859 foreach ($this->object->getSurveyQuestions() as $qdata) {
861 $q_res = $q_eval->getResults();
866 $this->
renderDetails($details_view, $details_figure, $qdata, $q_eval, $q_res);
869 if ($qdata[
"questionblock_id"] &&
870 $qdata[
"questionblock_id"] != $this->last_questionblock_id) {
872 if ($qblock[
"show_blocktitle"]) {
873 $list->addListNode($qdata[
"questionblock_title"],
"q" . $qdata[
"questionblock_id"]);
875 $this->last_questionblock_id = $qdata[
"questionblock_id"];
877 $anchor_id =
"svyrdq" . $qdata[
"question_id"];
878 $list->addListNode(
"<a href='#" . $anchor_id .
"'>" . $qdata[
"title"] .
"</a>", $qdata[
"question_id"], $qdata[
"questionblock_id"] ?
879 "q" . $qdata[
"questionblock_id"] : 0);
884 $list->setListClass(
"il_Explorer");
885 $toc_tpl->setVariable(
"LIST",
$list->getHTML());
888 $panel_toc = $ui_factory->panel()->standard(
"", $ui_factory->legacy($toc_tpl->get()));
889 $render_toc = $ui_renderer->render($panel_toc);
890 $dtmpl->setVariable(
"PANEL_TOC", $render_toc);
894 $panel_report = $ui_factory->panel()->report($report_title, $this->array_panels);
895 $render_report = $ui_renderer->render($panel_report);
896 $dtmpl->setVariable(
"PANEL_REPORT", $render_report);
899 $this->tpl->setVariable(
'DETAIL', $dtmpl->get());
903 $this->tpl->setVariable(
'MODAL', $modal);
905 include_once
"./Modules/Survey/classes/tables/class.ilSurveyResultsCumulatedTableGUI.php";
907 $this->tpl->setVariable(
'CUMULATED', $table_gui->getHTML());
917 $path_full =
$tree->getPathFull($this->object->getRefId());
918 foreach ($path_full as
$data) {
919 $path .=
" » ";
920 $path .= $data[
'title'];
924 include_once
"Services/Link/classes/class.ilLink.php";
928 $this->lng->txt(
"path") =>
$path,
929 $this->lng->txt(
"svy_results") => !$details
930 ? $this->lng->txt(
"svy_eval_cumulated")
931 : $this->lng->txt(
"svy_eval_detail"),
935 $this->tpl->setCurrentBlock(
"print_header_bl");
936 foreach ($props as
$key => $value) {
937 $this->tpl->setVariable(
"HEADER_PROP_KEY",
$key);
938 $this->tpl->setVariable(
"HEADER_PROP_VALUE", $value);
939 $this->tpl->parseCurrentBlock();
958 $ui_factory = $this->ui->factory();
959 $a_tpl =
new ilTemplate(
"tpl.svy_results_details_panel.html",
true,
true,
"Modules/Survey");
961 $question_res = $a_results;
963 if (is_array($question_res)) {
964 $question_res = $question_res[0][1];
969 if (!is_object($question_res)) {
973 $question = $question_res->getQuestion();
982 $kv[
"users_answered"] = $question_res->getUsersAnswered();
983 $kv[
"users_skipped"] = $question_res->getUsersSkipped();
986 if ($question_res->getModeValue() !== null) {
987 $kv[
"mode"] = wordwrap($question_res->getModeValueAsText(), 50,
"<br />");
988 $kv[
"mode_nr_of_selections"] = $question_res->getModeNrOfSelections();
990 if ($question_res->getMedian() !== null) {
991 $kv[
"median"] = $question_res->getMedianAsText();
993 if ($question_res->getMean() !== null) {
994 $kv[
"arithmetic_mean"] = $question_res->getMean();
999 $qst_title = $question->getTitle();
1000 $svy_text = nl2br($question->getQuestiontext());
1001 $card_table_tpl =
new ilTemplate(
"tpl.svy_results_details_card.html",
true,
true,
"Modules/Survey");
1002 foreach ($kv as
$key => $value) {
1003 $card_table_tpl->setCurrentBlock(
"question_statistics_card");
1004 $card_table_tpl->setVariable(
"QUESTION_STATISTIC_KEY", $this->lng->txt(
$key));
1005 $card_table_tpl->setVariable(
"QUESTION_STATISTIC_VALUE", $value);
1006 $card_table_tpl->parseCurrentBlock();
1009 $anchor_id =
"svyrdq" . $question->getId();
1010 $title =
"<span id='$anchor_id'>$qst_title</span>";
1011 $panel_qst_card = $ui_factory->panel()->sub(
$title, $ui_factory->legacy($svy_text))
1012 ->withCard($ui_factory->card()->standard($svy_type_title)->withSections(array($ui_factory->legacy($card_table_tpl->get()))));
1013 array_push($this->array_panels, $panel_qst_card);
1016 if ($a_details_parts ==
"t" ||
1017 $a_details_parts ==
"tc") {
1020 ($a_details_figure ==
"ap" || $a_details_figure ==
"a"),
1021 ($a_details_figure ==
"ap" || $a_details_figure ==
"p")
1024 foreach (
$grid[
"cols"] as $col) {
1025 $a_tpl->setCurrentBlock(
"grid_col_header_bl");
1026 $a_tpl->setVariable(
"COL_HEADER", $col);
1027 $a_tpl->parseCurrentBlock();
1030 foreach ($cols as $idx => $col) {
1032 $a_tpl->touchBlock(
"grid_col_nowrap_bl");
1035 $a_tpl->setCurrentBlock(
"grid_col_bl");
1036 $a_tpl->setVariable(
"COL_CAPTION", trim($col));
1037 $a_tpl->parseCurrentBlock();
1040 $a_tpl->touchBlock(
"grid_row_bl");
1048 if (array_key_exists(
"", $texts)) {
1049 $a_tpl->setVariable(
"TEXT_HEADING", $this->lng->txt(
"given_answers"));
1050 foreach ($texts[
""] as $item) {
1051 $a_tpl->setCurrentBlock(
"text_direct_item_bl");
1052 $a_tpl->setVariable(
"TEXT_DIRECT", nl2br(htmlentities($item)));
1053 $a_tpl->parseCurrentBlock();
1056 include_once
"Services/Accordion/classes/class.ilAccordionGUI.php";
1058 $acc->setId(
"svyevaltxt" . $question->getId());
1060 $a_tpl->setVariable(
"TEXT_HEADING", $this->lng->txt(
"freetext_answers"));
1062 foreach ($texts as $var => $items) {
1063 $list = array(
"<ul class=\"small\">");
1064 foreach ($items as $item) {
1065 $list[] =
"<li>" . nl2br(htmlentities($item)) .
"</li>";
1068 $acc->addItem($var, implode(
"\n",
$list));
1071 $a_tpl->setVariable(
"TEXT_ACC", $acc->getHTML());
1076 if ($a_details_parts ==
"c" ||
1077 $a_details_parts ==
"tc") {
1078 $chart = $a_eval->
getChart($a_results);
1080 if (is_array($chart)) {
1082 if (is_array($chart[1])) {
1083 foreach ($chart[1] as $legend_item) {
1084 $r = hexdec(substr($legend_item[1], 1, 2));
1085 $g = hexdec(substr($legend_item[1], 3, 2));
1086 $b = hexdec(substr($legend_item[1], 5, 2));
1088 $a_tpl->setCurrentBlock(
"legend_bl");
1089 $a_tpl->setVariable(
"LEGEND_CAPTION", $legend_item[0]);
1090 $a_tpl->setVariable(
"LEGEND_COLOR", $legend_item[1]);
1091 $a_tpl->setVariable(
"LEGEND_COLOR_SVG",
$r .
"," . $g .
"," . $b);
1092 $a_tpl->parseCurrentBlock();
1098 $a_tpl->setVariable(
"CHART", $chart);
1101 $panel = $ui_factory->panel()->sub(
"", $ui_factory->legacy($a_tpl->get()));
1102 array_push($this->array_panels, $panel);
1116 $svy_mode = $this->
object->getMode();
1122 $options[
""] = $this->lng->txt(
"please_select");
1126 if ($this->object->get360Mode()) {
1127 foreach ($this->object->getAppraiseesData() as $item) {
1128 if ($item[
"closed"]) {
1129 $options[$item[
"user_id"]] = $item[
"login"];
1134 foreach ($this->object->getSurveyParticipants() as $item) {
1141 if (
$rbacsystem->checkAccess(
"write", $this->object->getRefId()) ||
1144 include_once(
"./Services/Form/classes/class.ilSelectInputGUI.php");
1145 $appr =
new ilSelectInputGUI($this->lng->txt(
"svy_participant"),
"appr_id");
1148 $ilToolbar->addInputItem($appr,
true);
1150 include_once
"Services/UIComponent/Button/classes/class.ilSubmitButton.php";
1152 $button->setCaption(
"survey_360_select_appraisee");
1153 $button->setCommand($this->ctrl->getCmd());
1154 $ilToolbar->addButtonInstance($button);
1157 $ilToolbar->addSeparator();
1178 $resultarray = array();
1179 foreach (
$row as $rowindex => $entry) {
1180 if (is_array($entry)) {
1181 $entry = implode(
"/", $entry);
1187 if (strpos($entry,
"\"") !==
false) {
1188 $entry = str_replace(
"\"",
"\"\"", $entry);
1191 if (strpos($entry, $separator) !==
false) {
1195 $entry = str_replace(chr(13) . chr(10), chr(10), $entry);
1197 $resultarray[$rowindex] = utf8_decode(
"\"" . $entry .
"\"");
1199 $resultarray[$rowindex] = utf8_decode($entry);
1202 return $resultarray;
1210 $title_row = $title_row2 = array();
1211 $title_row[] = $this->lng->txt(
"lastname");
1212 $title_row[] = $this->lng->txt(
"firstname");
1213 $title_row[] = $this->lng->txt(
"login");
1214 $title_row[] = $this->lng->txt(
'workingtime');
1215 $title_row[] = $this->lng->txt(
'survey_results_finished');
1221 if ($this->object->canExportSurveyCode()) {
1222 $title_row[] = $this->lng->txt(
"codes");
1226 $questions = array();
1228 include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
1229 foreach ($this->object->getSurveyQuestions() as $qdata) {
1231 $q_res = $q_eval->getResults();
1233 $questions[$qdata[
"question_id"]] = array($q_eval, $q_res);
1235 $question = is_array($q_res)
1236 ? $q_res[0][1]->getQuestion()
1237 : $q_res->getQuestion();
1239 $do_title = $do_label =
true;
1240 switch (
$_POST[
'export_label']) {
1242 $title_row[] = $question->label;
1248 $title_row[] = $question->getTitle();
1254 $title_row[] = $question->getTitle();
1255 $title_row2[] = $question->label;
1259 $q_eval->getUserSpecificVariableTitles($title_row, $title_row2, $do_title, $do_label);
1265 $rows[] = $title_row;
1266 if (implode(
"", $title_row2)) {
1267 $rows[] = $title_row2;
1273 $finished_ids = null;
1274 if ($this->object->get360Mode()) {
1277 $this->ctrl->redirect($this,
"evaluationuser");
1279 $finished_ids = $this->
object->getFinishedIdsForAppraiseeId(
$appr_id);
1280 if (!
sizeof($finished_ids)) {
1281 $finished_ids = array(-1);
1288 include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
1289 foreach ($participants as
$user) {
1290 $user_id = $user[
"active_id"];
1293 $row[] = trim($user[
"lastname"])
1296 $row[] = $user[
"firstname"];
1297 $row[] = $user[
"login"];
1299 if ($this->object->canExportSurveyCode()) {
1303 $row[] = $this->
object->getWorkingtimeForParticipant($user_id);
1305 if ((
bool) $user[
"finished"]) {
1307 $row[] = (
$_POST[
"export_format"] == self::TYPE_XLS)
1314 foreach ($questions as $item) {
1318 $q_eval->addUserSpecificResults(
$row, $user_id, $q_res);
1325 $surveyname = $this->
object->getTitle() .
" " . $this->lng->txt(
"svy_eval_user") .
" " . date(
"Y-m-d");
1326 $surveyname = preg_replace(
"/\s/",
"_", trim($surveyname));
1329 switch (
$_POST[
"export_format"]) {
1330 case self::TYPE_XLS:
1331 include_once
"Services/Excel/classes/class.ilExcel.php";
1333 $excel->addSheet($this->lng->txt(
"svy_eval_user"));
1336 foreach (
$row as $col_idx => $col) {
1337 $excel->setCell($row_idx + 1, $col_idx, $col);
1340 $excel->setBold(
"A1:" . $excel->getColumnCoord(
sizeof(
$row) - 1) .
"1");
1343 $excel->sendToClient($surveyname);
1349 foreach (
$rows as $csvrow) {
1350 $csvrow = str_replace(
"\n",
" ", $this->
processCSVRow($csvrow,
true, $separator));
1351 $csv .= join($separator, $csvrow) .
"\n";
1373 $this->ctrl->redirectByClass(
"ilObjSurveyGUI",
"infoScreen");
1376 include_once
"Services/Form/classes/class.ilPropertyFormGUI.php";
1377 $ilToolbar->setFormAction($this->ctrl->getFormAction($this,
"evaluationuser"));
1379 if ($this->object->get360Mode()) {
1385 if (!$this->object->get360Mode() ||
$appr_id) {
1386 $modal_id =
"svy_ev_exp";
1389 include_once
"Services/UIComponent/Button/classes/class.ilLinkButton.php";
1391 $button->setCaption(
"export");
1392 $button->setOnClick(
'$(\'#' . $modal_id .
'\').modal(\
'show\')');
1393 $ilToolbar->addButtonInstance($button);
1395 $ilToolbar->addSeparator();
1397 include_once
"Services/UIComponent/Button/classes/class.ilLinkButton.php";
1399 $button->setCaption(
"print");
1400 $button->setOnClick(
"window.print(); return false;");
1401 $button->setOmitPreventDoubleSubmission(
true);
1402 $ilToolbar->addButtonInstance($button);
1404 $finished_ids = null;
1406 $finished_ids = $this->
object->getFinishedIdsForAppraiseeId(
$appr_id);
1407 if (!
sizeof($finished_ids)) {
1408 $finished_ids = array(-1);
1423 include_once
"./Modules/Survey/classes/tables/class.ilSurveyResultsUserTableGUI.php";
1426 $this->tpl->setContent($table_gui->getHTML() . $modal);
1431 $all_participants = $this->
object->getSurveyParticipants($a_finished_ids);
1432 $participant_ids = [];
1433 foreach ($all_participants as $participant) {
1434 $participant_ids[] = $participant[
'usr_id'];
1438 $filtered_participant_ids = $this->access->filterUserIdsByRbacOrPositionOfCurrentUser(
1441 $this->object->getRefId(),
1445 foreach ($all_participants as $username => $user_data) {
1446 if (!$user_data[
'usr_id']) {
1447 $participants[$username] = $user_data;
1449 if (in_array($user_data[
'usr_id'], $filtered_participant_ids)) {
1450 $participants[$username] = $user_data;
1453 return $participants;
1464 include_once
"./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
1465 foreach ($this->object->getSurveyQuestions() as $qdata) {
1467 $q_res = $q_eval->getResults();
1470 if (is_array($q_res) && !is_object($q_res[0][1])) {
1474 $question = is_array($q_res)
1475 ? $q_res[0][1]->getQuestion()
1476 : $q_res->getQuestion();
1478 foreach ($participants as
$user) {
1479 $user_id = $user[
"active_id"];
1481 $parsed_results = $q_eval->parseUserSpecificResults($q_res, $user_id);
1483 if (!array_key_exists($user_id,
$data)) {
1484 $wt = $this->
object->getWorkingtimeForParticipant($user_id);
1486 $finished = $user[
"finished"]
1487 ? $user[
"finished_tstamp"]
1490 $data[$user_id] = array(
1491 "username" => $user[
"sortname"],
1492 "question" => $question->getTitle(),
1493 "results" => $parsed_results,
1494 "workingtime" => $wt,
1495 "finished" => $finished,
1496 "subitems" => array()
1499 $data[$user_id][
"subitems"][] = array(
1501 "question" => $question->getTitle(),
1502 "results" => $parsed_results,
1503 "workingtime" => null,
1530 $ilTabs->activateSubtab(
"svy_eval_competences");
1531 $ilTabs->activateTab(
"svy_results");
1533 $ilToolbar->setFormAction($this->ctrl->getFormAction($this,
"competenceEval"));
1545 $eval_modes = array();
1548 include_once(
"./Modules/Survey/classes/class.ilSurveySkill.php");
1550 $opts = $sskill->getAllAssignedSkillsAsOptions();
1552 foreach ($opts as
$id => $o) {
1553 $idarr = explode(
":",
$id);
1554 $skills[
$id] = array(
"id" =>
$id,
"title" => $o,
"profiles" => array(),
1555 "base_skill" => $idarr[0],
"tref_id" => $idarr[1]);
1561 include_once(
"./Services/Skill/classes/class.ilSkillProfile.php");
1563 foreach ($profiles as $p) {
1565 $prof_levels = $prof->getSkillLevels();
1566 foreach ($prof_levels as $pl) {
1567 if (isset($skills[$pl[
"base_skill_id"] .
":" . $pl[
"tref_id"]])) {
1568 $skills[$pl[
"base_skill_id"] .
":" . $pl[
"tref_id"]][
"profiles"][] =
1571 $eval_modes[
"gap_" . $p[
"id"]] =
1572 $lng->txt(
"svy_gap_analysis") .
": " . $prof->getTitle();
1582 foreach ($skills as $sk) {
1583 if (count($sk[
"profiles"]) == 0) {
1584 $eval_modes[
"skills_of_survey"] =
$lng->txt(
"svy_all_survey_competences");
1589 $comp_eval_mode =
$_GET[
"comp_eval_mode"];
1590 if (
$_POST[
"comp_eval_mode"] !=
"") {
1591 $comp_eval_mode =
$_POST[
"comp_eval_mode"];
1594 if (!isset($eval_modes[$comp_eval_mode])) {
1596 $comp_eval_mode = key($eval_modes);
1597 $ilCtrl->setParameter($this,
"comp_eval_mode", $comp_eval_mode);
1600 $ilCtrl->saveParameter($this,
"comp_eval_mode");
1602 include_once(
"./Services/Form/classes/class.ilSelectInputGUI.php");
1605 $mode_sel->setValue($comp_eval_mode);
1606 $ilToolbar->addInputItem($mode_sel,
true);
1608 $ilToolbar->addFormButton(
$lng->txt(
"select"),
"competenceEval");
1610 if (substr($comp_eval_mode, 0, 4) ==
"gap_") {
1612 $profile_id = (int) substr($comp_eval_mode, 4);
1614 include_once(
"./Services/Skill/classes/class.ilPersonalSkillsGUI.php");
1616 $pskills_gui->setProfileId($profile_id);
1617 $pskills_gui->setGapAnalysisActualStatusModePerObject($survey->getId(),
$lng->txt(
"skmg_eval_type_1"));
1618 if ($survey->getFinishedIdForAppraiseeIdAndRaterId(
$appr_id,
$appr_id) > 0) {
1620 $self_levels = array();
1621 foreach ($sskill->determineSkillLevelsForAppraisee(
$appr_id,
true) as $sl) {
1622 $self_levels[$sl[
"base_skill_id"]][$sl[
"tref_id"]] = $sl[
"new_level_id"];
1624 $pskills_gui->setGapAnalysisSelfEvalLevels($self_levels);
1630 include_once(
"./Services/Skill/classes/class.ilPersonalSkillsGUI.php");
1634 $pskills_gui->setGapAnalysisActualStatusModePerObject($survey->getId(),
$lng->txt(
"skmg_eval_type_1"));
1636 if ($survey->getFinishedIdForAppraiseeIdAndRaterId(
$appr_id,
$appr_id) > 0) {
1638 $self_levels = array();
1639 foreach ($sskill->determineSkillLevelsForAppraisee(
$appr_id,
true) as $sl) {
1640 $self_levels[$sl[
"base_skill_id"]][$sl[
"tref_id"]] = $sl[
"new_level_id"];
1642 $pskills_gui->setGapAnalysisSelfEvalLevels($self_levels);
1645 foreach ($skills as $skill) {
1647 "base_skill_id" => (
int) $skill[
"base_skill"],
1648 "tref_id" => (
int) $skill[
"tref_id"]
1662 return $this->access->checkRbacOrPositionPermissionAccess(
'read_results',
'access_results', $this->object->getRefId());
static deliverData($a_data, $a_filename, $mime="application/octet-stream", $charset="")
deliver data for download via browser.
getExportGrid($a_results)
Get grid data.
parseResultsToExcel(ilExcel $a_excel, ilSurveyEvaluationResults $a_results, &$a_excel_row, array $a_grid=null, array $a_text_answers=null, $a_include_mode=true)
if(isset($_REQUEST['delete'])) $list
exportResultsDetailsExcel(ilExcel $a_excel, SurveyQuestionEvaluation $a_eval, $a_results, $a_do_title, $a_do_label)
Export details (excel only)
setEvalSubtabs()
Set the tabs for the evaluation output.
evaluationuser()
Print the survey evaluation for a selected user.
const EVALUATION_ACCESS_OFF
Skill management settings.
const EVALUATION_ACCESS_PARTICIPANTS
renderDetails($a_details_parts, $a_details_figure, array $a_qdata, SurveyQuestionEvaluation $a_eval, $a_results)
Render details.
cancelEvaluationAccess()
Cancels the input of the survey access code for evaluation access.
static _getStaticLink( $a_ref_id, $a_type='', $a_fallback_goto=true, $append="")
Get static link.
setAppraiseeId($a_val)
Set appraisee id.
if(!array_key_exists('StateId', $_REQUEST)) $id
static _lookupId($a_user_str)
Lookup id by login.
static setUseRelativeDates($a_status)
set use relative dates
addApprSelectionToToolbar()
Add appraisee selection to toolbar.
Survey question evaluation.
parseUserSpecificResults(array $a_finished_ids=null)
static _getQuestionTypeName($type_tag)
Return the translation for a given question type tag.
exportCumulatedResults($details=0)
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
getAppraiseeId()
Get appraisee id.
static formatDate(ilDateTime $date, $a_skip_day=false, $a_include_wd=false, $include_seconds=false)
Format a date public.
checkEvaluationAccess()
Checks the evaluation access after entering the survey access code.
Survey evaluation answers.
Skill/Competence handling in surveys.
processCSVRow($row, $quoteAll=false, $separator=";")
Processes an array as a CSV row and converts the array values to correct CSV values.
getGrid($a_results, $a_abs=true, $a_perc=true)
Get grid data.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
hasResultsAccess()
Check if user can view results granted by rbac or positions.
Personal skills GUI class.
static getProfilesOfUser($a_user_id)
Get profiles of a user.
if(isset($_POST['submit'])) $form
addSheet($a_name, $a_activate=true)
Add sheet.
setBold($a_coords)
Set cell(s) to bold.
static _instanciateQuestionEvaluation($question_id, array $a_finished_ids=null)
Creates an instance of a question evaluation with a given question id.
static _lookupObjId($a_id)
special template class to simplify handling of ITX/PEAR
buildExportModal($a_id, $a_cmd)
competenceEval()
Competence Evaluation.
getCoordByColumnAndRow($pColumn=1, $pRow=1)
Get cell coordinate (e.g.
checkAnonymizedEvaluationAccess()
Show the detailed evaluation.
setCell($a_row, $a_col, $a_value, $a_datatype=null)
Set cell value.
static _getQuestionblock($questionblock_id)
Returns the database row for a given question block.
filterSurveyParticipantsByAccess($a_finished_ids)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
const EVALUATION_ACCESS_ALL
static _hasEvaluationAccess($a_obj_id, $user_id)
static getInstance()
Get instance.
setColors($a_coords, $a_background, $a_font=null)
Set cell(s) colors.
__construct($a_object)
ilSurveyEvaluationGUI constructor
executeCommand()
execute command
static getLogger($a_component_id)
Get component logger.
Survey evaluation graphical output.
evaluationdetails()
Show the detailed evaluation.
Accordion user interface class.
const RESULTS_SELF_EVAL_ALL
determineAppraiseeId()
Determine appraisee id.
getChart($a_results)
Get chart.
getTextAnswers($a_results)
Get text answers.