ILIAS  Release_4_1_x_branch Revision 61804
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilSurveyExecutionGUI Class Reference

Survey execution graphical output. More...

+ Collaboration diagram for ilSurveyExecutionGUI:

Public Member Functions

 ilSurveyExecutionGUI ($a_object)
 ilSurveyExecutionGUI constructor
executeCommand ()
 execute command
 getCommand ($cmd)
 Retrieves the ilCtrl command.
 resume ()
 Resumes the survey.
 start ($resume=false)
 Starts the survey.
 redirectQuestion ()
 Called when a user answered a page to perform a redirect after POST.
 previous ()
 Navigates to the previous pages.
 next ()
 Navigates to the next pages.
 gotoPage ()
 Go to a specific page without saving.
 outSurveyPage ($activepage=NULL, $direction=NULL)
 Output of the active survey question to the screen.
 saveUserInput ($navigationDirection="next")
 Save the user's input.
 navigate ($navigationDirection="next")
 Survey navigation.
 saveActiveQuestionData (&$data)
 Saves the users input of the active page.
 cancel ()
 Called on cancel.
 runShowFinishedPage ()
 Creates the finished page for a running survey.
 exitSurvey ()
 Exits the survey after finishing it.
 outNavigationButtons ($navigationblock="top", $page)
 Creates the navigation buttons for a survey.

Data Fields

 $object
 $lng
 $tpl
 $ctrl
 $ilias
 $tree

Detailed Description

Survey execution graphical output.

The ilSurveyExecutionGUI class creates the execution output for the ilObjSurveyGUI class. This saves some heap space because the ilObjSurveyGUI class will be smaller.

Author
Helmut Schottmüller helmu.nosp@m.t.sc.nosp@m.hottm.nosp@m.uell.nosp@m.er@ma.nosp@m.c.co.nosp@m.m
Version
Id:
class.ilSurveyExecutionGUI.php 27454 2011-01-18 09:43:05Z hschottm

Definition at line 37 of file class.ilSurveyExecutionGUI.php.

Member Function Documentation

ilSurveyExecutionGUI::cancel ( )

Called on cancel.

Called on cancel

private

Definition at line 578 of file class.ilSurveyExecutionGUI.php.

{
$this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
}
& ilSurveyExecutionGUI::executeCommand ( )

execute command

Definition at line 69 of file class.ilSurveyExecutionGUI.php.

References $_GET, $cmd, $ret, and getCommand().

{
$cmd = $this->ctrl->getCmd();
$next_class = $this->ctrl->getNextClass($this);
$cmd = $this->getCommand($cmd);
if (strlen($cmd) == 0)
{
$this->ctrl->setParameter($this, "qid", $_GET["qid"]);
$this->ctrl->redirect($this, "gotoPage");
}
switch($next_class)
{
default:
$ret =& $this->$cmd();
break;
}
return $ret;
}

+ Here is the call graph for this function:

ilSurveyExecutionGUI::exitSurvey ( )

Exits the survey after finishing it.

Exits the survey after finishing it

public

Definition at line 613 of file class.ilSurveyExecutionGUI.php.

{
$this->ctrl->redirectByClass("ilobjsurveygui", "backToRepository");
}
ilSurveyExecutionGUI::getCommand (   $cmd)

Retrieves the ilCtrl command.

Retrieves the ilCtrl command

public

Definition at line 96 of file class.ilSurveyExecutionGUI.php.

References $cmd.

Referenced by executeCommand().

{
return $cmd;
}

+ Here is the caller graph for this function:

ilSurveyExecutionGUI::gotoPage ( )

Go to a specific page without saving.

private

Definition at line 271 of file class.ilSurveyExecutionGUI.php.

References $_GET.

{
$this->ctrl->setParameter($this, "activecommand", "gotoPage");
$this->ctrl->setParameter($this, "qid", $_GET["qid"]);
$this->ctrl->setParameter($this, "direction", "0");
$this->ctrl->redirect($this, "redirectQuestion");
}
ilSurveyExecutionGUI::ilSurveyExecutionGUI (   $a_object)

ilSurveyExecutionGUI constructor

The constructor takes possible arguments an creates an instance of the ilSurveyExecutionGUI object.

Parameters
object$a_objectAssociated ilObjSurvey class public

Definition at line 54 of file class.ilSurveyExecutionGUI.php.

References $ilCtrl, $ilias, $lng, $tpl, and $tree.

{
$this->lng =& $lng;
$this->tpl =& $tpl;
$this->ctrl =& $ilCtrl;
$this->ilias =& $ilias;
$this->object =& $a_object;
$this->tree =& $tree;
}
ilSurveyExecutionGUI::navigate (   $navigationDirection = "next")

Survey navigation.

Survey navigation

private

Definition at line 475 of file class.ilSurveyExecutionGUI.php.

References $_GET, $_SESSION, $data, outSurveyPage(), saveActiveQuestionData(), and ilUtil\sendFailure().

{
global $ilUser;
global $rbacsystem;
if (!$rbacsystem->checkAccess("read", $this->object->ref_id))
{
// only with read access it is possible to run the test
$this->ilias->raiseError($this->lng->txt("cannot_read_survey"),$this->ilias->error_obj->MESSAGE);
}
// check users input when it is a metric question
unset($_SESSION["svy_errors"]);
$page_error = 0;
$page = $this->object->getNextPage($_GET["qid"], 0);
foreach ($page as $data)
{
$page_error += $this->saveActiveQuestionData($data);
}
if ($page_error && (strcmp($navigationDirection, "previous") != 0))
{
if ($page_error == 1)
{
ilUtil::sendFailure($this->lng->txt("svy_page_error"));
}
else
{
ilUtil::sendFailure($this->lng->txt("svy_page_errors"));
}
}
else
{
$page_error = "";
unset($_SESSION["svy_errors"]);
}
$direction = 0;
switch ($navigationDirection)
{
case "next":
default:
$activepage = $_GET["qid"];
if (!$page_error)
{
$direction = 1;
}
break;
case "previous":
$activepage = $_GET["qid"];
if (!$page_error)
{
$direction = -1;
}
break;
}
$this->outSurveyPage($activepage, $direction);
}

+ Here is the call graph for this function:

ilSurveyExecutionGUI::next ( )

Navigates to the next pages.

private

Definition at line 250 of file class.ilSurveyExecutionGUI.php.

References $_GET, $result, and saveUserInput().

{
$result = $this->saveUserInput("next");
$this->ctrl->setParameter($this, "activecommand", "next");
$this->ctrl->setParameter($this, "qid", $_GET["qid"]);
if (strlen($result))
{
$this->ctrl->setParameter($this, "direction", "0");
}
else
{
$this->ctrl->setParameter($this, "direction", "1");
}
$this->ctrl->redirect($this, "redirectQuestion");
}

+ Here is the call graph for this function:

ilSurveyExecutionGUI::outNavigationButtons (   $navigationblock = "top",
  $page 
)

Creates the navigation buttons for a survey.

Creates the navigation buttons for a survey. Runs twice to generate a top and a bottom navigation to ease the use of long forms.

public

Definition at line 627 of file class.ilSurveyExecutionGUI.php.

Referenced by outSurveyPage().

{
$prevpage = $this->object->getNextPage($page[0]["question_id"], -1);
$this->tpl->setCurrentBlock($navigationblock . "_prev");
if ($prevpage === 0)
{
$this->tpl->setVariable("BTN_PREV", $this->lng->txt("survey_start"));
}
else
{
$this->tpl->setVariable("BTN_PREV", $this->lng->txt("survey_previous"));
}
$this->tpl->parseCurrentBlock();
$nextpage = $this->object->getNextPage($page[0]["question_id"], 1);
$this->tpl->setCurrentBlock($navigationblock . "_next");
if ($nextpage === 1)
{
$this->tpl->setVariable("BTN_NEXT", $this->lng->txt("survey_finish"));
}
else
{
$this->tpl->setVariable("BTN_NEXT", $this->lng->txt("survey_next"));
}
$this->tpl->parseCurrentBlock();
}

+ Here is the caller graph for this function:

ilSurveyExecutionGUI::outSurveyPage (   $activepage = NULL,
  $direction = NULL 
)

Output of the active survey question to the screen.

Output of the active survey question to the screen

private

Definition at line 286 of file class.ilSurveyExecutionGUI.php.

References $_SESSION, $data, ilUtil\getImagePath(), outNavigationButtons(), runShowFinishedPage(), and ilUtil\sendInfo().

Referenced by navigate(), and redirectQuestion().

{
global $ilUser;
// security check if someone tries to go into a survey using an URL to one of the questions
$canStart = $this->object->canStartSurvey($_SESSION["anonymous_id"][$this->object->getId()]);
if (!$canStart["result"])
{
ilUtil::sendInfo(implode("<br />", $canStart["messages"]), TRUE);
$this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
}
$survey_started = $this->object->isSurveyStarted($ilUser->getId(), $_SESSION["anonymous_id"][$this->object->getId()]);
if ($survey_started === FALSE)
{
ilUtil::sendInfo($this->lng->txt("survey_use_start_button"), TRUE);
$this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
}
$page = $this->object->getNextPage($activepage, $direction);
$constraint_true = 0;
// check for constraints
if (count($page[0]["constraints"]))
{
while (is_array($page) and ($constraint_true == 0) and (count($page[0]["constraints"])))
{
$constraint_true = ($page[0]['constraints'][0]['conjunction'] == 0) ? true : false;
foreach ($page[0]["constraints"] as $constraint)
{
$working_data = $this->object->loadWorkingData($constraint["question"], $_SESSION["finished_id"][$this->object->getId()]);
if ($constraint['conjunction'] == 0)
{
// and
$constraint_true = $constraint_true & $this->object->checkConstraint($constraint, $working_data);
}
else
{
// or
$constraint_true = $constraint_true | $this->object->checkConstraint($constraint, $working_data);
}
}
if ($constraint_true == 0)
{
$page = $this->object->getNextPage($page[0]["question_id"], $direction);
}
}
}
$first_question = -1;
if ($page === 0)
{
$this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
}
else if ($page === 1)
{
$this->object->finishSurvey($ilUser->id, $_SESSION["anonymous_id"][$this->object->getId()]);
if (array_key_exists("anonymous_id", $_SESSION)) unset($_SESSION["anonymous_id"][$this->object->getId()]);
return;
}
else
{
$required = false;
$this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.il_svy_svy_content.html", "Modules/Survey");
if (!($this->object->getAnonymize() && $this->object->isAccessibleWithoutCode() && ($_SESSION["AccountId"] == ANONYMOUS_USER_ID)))
{
$this->tpl->setCurrentBlock("suspend_survey");
$this->tpl->setVariable("TEXT_SUSPEND", $this->lng->txt("cancel_survey"));
$this->tpl->setVariable("HREF_SUSPEND", $this->ctrl->getLinkTargetByClass("ilObjSurveyGUI", "infoScreen"));
$this->tpl->setVariable("HREF_IMG_SUSPEND", $this->ctrl->getLinkTargetByClass("ilObjSurveyGUI", "infoScreen"));
$this->tpl->setVariable("ALT_IMG_SUSPEND", $this->lng->txt("cancel_survey"));
$this->tpl->setVariable("TITLE_IMG_SUSPEND", $this->lng->txt("cancel_survey"));
$this->tpl->setVariable("IMG_SUSPEND", ilUtil::getImagePath("cancel.gif"));
$this->tpl->parseCurrentBlock();
}
$this->outNavigationButtons("top", $page);
$this->tpl->setCurrentBlock("percentage");
$percentage = (int)(($page[0]["position"])*100);
$this->tpl->setVariable("PERCENT_BAR_START", ilUtil::getImagePath("bar_start.gif"));
$this->tpl->setVariable("PERCENT_BAR_FILLED", ilUtil::getImagePath("bar_filled.gif"));
$this->tpl->setVariable("PERCENT_BAR_EMPTY", ilUtil::getImagePath("bar_empty.gif"));
$this->tpl->setVariable("PERCENT_BAR_END", ilUtil::getImagePath("bar_end.gif"));
$this->tpl->setVariable("PERCENTAGE_ALT", $this->lng->txt("percentage"));
$this->tpl->setVariable("PERCENTAGE_VALUE", $percentage);
$this->tpl->setVariable("PERCENTAGE_UNFINISHED", 100-$percentage);
$this->tpl->parseCurrentBlock();
if (count($page) > 1)
{
$this->tpl->setCurrentBlock("questionblock_title");
$this->tpl->setVariable("TEXT_QUESTIONBLOCK_TITLE", $page[0]["questionblock_title"]);
$this->tpl->parseCurrentBlock();
}
foreach ($page as $data)
{
$this->tpl->setCurrentBlock("survey_content");
if ($data["heading"])
{
$this->tpl->setVariable("QUESTION_HEADING", $data["heading"]);
}
if ($first_question == -1) $first_question = $data["question_id"];
$question_gui = $this->object->getQuestionGUI($data["type_tag"], $data["question_id"]);
if (is_array($_SESSION["svy_errors"]))
{
$working_data =& $question_gui->object->getWorkingDataFromUserInput($_SESSION["postdata"]);
}
else
{
$working_data = $this->object->loadWorkingData($data["question_id"], $_SESSION["finished_id"][$this->object->getId()]);
}
$question_gui->object->setObligatory($data["obligatory"]);
$error_messages = array();
if (is_array($_SESSION["svy_errors"]))
{
$error_messages = $_SESSION["svy_errors"];
}
$show_questiontext = ($data["questionblock_show_questiontext"]) ? 1 : 0;
$question_output = $question_gui->getWorkingForm($working_data, $this->object->getShowQuestionTitles(), $show_questiontext, $error_messages[$data["question_id"]], $this->object->getSurveyId());
$this->tpl->setVariable("QUESTION_OUTPUT", $question_output);
$this->ctrl->setParameter($this, "qid", $data["question_id"]);
$this->tpl->parse("survey_content");
if ($data["obligatory"]) $required = true;
}
if ($required)
{
$this->tpl->setCurrentBlock("required");
$this->tpl->setVariable("TEXT_REQUIRED", $this->lng->txt("required_field"));
$this->tpl->parseCurrentBlock();
}
$this->outNavigationButtons("bottom", $page);
$this->tpl->setVariable("FORM_ACTION", $this->ctrl->getFormAction($this, "redirectQuestion"));
}
$this->object->setPage($_SESSION["finished_id"][$this->object->getId()], $page[0]['question_id']);
$this->object->setStartTime($_SESSION["finished_id"][$this->object->getId()], $first_question);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilSurveyExecutionGUI::previous ( )

Navigates to the previous pages.

Navigates to the previous pages

private

Definition at line 229 of file class.ilSurveyExecutionGUI.php.

References $_GET, $result, and saveUserInput().

{
$result = $this->saveUserInput("previous");
$this->ctrl->setParameter($this, "activecommand", "previous");
$this->ctrl->setParameter($this, "qid", $_GET["qid"]);
if (strlen($result))
{
$this->ctrl->setParameter($this, "direction", "0");
}
else
{
$this->ctrl->setParameter($this, "direction", "-1");
}
$this->ctrl->redirect($this, "redirectQuestion");
}

+ Here is the call graph for this function:

ilSurveyExecutionGUI::redirectQuestion ( )

Called when a user answered a page to perform a redirect after POST.

This is called for security reasons to prevent users sending a form twice.

public

Definition at line 198 of file class.ilSurveyExecutionGUI.php.

References $_GET, and outSurveyPage().

{
switch ($_GET["activecommand"])
{
case "next":
$this->outSurveyPage($_GET["qid"], $_GET["direction"]);
break;
case "previous":
$this->outSurveyPage($_GET["qid"], $_GET["direction"]);
break;
case "gotoPage":
$this->outSurveyPage($_GET["qid"], $_GET["direction"]);
break;
case "default":
$this->outSurveyPage($_GET["qid"]);
break;
default:
// don't save input, go to the first page
$this->outSurveyPage();
break;
}
}

+ Here is the call graph for this function:

ilSurveyExecutionGUI::resume ( )

Resumes the survey.

Resumes the survey

private

Definition at line 108 of file class.ilSurveyExecutionGUI.php.

References start().

{
$this->start(true);
}

+ Here is the call graph for this function:

ilSurveyExecutionGUI::runShowFinishedPage ( )

Creates the finished page for a running survey.

Creates the finished page for a running survey

public

Definition at line 590 of file class.ilSurveyExecutionGUI.php.

References $_SESSION.

Referenced by outSurveyPage().

{
unset($_SESSION["anonymous_id"][$this->object->getId()]);
if (strlen($this->object->getOutro()) == 0)
{
$this->ctrl->redirectByClass("ilobjsurveygui", "backToRepository");
}
else
{
$this->tpl->addBlockFile("ADM_CONTENT", "adm_content", "tpl.il_svy_svy_finished.html", "Modules/Survey");
$this->tpl->setVariable("TEXT_FINISHED", $this->object->prepareTextareaOutput($this->object->getOutro()));
$this->tpl->setVariable("BTN_EXIT", $this->lng->txt("exit"));
$this->tpl->setVariable("FORM_ACTION", $this->ctrl->getFormAction($this, "runShowFinishedPage"));
}
}

+ Here is the caller graph for this function:

ilSurveyExecutionGUI::saveActiveQuestionData ( $data)

Saves the users input of the active page.

Saves the users input of the active page

private

Definition at line 540 of file class.ilSurveyExecutionGUI.php.

References $_POST, $_SESSION, $data, and SurveyQuestion\_instanciateQuestion().

Referenced by navigate(), and saveUserInput().

{
global $ilUser;
include_once "./Modules/SurveyQuestionPool/classes/class.SurveyQuestion.php";
$question =& SurveyQuestion::_instanciateQuestion($data["question_id"]);
$error = $question->checkUserInput($_POST, $this->object->getSurveyId());
if (strlen($error) == 0)
{
$user_id = $ilUser->getId();
// delete old answers
$this->object->deleteWorkingData($data["question_id"], $_SESSION["finished_id"][$this->object->getId()]);
if ($this->object->isSurveyStarted($user_id, $_SESSION["anonymous_id"][$this->object->getId()]) === false)
{
$_SESSION["finished_id"][$this->object->getId()] = $this->object->startSurvey($user_id, $_SESSION["anonymous_id"][$this->object->getId()]);
}
if ($this->object->getAnonymize())
{
$user_id = 0;
}
$question->saveUserInput($_POST, $_SESSION["finished_id"][$this->object->getId()]);
return 0;
}
else
{
$_SESSION["svy_errors"][$question->getId()] = $error;
return 1;
}
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilSurveyExecutionGUI::saveUserInput (   $navigationDirection = "next")

Save the user's input.

private

Definition at line 428 of file class.ilSurveyExecutionGUI.php.

References $_GET, $_POST, $_SESSION, $data, saveActiveQuestionData(), and ilUtil\sendFailure().

Referenced by next(), and previous().

{
global $ilUser;
global $rbacsystem;
if (!$rbacsystem->checkAccess("read", $this->object->ref_id))
{
// only with read access it is possible to run the test
$this->ilias->raiseError($this->lng->txt("cannot_read_survey"),$this->ilias->error_obj->MESSAGE);
}
$this->object->setEndTime($_SESSION["finished_id"][$this->object->getId()]);
// check users input when it is a metric question
unset($_SESSION["svy_errors"]);
$_SESSION["postdata"] = $_POST;
$page_error = 0;
$page = $this->object->getNextPage($_GET["qid"], 0);
foreach ($page as $data)
{
$page_error += $this->saveActiveQuestionData($data);
}
if ($page_error && (strcmp($navigationDirection, "previous") != 0))
{
if ($page_error == 1)
{
ilUtil::sendFailure($this->lng->txt("svy_page_error"), TRUE);
}
else
{
ilUtil::sendFailure($this->lng->txt("svy_page_errors"), TRUE);
}
}
else
{
$page_error = "";
unset($_SESSION["svy_errors"]);
}
return $page_error;
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilSurveyExecutionGUI::start (   $resume = false)

Starts the survey.

Starts the survey

private

Definition at line 120 of file class.ilSurveyExecutionGUI.php.

References $_POST, $_SESSION, and ilUtil\sendFailure().

Referenced by resume().

{
global $ilUser;
global $rbacsystem;
unset($_SESSION["svy_errors"]);
if (!$rbacsystem->checkAccess("read", $this->object->ref_id))
{
// only with read access it is possible to run the test
$this->ilias->raiseError($this->lng->txt("cannot_read_survey"),$this->ilias->error_obj->MESSAGE);
}
if ($this->object->getAnonymize() && !$this->object->isAccessibleWithoutCode())
{
if ($resume)
{
$anonymize_key = $this->object->getAnonymousId($_POST["anonymous_id"]);
if ($anonymize_key)
{
$_SESSION["anonymous_id"][$this->object->getId()] = $anonymize_key;
}
else
{
unset($_POST["cmd"]["resume"]);
ilUtil::sendFailure(sprintf($this->lng->txt("error_retrieving_anonymous_survey"), $_POST["anonymous_id"]));
}
}
}
$direction = 0;
if ($this->object->getAnonymize() && !$this->object->isAccessibleWithoutCode())
{
if ($this->object->checkSurveyCode($_POST["anonymous_id"]))
{
$_SESSION["anonymous_id"][$this->object->getId()] = $_POST["anonymous_id"];
}
else
{
ilUtil::sendFailure(sprintf($this->lng->txt("error_retrieving_anonymous_survey"), $_POST["anonymous_id"]), true);
$this->ctrl->redirectByClass("ilobjsurveygui", "infoScreen");
}
}
if ($this->object->isAccessibleWithoutCode())
{
$anonymous_id = $this->object->getUserSurveyCode($ilUser->getId());
if (strlen($anonymous_id))
{
$_SESSION["anonymous_id"][$this->object->getId()] = $anonymous_id;
}
else
{
$_SESSION["anonymous_id"][$this->object->getId()] = $this->object->createNewAccessCode();
}
}
$activepage = "";
if ($resume)
{
$activepage = $this->object->getLastActivePage($_SESSION["finished_id"][$this->object->getId()]);
$direction = 0;
}
// explicitly set the survey started!
if ($this->object->isSurveyStarted($ilUser->getId(), $_SESSION["anonymous_id"][$this->object->getId()]) === FALSE)
{
$_SESSION["finished_id"][$this->object->getId()] = $this->object->startSurvey($ilUser->getId(), $_SESSION["anonymous_id"][$this->object->getId()]);
}
if (strlen($activepage)) $this->ctrl->setParameter($this, "qid", $activepage);
$this->ctrl->setParameter($this, "activecommand", "default");
$this->ctrl->redirect($this, "redirectQuestion");
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Field Documentation

ilSurveyExecutionGUI::$ctrl

Definition at line 42 of file class.ilSurveyExecutionGUI.php.

ilSurveyExecutionGUI::$ilias

Definition at line 43 of file class.ilSurveyExecutionGUI.php.

Referenced by ilSurveyExecutionGUI().

ilSurveyExecutionGUI::$lng

Definition at line 40 of file class.ilSurveyExecutionGUI.php.

Referenced by ilSurveyExecutionGUI().

ilSurveyExecutionGUI::$object

Definition at line 39 of file class.ilSurveyExecutionGUI.php.

ilSurveyExecutionGUI::$tpl

Definition at line 41 of file class.ilSurveyExecutionGUI.php.

Referenced by ilSurveyExecutionGUI().

ilSurveyExecutionGUI::$tree

Definition at line 44 of file class.ilSurveyExecutionGUI.php.

Referenced by ilSurveyExecutionGUI().


The documentation for this class was generated from the following file: