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