ILIAS  release_4-3 Revision
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilTextInputGUI.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 include_once("./Services/Table/interfaces/interface.ilTableFilterItem.php");
5 include_once("./Services/Form/classes/class.ilSubEnabledFormPropertyGUI.php");
6 include_once 'Services/UIComponent/Toolbar/interfaces/interface.ilToolbarItem.php';
7 
16 {
17  protected $value;
18  protected $maxlength = 200;
19  protected $size = 40;
20  protected $validationRegexp;
21  protected $validationFailureMessage = '';
22  protected $suffix;
23  protected $style_css;
24  protected $css_class;
25  protected $ajax_datasource;
26  protected $submit_form_on_enter = false;
27 
34  function __construct($a_title = "", $a_postvar = "")
35  {
36  parent::__construct($a_title, $a_postvar);
37  $this->setInputType("text");
38  $this->validationRegexp = "";
39  }
40 
46  function setValue($a_value)
47  {
48  if($this->getMulti() && is_array($a_value))
49  {
50  $this->setMultiValues($a_value);
51  $a_value = array_shift($a_value);
52  }
53  $this->value = $a_value;
54  }
55 
61  function getValue()
62  {
63  return $this->value;
64  }
65 
66  public function setMulti($a_multi, $a_sortable = false)
67  {
68  $this->multi = (bool)$a_multi;
69  $this->multi_sortable = (bool)$a_sortable;
70  }
71 
77  public function setValidationFailureMessage($a_msg)
78  {
79  $this->validationFailureMessage = $a_msg;
80  }
81 
82  public function getValidationFailureMessage()
83  {
85  }
86 
92  public function setValidationRegexp($a_value)
93  {
94  $this->validationRegexp = $a_value;
95  }
96 
103  {
105  }
106 
112  function setMaxLength($a_maxlength)
113  {
114  $this->maxlength = $a_maxlength;
115  }
116 
122  function getMaxLength()
123  {
124  return $this->maxlength;
125  }
126 
132  function setSize($a_size)
133  {
134  $this->size = $a_size;
135  }
136 
142  function setInlineStyle($a_style)
143  {
144  $this->style_css = $a_style;
145  }
146 
152  function getInlineStyle()
153  {
154  return $this->style_css;
155  }
156 
157  public function setCssClass($a_class)
158  {
159  $this->css_class = $a_class;
160  }
161 
162  public function getCssClass()
163  {
164  return $this->css_class;
165  }
166 
167 
173  function setValueByArray($a_values)
174  {
175  $this->setValue($a_values[$this->getPostVar()]);
176  }
177 
183  function getSize()
184  {
185  return $this->size;
186  }
187 
193  function setSuffix($a_value)
194  {
195  $this->suffix = $a_value;
196  }
197 
203  function getSuffix()
204  {
205  return $this->suffix;
206  }
207 
215  public function setInputType($a_type)
216  {
217  $this->input_type = $a_type;
218  }
219 
225  public function getInputType()
226  {
227  return $this->input_type;
228  }
229 
235  function setSubmitFormOnEnter($a_val)
236  {
237  $this->submit_form_on_enter = $a_val;
238  }
239 
246  {
248  }
249 
255  function checkInput()
256  {
257  global $lng;
258 
259  if(!$this->getMulti())
260  {
261  $_POST[$this->getPostVar()] = ilUtil::stripSlashes($_POST[$this->getPostVar()]);
262  if ($this->getRequired() && trim($_POST[$this->getPostVar()]) == "")
263  {
264  $this->setAlert($lng->txt("msg_input_is_required"));
265 
266  return false;
267  }
268  else if (strlen($this->getValidationRegexp()))
269  {
270  if (!preg_match($this->getValidationRegexp(), $_POST[$this->getPostVar()]))
271  {
272  $this->setAlert(
273  $this->getValidationFailureMessage() ?
274  $this->getValidationFailureMessage() :
275  $lng->txt('msg_wrong_format')
276  );
277  return FALSE;
278  }
279  }
280  }
281  else
282  {
283  foreach($_POST[$this->getPostVar()] as $idx => $value)
284  {
285  $_POST[$this->getPostVar()][$idx] = ilUtil::stripSlashes($value);
286  }
287  $_POST[$this->getPostVar()] = array_unique($_POST[$this->getPostVar()]);
288 
289  if ($this->getRequired() && !trim(implode("", $_POST[$this->getPostVar()])))
290  {
291  $this->setAlert($lng->txt("msg_input_is_required"));
292 
293  return false;
294  }
295  else if (strlen($this->getValidationRegexp()))
296  {
297  $reg_valid = true;
298  foreach($_POST[$this->getPostVar()] as $value)
299  {
300  if (!preg_match($this->getValidationRegexp(), $value))
301  {
302  $reg_valid = false;
303  break;
304  }
305  }
306  if(!$reg_valid)
307  {
308  $this->setAlert(
309  $this->getValidationFailureMessage() ?
310  $this->getValidationFailureMessage() :
311  $lng->txt('msg_wrong_format')
312  );
313  return false;
314  }
315  }
316  }
317 
318  return $this->checkSubItemsInput();
319  }
320 
325  function getDataSource()
326  {
327  return $this->ajax_datasource;
328  }
329 
334  function setDataSource($href)
335  {
336  $this->ajax_datasource = $href;
337  }
338 
339  public function setMultiValues(array $a_values)
340  {
341  foreach($a_values as $idx => $value)
342  {
343  $a_values[$idx] = trim($value);
344  if($a_values[$idx] == "")
345  {
346  unset($a_values[$idx]);
347  }
348  }
349  parent::setMultiValues($a_values);
350  }
351 
355  protected function render($a_mode = "")
356  {
357  $tpl = new ilTemplate("tpl.prop_textinput.html", true, true, "Services/Form");
358  if (strlen($this->getValue()))
359  {
360  $tpl->setCurrentBlock("prop_text_propval");
361  $tpl->setVariable("PROPERTY_VALUE", ilUtil::prepareFormOutput($this->getValue()));
362  $tpl->parseCurrentBlock();
363  }
364  if (strlen($this->getInlineStyle()))
365  {
366  $tpl->setCurrentBlock("stylecss");
367  $tpl->setVariable("CSS_STYLE", ilUtil::prepareFormOutput($this->getInlineStyle()));
368  $tpl->parseCurrentBlock();
369  }
370  if(strlen($this->getCssClass()))
371  {
372  $tpl->setCurrentBlock("classcss");
373  $tpl->setVariable('CLASS_CSS', ilUtil::prepareFormOutput($this->getCssClass()));
374  $tpl->parseCurrentBlock();
375  }
376  if ($this->getSubmitFormOnEnter())
377  {
378  $tpl->touchBlock("submit_form_on_enter");
379  }
380 
381  switch($this->getInputType())
382  {
383  case 'password':
384  $tpl->setVariable('PROP_INPUT_TYPE','password');
385  break;
386  case 'hidden':
387  $tpl->setVariable('PROP_INPUT_TYPE','hidden');
388  break;
389  case 'text':
390  default:
391  $tpl->setVariable('PROP_INPUT_TYPE','text');
392  }
393  $tpl->setVariable("ID", $this->getFieldId());
394  $tpl->setVariable("SIZE", $this->getSize());
395  if($this->getMaxLength() != null)
396  $tpl->setVariable("MAXLENGTH", $this->getMaxLength());
397  if (strlen($this->getSuffix())) $tpl->setVariable("INPUT_SUFFIX", $this->getSuffix());
398 
399  $postvar = $this->getPostVar();
400  if($this->getMulti() && substr($postvar, -2) != "[]")
401  {
402  $postvar .= "[]";
403  }
404 
405  if ($this->getDisabled())
406  {
407  if($this->getMulti())
408  {
409  $value = $this->getMultiValues();
410  $hidden = "";
411  if(is_array($value))
412  {
413  foreach($value as $item)
414  {
415  $hidden .= $this->getHiddenTag($postvar, $item);
416  }
417  }
418  }
419  else
420  {
421  $hidden = $this->getHiddenTag($postvar, $this->getValue());
422  }
423  if($hidden)
424  {
425  $tpl->setVariable("DISABLED", " disabled=\"disabled\"");
426  $tpl->setVariable("HIDDEN_INPUT", $hidden);
427  }
428  }
429  else
430  {
431  $tpl->setVariable("POST_VAR", $postvar);
432  }
433 
434  // use autocomplete feature?
435  if ($this->getDataSource())
436  {
437  include_once "Services/jQuery/classes/class.iljQueryUtil.php";
440 
441  if ($this->getMulti())
442  {
443  $tpl->setCurrentBlock("ac_multi");
444  $tpl->setVariable('MURL_AUTOCOMPLETE', $this->getDataSource());
445  $tpl->setVariable('ID_AUTOCOMPLETE', $this->getFieldId());
446  $tpl->parseCurrentBlock();
447 
448  // set to fields that start with autocomplete selector
449  $sel_auto = '[id^="'.$this->getFieldId().'"]';
450  }
451  else
452  {
453  // use id for autocomplete selector
454  $sel_auto = "#".$this->getFieldId();
455  }
456  $tpl->setCurrentBlock("prop_text_autocomplete");
457  $tpl->setVariable('SEL_AUTOCOMPLETE', $sel_auto);
458  $tpl->setVariable('URL_AUTOCOMPLETE', $this->getDataSource());
459  $tpl->parseCurrentBlock();
460  }
461 
462  if ($a_mode == "toolbar")
463  {
464  // block-inline hack, see: http://blog.mozilla.com/webdev/2009/02/20/cross-browser-inline-block/
465  // -moz-inline-stack for FF2
466  // zoom 1; *display:inline for IE6 & 7
467  $tpl->setVariable("STYLE_PAR", 'display: -moz-inline-stack; display:inline-block; zoom: 1; *display:inline;');
468  }
469  else
470  {
471  $tpl->setVariable("STYLE_PAR", '');
472  }
473 
474  // multi icons
475  if($this->getMulti() && !$a_mode && !$this->getDisabled())
476  {
477  $tpl->setVariable("MULTI_ICONS", $this->getMultiIconsHTML($this->multi_sortable));
478  }
479 
480  return $tpl->get();
481  }
482 
488  function insert(&$a_tpl)
489  {
490  $html = $this->render();
491 
492  $a_tpl->setCurrentBlock("prop_generic");
493  $a_tpl->setVariable("PROP_GENERIC", $html);
494  $a_tpl->parseCurrentBlock();
495  }
496 
501  {
502  $html = $this->render();
503  return $html;
504  }
505 
509  function getToolbarHTML()
510  {
511  $html = $this->render("toolbar");
512  return $html;
513  }
514 
515 }
516 ?>