Beispiel #1
0
 public function parseNode(\DOMNode $node, $parent = null)
 {
     if ($this->webform === null) {
         return;
     }
     $name = $node->nodeName;
     $attribs = $node->attributes;
     switch ($name) {
         case 'area':
             $label = $this->getText($attribs->getNamedItem('label')->value);
             $area = new Area($this->webform, $label);
             if ($attribs->getNamedItem('id')->value != null) {
                 $area->setId($attribs->getNamedItem('id')->value);
             }
             if ($parent == null) {
                 $this->webform->addArea($area);
             } else {
                 $parent->addArea($area);
             }
             $this->parseChilds($node, $area);
             break;
         case 'control':
             $type = $attribs->getNamedItem('type')->value;
             $control = ControlFactory::createControl($type, $parent);
             $control->setLabel(($attrib = $attribs->getNamedItem('label')) !== null ? $this->getText($attrib->value) : '');
             $control->setName(($attrib = $attribs->getNamedItem('name')) !== null ? $attrib->value : '');
             $control->setDescription(($attrib = $attribs->getNamedItem('description')) !== null ? $this->getText($attrib->value) : '');
             $control->setDefault(($attrib = $attribs->getNamedItem('default')) !== null ? $this->getText($attrib->value) : '');
             $control->setTitle(($attrib = $attribs->getNamedItem('title')) !== null ? $this->getText($attrib->value) : '');
             $control->setRequired(($attrib = $attribs->getNamedItem('required')) !== null ? $attrib->value == 'yes' ? true : false : '');
             if ($attribs->getNamedItem('id')->value != null) {
                 $control->setId($attribs->getNamedItem('id')->value);
             }
             /* Special cases */
             switch ($type) {
                 case 'MultiLine':
                     $control->setRows($attribs->getNamedItem('rows')->value);
                     break;
                 case 'Group':
                     $control->setDirection($attribs->getNamedItem('direction')->value);
                     $this->parseChilds($node, $control);
                     break;
                 case 'Radio':
                 case 'CheckBox':
                     $control->setChecked($attribs->getNamedItem('checked')->value == 'yes');
                     break;
                 case 'ComboBox':
                     $options = $node->childNodes;
                     for ($i = 0; $i < $options->length; $i++) {
                         $option = $options->item($i);
                         if ($option->nodeType == XML_ELEMENT_NODE) {
                             $optionAttribs = $option->attributes;
                             $label = $this->getText($optionAttribs->getNamedItem('label')->value);
                             $value = $optionAttribs->getNamedItem('value')->value;
                             $checked = $optionAttribs->getNamedItem('checked')->value == 'yes';
                             $control->addOption($value, $label, $checked);
                         }
                     }
                     break;
             }
             $parent->addControl($control);
             $this->parseValidator($node, $control);
             break;
     }
 }