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; } }