32 protected \ILIAS\Survey\InternalGUIService
$gui;
37 protected \ILIAS\Survey\Execution\ExecutionGUIRequest
$request;
59 $this->rbacsystem =
$DIC->rbac()->system();
60 $this->
user = $DIC->user();
61 $this->
help = $DIC[
"ilHelp"];
62 $this->
toolbar = $DIC->toolbar();
65 $ilCtrl =
$DIC->ctrl();
70 $this->
ctrl = $ilCtrl;
71 $this->
object = $a_object;
73 $this->
user = $DIC->user();
75 $this->request =
$DIC->survey()
80 $this->gui =
$DIC->survey()
85 $this->
preview = (bool) $this->request->getPreview();
86 $this->requested_appr_id = $this->request->getAppraiseeId();
87 $this->
ctrl->saveParameter($this,
"prvw");
88 $this->
ctrl->saveParameter($this,
"appr_id");
89 $this->
ctrl->saveParameter($this,
"pgov");
93 $domain_service =
$DIC->survey()->internal();
95 ? $this->
user->getId()
97 $this->run_manager = $domain_service->domain()->execution()->run(
102 $this->participant_manager = $domain_service->domain()->participants()->status(
106 $this->access_manager = $domain_service->domain()->access(
111 $this->feature_config = $domain_service->domain()->modeFeatureConfig($a_object->
getMode());
116 $this->raw_post_data =
$DIC->http()->request()->getParsedBody() ?? [];
124 $this->
object->getRefId(),
125 $this->object->getId(),
129 $cmd = $this->
ctrl->getCmd();
130 $next_class = $this->
ctrl->getNextClass($this);
132 $this->log->debug(
"- cmd= " . $cmd);
134 if ($cmd ===
null || $cmd ===
'') {
135 $this->
ctrl->setParameter(
138 $this->request->getQuestionId()
140 $this->
ctrl->redirect($this,
"gotoPage");
142 switch ($next_class) {
144 $ret = $this->$cmd();
147 return (
string) $ret;
151 bool $a_may_start =
false,
152 bool $a_ignore_status =
false
157 if (!$rbacsystem->
checkAccess(
"write", $this->object->getRefId())) {
165 if (!$this->access_manager->canStartSurvey()) {
174 $anonymous_id =
null;
175 $anonymous_code =
"";
176 if ($this->access_manager->useCodeFromSession()) {
178 $anonymous_code = $this->run_manager->getCode();
179 $anonymous_id = $this->
object->getAnonymousIdByCode($anonymous_code);
180 if (!$anonymous_id) {
181 $this->tpl->setOnScreenMessage(
'failure', sprintf($this->
lng->txt(
"error_retrieving_anonymous_survey"), $anonymous_code,
true));
182 $this->
ctrl->redirectByClass(
"ilobjsurveygui",
"run");
189 if ($this->feature_config->usesAppraisees()) {
196 $appraisees = $this->
object->getAppraiseesToRate(0, $anonymous_id);
199 $appraisees = $this->
object->getAppraiseesToRate(
$user_id);
201 if (!in_array($appr_id, $appraisees)) {
202 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"survey_360_execution_invalid_appraisee"),
true);
203 $this->
ctrl->redirectByClass(
"ilobjsurveygui",
"run");
207 #23575 in self eval the appraisee is the current user.
209 $appr_id = $ilUser->getId();
214 if (!$a_ignore_status) {
216 if ($this->run_manager->hasFinished()) {
217 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"already_completed_survey"),
true);
218 $this->
ctrl->redirectByClass(
"ilobjsurveygui",
"run");
221 elseif (!$this->run_manager->hasStarted()) {
225 $this->run_manager->start($appr_id);
227 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"survey_use_start_button"),
true);
228 $this->
ctrl->redirectByClass(
"ilobjsurveygui",
"run");
246 if ($this->
object->getActiveID(
$user_id, $anonymous_code, $appr_id) !==
247 $this->run_manager->getCurrentRunId()) {
257 public function start(
bool $resume =
false): void
260 $this->run_manager->clearAllPreviewData();
262 $this->run_manager->clearErrors();
264 $this->checkAuth(!$resume);
268 $activepage = $this->
object->getLastActivePage(
269 $this->getCurrentRunId()
273 if ((
string) $activepage !==
'') {
274 $this->
ctrl->setParameter($this,
"qid", (
string) $activepage);
276 $this->
ctrl->setParameter($this,
"activecommand",
"default");
277 $this->
ctrl->redirect($this,
"redirectQuestion");
286 switch ($this->request->getActiveCommand()) {
290 $this->outSurveyPage(
291 $this->request->getQuestionId(),
292 $this->request->getDirection()
296 $this->outSurveyPage($this->request->getQuestionId());
300 $this->outSurveyPage();
307 $this->previous(
false);
311 bool $a_save_input =
true
316 $has_error = $this->saveUserInput(
"previous");
318 $this->
ctrl->setParameter($this,
"activecommand",
"previous");
319 $this->
ctrl->setParameter($this,
"qid", $this->request->getQuestionId());
320 if ($has_error > 0) {
321 $this->
ctrl->setParameter($this,
"direction",
"0");
323 $this->
ctrl->setParameter($this,
"direction",
"-1");
325 $this->
ctrl->redirect($this,
"redirectQuestion");
333 $result = $this->saveUserInput(
"next");
334 $this->
ctrl->setParameter($this,
"activecommand",
"next");
335 $this->
ctrl->setParameter($this,
"qid", $this->request->getQuestionId());
337 $this->
ctrl->setParameter($this,
"direction",
"0");
339 $this->
ctrl->setParameter($this,
"direction",
"1");
341 $this->
ctrl->redirect($this,
"redirectQuestion");
349 $this->
ctrl->setParameter($this,
"activecommand",
"gotoPage");
350 $this->
ctrl->setParameter($this,
"qid", $this->request->getQuestionId());
351 $this->
ctrl->setParameter($this,
"direction",
"0");
352 $this->
ctrl->redirect($this,
"redirectQuestion");
364 $ilUser = $this->
user;
367 $page = $this->
object->getNextPage($activepage, $direction);
368 $constraint_true = 0;
371 if (!is_null($page) && is_array($page[0][
"constraints"]) && count($page[0][
"constraints"])) {
372 $this->log->debug(
"Page constraints= ", $page[0][
"constraints"]);
374 while (!is_null($page) and ($constraint_true == 0) and (count($page[0][
"constraints"]))) {
375 $constraint_true = $page[0][
'constraints'][0][
'conjunction'] == 0;
376 foreach ($page[0][
"constraints"] as $constraint) {
378 $working_data = $this->
object->loadWorkingData($constraint[
"question"], $this->getCurrentRunId());
380 $working_data = $this->run_manager->getPreviewData($constraint[
"question"]);
382 if ($constraint[
'conjunction'] == 0) {
384 $constraint_true &= $this->
object->checkConstraint($constraint, $working_data);
387 $constraint_true |= $this->
object->checkConstraint($constraint, $working_data);
390 if ($constraint_true == 0) {
392 foreach ($page as $page_question) {
393 $qid = $page_question[
"question_id"];
397 $this->
object->deleteWorkingData($qid, $this->getCurrentRunId());
399 $this->run_manager->clearPreviewData($qid);
403 $page = $this->
object->getNextPage($page[0][
"question_id"], $direction);
407 $first_question = -1;
408 if (is_null($page) && $direction === -1) {
409 $this->
ctrl->redirectByClass(
"ilobjsurveygui",
"run");
410 } elseif (is_null($page) && $direction === 1) {
411 $state = $this->
object->getUserSurveyExecutionStatus();
413 !($state[
"runs"][$this->getCurrentRunId()][
"finished"] ??
false)) {
414 $this->showFinishConfirmation();
416 $this->runShowFinishedPage();
420 $ilHelp = $this->help;
421 $ilHelp->setScreenIdComponent(
"svy");
422 $ilHelp->setScreenId(
"quest_presentation");
430 $stpl =
new ilTemplate(
"tpl.il_svy_svy_content.html",
true,
true,
"components/ILIAS/Survey");
433 if ($this->feature_config->usesAppraisees()) {
434 $appr_id = $this->requested_appr_id;
436 $this->tpl->setTitle($this->
object->getTitle() .
" (" .
437 $this->lng->txt(
"survey_360_appraisee") .
": " .
444 $stpl->setCurrentBlock(
"suspend_survey");
447 $stpl->setVariable(
"TEXT_SUSPEND", $this->
lng->txt(
"cancel_survey"));
448 $stpl->setVariable(
"HREF_SUSPEND", $this->
ctrl->getLinkTargetByClass(
"ilObjSurveyGUI",
"run"));
450 $this->
ctrl->setParameterByClass(
"ilObjSurveyGUI",
"pgov", $this->request->getTargetPosition());
451 $stpl->setVariable(
"TEXT_SUSPEND", $this->
lng->txt(
"survey_cancel_preview"));
452 $stpl->setVariable(
"HREF_SUSPEND", $this->
ctrl->getLinkTargetByClass(array(
"ilObjSurveyGUI",
"ilSurveyEditorGUI"),
"questions"));
455 $stpl->setVariable(
"ALT_IMG_SUSPEND", $this->
lng->txt(
"cancel_survey"));
456 $stpl->setVariable(
"TITLE_IMG_SUSPEND", $this->
lng->txt(
"cancel_survey"));
457 $stpl->parseCurrentBlock();
459 $this->outNavigationButtons(
"top", $page, $stpl);
460 $this->outNavigationButtons(
"bottom", $page, $stpl);
463 $stpl->setCurrentBlock(
"percentage");
464 $percentage = (
int) (($page[0][
"position"]) * 100);
466 $pbar->setCurrent($percentage);
467 $stpl->setVariable(
"NEW_PBAR", $pbar->render());
468 $stpl->parseCurrentBlock();
472 $errors = $this->run_manager->getErrors();
473 foreach ($page as
$data) {
474 if ($first_question === -1) {
475 $first_question =
$data[
"question_id"];
477 $question_gui = $this->
object->getQuestionGUI($data[
"type_tag"],
$data[
"question_id"]);
479 if (count($errors) > 0) {
480 $working_data[
$data[
"question_id"]] = $question_gui->object->getWorkingDataFromUserInput(
481 $this->run_manager->getPostData()
485 $working_data[
$data[
"question_id"]] = $this->
object->loadWorkingData(
486 $data[
"question_id"],
487 $this->run_manager->getCurrentRunId()
490 $working_data[
$data[
"question_id"]] =
491 $this->run_manager->getPreviewData(
$data[
"question_id"]);
496 $page_renderer = new \ILIAS\Survey\Page\PageRenderer(
503 $stpl->setVariable(
"PAGE", $page_renderer->render());
505 $this->
ctrl->setParameter($this,
"qid", $first_question);
506 $stpl->setVariable(
"FORM_ACTION", $this->
ctrl->getFormAction($this,
"redirectQuestion"));
507 $this->tpl->setContent($stpl->get());
511 $this->
object->setPage($this->getCurrentRunId(), $page[0][
'question_id']);
512 $this->run_manager->setStartTime($first_question);
518 return $this->run_manager->getCurrentRunId();
525 string $navigationDirection =
"next"
528 $this->run_manager->setEndTime();
532 $this->run_manager->clearErrors();
533 $this->run_manager->setPostData($this->raw_post_data);
536 $page = $this->
object->getNextPage($this->request->getQuestionId(), 0);
537 foreach ($page as
$data) {
538 $page_error += $this->saveActiveQuestionData(
$data);
540 if ($page_error && (strcmp($navigationDirection,
"previous") !== 0)) {
541 if ($page_error === 1) {
542 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"svy_page_error"),
true);
544 $this->tpl->setOnScreenMessage(
'failure', $this->
lng->txt(
"svy_page_errors"),
true);
548 $this->run_manager->clearErrors();
559 $error = $question->checkUserInput($this->raw_post_data, $this->
object->getSurveyId());
560 if (strlen($error) === 0) {
563 $this->
object->deleteWorkingData($data[
"question_id"], $this->getCurrentRunId());
565 $question->saveUserInput($this->raw_post_data, $this->getCurrentRunId());
567 $this->run_manager->setPreviewData(
568 $data[
"question_id"],
569 $question->saveUserInput($this->raw_post_data, 0,
true)
574 $errors = $this->run_manager->getErrors();
575 $errors[$question->getId()] = $error;
576 $this->run_manager->setErrors($errors);
583 $this->
ctrl->redirectByClass(
"ilobjsurveygui",
"run");
591 $ilToolbar = $this->toolbar;
592 $ilUser = $this->user;
598 if ($this->
object->hasViewOwnResults()) {
600 $this->
lng->txt(
"svy_view_own_results"),
601 $this->ctrl->getLinkTarget($this,
"viewUserResults")
607 if ($this->
object->hasMailConfirmation()) {
609 $ilToolbar->addSeparator();
613 !$ilUser->getEmail()) {
616 $ilToolbar->addInputItem($mail,
true);
619 $ilToolbar->setFormAction($this->
ctrl->getFormAction($this,
"mailUserResults"));
622 $this->
lng->txt(
"svy_mail_send_confirmation"),
624 )->submit()->toToolbar();
632 $this->
lng->txt(
"svy_results"),
633 $this->ctrl->getLinkTargetByClass(
"ilObjSurveyGUI",
"evaluation")
641 $this->
object->getOutro() ===
'') {
645 $ilToolbar->addSeparator();
649 $txt = $this->
lng->txt(
"survey_execution_exit_360");
651 $txt = $this->
lng->txt(
"survey_execution_exit");
655 $this->
ctrl->getLinkTarget($this,
"exitSurvey")
658 if ($this->
object->getOutro() !==
'') {
659 $f = $this->gui->ui()->factory();
660 $r = $this->gui->ui()->renderer();
661 $p =
$f->panel()->standard(
663 $f->legacy()->content($this->object->prepareTextareaOutput($this->object->getOutro()))
666 $this->tpl->setContent($r->render($p));
677 $target_ref_id = $this->
object->getRefId();
692 $this->backToRepository();
695 $this->
ctrl->setParameterByClass(
"ilsurveyeditorgui",
"pgov", $this->request->getTargetPosition());
696 $this->
ctrl->redirectByClass(array(
"ilobjsurveygui",
"ilsurveyeditorgui"),
"questions");
701 string $navigationblock,
705 $prevpage = $this->
object->getNextPage($page[0][
"question_id"], -1);
707 if (is_null($prevpage)) {
710 $stpl->
setVariable(
"BTN_PREV", $this->
lng->txt(
"survey_previous"));
713 $nextpage = $this->
object->getNextPage($page[0][
"question_id"], 1);
715 if (is_null($nextpage)) {
725 $this->outSurveyPage();
730 $ilToolbar = $this->toolbar;
732 if (!$this->
object->hasViewOwnResults()) {
733 $this->backToRepository();
736 $this->checkAuth(
false,
true);
739 $this->
lng->txt(
"btn_back"),
740 $this->ctrl->getLinkTarget($this,
"runShowFinishedPage")
744 $html = $survey_gui->getUserResultsTable($this->getCurrentRunId());
745 $this->tpl->setContent($html);
750 $ilUser = $this->user;
752 if (!$this->
object->hasMailConfirmation()) {
753 $this->backToRepository();
756 $this->checkAuth(
false,
true);
758 $recipient = $this->request->getMail();
760 $recipient = $ilUser->getEmail();
763 $this->
ctrl->redirect($this,
"runShowFinishedPage");
767 $survey_gui->sendUserResultsMail(
768 $this->getCurrentRunId(),
772 $this->tpl->setOnScreenMessage(
'success', $this->
lng->txt(
"mail_sent"),
true);
773 $this->
ctrl->redirect($this,
"runShowFinishedPage");
781 $cgui->setHeaderText($this->
lng->txt(
"survey_execution_sure_finish"));
783 $cgui->setFormAction($this->
ctrl->getFormAction($this,
"confirmedFinish"));
784 $cgui->setCancel($this->
lng->txt(
"cancel"),
"previousNoSave");
785 $cgui->setConfirm($this->
lng->txt(
"confirm"),
"confirmedFinish");
792 $ilUser = $this->user;
795 $this->
object->finishSurvey($this->getCurrentRunId(), $this->requested_appr_id);
802 if ($this->
object->getMailNotification()) {
803 $this->
object->sendNotificationMail(
805 $this->run_manager->getCode(),
806 $this->requested_appr_id
811 $this->
ctrl->redirect($this,
"runShowFinishedPage");
setVariable($variable, $value='')
Sets a variable value.
static _instanciateQuestion(int $question_id)
Get question object.
static _recordReadEvent(string $a_type, int $a_ref_id, int $obj_id, int $usr_id, bool $isCatchupWriteEvents=true, $a_ext_rc=null, $a_ext_time=null)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilCtrl provides processing control methods.
static _updateStatus(int $a_obj_id, int $a_usr_id, ?object $a_obj=null, bool $a_percentage=false, bool $a_force_raise=false)
static _tracProgress(int $a_user_id, int $a_obj_id, int $a_ref_id, string $a_obj_type='')
static getLogger(string $a_component_id)
Get component logger.
Component logger with individual log levels by component id.
static _hasEvaluationAccess(int $a_obj_id, int $user_id)
@ilCtrl_Calls ilObjSurveyGUI: ilSurveyEvaluationGUI, ilSurveyExecutionGUI @ilCtrl_Calls ilObjSurveyGU...
class ilRbacSystem system function like checkAccess, addActiveRole ... Supporting system functions ar...
checkAccess(string $a_operations, int $a_ref_id, string $a_type="")
checkAccess represents the main method of the RBAC-system in ILIAS3 developers want to use With this ...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Survey execution graphical output.
ILIAS Survey Access AccessManager $access_manager
start(bool $resume=false)
saveActiveQuestionData(array $data)
Saves the users input of the active page.
ILIAS Survey Execution RunManager $run_manager
exitSurvey()
Exits the survey after finishing it.
checkAuth(bool $a_may_start=false, bool $a_ignore_status=false)
previous(bool $a_save_input=true)
Mode FeatureConfig $feature_config
saveUserInput(string $navigationDirection="next")
Save the user's input.
ilGlobalTemplateInterface $tpl
outNavigationButtons(string $navigationblock, array $page, ilTemplate $stpl)
ILIAS Survey Execution ExecutionGUIRequest $request
ILIAS Survey Participants StatusManager $participant_manager
redirectQuestion()
Called when a user answered a page to perform a redirect after POST.
__construct(ilObjSurvey $a_object)
next()
Navigates to the next page.
gotoPage()
Go to a specific page without saving.
ILIAS Survey InternalGUIService $gui
runShowFinishedPage()
Show finish page.
outSurveyPage(int $activepage=0, int $direction=0)
Output of the active survey question to the screen.
special template class to simplify handling of ITX/PEAR
setCurrentBlock(string $part=ilGlobalTemplateInterface::DEFAULT_BLOCK)
parseCurrentBlock(string $part=ilGlobalTemplateInterface::DEFAULT_BLOCK)
This class represents a text property in a property form.
Tree class data representation in hierachical trees using the Nested Set Model with Gaps by Joe Celco...
getParentId(int $a_node_id)
get parent id of given node
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 is_email(string $a_email, ?ilMailRfc822AddressParserFactory $mailAddressParserFactory=null)
This preg-based function checks whether an e-mail address is formally valid.
static redirect(string $a_script)
setContent(string $a_html)
Sets content for standard template.
if(!file_exists('../ilias.ini.php'))