ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilSurveyExecutionGUI.php
Go to the documentation of this file.
1<?php
2 /*
3 +----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2001 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +----------------------------------------------------------------------------+
22*/
23
36{
40 protected $rbacsystem;
41
45 protected $user;
46
50 protected $help;
51
55 protected $toolbar;
56
57 public $object;
58 public $lng;
59 public $tpl;
60 public $ctrl;
61 public $tree;
62 public $preview;
63
67 protected $log;
68
77 public function __construct($a_object)
78 {
79 global $DIC;
80
81 $this->rbacsystem = $DIC->rbac()->system();
82 $this->user = $DIC->user();
83 $this->help = $DIC["ilHelp"];
84 $this->toolbar = $DIC->toolbar();
85 $lng = $DIC->language();
86 $tpl = $DIC["tpl"];
87 $ilCtrl = $DIC->ctrl();
88 $tree = $DIC->repositoryTree();
89
90 $this->lng = $lng;
91 $this->tpl = $tpl;
92 $this->ctrl = $ilCtrl;
93 $this->object = $a_object;
94 $this->tree = $tree;
95
96 $this->external_rater_360 = false;
97 if ($this->object->get360Mode() &&
98 $_SESSION["anonymous_id"][$this->object->getId()] &&
100 $this->object->getRefId(),
101 $_SESSION["anonymous_id"][$this->object->getId()]
102 )) {
103 $this->external_rater_360 = true;
104 }
105
106 // stay in preview mode
107 $this->preview = (bool) $_REQUEST["prvw"];
108 $this->ctrl->saveParameter($this, "prvw");
109 $this->ctrl->saveParameter($this, "pgov");
110
111 $this->log = ilLoggerFactory::getLogger("svy");
112 }
113
117 public function executeCommand()
118 {
119 // record read event for lp
121 'svy',
122 $this->object->getRefId(),
123 $this->object->getId(),
124 $GLOBALS['DIC']->user()->getId()
125 );
126
127 $cmd = $this->ctrl->getCmd();
128 $next_class = $this->ctrl->getNextClass($this);
129
130 $cmd = $this->getCommand($cmd);
131
132 $this->log->debug("- cmd= " . $cmd);
133
134 if (strlen($cmd) == 0) {
135 $this->ctrl->setParameter($this, "qid", $_GET["qid"]);
136 $this->ctrl->redirect($this, "gotoPage");
137 }
138 switch ($next_class) {
139 default:
140 $ret = &$this->$cmd();
141 break;
142 }
143 return $ret;
144 }
145
146 protected function checkAuth($a_may_start = false, $a_ignore_status = false)
147 {
150
151 if ($this->preview) {
152 if (!$rbacsystem->checkAccess("write", $this->object->ref_id)) {
153 // only with write access it is possible to preview the survey
154 include_once "Modules/Survey/exceptions/class.ilSurveyException.php";
155 throw new ilSurveyException($this->lng->txt("survey_cannot_preview_survey"));
156 }
157
158 return true;
159 }
160
161 if (!$this->external_rater_360 &&
162 !$rbacsystem->checkAccess("read", $this->object->ref_id)) {
163 // only with read access it is possible to run the test
164 include_once "Modules/Survey/exceptions/class.ilSurveyException.php";
165 throw new ilSurveyException($this->lng->txt("cannot_read_survey"));
166 }
167
168 $user_id = $ilUser->getId();
169
170 // check existing code
171 // see ilObjSurveyGUI::infoScreen()
172 $anonymous_id = $anonymous_code = null;
173 if ($this->object->getAnonymize() || !$this->object->isAccessibleWithoutCode()) {
174 $anonymous_code = $_SESSION["anonymous_id"][$this->object->getId()];
175 $anonymous_id = $this->object->getAnonymousIdByCode($anonymous_code);
176 if (!$anonymous_id) {
177 ilUtil::sendFailure(sprintf($this->lng->txt("error_retrieving_anonymous_survey"), $anonymous_code, true));
178 $this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
179 }
180 }
181
182 // appraisee validation
183 $appr_id = 0;
184 if ($this->object->get360Mode()) {
185 $appr_id = $_REQUEST["appr_id"];
186 if (!$appr_id) {
187 $appr_id = $_SESSION["appr_id"][$this->object->getId()];
188 }
189 // check if appraisee is valid
190 if ($anonymous_id) {
191 $appraisees = $this->object->getAppraiseesToRate(0, $anonymous_id);
192 }
193 if (!$appraisees && $user_id != ANONYMOUS_USER_ID) {
194 $appraisees = $this->object->getAppraiseesToRate($user_id);
195 }
196 if (!in_array($appr_id, $appraisees)) {
197 ilUtil::sendFailure($this->lng->txt("survey_360_execution_invalid_appraisee"), true);
198 $this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
199 }
200 }
201 //Self evaluation mode
202 #23575 in self eval the appraisee is the current user.
203 if ($this->object->getMode() == ilObjSurvey::MODE_SELF_EVAL) {
204 $appr_id = $ilUser->getId();
205 }
206
207 $_SESSION["appr_id"][$this->object->getId()] = $appr_id;
208
209 if (!$a_ignore_status) {
210 $status = $this->object->isSurveyStarted($user_id, $anonymous_code, $appr_id);
211 // completed
212 if ($status === 1) {
213 ilUtil::sendFailure($this->lng->txt("already_completed_survey"), true);
214 $this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
215 }
216 // starting
217 elseif ($status === false) {
218 if ($a_may_start) {
219 $_SESSION["finished_id"][$this->object->getId()] =
220 $this->object->startSurvey($user_id, $anonymous_code, $appr_id);
221 } else {
222 ilUtil::sendFailure($this->lng->txt("survey_use_start_button"), true);
223 $this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
224 }
225 }
226 // resuming
227 else {
228 // nothing todo
229 }
230 }
231
232 // validate finished id
233 if ($this->object->getActiveID($user_id, $anonymous_code, $appr_id) !=
234 $_SESSION["finished_id"][$this->object->getId()]) {
235 ilUtil::sendFailure($this->lng->txt("cannot_read_survey"), true);
236 $this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
237 }
238 }
239
247 public function getCommand($cmd)
248 {
249 return $cmd;
250 }
251
259 public function resume()
260 {
261 $this->start(true);
262 }
263
271 public function start($resume = false)
272 {
273 if ($this->preview) {
274 unset($_SESSION["preview_data"]);
275 }
276 unset($_SESSION["svy_errors"]);
277
278 $this->checkAuth(!$resume);
279
280 $activepage = "";
281 if ($resume) {
282 $activepage = $this->object->getLastActivePage($_SESSION["finished_id"][$this->object->getId()]);
283 }
284
285 if (strlen($activepage)) {
286 $this->ctrl->setParameter($this, "qid", $activepage);
287 }
288 $this->ctrl->setParameter($this, "activecommand", "default");
289 $this->ctrl->redirect($this, "redirectQuestion");
290 }
291
298 public function redirectQuestion()
299 {
300 switch ($_GET["activecommand"]) {
301 case "next":
302 $this->outSurveyPage($_GET["qid"], $_GET["direction"]);
303 break;
304 case "previous":
305 $this->outSurveyPage($_GET["qid"], $_GET["direction"]);
306 break;
307 case "gotoPage":
308 $this->outSurveyPage($_GET["qid"], $_GET["direction"]);
309 break;
310 case "default":
311 $this->outSurveyPage($_GET["qid"]);
312 break;
313 default:
314 // don't save input, go to the first page
315 $this->outSurveyPage();
316 break;
317 }
318 }
319
320 public function previousNoSave()
321 {
322 $this->previous(false);
323 }
324
332 public function previous($a_save_input = true)
333 {
334 if ($a_save_input) {
335 // #16209
336 $has_error = $this->saveUserInput("previous");
337 }
338 $this->ctrl->setParameter($this, "activecommand", "previous");
339 $this->ctrl->setParameter($this, "qid", $_GET["qid"]);
340 if (strlen($has_error)) {
341 $this->ctrl->setParameter($this, "direction", "0");
342 } else {
343 $this->ctrl->setParameter($this, "direction", "-1");
344 }
345 $this->ctrl->redirect($this, "redirectQuestion");
346 }
347
353 public function next()
354 {
355 $result = $this->saveUserInput("next");
356 $this->ctrl->setParameter($this, "activecommand", "next");
357 $this->ctrl->setParameter($this, "qid", $_GET["qid"]);
358 if (strlen($result)) {
359 $this->ctrl->setParameter($this, "direction", "0");
360 } else {
361 $this->ctrl->setParameter($this, "direction", "1");
362 }
363 $this->ctrl->redirect($this, "redirectQuestion");
364 }
365
371 public function gotoPage()
372 {
373 $this->ctrl->setParameter($this, "activecommand", "gotoPage");
374 $this->ctrl->setParameter($this, "qid", $_GET["qid"]);
375 $this->ctrl->setParameter($this, "direction", "0");
376 $this->ctrl->redirect($this, "redirectQuestion");
377 }
378
386 public function outSurveyPage($activepage = null, $direction = null)
387 {
389
390 $this->checkAuth();
391
392 $page = $this->object->getNextPage($activepage, $direction);
393 $constraint_true = 0;
394
395 // check for constraints
396 if (is_array($page[0]["constraints"]) && count($page[0]["constraints"])) {
397 $this->log->debug("Page constraints= ", $page[0]["constraints"]);
398
399 while (is_array($page) and ($constraint_true == 0) and (count($page[0]["constraints"]))) {
400 $constraint_true = ($page[0]['constraints'][0]['conjunction'] == 0) ? true : false;
401 foreach ($page[0]["constraints"] as $constraint) {
402 if (!$this->preview) {
403 $working_data = $this->object->loadWorkingData($constraint["question"], $_SESSION["finished_id"][$this->object->getId()]);
404 } else {
405 $working_data = $_SESSION["preview_data"][$this->object->getId()][$constraint["question"]];
406 }
407 if ($constraint['conjunction'] == 0) {
408 // and
409 $constraint_true = $constraint_true & $this->object->checkConstraint($constraint, $working_data);
410 } else {
411 // or
412 $constraint_true = $constraint_true | $this->object->checkConstraint($constraint, $working_data);
413 }
414 }
415 if ($constraint_true == 0) {
416 // #11047 - we are skipping the page, so we have to get rid of existing answers for that question(s)
417 foreach ($page as $page_question) {
418 $qid = $page_question["question_id"];
419
420 // see saveActiveQuestionData()
421 if (!$this->preview) {
422 $this->object->deleteWorkingData($qid, $_SESSION["finished_id"][$this->object->getId()]);
423 } else {
424 $_SESSION["preview_data"][$this->object->getId()][$qid] = null;
425 }
426 }
427
428 $page = $this->object->getNextPage($page[0]["question_id"], $direction);
429 }
430 }
431 }
432
433 $first_question = -1;
434 if ($page === 0) {
435 $this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
436 } elseif ($page === 1) {
437 $state = $this->object->getUserSurveyExecutionStatus();
438 if ($this->preview ||
439 !$state["runs"][$_SESSION["finished_id"][$this->object->getId()]]["finished"]) {
440 $this->showFinishConfirmation();
441 } else {
442 $this->runShowFinishedPage();
443 }
444 return;
445 } else {
446 $ilHelp = $this->help;
447 $ilHelp->setScreenIdComponent("svy");
448 $ilHelp->setScreenId("quest_presentation");
449
450 if ($ilUser->getId() != ANONYMOUS_USER_ID) {
451 include_once "Services/Tracking/classes/class.ilLearningProgress.php";
452 ilLearningProgress::_tracProgress($ilUser->getId(), $this->object->getId(), $this->object->ref_id, "svy");
453 }
454
455 $required = false;
456 $this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.il_svy_svy_content.html", "Modules/Survey");
457
458 if ($this->object->get360Mode()) {
459 $appr_id = $_SESSION["appr_id"][$this->object->getId()];
460
461 include_once "Services/User/classes/class.ilUserUtil.php";
462 $this->tpl->setTitle($this->object->getTitle() . " (" .
463 $this->lng->txt("survey_360_appraisee") . ": " .
464 ilUserUtil::getNamePresentation($appr_id) . ")");
465 }
466
467 if (!($this->object->getAnonymize() && $this->object->isAccessibleWithoutCode() && ($ilUser->getId() == ANONYMOUS_USER_ID))) {
468 $this->tpl->setCurrentBlock("suspend_survey");
469
470 if (!$this->preview) {
471 $this->tpl->setVariable("TEXT_SUSPEND", $this->lng->txt("cancel_survey"));
472 $this->tpl->setVariable("HREF_SUSPEND", $this->ctrl->getLinkTargetByClass("ilObjSurveyGUI", "infoScreen"));
473 } else {
474 $this->ctrl->setParameterByClass("ilObjSurveyGUI", "pgov", $_REQUEST["pgov"]);
475 $this->tpl->setVariable("TEXT_SUSPEND", $this->lng->txt("survey_cancel_preview"));
476 $this->tpl->setVariable("HREF_SUSPEND", $this->ctrl->getLinkTargetByClass(array("ilObjSurveyGUI", "ilSurveyEditorGUI"), "questions"));
477 }
478
479 $this->tpl->setVariable("ALT_IMG_SUSPEND", $this->lng->txt("cancel_survey"));
480 $this->tpl->setVariable("TITLE_IMG_SUSPEND", $this->lng->txt("cancel_survey"));
481 $this->tpl->parseCurrentBlock();
482 }
483 $this->outNavigationButtons("top", $page);
484
485
486 $this->tpl->setCurrentBlock("percentage");
487
488 $percentage = (int) (($page[0]["position"]) * 100);
489
490 include_once "Services/UIComponent/ProgressBar/classes/class.ilProgressBar.php";
492 $pbar->setCurrent($percentage);
493 $this->tpl->setVariable("NEW_PBAR", $pbar->render());
494
495 $this->tpl->parseCurrentBlock();
496
497
498 if (count($page) > 1 && $page[0]["questionblock_show_blocktitle"]) {
499 $this->tpl->setCurrentBlock("questionblock_title");
500 $this->tpl->setVariable("TEXT_QUESTIONBLOCK_TITLE", $page[0]["questionblock_title"]);
501 $this->tpl->parseCurrentBlock();
502 }
503 foreach ($page as $data) {
504 $this->tpl->setCurrentBlock("survey_content");
505 if ($data["heading"]) {
506 $this->tpl->setVariable("QUESTION_HEADING", $data["heading"]);
507 }
508 if ($first_question == -1) {
509 $first_question = $data["question_id"];
510 }
511 $question_gui = $this->object->getQuestionGUI($data["type_tag"], $data["question_id"]);
512 if (is_array($_SESSION["svy_errors"])) {
513 $working_data = &$question_gui->object->getWorkingDataFromUserInput($_SESSION["postdata"]);
514 } else {
515 $working_data = $this->object->loadWorkingData($data["question_id"], $_SESSION["finished_id"][$this->object->getId()]);
516 }
517 $question_gui->object->setObligatory($data["obligatory"]);
518 $error_messages = array();
519 if (is_array($_SESSION["svy_errors"])) {
520 $error_messages = $_SESSION["svy_errors"];
521 }
522 $show_questiontext = ($data["questionblock_show_questiontext"]) ? 1 : 0;
523 $question_output = $question_gui->getWorkingForm($working_data, $this->object->getShowQuestionTitles(), $show_questiontext, $error_messages[$data["question_id"]], $this->object->getSurveyId());
524 $this->tpl->setVariable("QUESTION_OUTPUT", $question_output);
525 $this->ctrl->setParameter($this, "qid", $data["question_id"]);
526 $this->tpl->parse("survey_content");
527 if ($data["obligatory"]) {
528 $required = true;
529 }
530 }
531 if ($required) {
532 $this->tpl->setCurrentBlock("required");
533 $this->tpl->setVariable("TEXT_REQUIRED", $this->lng->txt("required_field"));
534 $this->tpl->parseCurrentBlock();
535 }
536
537 $this->outNavigationButtons("bottom", $page);
538
539 $this->tpl->setVariable("FORM_ACTION", $this->ctrl->getFormAction($this, "redirectQuestion"));
540 }
541
542 if (!$this->preview) {
543 $this->object->setPage($_SESSION["finished_id"][$this->object->getId()], $page[0]['question_id']);
544 $this->object->setStartTime($_SESSION["finished_id"][$this->object->getId()], $first_question);
545 }
546 }
547
553 public function saveUserInput($navigationDirection = "next")
554 {
555 if (!$this->preview) {
556 $this->object->setEndTime($_SESSION["finished_id"][$this->object->getId()]);
557 }
558
559 // check users input when it is a metric question
560 unset($_SESSION["svy_errors"]);
561 $_SESSION["postdata"] = $_POST;
562 $page_error = 0;
563 $page = $this->object->getNextPage($_GET["qid"], 0);
564 foreach ($page as $data) {
565 $page_error += $this->saveActiveQuestionData($data);
566 }
567 if ($page_error && (strcmp($navigationDirection, "previous") != 0)) {
568 if ($page_error == 1) {
569 ilUtil::sendFailure($this->lng->txt("svy_page_error"), true);
570 } else {
571 ilUtil::sendFailure($this->lng->txt("svy_page_errors"), true);
572 }
573 } else {
574 $page_error = "";
575 unset($_SESSION["svy_errors"]);
576 }
577 return $page_error;
578 }
579
587 /*
588 function navigate($navigationDirection = "next")
589 {
590 // check users input when it is a metric question
591 unset($_SESSION["svy_errors"]);
592 $page_error = 0;
593 $page = $this->object->getNextPage($_GET["qid"], 0);
594 foreach ($page as $data)
595 {
596 $page_error += $this->saveActiveQuestionData($data);
597 }
598 if ($page_error && (strcmp($navigationDirection, "previous") != 0))
599 {
600 if ($page_error == 1)
601 {
602 ilUtil::sendFailure($this->lng->txt("svy_page_error"));
603 }
604 else
605 {
606 ilUtil::sendFailure($this->lng->txt("svy_page_errors"));
607 }
608 }
609 else
610 {
611 $page_error = "";
612 unset($_SESSION["svy_errors"]);
613 }
614
615 $direction = 0;
616 switch ($navigationDirection)
617 {
618 case "next":
619 default:
620 $activepage = $_GET["qid"];
621 if (!$page_error)
622 {
623 $direction = 1;
624 }
625 break;
626 case "previous":
627 $activepage = $_GET["qid"];
628 if (!$page_error)
629 {
630 $direction = -1;
631 }
632 break;
633 }
634 $this->outSurveyPage($activepage, $direction);
635 }
636*/
637
646 {
648
649 include_once "./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
650 $question = &SurveyQuestion::_instanciateQuestion($data["question_id"]);
651 $error = $question->checkUserInput($_POST, $this->object->getSurveyId());
652 if (strlen($error) == 0) {
653 if (!$this->preview) {
654 // delete old answers
655 $this->object->deleteWorkingData($data["question_id"], $_SESSION["finished_id"][$this->object->getId()]);
656
657 $question->saveUserInput($_POST, $_SESSION["finished_id"][$this->object->getId()]);
658 } else {
659 $_SESSION["preview_data"][$this->object->getId()][$data["question_id"]] =
660 $question->saveUserInput($_POST, $_SESSION["finished_id"][$this->object->getId()], true);
661 }
662 return 0;
663 } else {
664 $_SESSION["svy_errors"][$question->getId()] = $error;
665 return 1;
666 }
667 }
668
676 public function cancel()
677 {
678 $this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
679 }
680
688 public function runShowFinishedPage()
689 {
690 $ilToolbar = $this->toolbar;
692
693 $has_button = false;
694
695 include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php";
696
697 if (!$this->preview) {
698 if ($this->object->hasViewOwnResults()) {
699 $button = ilLinkButton::getInstance();
700 $button->setCaption("svy_view_own_results");
701 $button->setUrl($this->ctrl->getLinkTarget($this, "viewUserResults"));
702 $ilToolbar->addButtonInstance($button);
703
704 $has_button = true;
705 }
706
707 if ($this->object->hasMailConfirmation()) {
708 if ($has_button) {
709 $ilToolbar->addSeparator();
710 }
711
712 if ($ilUser->getId() == ANONYMOUS_USER_ID ||
713 !$ilUser->getEmail()) {
714 require_once "Services/Form/classes/class.ilTextInputGUI.php";
715 $mail = new ilTextInputGUI($this->lng->txt("email"), "mail");
716 $mail->setSize(25);
717 $ilToolbar->addInputItem($mail, true);
718 }
719
720 $ilToolbar->setFormAction($this->ctrl->getFormAction($this, "mailUserResults"));
721
722 include_once "Services/UIComponent/Button/classes/class.ilSubmitButton.php";
723 $button = ilSubmitButton::getInstance();
724 $button->setCaption("svy_mail_send_confirmation");
725 $button->setCommand("mailUserResults");
726 $ilToolbar->addButtonInstance($button);
727
728 $has_button = true;
729 }
730
731 // #6307
732 include_once "Modules/Survey/classes/class.ilObjSurveyAccess.php";
733 if (ilObjSurveyAccess::_hasEvaluationAccess($this->object->getId(), $ilUser->getId())) {
734 $button = ilLinkButton::getInstance();
735 $button->setCaption("svy_results");
736 $button->setUrl($this->ctrl->getLinkTargetByClass("ilObjSurveyGUI", "evaluation"));
737 $ilToolbar->addButtonInstance($button);
738
739 $has_button = true;
740 }
741 }
742
743 if (!$has_button &&
744 strlen($this->object->getOutro()) == 0) {
745 $this->exitSurvey();
746 } else {
747 if ($has_button) {
748 $ilToolbar->addSeparator();
749 }
750
751 $button = ilLinkButton::getInstance();
752 $button->setCaption("survey_execution_exit");
753 $button->setUrl($this->ctrl->getLinkTarget($this, "exitSurvey"));
754 $ilToolbar->addButtonInstance($button);
755
756 if (strlen($this->object->getOutro())) {
757 include_once "Services/UIComponent/Panel/classes/class.ilPanelGUI.php";
758 $panel = ilPanelGUI::getInstance();
759 $panel->setBody($this->object->prepareTextareaOutput($this->object->getOutro()));
760 $this->tpl->setContent($panel->getHTML());
761 }
762 }
763 }
764
765 public function backToRepository()
766 {
768
769 // #14971
770 if ($this->object->get360Mode()) {
771 $target_ref_id = $this->object->getRefId();
772 } else {
773 // #11534
774 $target_ref_id = $tree->getParentId($this->object->getRefId());
775 }
776
777 include_once "Services/Link/classes/class.ilLink.php";
778 ilUtil::redirect(ilLink::_getLink($target_ref_id));
779 }
780
788 public function exitSurvey()
789 {
790 if (!$this->preview) {
791 $this->backToRepository();
792 } else {
793 // #12841
794 $this->ctrl->setParameterByClass("ilsurveyeditorgui", "pgov", $_REQUEST["pgov"]);
795 $this->ctrl->redirectByClass(array("ilobjsurveygui", "ilsurveyeditorgui"), "questions");
796 }
797 }
798
808 public function outNavigationButtons($navigationblock = "top", $page)
809 {
810 $prevpage = $this->object->getNextPage($page[0]["question_id"], -1);
811 $this->tpl->setCurrentBlock($navigationblock . "_prev");
812 if ($prevpage === 0) {
813 $this->tpl->setVariable("BTN_PREV", $this->lng->txt("survey_start"));
814 } else {
815 $this->tpl->setVariable("BTN_PREV", $this->lng->txt("survey_previous"));
816 }
817 $this->tpl->parseCurrentBlock();
818 $nextpage = $this->object->getNextPage($page[0]["question_id"], 1);
819 $this->tpl->setCurrentBlock($navigationblock . "_next");
820 if ($nextpage === 1) {
821 $this->tpl->setVariable("BTN_NEXT", $this->lng->txt("survey_finish"));
822 } else {
823 $this->tpl->setVariable("BTN_NEXT", $this->lng->txt("survey_next"));
824 }
825 $this->tpl->parseCurrentBlock();
826 }
827
828 public function preview()
829 {
830 $this->outSurveyPage();
831 }
832
833 public function viewUserResults()
834 {
835 $ilToolbar = $this->toolbar;
836
837 if (!$this->object->hasViewOwnResults()) {
838 $this->backToRepository();
839 }
840
841 $this->checkAuth(false, true);
842
843 include_once "Services/UIComponent/Button/classes/class.ilLinkButton.php";
844 $button = ilLinkButton::getInstance();
845 $button->setCaption("btn_back");
846 $button->setUrl($this->ctrl->getLinkTarget($this, "runShowFinishedPage"));
847 $ilToolbar->addButtonInstance($button);
848
849 $survey_gui = new ilObjSurveyGUI();
850 $html = $survey_gui->getUserResultsTable($_SESSION["finished_id"][$this->object->getId()]);
851 $this->tpl->setContent($html);
852 }
853
854 public function mailUserResults()
855 {
857
858 if (!$this->object->hasMailConfirmation()) {
859 $this->backToRepository();
860 }
861
862 $this->checkAuth(false, true);
863
864 $recipient = $_POST["mail"];
865 if (!$recipient) {
866 $recipient = $ilUser->getEmail();
867 }
868 if (!ilUtil::is_email($recipient)) {
869 $this->ctrl->redirect($this, "runShowFinishedPage");
870 }
871
872 $survey_gui = new ilObjSurveyGUI();
873 $survey_gui->sendUserResultsMail(
874 $_SESSION["finished_id"][$this->object->getId()],
875 $recipient
876 );
877
878 ilUtil::sendSuccess($this->lng->txt("mail_sent"), true);
879 $this->ctrl->redirect($this, "runShowFinishedPage");
880 }
881
882 public function showFinishConfirmation()
883 {
885
886 include_once("./Services/Utilities/classes/class.ilConfirmationGUI.php");
887 $cgui = new ilConfirmationGUI();
888 $cgui->setHeaderText($this->lng->txt("survey_execution_sure_finish"));
889
890 $cgui->setFormAction($this->ctrl->getFormAction($this, "confirmedFinish"));
891 $cgui->setCancel($this->lng->txt("cancel"), "previousNoSave");
892 $cgui->setConfirm($this->lng->txt("confirm"), "confirmedFinish");
893
894 $tpl->setContent($cgui->getHTML());
895 }
896
897 public function confirmedFinish()
898 {
900
901 if (!$this->preview) {
902 $this->object->finishSurvey($_SESSION["finished_id"][$this->object->getId()]);
903
904 if ($ilUser->getId() != ANONYMOUS_USER_ID) {
905 include_once "Services/Tracking/classes/class.ilLPStatusWrapper.php";
906 ilLPStatusWrapper::_updateStatus($this->object->getId(), $ilUser->getId());
907 }
908
909 if ($this->object->getMailNotification()) {
910 $this->object->sendNotificationMail(
911 $ilUser->getId(),
912 $_SESSION["anonymous_id"][$this->object->getId()],
913 $_SESSION["appr_id"][$this->object->getId()]
914 );
915 }
916 }
917
918 /*
919 unset($_SESSION["anonymous_id"][$this->object->getId()]);
920 unset($_SESSION["appr_id"][$this->object->getId()]);
921 unset($_SESSION["finished_id"][$this->object->getId()]);
922 */
923
924 $this->ctrl->redirect($this, "runShowFinishedPage");
925 }
926}
$result
user()
Definition: user.php:4
if(!array_key_exists('stateid', $_REQUEST)) $state
Handle linkback() response from LinkedIn.
Definition: linkback.php:10
$_GET["client_id"]
$_POST["username"]
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
static _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
static _recordReadEvent( $a_type, $a_ref_id, $obj_id, $usr_id, $isCatchupWriteEvents=true, $a_ext_rc=false, $a_ext_time=false)
Records a read event and catches up with write events.
Confirmation screen class.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
static _tracProgress($a_user_id, $a_obj_id, $a_ref_id, $a_obj_type='')
static getInstance()
Factory.
static getLogger($a_component_id)
Get component logger.
static _hasEvaluationAccess($a_obj_id, $user_id)
Class ilObjSurveyGUI.
static validateExternalRaterCode($a_ref_id, $a_code)
static getInstance()
Get instance.
static getInstance()
Factory.
static getInstance()
Factory.
Survey exception class.
Survey execution graphical output.
previous($a_save_input=true)
Navigates to the previous pages.
outNavigationButtons($navigationblock="top", $page)
Creates the navigation buttons for a survey.
getCommand($cmd)
Retrieves the ilCtrl command.
exitSurvey()
Exits the survey after finishing it.
saveUserInput($navigationDirection="next")
Save the user's input.
outSurveyPage($activepage=null, $direction=null)
Output of the active survey question to the screen.
redirectQuestion()
Called when a user answered a page to perform a redirect after POST.
saveActiveQuestionData(&$data)
Survey navigation.
next()
Navigates to the next pages.
checkAuth($a_may_start=false, $a_ignore_status=false)
gotoPage()
Go to a specific page without saving.
__construct($a_object)
ilSurveyExecutionGUI constructor
runShowFinishedPage()
Creates the finished page for a running survey.
start($resume=false)
Starts the survey.
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 redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static is_email($a_email, ilMailRfc822AddressParserFactory $mailAddressParserFactory=null)
This preg-based function checks whether an e-mail address is formally valid.
$html
Definition: example_001.php:87
global $ilCtrl
Definition: ilias.php:18
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
$ret
Definition: parser.php:6
global $DIC
Definition: saml.php:7
$error_messages
$ilUser
Definition: imgupload.php:18
$data
Definition: bench.php:6