__construct() public method

Instantiate the form element object
public __construct ( string $name, string $value = null, mixed $childNode = null, boolean $first = false, string $indent = null ) : Child
$name string
$value string
$childNode mixed
$first boolean
$indent string
return Child
Example #1
0
 /**
  * Constructor
  *
  * Instantiate the form element object
  *
  * @param  string $type
  * @param  string $name
  * @param  string $value
  * @param  string|array $marked
  * @param  string $indent
  * @throws Exception
  * @return \Pop\Form\Element
  */
 public function __construct($type, $name, $value = null, $marked = null, $indent = null)
 {
     $this->name = $name;
     $this->type = $type;
     // Check the element type, else set the properties.
     if (!in_array($type, $this->allowedTypes)) {
         throw new Exception('Error: That input type is not allowed.');
     }
     // Create the element based on the type passed.
     switch ($type) {
         // Textarea element
         case 'textarea':
             parent::__construct('textarea', null, null, false, $indent);
             $this->setAttributes(array('name' => $name, 'id' => $name));
             $this->nodeValue = $value;
             $this->value = $value;
             break;
             // Select element
         // Select element
         case 'select':
             parent::__construct('select', null, null, false, $indent);
             $this->setAttributes(array('name' => $name, 'id' => $name));
             // Create the child option elements.
             foreach ($value as $k => $v) {
                 if (is_array($v)) {
                     $opt = new Child('optgroup', null, null, false, $indent);
                     $opt->setAttributes('label', $k);
                     foreach ($v as $ky => $vl) {
                         $o = new Child('option', null, null, false, $indent);
                         $o->setAttributes('value', $ky);
                         // Determine if the current option element is selected.
                         if (is_array($this->marked)) {
                             if (in_array($ky, $this->marked)) {
                                 $o->setAttributes('selected', 'selected');
                             }
                         } else {
                             if ($ky == $this->marked) {
                                 $o->setAttributes('selected', 'selected');
                             }
                         }
                         $o->setNodeValue($vl);
                         $opt->addChild($o);
                     }
                 } else {
                     $opt = new Child('option', null, null, false, $indent);
                     $opt->setAttributes('value', $k);
                     // Determine if the current option element is selected.
                     if (is_array($this->marked)) {
                         if (in_array($k, $this->marked)) {
                             $opt->setAttributes('selected', 'selected');
                         }
                     } else {
                         if ($k == $this->marked) {
                             $opt->setAttributes('selected', 'selected');
                         }
                     }
                     $opt->setNodeValue($v);
                 }
                 $this->addChild($opt);
             }
             $this->value = $value;
             break;
             // Radio element(s)
         // Radio element(s)
         case 'radio':
             parent::__construct('fieldset', null, null, false, $indent);
             $this->setAttributes('class', 'radio-btn-fieldset');
             // Create the radio elements and related span elements.
             $i = null;
             foreach ($value as $k => $v) {
                 $rad = new Child('input', null, null, false, $indent);
                 $rad->setAttributes(array('type' => $type, 'class' => 'radio-btn', 'name' => $name, 'id' => $name . $i, 'value' => $k));
                 // Determine if the current radio element is checked.
                 if ($k == $this->marked) {
                     $rad->setAttributes('checked', 'checked');
                 }
                 $span = new Child('span', null, null, false, $indent);
                 $span->setAttributes('class', 'radio-span');
                 $span->setNodeValue($v);
                 $this->addChildren(array($rad, $span));
                 $i++;
             }
             $this->value = $value;
             break;
             // Checkbox element(s)
         // Checkbox element(s)
         case 'checkbox':
             parent::__construct('fieldset', null, null, false, $indent);
             $this->setAttributes('class', 'check-box-fieldset');
             // Create the checkbox elements and related span elements.
             $i = null;
             foreach ($value as $k => $v) {
                 $chk = new Child('input', null, null, false, $indent);
                 $chk->setAttributes(array('type' => $type, 'class' => 'check-box', 'name' => $name . '[]', 'id' => $name . $i, 'value' => $k));
                 // Determine if the current radio element is checked.
                 if (in_array($k, $this->marked)) {
                     $chk->setAttributes('checked', 'checked');
                 }
                 $span = new Child('span', null, null, false, $indent);
                 $span->setAttributes('class', 'check-span');
                 $span->setNodeValue($v);
                 $this->addChildren(array($chk, $span));
                 $i++;
             }
             $this->value = $value;
             break;
             // Input element
         // Input element
         default:
             if ($type == 'button') {
                 $nodeType = 'button';
                 $type = 'submit';
             } else {
                 $nodeType = 'input';
             }
             parent::__construct($nodeType, null, null, false, $indent);
             $this->setAttributes(array('type' => $type, 'name' => $name, 'id' => $name));
             if (!is_array($value)) {
                 if ($nodeType == 'button') {
                     $this->nodeValue = $value;
                 }
                 $this->setAttributes('value', $value);
             }
             $this->value = $value;
     }
     // If a certain value is marked (selected or checked), set the property here.
     if (null !== $marked) {
         $this->marked = $marked;
     }
 }