4require_once 
'./Modules/TestQuestionPool/classes/class.assQuestionGUI.php';
 
    5require_once 
'./Modules/Test/classes/inc.AssessmentConstants.php';
 
    6require_once 
'./Modules/TestQuestionPool/interfaces/interface.ilGuiQuestionScoringAdjustable.php';
 
   37        parent::__construct();
 
   38        include_once 
"./Modules/TestQuestionPool/classes/class.assFileUpload.php";
 
   42            $this->
object->loadFromDb(
$id);
 
   51        $hasErrors = (!$always) ? $this->
editQuestion(
true) : 
false;
 
   53            require_once 
'Services/Form/classes/class.ilPropertyFormGUI.php';
 
   64        $this->
object->setPoints(
$_POST[
"points"]);
 
   65        $this->
object->setMaxSize(
$_POST[
"maxsize"]);
 
   66        $this->
object->setAllowedExtensions(
$_POST[
"allowedextensions"]);
 
   67        $this->
object->setCompletionBySubmission(
$_POST[
'completion_by_submission'] == 1 ? 
true : 
false);
 
   80        include_once(
"./Services/Form/classes/class.ilPropertyFormGUI.php");
 
   82        $this->editForm = 
$form;
 
   84        $form->setFormAction($this->ctrl->getFormAction($this));
 
   86        $form->setMultipart(
false);
 
   87        $form->setTableWidth(
"100%");
 
   88        $form->setId(
"assfileupload");
 
   99            $form->setValuesByPost();
 
  101            $form->setValuesByPost(); 
 
  109            $this->tpl->setVariable(
"QUESTION_DATA", 
$form->getHTML());
 
  118        $maxsize->setValue($this->object->getMaxSize());
 
  119        $maxsize->setInfo($this->lng->txt(
"maxsize_info"));
 
  120        $maxsize->setSize(10);
 
  121        $maxsize->setMinValue(0);
 
  123        $maxsize->setRequired(
false);
 
  124        $form->addItem($maxsize);
 
  127        $allowedextensions = 
new ilTextInputGUI($this->lng->txt(
"allowedextensions"), 
"allowedextensions");
 
  128        $allowedextensions->setInfo($this->lng->txt(
"allowedextensions_info"));
 
  129        $allowedextensions->setValue($this->object->getAllowedExtensions());
 
  130        $allowedextensions->setRequired(
false);
 
  131        $form->addItem($allowedextensions);
 
  135        $points->allowDecimals(
true);
 
  137            is_numeric($this->object->getPoints()) && $this->object->getPoints(
 
  138                           ) >= 0 ? $this->object->getPoints() : 
'' 
  140        $points->setRequired(
true);
 
  142        $points->setMinValue(0.0);
 
  143        $points->setMinvalueShouldBeGreater(
false);
 
  144        $form->addItem($points);
 
  147            'ass_completion_by_submission' 
  148        ), 
'completion_by_submission');
 
  149        $subcompl->setInfo($this->lng->txt(
'ass_completion_by_submission_info'));
 
  150        $subcompl->setValue(1);
 
  151        $subcompl->setChecked($this->object->isCompletionBySubmissionEnabled());
 
  152        $form->addItem($subcompl);
 
  162        $upload_max_filesize = get_cfg_var(
"upload_max_filesize");
 
  164        $post_max_size = get_cfg_var(
"post_max_size");
 
  167        $multiplier_a = array( 
"K" => 1024, 
"M" => 1024 * 1024, 
"G" => 1024 * 1024 * 1024 );
 
  168        $umf_parts    = preg_split(
 
  170            $upload_max_filesize,
 
  174        $pms_parts    = preg_split(
 
  181        if (count($umf_parts) == 2) {
 
  182            $upload_max_filesize = $umf_parts[0] * $multiplier_a[$umf_parts[1]];
 
  185        if (count($pms_parts) == 2) {
 
  186            $post_max_size = $pms_parts[0] * $multiplier_a[$pms_parts[1]];
 
  190        $max_filesize = min($upload_max_filesize, $post_max_size);
 
  192        if (!$max_filesize) {
 
  193            $max_filesize = max($upload_max_filesize, $post_max_size);
 
  194            return $max_filesize;
 
  196        return $max_filesize;
 
  215        $graphicalOutput = 
false,
 
  216        $result_output = 
false,
 
  217        $show_question_only = 
true,
 
  218        $show_feedback = 
false,
 
  219        $show_correct_solution = 
false,
 
  220        $show_manual_scoring = 
false,
 
  221        $show_question_text = 
true 
  224        $template = 
new ilTemplate(
"tpl.il_as_qpl_fileupload_output_solution.html", 
true, 
true, 
"Modules/TestQuestionPool");
 
  227        if (($active_id > 0) && (!$show_correct_solution)) {
 
  228            $solutions =&$this->
object->getSolutionValues($active_id, 
$pass);
 
  229            include_once 
"./Modules/Test/classes/class.ilObjTest.php";
 
  231                if (is_null(
$pass)) {
 
  235            $solutions =&$this->
object->getSolutionValues($active_id, 
$pass);
 
  237            $files = ($show_manual_scoring) ? $this->object->getUploadedFilesForWeb($active_id, 
$pass) : $this->
object->getUploadedFiles($active_id, 
$pass);
 
  238            include_once 
"./Modules/TestQuestionPool/classes/tables/class.assFileUploadFileTableGUI.php";
 
  240            $table_gui->setTitle($this->lng->txt(
'already_delivered_files'), 
'icon_file.svg', $this->lng->txt(
'already_delivered_files'));
 
  241            $table_gui->setData(
$files);
 
  243            #$table_gui->initCommand( 
  244            #$this->buildFileTableDeleteButtonInstance(), assFileUploadGUI::DELETE_FILES_TBL_POSTVAR 
  247            $table_gui->setRowTemplate(
"tpl.il_as_qpl_fileupload_file_view_row.html", 
"Modules/TestQuestionPool");
 
  248            $table_gui->setSelectAllCheckbox(
"");
 
  250            #$table_gui->clearCommandButtons(); 
  251            #$table_gui->disable('select_all'); 
  253            $table_gui->disable(
'numinfo');
 
  255            $template->setVariable(
'FILES', $table_gui->getHTML());
 
  259        if (strlen($this->object->getAllowedExtensions())) {
 
  260            $template->setCurrentBlock(
"allowed_extensions");
 
  261            $template->setVariable(
"TXT_ALLOWED_EXTENSIONS", $this->object->prepareTextareaOutput($this->lng->txt(
"allowedextensions") . 
": " . $this->object->getAllowedExtensions()));
 
  265        $template->setVariable(
"TEXT_UPLOAD", $this->object->prepareTextareaOutput($this->lng->txt(
'upload')));
 
  266        $template->setVariable(
"TXT_UPLOAD_FILE", $this->object->prepareTextareaOutput($this->lng->txt(
'file_add')));
 
  267        $template->setVariable(
"TXT_MAX_SIZE", $this->object->prepareTextareaOutput($this->lng->txt(
'file_notice') . 
" " . $this->object->getMaxFilesizeAsString()));
 
  269        if (($active_id > 0) && (!$show_correct_solution)) {
 
  270            $reached_points = $this->
object->getReachedPoints($active_id, 
$pass);
 
  271            if ($graphicalOutput) {
 
  273                if ($reached_points == $this->object->getMaximumPoints()) {
 
  276                    $template->setVariable(
"TEXT_OK", $this->lng->txt(
"answer_is_right"));
 
  280                    if ($reached_points > 0) {
 
  282                        $template->setVariable(
"TEXT_NOT_OK", $this->lng->txt(
"answer_is_not_correct_but_positive"));
 
  285                        $template->setVariable(
"TEXT_NOT_OK", $this->lng->txt(
"answer_is_wrong"));
 
  291            $reached_points = $this->
object->getPoints();
 
  294        if ($result_output) {
 
  295            $resulttext = ($reached_points == 1) ? 
"(%s " . $this->lng->txt(
"point") . 
")" : 
"(%s " . $this->lng->txt(
"points") . 
")";
 
  296            $template->setVariable(
"RESULT_OUTPUT", 
sprintf($resulttext, $reached_points));
 
  298        if ($show_question_text==
true) {
 
  299            $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->getQuestion(), 
true));
 
  302        $solutiontemplate = 
new ilTemplate(
"tpl.il_as_tst_solution_output.html", 
true, 
true, 
"Modules/TestQuestionPool");
 
  304        if (strlen($feedback)) {
 
  310            $solutiontemplate->setVariable(
"ILC_FB_CSS_CLASS", $cssClass);
 
  311            $solutiontemplate->setVariable(
"FEEDBACK", $this->object->prepareTextareaOutput($feedback, 
true));
 
  313        $solutiontemplate->setVariable(
"SOLUTION_OUTPUT", $questionoutput);
 
  314        $solutionoutput = $solutiontemplate->get();
 
  315        if (!$show_question_only) {
 
  319        return $solutionoutput;
 
  322    public function getPreview($show_question_only = 
false, $showInlineFeedback = 
false)
 
  324        $template = 
new ilTemplate(
"tpl.il_as_qpl_fileupload_output.html", 
true, 
true, 
"Modules/TestQuestionPool");
 
  328            include_once 
"./Modules/TestQuestionPool/classes/tables/class.assFileUploadFileTableGUI.php";
 
  330            $table_gui->setTitle($this->lng->txt(
'already_delivered_files'), 
'icon_file.svg', $this->lng->txt(
'already_delivered_files'));
 
  331            $table_gui->setData(
$files);
 
  333            $table_gui->initCommand(
 
  339            $template->setVariable(
'FILES', $table_gui->getHTML());
 
  343        if (strlen($this->object->getAllowedExtensions())) {
 
  344            $template->setCurrentBlock(
"allowed_extensions");
 
  345            $template->setVariable(
"TXT_ALLOWED_EXTENSIONS", $this->object->prepareTextareaOutput($this->lng->txt(
"allowedextensions") . 
": " . $this->object->getAllowedExtensions()));
 
  348        $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->question, 
true));
 
  350        $template->setVariable(
"TEXT_UPLOAD", $this->object->prepareTextareaOutput($this->lng->txt(
'upload')));
 
  351        $template->setVariable(
"TXT_UPLOAD_FILE", $this->object->prepareTextareaOutput($this->lng->txt(
'file_add')));
 
  352        $template->setVariable(
"TXT_MAX_SIZE", $this->object->prepareTextareaOutput($this->lng->txt(
'file_notice') . 
" " . $this->object->getMaxFilesizeAsString()));
 
  355        if (!$show_question_only) {
 
  359        return $questionoutput;
 
  363    public function getTestOutput($active_id, 
$pass, $is_postponed = 
false, $use_post_solutions = 
false, $show_feedback = 
false)
 
  367        $template = 
new ilTemplate(
"tpl.il_as_qpl_fileupload_output.html", 
true, 
true, 
"Modules/TestQuestionPool");
 
  372            #include_once "./Modules/Test/classes/class.ilObjTest.php";
 
  373            #if (!ilObjTest::_getUsePreviousAnswers($active_id, true)) 
  375            #   if (is_null($pass)) $pass = ilObjTest::_getPass($active_id); 
  377            $files = $this->
object->getTestOutputSolutions($active_id, 
$pass);
 
  379            include_once 
"./Modules/TestQuestionPool/classes/tables/class.assFileUploadFileTableGUI.php";
 
  381            $table_gui->setTitle($this->lng->txt(
'already_delivered_files'), 
'icon_file.svg', $this->lng->txt(
'already_delivered_files'));
 
  382            $table_gui->setData(
$files);
 
  384            $table_gui->initCommand(
 
  390            $template->setVariable(
'FILES', $table_gui->getHTML());
 
  394        if (strlen($this->object->getAllowedExtensions())) {
 
  395            $template->setCurrentBlock(
"allowed_extensions");
 
  396            $template->setVariable(
"TXT_ALLOWED_EXTENSIONS", $this->object->prepareTextareaOutput($this->lng->txt(
"allowedextensions") . 
": " . $this->object->getAllowedExtensions()));
 
  399        $template->setVariable(
"QUESTIONTEXT", $this->object->prepareTextareaOutput($this->object->question, 
true));
 
  401        $template->setVariable(
"TEXT_UPLOAD", $this->object->prepareTextareaOutput($this->lng->txt(
'upload')));
 
  402        $template->setVariable(
"TXT_UPLOAD_FILE", $this->object->prepareTextareaOutput($this->lng->txt(
'file_add')));
 
  403        $template->setVariable(
"TXT_MAX_SIZE", $this->object->prepareTextareaOutput($this->lng->txt(
'file_notice') . 
" " . $this->object->getMaxFilesizeAsString()));
 
  406        if (!$show_question_only) {
 
  411        $pageoutput = $this->
outQuestionPage(
"", $is_postponed, $active_id, $questionoutput);
 
  424        global $rbacsystem, $ilTabs;
 
  426        $ilTabs->clearTargets();
 
  428        $this->ctrl->setParameterByClass(
"ilAssQuestionPageGUI", 
"q_id", 
$_GET[
"q_id"]);
 
  429        include_once 
"./Modules/TestQuestionPool/classes/class.assQuestion.php";
 
  430        $q_type = $this->
object->getQuestionType();
 
  432        if (strlen($q_type)) {
 
  433            $classname = $q_type . 
"GUI";
 
  434            $this->ctrl->setParameterByClass(strtolower($classname), 
"sel_question_types", $q_type);
 
  435            $this->ctrl->setParameterByClass(strtolower($classname), 
"q_id", 
$_GET[
"q_id"]);
 
  439            if ($rbacsystem->checkAccess(
'write', 
$_GET[
"ref_id"])) {
 
  443                    $this->ctrl->getLinkTargetByClass(
"ilAssQuestionPageGUI", 
"edit"),
 
  444                    array(
"edit", 
"insert", 
"exec_pg"),
 
  454        $force_active = 
false;
 
  455        if ($rbacsystem->checkAccess(
'write', 
$_GET[
"ref_id"])) {
 
  458                $url = $this->ctrl->getLinkTargetByClass($classname, 
"editQuestion");
 
  464                array(
"editQuestion", 
"save", 
"cancel", 
"saveEdit"),
 
  483                $this->ctrl->getLinkTargetByClass($classname, 
"assessment"),
 
  490        if ((
$_GET[
"calling_test"] > 0) || (
$_GET[
"test_ref_id"] > 0)) {
 
  491            $ref_id = 
$_GET[
"calling_test"];
 
  492            if (strlen($ref_id) == 0) {
 
  493                $ref_id = 
$_GET[
"test_ref_id"];
 
  496            global $___test_express_mode;
 
  498            if (!
$_GET[
'test_express_mode'] && !$___test_express_mode) {
 
  499                $ilTabs->setBackTarget($this->lng->txt(
"backtocallingtest"), 
"ilias.php?baseClass=ilObjTestGUI&cmd=questions&ref_id=$ref_id");
 
  502                $ilTabs->setBackTarget($this->lng->txt(
"backtocallingtest"), $link);
 
  505            $ilTabs->setBackTarget($this->lng->txt(
"qpl"), $this->ctrl->getLinkTargetByClass(
"ilobjquestionpoolgui", 
"questions"));
 
  512        return $this->
object->prepareTextareaOutput(
$output, 
true);
 
  549        require_once 
'Modules/TestQuestionPool/classes/questions/class.ilAssFileUploadFileTableDeleteButton.php';
 
  558        require_once 
'Modules/TestQuestionPool/classes/questions/class.ilAssFileUploadFileTableReuseButton.php';
 
  567        if ($this->object->getTestPresentationConfig()->isSolutionInitiallyPrefilled()) {
 
  576        if ($this->object->getTestPresentationConfig()->isSolutionInitiallyPrefilled()) {
 
  587        return $this->lng->txt(
'use_previous_solution_advice_file_upload');
 
sprintf('%.4f', $callTime)
An exception for terminatinating execution or to throw for unit testing.
The assFileUploadGUI class encapsulates the GUI representation for file upload questions.
setQuestionTabs()
Sets the ILIAS tabs for this question type.
getTestPresentationFileTablePostVar()
writePostData($always=false)
{Evaluates a posted edit form and writes the form data in the question object.integer A positive valu...
buildFileTableReuseButtonInstance()
buildFileTableDeleteButtonInstance()
getSpecificFeedbackOutput($active_id, $pass)
Returns the answer specific feedback for the question.
getPreviousSolutionProvidedMessage()
getAfterParticipationSuppressionQuestionPostVars()
Returns a list of postvars which will be suppressed in the form output when used in scoring adjustmen...
const REUSE_FILES_TBL_POSTVAR
getAggregatedAnswersView($relevant_answers)
Returns an html string containing a question specific representation of the answers so far given in t...
getSolutionOutput( $active_id, $pass=null, $graphicalOutput=false, $result_output=false, $show_question_only=true, $show_feedback=false, $show_correct_solution=false, $show_manual_scoring=false, $show_question_text=true)
Get the question solution output.
editQuestion($checkonly=false)
Creates an output of the edit form for the question.
const DELETE_FILES_TBL_POSTVAR
writeQuestionSpecificPostData(ilPropertyFormGUI $form)
Extracts the question specific values from $_POST and applies them to the data object.
__construct($id=-1)
assFileUploadGUI constructor
getTestOutput($active_id, $pass, $is_postponed=false, $use_post_solutions=false, $show_feedback=false)
getPreview($show_question_only=false, $showInlineFeedback=false)
buildTestPresentationFileTableCommandButtonInstance()
getPreviousSolutionConfirmationCheckboxHtml()
populateQuestionSpecificFormPart(ilPropertyFormGUI $form)
Adds the question specific forms parts to a question property form gui.
Class for file upload questions.
const REUSE_FILES_TBL_POSTVAR
const DELETE_FILES_TBL_POSTVAR
Basic GUI class for assessment questions.
const FORM_ENCODING_MULTIPART
populateTaxonomyFormSection(ilPropertyFormGUI $form)
setErrorMessage($errormessage)
addTab_QuestionHints(ilTabsGUI $tabs)
adds the hints tab to ilTabsGUI
writeQuestionGenericPostData()
addQuestionFormCommandButtons($form)
Add the command buttons of a question properties form.
getILIASPage($html="")
Returns the ILIAS Page around a question.
getQuestionTemplate()
get question template
addTab_SuggestedSolution(ilTabsGUI $tabs, $classname)
saveTaxonomyAssignments()
outQuestionPage($a_temp_var, $a_postponed=false, $active_id="", $html="")
output question page
isTestPresentationContext()
hasCorrectSolution($activeId, $passIndex)
addTab_QuestionFeedback(ilTabsGUI $tabs)
adds the feedback tab to ilTabsGUI
addBasicQuestionFormProperties($form)
Add basic question form properties: assessment: title, author, description, question,...
addTab_QuestionPreview(ilTabsGUI $tabsGUI)
getAnswerFeedbackOutput($active_id, $pass)
Returns the answer generic feedback depending on the results of the question.
const CSS_CLASS_FEEDBACK_WRONG
const CSS_CLASS_FEEDBACK_CORRECT
static _getUsePreviousAnswers($active_id, $user_active_user_setting=false)
Returns if the previous results should be hidden for a learner.
static _getPass($active_id)
Retrieves the actual pass of a given user for a given test.
special template class to simplify handling of ITX/PEAR
static getReturnToPageLink($q_id=null)
This class represents a text property in a property form.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
if(!array_key_exists('StateId', $_REQUEST)) $id
if(!is_dir( $entity_dir)) exit("Fatal Error ([A-Za-z0-9]+)\s+" &#(? foreach( $entity_files as $file) $output
Interface ilGuiQuestionScoringAdjustable.
if(isset($_POST['submit'])) $form
echo;exit;}function LogoutNotification($SessionID){ global $ilDB;$q="SELECT session_id, data FROM usr_session WHERE expires > (\w+)\|/" PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE