[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Form/ -> CheckableElement.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\Form;
   4  
   5  /**
   6   * Class CheckableElement
   7   *
   8   * For Radio- and Checkboxes
   9   *
  10   * @package dokuwiki\Form
  11   */
  12  class CheckableElement extends InputElement
  13  {
  14      /**
  15       * @param string $type The type of this element
  16       * @param string $name The name of this form element
  17       * @param string $label The label text for this element
  18       */
  19      public function __construct($type, $name, $label)
  20      {
  21          parent::__construct($type, $name, $label);
  22          // default value is 1
  23          $this->attr('value', 1);
  24      }
  25  
  26      /**
  27       * Handles the useInput flag and sets the checked attribute accordingly
  28       */
  29      protected function prefillInput()
  30      {
  31          global $INPUT;
  32          [$name, $key] = $this->getInputName();
  33          $myvalue = $this->val();
  34  
  35          if (!$INPUT->has($name)) return;
  36  
  37          if ($key === null) {
  38              // no key - single value
  39              $value = $INPUT->str($name);
  40              if ($value == $myvalue) {
  41                  $this->attr('checked', 'checked');
  42              } else {
  43                  $this->rmattr('checked');
  44              }
  45          } else {
  46              // we have an array, there might be several values in it
  47              $input = $INPUT->arr($name);
  48              if (isset($input[$key])) {
  49                  $this->rmattr('checked');
  50  
  51                  // values seem to be in another sub array
  52                  if (is_array($input[$key])) {
  53                      $input = $input[$key];
  54                  }
  55  
  56                  foreach ($input as $value) {
  57                      if ($value == $myvalue) {
  58                          $this->attr('checked', 'checked');
  59                      }
  60                  }
  61              }
  62          }
  63      }
  64  
  65      /**
  66       * The HTML representation of this element wrapped in a label
  67       * Note: allow HTML tags in label text
  68       *
  69       * @return string
  70       */
  71      public function toHTML()
  72      {
  73          if ($this->label) {
  74              return '<label ' . buildAttributes($this->label->attrs()) . '>' . DOKU_LF
  75                  . $this->mainElementHTML() . DOKU_LF
  76                  . '<span>' . $this->label->val() . '</span>' . DOKU_LF
  77                  . '</label>';
  78          } else {
  79              return $this->mainElementHTML();
  80          }
  81      }
  82  }