ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.SurveyMetricQuestionGUI.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 
24 include_once "./Modules/SurveyQuestionPool/classes/class.SurveyQuestionGUI.php";
25 
38 {
39  protected function initObject()
40  {
41  include_once "./Modules/SurveyQuestionPool/classes/class.SurveyMetricQuestion.php";
42  $this->object = new SurveyMetricQuestion();
43  }
44 
45 
46  //
47  // EDITOR
48  //
49 
50  public function setQuestionTabs()
51  {
52  $this->setQuestionTabsForClass("surveymetricquestiongui");
53  }
54 
55  protected function addFieldsToEditForm(ilPropertyFormGUI $a_form)
56  {
57  // subtype
58  $subtype = new ilRadioGroupInputGUI($this->lng->txt("subtype"), "type");
59  $subtype->setRequired(true);
60  $a_form->addItem($subtype);
61 
62  // #10652
63  $opt = new ilRadioOption($this->lng->txt('non_ratio'), SurveyMetricQuestion::SUBTYPE_NON_RATIO, $this->lng->txt("metric_subtype_description_interval"));
64  $subtype->addOption($opt);
65 
66  // minimum value
67  $minimum1 = new ilNumberInputGUI($this->lng->txt("minimum"), "minimum3");
68  $minimum1->setRequired(false);
69  $minimum1->setSize(6);
70  $opt->addSubItem($minimum1);
71 
72  // maximum value
73  $maximum1 = new ilNumberInputGUI($this->lng->txt("maximum"), "maximum3");
74  $maximum1->setRequired(false);
75  $maximum1->setSize(6);
76  $opt->addSubItem($maximum1);
77 
78  $opt = new ilRadioOption($this->lng->txt('ratio_non_absolute'), SurveyMetricQuestion::SUBTYPE_RATIO_NON_ABSOLUTE, $this->lng->txt("metric_subtype_description_rationonabsolute"));
79  $subtype->addOption($opt);
80 
81  // minimum value
82  $minimum2 = new ilNumberInputGUI($this->lng->txt("minimum"), "minimum4");
83  $minimum2->setRequired(false);
84  $minimum2->setSize(6);
85  $minimum2->setMinValue(0);
86  $opt->addSubItem($minimum2);
87 
88  // maximum value
89  $maximum2 = new ilNumberInputGUI($this->lng->txt("maximum"), "maximum4");
90  $maximum2->setRequired(false);
91  $maximum2->setSize(6);
92  $opt->addSubItem($maximum2);
93 
94  $opt = new ilRadioOption($this->lng->txt('ratio_absolute'), SurveyMetricQuestion::SUBTYPE_RATIO_ABSOLUTE, $this->lng->txt("metric_subtype_description_ratioabsolute"));
95  $subtype->addOption($opt);
96 
97  // minimum value
98  $minimum3 = new ilNumberInputGUI($this->lng->txt("minimum"), "minimum5");
99  $minimum3->setRequired(false);
100  $minimum3->setSize(6);
101  $minimum3->setMinValue(0);
102  $minimum3->setDecimals(0);
103  $opt->addSubItem($minimum3);
104 
105  // maximum value
106  $maximum3 = new ilNumberInputGUI($this->lng->txt("maximum"), "maximum5");
107  $maximum3->setDecimals(0);
108  $maximum3->setRequired(false);
109  $maximum3->setSize(6);
110  $opt->addSubItem($maximum3);
111 
112 
113  // values
114  $subtype->setValue($this->object->getSubtype());
115 
116  switch($this->object->getSubtype())
117  {
119  $minimum1->setValue($this->object->getMinimum());
120  $maximum1->setValue($this->object->getMaximum());
121  break;
122 
124  $minimum2->setValue($this->object->getMinimum());
125  $maximum2->setValue($this->object->getMaximum());
126  break;
127 
129  $minimum3->setValue($this->object->getMinimum());
130  $maximum3->setValue($this->object->getMaximum());
131  break;
132  }
133  }
134 
135  protected function importEditFormValues(ilPropertyFormGUI $a_form)
136  {
137  $type = (int)$a_form->getInput("type");
138  $this->object->setOrientation($a_form->getInput("orientation"));
139  $this->object->setSubtype($type);
140  $this->object->setMinimum($a_form->getInput("minimum".$type));
141  $this->object->setMaximum($a_form->getInput("maximum".$type));
142  }
143 
144  public function getParsedAnswers(array $a_working_data = null, $a_only_user_anwers = false)
145  {
146  $res = array();
147 
148  if(is_array($a_working_data))
149  {
150  $res[] = array("value" => $a_working_data[0]["value"]);
151  }
152 
153  return $res;
154  }
155 
163  function getPrintView($question_title = 1, $show_questiontext = 1, $survey_id = null, array $a_working_data = null)
164  {
165  $user_answer = null;
166  if($a_working_data)
167  {
168  $user_answer = $this->getParsedAnswers($a_working_data);
169  $user_answer = $user_answer[0]["value"];
170  }
171 
172  $template = new ilTemplate("tpl.il_svy_qpl_metric_printview.html", TRUE, TRUE, "Modules/SurveyQuestionPool");
173  $template->setVariable("MIN_MAX", $this->object->getMinMaxText());
174 
175  if ($show_questiontext)
176  {
177  $this->outQuestionText($template);
178  }
179  if ($question_title)
180  {
181  $template->setVariable("QUESTION_TITLE", $this->object->getTitle());
182  }
183  $template->setVariable("TEXT_ANSWER", $this->lng->txt("answer"));
184  $template->setVariable("QUESTION_ID", $this->object->getId());
185 
186  if(!is_array($a_working_data) || !trim($user_answer))
187  {
188  $solution_text = "";
189  $len = 10;
190  for ($i = 0; $i < 10; $i++) $solution_text .= "&#160;";
191  }
192  else
193  {
194  $solution_text = $user_answer;
195  }
196  $template->setVariable("TEXT_SOLUTION", $solution_text);
197 
198  $template->parseCurrentBlock();
199  return $template->get();
200  }
201 
202 
203  //
204  // EXECUTION
205  //
206 
214  function getWorkingForm($working_data = "", $question_title = 1, $show_questiontext = 1, $error_message = "", $survey_id = null)
215  {
216  $template = new ilTemplate("tpl.il_svy_out_metric.html", TRUE, TRUE, "Modules/SurveyQuestionPool");
217  $template->setCurrentBlock("material_metric");
218  $template->setVariable("TEXT_MATERIAL", $this->getMaterialOutput());
219  $template->parseCurrentBlock();
220  $template->setVariable("MIN_MAX", $this->object->getMinMaxText());
221  /*if (strlen($this->object->getMinimum()))
222  {
223  $template->setCurrentBlock("minimum");
224  $template->setVariable("TEXT_MINIMUM", $this->lng->txt("minimum"));
225  $template->setVariable("VALUE_MINIMUM", $this->object->getMinimum());
226  $template->parseCurrentBlock();
227  }
228  if (strlen($this->object->getMaximum()))
229  {
230  $template->setCurrentBlock("maximum");
231  $template->setVariable("TEXT_MAXIMUM", $this->lng->txt("maximum"));
232  $template->setVariable("VALUE_MAXIMUM", $this->object->getMaximum());
233  $template->parseCurrentBlock();
234  }*/
235 
236  $template->setVariable("QUESTIONTEXT", $this->object->prepareTextareaOutput($questiontext, TRUE));
237  if ($show_questiontext)
238  {
239  $this->outQuestionText($template);
240  }
241  if ($question_title)
242  {
243  $template->setVariable("QUESTION_TITLE", $this->object->getTitle());
244  }
245  $template->setVariable("TEXT_ANSWER", $this->lng->txt("answer"));
246  $template->setVariable("QUESTION_ID", $this->object->getId());
247  if (is_array($working_data))
248  {
249  $template->setVariable("VALUE_METRIC", $working_data[0]["value"]);
250  }
251 
252  $template->setVariable("INPUT_SIZE", 10);
253 
254  if (strcmp($error_message, "") != 0)
255  {
256  $template->setVariable("ERROR_MESSAGE", "<p class=\"warning\">$error_message</p>");
257  }
258  $template->parseCurrentBlock();
259  return $template->get();
260  }
261 
262 
263  //
264  // EVALUATION
265  //
266 
275  function getCumulatedResultsDetails($survey_id, $counter, $finished_ids)
276  {
277  if (count($this->cumulated) == 0)
278  {
279  if(!$finished_ids)
280  {
281  include_once "./Modules/Survey/classes/class.ilObjSurvey.php";
282  $nr_of_users = ilObjSurvey::_getNrOfParticipants($survey_id);
283  }
284  else
285  {
286  $nr_of_users = sizeof($finished_ids);
287  }
288  $this->cumulated =& $this->object->getCumulatedResults($survey_id, $nr_of_users, $finished_ids);
289  }
290 
291  $output = "";
292  include_once "./Services/UICore/classes/class.ilTemplate.php";
293  $template = new ilTemplate("tpl.il_svy_svy_cumulated_results_detail.html", TRUE, TRUE, "Modules/Survey");
294 
295  $template->setCurrentBlock("detail_row");
296  $template->setVariable("TEXT_OPTION", $this->lng->txt("question"));
297  $questiontext = $this->object->getQuestiontext();
298  $template->setVariable("TEXT_OPTION_VALUE", $this->object->prepareTextareaOutput($questiontext, TRUE));
299  $template->parseCurrentBlock();
300  $template->setCurrentBlock("detail_row");
301  $template->setVariable("TEXT_OPTION", $this->lng->txt("question_type"));
302  $template->setVariable("TEXT_OPTION_VALUE", $this->lng->txt($this->getQuestionType()));
303  $template->parseCurrentBlock();
304  $template->setCurrentBlock("detail_row");
305  $template->setVariable("TEXT_OPTION", $this->lng->txt("users_answered"));
306  $template->setVariable("TEXT_OPTION_VALUE", $this->cumulated["USERS_ANSWERED"]);
307  $template->parseCurrentBlock();
308  $template->setCurrentBlock("detail_row");
309  $template->setVariable("TEXT_OPTION", $this->lng->txt("users_skipped"));
310  $template->setVariable("TEXT_OPTION_VALUE", $this->cumulated["USERS_SKIPPED"]);
311  $template->parseCurrentBlock();
312  $template->setCurrentBlock("detail_row");
313  $template->setVariable("TEXT_OPTION", $this->lng->txt("subtype"));
314  switch ($this->object->getSubType())
315  {
317  $template->setVariable("TEXT_OPTION_VALUE", $this->lng->txt("non_ratio"));
318  break;
320  $template->setVariable("TEXT_OPTION_VALUE", $this->lng->txt("ratio_non_absolute"));
321  break;
323  $template->setVariable("TEXT_OPTION_VALUE", $this->lng->txt("ratio_absolute"));
324  break;
325  }
326  $template->parseCurrentBlock();
327 
328  /*
329  $template->setCurrentBlock("detail_row");
330  $template->setVariable("TEXT_OPTION", $this->lng->txt("mode"));
331  $template->setVariable("TEXT_OPTION_VALUE", $this->cumulated["MODE"]);
332  $template->parseCurrentBlock();
333  $template->setCurrentBlock("detail_row");
334  $template->setVariable("TEXT_OPTION", $this->lng->txt("mode_nr_of_selections"));
335  $template->setVariable("TEXT_OPTION_VALUE", $this->cumulated["MODE_NR_OF_SELECTIONS"]);
336  $template->parseCurrentBlock();
337  */
338  $template->setCurrentBlock("detail_row");
339  $template->setVariable("TEXT_OPTION", $this->lng->txt("median"));
340  $template->setVariable("TEXT_OPTION_VALUE", $this->cumulated["MEDIAN"]);
341  $template->parseCurrentBlock();
342  $template->setCurrentBlock("detail_row");
343  $template->setVariable("TEXT_OPTION", $this->lng->txt("arithmetic_mean"));
344  $template->setVariable("TEXT_OPTION_VALUE", $this->cumulated["ARITHMETIC_MEAN"]);
345  $template->parseCurrentBlock();
346 
347  $template->setCurrentBlock("detail_row");
348  $template->setVariable("TEXT_OPTION", $this->lng->txt("values"));
349  $values = "";
350  if (is_array($this->cumulated["values"]))
351  {
352  foreach ($this->cumulated["values"] as $key => $value)
353  {
354  $values .= "<li>" . $value["value"] . ": n=" . $value["selected"] .
355  " (" . sprintf("%.2f", 100*$value["percentage"]) . "%)</li>";
356  }
357  }
358  $values = "<ol>$values</ol>";
359  $template->setVariable("TEXT_OPTION_VALUE", $values);
360  $template->parseCurrentBlock();
361 
362 
363  // chart
364  $template->setCurrentBlock("detail_row");
365  $template->setVariable("TEXT_OPTION", $this->lng->txt("chart"));
366  $template->setVariable("TEXT_OPTION_VALUE", $this->renderChart("svy_ch_".$this->object->getId(), $this->cumulated["values"]));
367  $template->parseCurrentBlock();
368 
369 
370  $template->setVariable("QUESTION_TITLE", "$counter. ".$this->object->getTitle());
371  return $template->get();
372  }
373 
374  protected function renderChart($a_id, $a_values)
375  {
376  include_once "Services/Chart/classes/class.ilChart.php";
378  $chart->setsize(700, 400);
379 
380  $legend = new ilChartLegend();
381  $chart->setLegend($legend);
382 
383  $data = $chart->getDataInstance(ilChartGrid::DATA_BARS);
384  $data->setLabel($this->lng->txt("users_answered"));
385  $data->setBarOptions(0.1, "center");
386 
387  if($a_values)
388  {
389  $labels = array();
390  foreach($a_values as $idx => $answer)
391  {
392  $data->addPoint($answer["value"], $answer["selected"]);
393  $labels[$answer["value"]] = $answer["value"];
394  }
395  $chart->addData($data);
396 
397  $chart->setTicks($labels, false, true);
398  }
399 
400  return "<div style=\"margin:10px\">".$chart->getHTML()."</div>";
401  }
402 }
403 
404 ?>