1<?php
2
3/* Copyright (c) 1998-2019 ILIAS open source, Extended GPL, see docs/LICENSE */
4
5/**
6 * Metric survey question GUI representation
7 *
8 * The SurveyMetricQuestionGUI class encapsulates the GUI representation
9 * for metric survey question types.
10 *
11 * @author		Helmut Schottmüller <helmut.schottmueller@mac.com>
12 */
13class SurveyMetricQuestionGUI extends SurveyQuestionGUI
14{
15    protected function initObject()
16    {
17        $this->object = new SurveyMetricQuestion();
18    }
19
20
21    //
22    // EDITOR
23    //
24
25    public function setQuestionTabs()
26    {
27        $this->setQuestionTabsForClass("surveymetricquestiongui");
28    }
29
30    protected function addFieldsToEditForm(ilPropertyFormGUI $a_form)
31    {
32        // subtype
33        $subtype = new ilRadioGroupInputGUI($this->lng->txt("subtype"), "type");
34        $subtype->setRequired(true);
35        $a_form->addItem($subtype);
36
37        // #10652
38        $opt = new ilRadioOption($this->lng->txt('non_ratio'), SurveyMetricQuestion::SUBTYPE_NON_RATIO, $this->lng->txt("metric_subtype_description_interval"));
39        $subtype->addOption($opt);
40
41        // minimum value
42        $minimum1 = new ilNumberInputGUI($this->lng->txt("minimum"), "minimum3");
43        $minimum1->setRequired(false);
44        $minimum1->setSize(6);
45        $opt->addSubItem($minimum1);
46
47        // maximum value
48        $maximum1 = new ilNumberInputGUI($this->lng->txt("maximum"), "maximum3");
49        $maximum1->setRequired(false);
50        $maximum1->setSize(6);
51        $opt->addSubItem($maximum1);
52
53        $opt = new ilRadioOption($this->lng->txt('ratio_non_absolute'), SurveyMetricQuestion::SUBTYPE_RATIO_NON_ABSOLUTE, $this->lng->txt("metric_subtype_description_rationonabsolute"));
54        $subtype->addOption($opt);
55
56        // minimum value
57        $minimum2 = new ilNumberInputGUI($this->lng->txt("minimum"), "minimum4");
58        $minimum2->setRequired(false);
59        $minimum2->setSize(6);
60        $minimum2->setMinValue(0);
61        $opt->addSubItem($minimum2);
62
63        // maximum value
64        $maximum2 = new ilNumberInputGUI($this->lng->txt("maximum"), "maximum4");
65        $maximum2->setRequired(false);
66        $maximum2->setSize(6);
67        $opt->addSubItem($maximum2);
68
69        $opt = new ilRadioOption($this->lng->txt('ratio_absolute'), SurveyMetricQuestion::SUBTYPE_RATIO_ABSOLUTE, $this->lng->txt("metric_subtype_description_ratioabsolute"));
70        $subtype->addOption($opt);
71
72        // minimum value
73        $minimum3 = new ilNumberInputGUI($this->lng->txt("minimum"), "minimum5");
74        $minimum3->setRequired(false);
75        $minimum3->setSize(6);
76        $minimum3->setMinValue(0);
77        $minimum3->setDecimals(0);
78        $opt->addSubItem($minimum3);
79
80        // maximum value
81        $maximum3 = new ilNumberInputGUI($this->lng->txt("maximum"), "maximum5");
82        $maximum3->setDecimals(0);
83        $maximum3->setRequired(false);
84        $maximum3->setSize(6);
85        $opt->addSubItem($maximum3);
86
87
88        // values
89        $subtype->setValue($this->object->getSubtype());
90
91        switch ($this->object->getSubtype()) {
92            case SurveyMetricQuestion::SUBTYPE_NON_RATIO:
93                $minimum1->setValue($this->object->getMinimum());
94                $maximum1->setValue($this->object->getMaximum());
95                break;
96
97            case SurveyMetricQuestion::SUBTYPE_RATIO_NON_ABSOLUTE:
98                $minimum2->setValue($this->object->getMinimum());
99                $maximum2->setValue($this->object->getMaximum());
100                break;
101
102            case SurveyMetricQuestion::SUBTYPE_RATIO_ABSOLUTE:
103                $minimum3->setValue($this->object->getMinimum());
104                $maximum3->setValue($this->object->getMaximum());
105                break;
106        }
107    }
108
109    protected function importEditFormValues(ilPropertyFormGUI $a_form)
110    {
111        $type = (int) $a_form->getInput("type");
112        $this->object->setOrientation($a_form->getInput("orientation"));
113        $this->object->setSubtype($type);
114        $this->object->setMinimum($a_form->getInput("minimum" . $type));
115        $this->object->setMaximum($a_form->getInput("maximum" . $type));
116    }
117
118    public function getParsedAnswers(array $a_working_data = null, $a_only_user_anwers = false)
119    {
120        $res = array();
121
122        if (is_array($a_working_data)) {
123            $res[] = array("value" => $a_working_data[0]["value"]);
124        }
125
126        return $res;
127    }
128
129    /**
130    * Creates a HTML representation of the question
131    *
132    * Creates a HTML representation of the question
133    *
134    * @access private
135    */
136    public function getPrintView($question_title = 1, $show_questiontext = 1, $survey_id = null, array $a_working_data = null)
137    {
138        $user_answer = null;
139        if ($a_working_data) {
140            $user_answer = $this->getParsedAnswers($a_working_data);
141            $user_answer = $user_answer[0]["value"];
142        }
143
144        $template = new ilTemplate("tpl.il_svy_qpl_metric_printview.html", true, true, "Modules/SurveyQuestionPool");
145        $template->setVariable("MIN_MAX", $this->object->getMinMaxText());
146
147        if ($show_questiontext) {
148            $this->outQuestionText($template);
149        }
150        if ($question_title) {
151            $template->setVariable("QUESTION_TITLE", $this->getPrintViewQuestionTitle($question_title));
152        }
153        $template->setVariable("TEXT_ANSWER", $this->lng->txt("answer"));
154        $template->setVariable("QUESTION_ID", $this->object->getId());
155
156        if (!is_array($a_working_data) || !trim($user_answer)) {
157            $solution_text = "";
158            $len = 10;
159            for ($i = 0; $i < 10; $i++) {
160                $solution_text .= "&#160;";
161            }
162        } else {
163            $solution_text = $user_answer;
164        }
165        $template->setVariable("TEXT_SOLUTION", $solution_text);
166
167        $template->parseCurrentBlock();
168        return $template->get();
169    }
170
171
172    //
173    // EXECUTION
174    //
175
176    /**
177    * Creates the question output form for the learner
178    *
179    * Creates the question output form for the learner
180    *
181    * @access public
182    */
183    public function getWorkingForm($working_data = "", $question_title = 1, $show_questiontext = 1, $error_message = "", $survey_id = null)
184    {
185        $template = new ilTemplate("tpl.il_svy_out_metric.html", true, true, "Modules/SurveyQuestionPool");
186        $template->setCurrentBlock("material_metric");
187        $template->setVariable("TEXT_MATERIAL", $this->getMaterialOutput());
188        $template->parseCurrentBlock();
189        $template->setVariable("MIN_MAX", $this->object->getMinMaxText());
190        /*if (strlen($this->object->getMinimum()))
191        {
192            $template->setCurrentBlock("minimum");
193            $template->setVariable("TEXT_MINIMUM", $this->lng->txt("minimum"));
194            $template->setVariable("VALUE_MINIMUM", $this->object->getMinimum());
195            $template->parseCurrentBlock();
196        }
197        if (strlen($this->object->getMaximum()))
198        {
199            $template->setCurrentBlock("maximum");
200            $template->setVariable("TEXT_MAXIMUM", $this->lng->txt("maximum"));
201            $template->setVariable("VALUE_MAXIMUM", $this->object->getMaximum());
202            $template->parseCurrentBlock();
203        }*/
204
205        $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, true));
206        if ($show_questiontext) {
207            $this->outQuestionText($template);
208        }
209        if ($question_title) {
210            $template->setVariable("QUESTION_TITLE", $this->object->getTitle());
211        }
212        $template->setVariable("TEXT_ANSWER", $this->lng->txt("answer"));
213        $template->setVariable("QUESTION_ID", $this->object->getId());
214        if (is_array($working_data)) {
215            $template->setVariable("VALUE_METRIC", $working_data[0]["value"]);
216        }
217
218        $template->setVariable("INPUT_SIZE", 10);
219
220        if (strcmp($error_message, "") != 0) {
221            $template->setVariable("ERROR_MESSAGE", "<p class=\"warning\">$error_message</p>");
222        }
223        $template->parseCurrentBlock();
224        return $template->get();
225    }
226}
227