ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilSingleChoiceWizardInputGUI.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once 'Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php';
5
14{
15 protected $values = array();
16 protected $allowMove = false;
17 protected $singleline = true;
18 protected $qstObject = null;
19 protected $suffixes = array();
20 protected $showPoints = true;
21 protected $hideImages = false;
22
29 function __construct($a_title = "", $a_postvar = "")
30 {
31 parent::__construct($a_title, $a_postvar);
32 $this->setSuffixes(array("jpg", "jpeg", "png", "gif"));
33 $this->setSize('25');
34 $this->validationRegexp = "";
35 }
36
42 function setValue($a_value)
43 {
44 $this->values = array();
45 if (is_array($a_value))
46 {
47 if (is_array($a_value['answer']))
48 {
49 foreach ($a_value['answer'] as $index => $value)
50 {
51 include_once "./Modules/TestQuestionPool/classes/class.assAnswerBinaryStateImage.php";
52 $answer = new ASS_AnswerBinaryStateImage($value, $a_value['points'][$index], $index, 1, $a_value['imagename'][$index]);
53 array_push($this->values, $answer);
54 }
55 }
56 }
57 }
58
64 function setSuffixes($a_suffixes)
65 {
66 $this->suffixes = $a_suffixes;
67 }
68
74 function setHideImages($a_hide)
75 {
76 $this->hideImages = $a_hide;
77 }
78
84 function getSuffixes()
85 {
86 return $this->suffixes;
87 }
88
89 public function setShowPoints($a_value)
90 {
91 $this->showPoints = $a_value;
92 }
93
94 public function getShowPoints()
95 {
96 return $this->showPoints;
97 }
98
104 function setValues($a_values)
105 {
106 $this->values = $a_values;
107 }
108
114 function getValues()
115 {
116 return $this->values;
117 }
118
124 function setSingleline($a_value)
125 {
126 $this->singleline = $a_value;
127 }
128
134 function getSingleline()
135 {
136 return $this->singleline;
137 }
138
144 function setQuestionObject($a_value)
145 {
146 $this->qstObject =& $a_value;
147 }
148
155 {
156 return $this->qstObject;
157 }
158
164 function setAllowMove($a_allow_move)
165 {
166 $this->allowMove = $a_allow_move;
167 }
168
174 function getAllowMove()
175 {
176 return $this->allowMove;
177 }
178
184 function checkInput()
185 {
186 global $lng;
187
188 include_once "./Services/AdvancedEditing/classes/class.ilObjAdvancedEditing.php";
189
190 if (is_array($_POST[$this->getPostVar()])) $_POST[$this->getPostVar()] = ilUtil::stripSlashesRecursive($_POST[$this->getPostVar()], true, ilObjAdvancedEditing::_getUsedHTMLTagsAsString("assessment"));
191 $foundvalues = $_POST[$this->getPostVar()];
192 if (is_array($foundvalues))
193 {
194 // check answers
195 if (is_array($foundvalues['answer']))
196 {
197 foreach ($foundvalues['answer'] as $aidx => $answervalue)
198 {
199 if (((strlen($answervalue)) == 0) && (strlen($foundvalues['imagename'][$aidx]) == 0))
200 {
201 $this->setAlert($lng->txt("msg_input_is_required"));
202 return FALSE;
203 }
204 }
205 }
206 // check points
207 $max = 0;
208 if (is_array($foundvalues['points']))
209 {
210 foreach ($foundvalues['points'] as $points)
211 {
212 if ($points > $max) $max = $points;
213 if (((strlen($points)) == 0) || (!is_numeric($points)))
214 {
215 $this->setAlert($lng->txt("form_msg_numeric_value_required"));
216 return FALSE;
217 }
218 }
219 }
220 if ($max == 0)
221 {
222 $this->setAlert($lng->txt("enter_enough_positive_points"));
223 return false;
224 }
225
226 if (is_array($_FILES) && count($_FILES) && $this->getSingleline() && (!$this->hideImages))
227 {
228 if (is_array($_FILES[$this->getPostVar()]['error']['image']))
229 {
230 foreach ($_FILES[$this->getPostVar()]['error']['image'] as $index => $error)
231 {
232 // error handling
233 if ($error > 0)
234 {
235 switch ($error)
236 {
237 case UPLOAD_ERR_INI_SIZE:
238 $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
239 return false;
240 break;
241
242 case UPLOAD_ERR_FORM_SIZE:
243 $this->setAlert($lng->txt("form_msg_file_size_exceeds"));
244 return false;
245 break;
246
247 case UPLOAD_ERR_PARTIAL:
248 $this->setAlert($lng->txt("form_msg_file_partially_uploaded"));
249 return false;
250 break;
251
252 case UPLOAD_ERR_NO_FILE:
253 if ($this->getRequired())
254 {
255 if ((!strlen($foundvalues['imagename'][$index])) && (!strlen($foundvalues['answer'][$index])))
256 {
257 $this->setAlert($lng->txt("form_msg_file_no_upload"));
258 return false;
259 }
260 }
261 break;
262
263 case UPLOAD_ERR_NO_TMP_DIR:
264 $this->setAlert($lng->txt("form_msg_file_missing_tmp_dir"));
265 return false;
266 break;
267
268 case UPLOAD_ERR_CANT_WRITE:
269 $this->setAlert($lng->txt("form_msg_file_cannot_write_to_disk"));
270 return false;
271 break;
272
273 case UPLOAD_ERR_EXTENSION:
274 $this->setAlert($lng->txt("form_msg_file_upload_stopped_ext"));
275 return false;
276 break;
277 }
278 }
279 }
280 }
281 else
282 {
283 if ($this->getRequired())
284 {
285 $this->setAlert($lng->txt("form_msg_file_no_upload"));
286 return false;
287 }
288 }
289
290 if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image']))
291 {
292 foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname)
293 {
294 $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
295 $filename_arr = pathinfo($filename);
296 $suffix = $filename_arr["extension"];
297 $mimetype = $_FILES[$this->getPostVar()]['type']['image'][$index];
298 $size_bytes = $_FILES[$this->getPostVar()]['size']['image'][$index];
299 // check suffixes
300 if (strlen($tmpname) && is_array($this->getSuffixes()))
301 {
302 if (!in_array(strtolower($suffix), $this->getSuffixes()))
303 {
304 $this->setAlert($lng->txt("form_msg_file_wrong_file_type"));
305 return false;
306 }
307 }
308 }
309 }
310
311 if (is_array($_FILES[$this->getPostVar()]['tmp_name']['image']))
312 {
313 foreach ($_FILES[$this->getPostVar()]['tmp_name']['image'] as $index => $tmpname)
314 {
315 $filename = $_FILES[$this->getPostVar()]['name']['image'][$index];
316 $filename_arr = pathinfo($filename);
317 $suffix = $filename_arr["extension"];
318 $mimetype = $_FILES[$this->getPostVar()]['type']['image'][$index];
319 $size_bytes = $_FILES[$this->getPostVar()]['size']['image'][$index];
320 // virus handling
321 if (strlen($tmpname))
322 {
323 $vir = ilUtil::virusHandling($tmpname, $filename);
324 if ($vir[0] == false)
325 {
326 $this->setAlert($lng->txt("form_msg_file_virus_found")."<br />".$vir[1]);
327 return false;
328 }
329 }
330 }
331 }
332 }
333 }
334 else
335 {
336 $this->setAlert($lng->txt("msg_input_is_required"));
337 return FALSE;
338 }
339
340 return $this->checkSubItemsInput();
341 }
342
348 function insert(&$a_tpl)
349 {
350 global $lng;
351
352 $tpl = new ilTemplate("tpl.prop_singlechoicewizardinput.html", true, true, "Modules/TestQuestionPool");
353 $i = 0;
354 foreach ($this->values as $value)
355 {
356 if ($this->getSingleline())
357 {
358 if (!$this->hideImages)
359 {
360 if (strlen($value->getImage()))
361 {
362 $imagename = $this->qstObject->getImagePathWeb() . $value->getImage();
363 if (($this->getSingleline()) && ($this->qstObject->getThumbSize()))
364 {
365 if (@file_exists($this->qstObject->getImagePath() . $this->qstObject->getThumbPrefix() . $value->getImage()))
366 {
367 $imagename = $this->qstObject->getImagePathWeb() . $this->qstObject->getThumbPrefix() . $value->getImage();
368 }
369 }
370 $tpl->setCurrentBlock('image');
371 $tpl->setVariable('SRC_IMAGE', $imagename);
372 $tpl->setVariable('IMAGE_NAME', $value->getImage());
373 $tpl->setVariable('ALT_IMAGE', ilUtil::prepareFormOutput($value->getAnswertext()));
374 $tpl->setVariable("TXT_DELETE_EXISTING", $lng->txt("delete_existing_file"));
375 $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
376 $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
377 $tpl->parseCurrentBlock();
378 }
379 $tpl->setCurrentBlock('addimage');
380 $tpl->setVariable("IMAGE_ID", $this->getPostVar() . "[image][$i]");
381 $tpl->setVariable("IMAGE_SUBMIT", $lng->txt("upload"));
382 $tpl->setVariable("IMAGE_ROW_NUMBER", $i);
383 $tpl->setVariable("IMAGE_POST_VAR", $this->getPostVar());
384 $tpl->parseCurrentBlock();
385 }
386
387 if (is_object($value))
388 {
389 $tpl->setCurrentBlock("prop_text_propval");
390 $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
391 $tpl->parseCurrentBlock();
392 if( $this->getShowPoints() ) {
393 $tpl->setCurrentBlock("prop_points_propval");
394 $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPoints()));
395 $tpl->parseCurrentBlock();
396 }
397 }
398 $tpl->setCurrentBlock('singleline');
399 $tpl->setVariable("SIZE", $this->getSize());
400 $tpl->setVariable("SINGLELINE_ID", $this->getPostVar() . "[answer][$i]");
401 $tpl->setVariable("SINGLELINE_ROW_NUMBER", $i);
402 $tpl->setVariable("SINGLELINE_POST_VAR", $this->getPostVar());
403 $tpl->setVariable("MAXLENGTH", $this->getMaxLength());
404 if ($this->getDisabled())
405 {
406 $tpl->setVariable("DISABLED_SINGLELINE", " disabled=\"disabled\"");
407 }
408 $tpl->parseCurrentBlock();
409 }
410 else if (!$this->getSingleline())
411 {
412 if (is_object($value))
413 {
414 if ($this->getShowPoints())
415 {
416 $tpl->setCurrentBlock("prop_points_propval");
417 $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getPoints()));
418 $tpl->parseCurrentBlock();
419 }
420 }
421 $tpl->setCurrentBlock('multiline');
422 $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($value->getAnswertext()));
423 $tpl->setVariable("MULTILINE_ID", $this->getPostVar() . "[answer][$i]");
424 $tpl->setVariable("MULTILINE_ROW_NUMBER", $i);
425 $tpl->setVariable("MULTILINE_POST_VAR", $this->getPostVar());
426 if ($this->getDisabled())
427 {
428 $tpl->setVariable("DISABLED_MULTILINE", " disabled=\"disabled\"");
429 }
430 $tpl->parseCurrentBlock();
431 }
432 if ($this->getAllowMove())
433 {
434 $tpl->setCurrentBlock("move");
435 $tpl->setVariable("CMD_UP", "cmd[up" . $this->getFieldId() . "][$i]");
436 $tpl->setVariable("CMD_DOWN", "cmd[down" . $this->getFieldId() . "][$i]");
437 $tpl->setVariable("ID", $this->getPostVar() . "[$i]");
438 $tpl->setVariable("UP_BUTTON", ilGlyphGUI::get(ilGlyphGUI::UP));
439 $tpl->setVariable("DOWN_BUTTON", ilGlyphGUI::get(ilGlyphGUI::DOWN));
440 $tpl->parseCurrentBlock();
441 }
442 if ($this->getShowPoints())
443 {
444 $tpl->setCurrentBlock("points");
445 $tpl->setVariable("POINTS_ID", $this->getPostVar() . "[points][$i]");
446 $tpl->setVariable("POINTS_POST_VAR", $this->getPostVar());
447 $tpl->setVariable("POINTS_ROW_NUMBER", $i);
448 $tpl->parseCurrentBlock();
449 }
450 $tpl->setCurrentBlock("row");
451 $tpl->setVariable("POST_VAR", $this->getPostVar());
452 $tpl->setVariable("ROW_NUMBER", $i);
453 $tpl->setVariable("ID", $this->getPostVar() . "[answer][$i]");
454 $tpl->setVariable("CMD_ADD", "cmd[add" . $this->getFieldId() . "][$i]");
455 $tpl->setVariable("CMD_REMOVE", "cmd[remove" . $this->getFieldId() . "][$i]");
456 if ($this->getDisabled())
457 {
458 $tpl->setVariable("DISABLED_POINTS", " disabled=\"disabled\"");
459 }
460 $tpl->setVariable("ADD_BUTTON", ilGlyphGUI::get(ilGlyphGUI::ADD));
461 $tpl->setVariable("REMOVE_BUTTON", ilGlyphGUI::get(ilGlyphGUI::REMOVE));
462 $tpl->parseCurrentBlock();
463 $i++;
464 }
465
466 if ($this->getSingleline())
467 {
468 if (!$this->hideImages)
469 {
470 if (is_array($this->getSuffixes()))
471 {
472 $suff_str = $delim = "";
473 foreach($this->getSuffixes() as $suffix)
474 {
475 $suff_str.= $delim.".".$suffix;
476 $delim = ", ";
477 }
478 $tpl->setCurrentBlock('allowed_image_suffixes');
479 $tpl->setVariable("TXT_ALLOWED_SUFFIXES", $lng->txt("file_allowed_suffixes")." ".$suff_str);
480 $tpl->parseCurrentBlock();
481 }
482 $tpl->setCurrentBlock("image_heading");
483 $tpl->setVariable("ANSWER_IMAGE", $lng->txt('answer_image'));
484 $tpl->setVariable("TXT_MAX_SIZE", ilUtil::getFileSizeInfo());
485 $tpl->parseCurrentBlock();
486 }
487 }
488
489 if ($this->getShowPoints())
490 {
491 $tpl->setCurrentBlock("points_heading");
492 $tpl->setVariable("POINTS_TEXT", $lng->txt('points'));
493 $tpl->parseCurrentBlock();
494 }
495
496 $tpl->setVariable("ELEMENT_ID", $this->getPostVar());
497 $tpl->setVariable("TEXT_YES", $lng->txt('yes'));
498 $tpl->setVariable("TEXT_NO", $lng->txt('no'));
499 $tpl->setVariable("DELETE_IMAGE_HEADER", $lng->txt('delete_image_header'));
500 $tpl->setVariable("DELETE_IMAGE_QUESTION", $lng->txt('delete_image_question'));
501 $tpl->setVariable("ANSWER_TEXT", $lng->txt('answer_text'));
502 $tpl->setVariable("COMMANDS_TEXT", $lng->txt('actions'));
503
504 $a_tpl->setCurrentBlock("prop_generic");
505 $a_tpl->setVariable("PROP_GENERIC", $tpl->get());
506 $a_tpl->parseCurrentBlock();
507
508 global $tpl;
509 $tpl->addJavascript("./Services/Form/js/ServiceFormWizardInput.js");
510 $tpl->addJavascript("./Modules/TestQuestionPool/templates/default/singlechoicewizard.js");
511 }
512}
global $tpl
Definition: ilias.php:8
$filename
Definition: buildRTE.php:89
Class for answers with a binary state indicator.
getPostVar()
Get Post Variable.
setAlert($a_alert)
Set Alert Text.
getFieldId()
Get Post Variable.
static get($a_glyph, $a_text="")
Get glyph html.
& _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.
checkInput()
Check input, strip slashes etc.
setQuestionObject($a_value)
Set question object.
setSuffixes($a_suffixes)
Set Accepted Suffixes.
__construct($a_title="", $a_postvar="")
Constructor.
special template class to simplify handling of ITX/PEAR
This class represents a text property in a property form.
getMaxLength()
Get Max Length.
setSize($a_size)
Set Size.
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