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";
491  $pbar = ilProgressBar::getInstance();
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 
645  public function saveActiveQuestionData(&$data)
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  {
767  $tree = $this->tree;
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  {
884  $tpl = $this->tpl;
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 }
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.
getCommand($cmd)
Retrieves the ilCtrl command.
$error_messages
__construct($a_object)
ilSurveyExecutionGUI constructor
$_SESSION["AccountId"]
$result
outNavigationButtons($navigationblock="top", $page)
Creates the navigation buttons for a survey.
global $DIC
Definition: saml.php:7
static validateExternalRaterCode($a_ref_id, $a_code)
static is_email($a_email, ilMailRfc822AddressParserFactory $mailAddressParserFactory=null)
This preg-based function checks whether an e-mail address is formally valid.
$_GET["client_id"]
saveActiveQuestionData(&$data)
Survey navigation.
exitSurvey()
Exits the survey after finishing it.
static _updateStatus($a_obj_id, $a_usr_id, $a_obj=null, $a_percentage=false, $a_force_raise=false)
Update status.
saveUserInput($navigationDirection="next")
Save the user&#39;s input.
static _tracProgress($a_user_id, $a_obj_id, $a_ref_id, $a_obj_type='')
redirectQuestion()
Called when a user answered a page to perform a redirect after POST.
Survey exception class.
user()
Definition: user.php:4
global $ilCtrl
Definition: ilias.php:18
Class ilObjSurveyGUI.
if(!array_key_exists('stateid', $_REQUEST)) $state
Handle linkback() response from LinkedIn.
Definition: linkback.php:10
next()
Navigates to the next pages.
static getInstance()
Factory.
gotoPage()
Go to a specific page without saving.
Survey execution graphical output.
checkAuth($a_may_start=false, $a_ignore_status=false)
runShowFinishedPage()
Creates the finished page for a running survey.
setSize($a_size)
Set Size.
This class represents a text property in a property form.
$ilUser
Definition: imgupload.php:18
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 _instanciateQuestion($question_id)
Creates an instance of a question with a given question id.
previous($a_save_input=true)
Navigates to the previous pages.
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static _hasEvaluationAccess($a_obj_id, $user_id)
static getInstance()
Get instance.
start($resume=false)
Starts the survey.
$ret
Definition: parser.php:6
static getLogger($a_component_id)
Get component logger.
static redirect($a_script)
$_POST["username"]
$html
Definition: example_001.php:87
outSurveyPage($activepage=null, $direction=null)
Output of the active survey question to the screen.
$GLOBALS['JPEG_Segment_Names']
Global Variable: XMP_tag_captions.
Confirmation screen class.
$data
Definition: bench.php:6