ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilMultipleChoiceWizardInputGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once "./Modules/TestQuestionPool/classes/class.ilSingleChoiceWizardInputGUI.php";
5 
14 {
20  public function setValue($a_value)
21  {
22  $this->values = array();
23  if (is_array($a_value)) {
24  if (is_array($a_value['answer'])) {
25  foreach ($a_value['answer'] as $index => $value) {
26  include_once "./Modules/TestQuestionPool/classes/class.assAnswerMultipleResponseImage.php";
27  $answer = new ASS_AnswerMultipleResponseImage($value, $a_value['points'][$index], $index, $a_value['points_unchecked'][$index], $a_value['imagename'][$index]);
28  array_push($this->values, $answer);
29  }
30  }
31  }
32  }
33 
39  public function checkInput()
40  {
41  global $DIC;
42  $lng = $DIC['lng'];
43 
44  include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
45  if (is_array($_POST[$this->getPostVar()])) {
47  }
48  $foundvalues = $_POST[$this->getPostVar()];
49  if (is_array($foundvalues)) {
50  // check answers
51  if (is_array($foundvalues['answer'])) {
52  foreach ($foundvalues['answer'] as $aidx => $answervalue) {
53  if (((strlen($answervalue)) == 0) && (strlen($foundvalues['imagename'][$aidx]) == 0)) {
54  $this->setAlert($lng->txt("msg_input_is_required"));
55  return false;
56  }
57  }
58  }
59  // check points
60  $max = 0;
61  if (is_array($foundvalues['points'])) {
62  foreach ($foundvalues['points'] as $points) {
63  if ($points > $max) {
64  $max = $points;
65  }
66  if (((strlen($points)) == 0) || (!is_numeric($points))) {
67  $this->setAlert($lng->txt("form_msg_numeric_value_required"));
68  return false;
69  }
70  }
71  foreach ($foundvalues['points_unchecked'] as $points) {
72  if (((strlen($points)) == 0) || (!is_numeric($points))) {
73  $this->setAlert($lng->txt("form_msg_numeric_value_required"));
74  return false;
75  }
76  }
77  }
78  if ($max == 0) {
79  $this->setAlert($lng->txt("enter_enough_positive_points_checked"));
80  return false;
81  }
82 
83  if (is_array($_FILES) && count($_FILES) && $this->getSingleline()) {
84  if (!$this->hideImages) {
85  if (is_array($_FILES[$this->getPostVar()]['error']['image'])) {
86  foreach ($_FILES[$this->getPostVar()]['error']['image'] as $index => $error) {
87  // error handling
88  if ($error > 0) {
89  switch ($error) {
90  case UPLOAD_ERR_INI_SIZE:
91  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
92  return false;
93  break;
94 
95  case UPLOAD_ERR_FORM_SIZE:
96  $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
97  return false;
98  break;
99 
100  case UPLOAD_ERR_PARTIAL:
101  $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
102  return false;
103  break;
104 
105  case UPLOAD_ERR_NO_FILE:
106  if ($this->getRequired()) {
107  if ((!strlen($foundvalues['imagename'][$index])) && (!strlen($foundvalues['answer'][$index]))) {
108  $this->setAlert($lng->txt("form_msg_file_no_upload"));
109  return false;
110  }
111  }
112  break;
113 
114  case UPLOAD_ERR_NO_TMP_DIR:
115  $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
116  return false;
117  break;
118 
119  case UPLOAD_ERR_CANT_WRITE:
120  $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
121  return false;
122  break;
123 
124  case UPLOAD_ERR_EXTENSION:
125  $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
126  return false;
127  break;
128  }
129  }
130  }
131  } else {
132  if ($this->getRequired()) {
133  $this->setAlert($lng->txt("form_msg_file_no_upload"));
134  return false;
135  }
136  }
137 
138  if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image'])) {
139  foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname) {
140  $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
141  $filename_arr = pathinfo($filename);
142  $suffix = $filename_arr["extension"];
143  $mimetype = $_FILES[$this->getPostVar()]['type']['image'][$index];
144  $size_bytes = $_FILES[$this->getPostVar()]['size']['image'][$index];
145  // check suffixes
146  if (strlen($tmpname) && is_array($this->getSuffixes())) {
147  if (!in_array(strtolower($suffix), $this->getSuffixes())) {
148  $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
149  return false;
150  }
151  }
152  }
153  }
154 
155  if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image'])) {
156  foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname) {
157  $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
158  $filename_arr = pathinfo($filename);
159  $suffix = $filename_arr["extension"];
160  $mimetype = $_FILES[$this->getPostVar()]['type']['image'][$index];
161  $size_bytes = $_FILES[$this->getPostVar()]['size']['image'][$index];
162  // virus handling
163  if (strlen($tmpname)) {
164  $vir = ilUtil::virusHandling($tmpname, $filename);
165  if ($vir[0] == false) {
166  $this->setAlert($lng->txt("form_msg_file_virus_found") . "<br />" . $vir[1]);
167  return false;
168  }
169  }
170  }
171  }
172  }
173  }
174  } else {
175  $this->setAlert($lng->txt("msg_input_is_required"));
176  return false;
177  }
178 
179  return $this->checkSubItemsInput();
180  }
181 
186  public function insert($a_tpl)
187  {
188  global $DIC;
189  $lng = $DIC['lng'];
190 
191  $tpl = new ilTemplate("tpl.prop_multiplechoicewizardinput.html", true, true, "Modules/TestQuestionPool");
192  $i = 0;
193  foreach ($this->values as $value) {
194  if ($this->getSingleline()) {
195  if (!$this->hideImages) {
196  if (strlen($value->getImage())) {
197  $imagename = $this->qstObject->getImagePathWeb() . $value->getImage();
198  if (($this->getSingleline()) && ($this->qstObject->getThumbSize())) {
199  if (@file_exists($this->qstObject->getImagePath() . $this->qstObject->getThumbPrefix() . $value->getImage())) {
200  $imagename = $this->qstObject->getImagePathWeb() . $this->qstObject->getThumbPrefix() . $value->getImage();
201  }
202  }
203  $tpl->setCurrentBlock('image');
204  $tpl->setVariable('SRC_IMAGE', $imagename);
205  $tpl->setVariable('IMAGE_NAME', $value->getImage());
206  $tpl->setVariable('ALT_IMAGE', ilUtil::prepareFormOutput($value->getAnswertext()));
207  $tpl->setVariable("TXT_DELETE_EXISTING", $lng->txt("delete_existing_file"));
208  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
209  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
210  $tpl->parseCurrentBlock();
211  }
212  $tpl->setCurrentBlock('addimage');
213  $tpl->setVariable("IMAGE_BROWSE", $lng->txt('select_file'));
214  $tpl->setVariable("IMAGE_ID", $this->getPostVar() . "[image][$i]");
215  $tpl->setVariable("IMAGE_SUBMIT", $lng->txt("upload"));
216  $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
217  $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
218  $tpl->parseCurrentBlock();
219  }
220 
221  if (is_object($value)) {
222  $tpl->setCurrentBlock("prop_text_propval");
223  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
224  $tpl->parseCurrentBlock();
225  $tpl->setCurrentBlock("prop_points_propval");
226  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsChecked()));
227  $tpl->parseCurrentBlock();
228  $tpl->setCurrentBlock("prop_points_unchecked_propval");
229  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsUnchecked()));
230  $tpl->parseCurrentBlock();
231  }
232  $tpl->setCurrentBlock('singleline');
233  $tpl->setVariable("SIZE", $this->getSize());
234  $tpl->setVariable("SINGLELINE_ID", $this->getPostVar() . "[answer][$i]");
235  $tpl->setVariable("SINGLELINE_ROW_NUMBER", $i);
236  $tpl->setVariable("SINGLELINE_POST_VAR", $this->getPostVar());
237  $tpl->setVariable("MAXLENGTH", $this->getMaxLength());
238  if ($this->getDisabled()) {
239  $tpl->setVariable("DISABLED_SINGLELINE", " disabled=\"disabled\"");
240  }
241  $tpl->parseCurrentBlock();
242  } elseif (!$this->getSingleline()) {
243  if (is_object($value)) {
244  $tpl->setCurrentBlock("prop_points_propval");
245  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPoints()));
246  $tpl->parseCurrentBlock();
247  $tpl->setCurrentBlock("prop_points_unchecked_propval");
248  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPointsUnchecked()));
249  $tpl->parseCurrentBlock();
250  }
251  $tpl->setCurrentBlock('multiline');
252  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
253  $tpl->setVariable("MULTILINE_ID", $this->getPostVar() . "[answer][$i]");
254  $tpl->setVariable("MULTILINE_ROW_NUMBER", $i);
255  $tpl->setVariable("MULTILINE_POST_VAR", $this->getPostVar());
256  if ($this->getDisabled()) {
257  $tpl->setVariable("DISABLED_MULTILINE", " disabled=\"disabled\"");
258  }
259  $tpl->parseCurrentBlock();
260  }
261  if ($this->getAllowMove()) {
262  $tpl->setCurrentBlock("move");
263  $tpl->setVariable("CMD_UP", "cmd[up" . $this->getFieldId() . "][$i]");
264  $tpl->setVariable("CMD_DOWN", "cmd[down" . $this->getFieldId() . "][$i]");
265  $tpl->setVariable("ID", $this->getPostVar() . "[$i]");
266  $tpl->setVariable("UP_BUTTON", ilGlyphGUI::get(ilGlyphGUI::UP));
267  $tpl->setVariable("DOWN_BUTTON", ilGlyphGUI::get(ilGlyphGUI::DOWN));
268  $tpl->parseCurrentBlock();
269  }
270  $tpl->setCurrentBlock("row");
271  $tpl->setVariable("POST_VAR", $this->getPostVar());
272  $tpl->setVariable("ROW_NUMBER", $i);
273  $tpl->setVariable("ID", $this->getPostVar() . "[answer][$i]");
274  $tpl->setVariable("POINTS_ID", $this->getPostVar() . "[points][$i]");
275  $tpl->setVariable("POINTS_UNCHECKED_ID", $this->getPostVar() . "[points_unchecked][$i]");
276  $tpl->setVariable("CMD_ADD", "cmd[add" . $this->getFieldId() . "][$i]");
277  $tpl->setVariable("CMD_REMOVE", "cmd[remove" . $this->getFieldId() . "][$i]");
278  if ($this->getDisabled()) {
279  $tpl->setVariable("DISABLED_POINTS", " disabled=\"disabled\"");
280  }
281  $tpl->setVariable("ADD_BUTTON", ilGlyphGUI::get(ilGlyphGUI::ADD));
282  $tpl->setVariable("REMOVE_BUTTON", ilGlyphGUI::get(ilGlyphGUI::REMOVE));
283  $tpl->parseCurrentBlock();
284  $i++;
285  }
286 
287  if ($this->getSingleline()) {
288  if (!$this->hideImages) {
289  if (is_array($this->getSuffixes())) {
290  $suff_str = $delim = "";
291  foreach ($this->getSuffixes() as $suffix) {
292  $suff_str .= $delim . "." . $suffix;
293  $delim = ", ";
294  }
295  $tpl->setCurrentBlock('allowed_image_suffixes');
296  $tpl->setVariable("TXT_ALLOWED_SUFFIXES", $lng->txt("file_allowed_suffixes") . " " . $suff_str);
297  $tpl->parseCurrentBlock();
298  }
299 
300  $tpl->setCurrentBlock("image_heading");
301  $tpl->setVariable("ANSWER_IMAGE", $lng->txt('answer_image'));
302  $tpl->setVariable("TXT_MAX_SIZE", ilUtil::getFileSizeInfo());
303  $tpl->parseCurrentBlock();
304  }
305  }
306 
307  $tpl->setVariable("ELEMENT_ID", $this->getPostVar());
308  $tpl->setVariable("TEXT_YES", $lng->txt('yes'));
309  $tpl->setVariable("TEXT_NO", $lng->txt('no'));
310  $tpl->setVariable("DELETE_IMAGE_HEADER", $lng->txt('delete_image_header'));
311  $tpl->setVariable("DELETE_IMAGE_QUESTION", $lng->txt('delete_image_question'));
312  $tpl->setVariable("ANSWER_TEXT", $lng->txt('answer_text'));
313  $tpl->setVariable("POINTS_TEXT", $lng->txt('points'));
314  $tpl->setVariable("COMMANDS_TEXT", $lng->txt('actions'));
315  $tpl->setVariable("POINTS_CHECKED_TEXT", $lng->txt('checkbox_checked'));
316  $tpl->setVariable("POINTS_UNCHECKED_TEXT", $lng->txt('checkbox_unchecked'));
317 
318  $a_tpl->setCurrentBlock("prop_generic");
319  $a_tpl->setVariable("PROP_GENERIC", $tpl->get());
320  $a_tpl->parseCurrentBlock();
321 
322  global $DIC;
323  $tpl = $DIC['tpl'];
324  $tpl->addJavascript("./Services/Form/js/ServiceFormWizardInput.js");
325  $tpl->addJavascript("./Modules/TestQuestionPool/templates/default/multiplechoicewizard.js");
326  }
327 }
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
getMaxLength()
Get Max Length.
static virusHandling($a_file, $a_orig_name="", $a_clean=true)
scan file for viruses and clean files if possible
static _getUsedHTMLTagsAsString($a_module="")
Returns a string of all allowed HTML tags for text editing.
global $DIC
Definition: saml.php:7
$tpl
Definition: ilias.php:10
getPostVar()
Get Post Variable.
ASS_AnswerBinaryStateImage is a class for answers with a binary state indicator (checked/unchecked, set/unset) and an image file.
static get($a_glyph, $a_text="")
Get glyph html.
static getFileSizeInfo()
$index
Definition: metadata.php:60
setAlert($a_alert)
Set Alert Text.
checkInput()
Check input, strip slashes etc.
getFieldId()
Get Post Variable.
special template class to simplify handling of ITX/PEAR
static stripSlashesRecursive($a_data, $a_strip_html=true, $a_allow="")
Strip slashes from array and sub-arrays.
$filename
Definition: buildRTE.php:89
This class represents a multiple choice wizard property in a property form.
This class represents a single choice wizard property in a property form.
$i
Definition: disco.tpl.php:19
$_POST["username"]