/** * Process this form field as a DOM element to place it in the template at the given node. * * @param DOMNode $node * @param I2CE_Template $template */ public function processDOM($node, $template) { $i2ce_config = I2CE::getConfig()->modules->forms; $ele_name = $this->getHTMLName(); $showForm = $this->withinForm($node); if ($node->hasAttribute("href")) { //This is a link if ($node->hasAttribute("no_value")) { $href_link = $node->getAttribute("href"); } else { $href_link = $node->getAttribute("href") . $this->getDBValue(); } if ($node->hasAttribute("parent") && $this->getContainer() instanceof I2CE_Form) { //needs to be handled better $href_link .= "&parent=" . $this->getContainer()->getParent(); } $href = $template->createElement("a", array("href" => $href_link)); if ($node->attributes instanceof DOMNamedNodeMap) { foreach ($node->attributes as $name => $attrNode) { if ($name == 'href' || !$attrNode instanceof DOMAttr) { continue; } $href->setAttribute($name, $attrNode->value); } } $node->parentNode->replaceChild($href, $node); while ($node->firstChild instanceof DOMNode) { $href->appendChild($node->firstChild); } $node = $href; } elseif ($node->hasAttribute("head") || $node->hasAttribute("showhead")) { if ($node->hasAttribute("head")) { $head = $node->getAttribute("head"); } else { $head_type = $node->getAttribute("showhead"); if ($this->hasHeader($head_type)) { $head = $this->getHeader($head_type); } elseif ($this->hasHeader()) { $head = $this->getHeader(); } else { $head = ucfirst($this->getName()); } } $display = 'default'; if ($node->hasAttribute("display")) { $t_display = $node->getAttribute('display'); if (strtolower($t_display) != 'true' && strtolower($t_display) != 'false') { if (isset($i2ce_config->template_displays->{$t_display})) { $display = $t_display; } } else { $display = strtolower($t_display); } } if ($showForm) { $template_file = 'form_field.html'; $template_file_root = 'p'; $i2ce_config->setIfIsSet($template_file, "template_displays/default/showForm/field"); $i2ce_config->setIfIsSet($template_file, "template_displays/{$display}/showForm/field"); if ($display !== 'default') { $i2ce_config->setIfIsSet($template_file_root, "template_displays/default/showForm/field_root"); $i2ce_config->setIfIsSet($template_file_root, "template_displays/{$display}/showForm/field_root"); } } else { $template_file = 'display_field.html'; $template_file_root = 'tr'; $i2ce_config->setIfIsSet($template_file, "template_displays/default/displayed/field"); $i2ce_config->setIfIsSet($template_file, "template_displays/{$display}/displayed/field"); if ($display !== 'default') { $i2ce_config->setIfIsSet($template_file_root, "template_displays/default/displayed/field_root"); $i2ce_config->setIfIsSet($template_file_root, "template_displays/{$display}/displayed/field_root"); } } $form_node = $template->loadFile($template_file, $template_file_root); $node->parentNode->replaceChild($form_node, $node); foreach (array('class', 'auto_link') as $a) { //I hate having an explicit reference to auto_link here :-( if ($node->hasAttribute($a)) { $form_node->setAttribute($a, $node->getAttribute($a)); } } $title_attr = null; if ($node->hasAttribute("title")) { $title_attr = $node->getAttribute("title"); } elseif ($node->hasAttribute("showtitle")) { $title_type = $node->getAttribute("showtitle"); if ($this->hasHeader($title_type)) { $title_attr = $this->getHeader($title_type); } elseif ($this->hasHeader("title")) { $title_attr = $this->getHeader("title"); } } if ($title_attr !== null) { $form_node->setAttribute("title", $title_attr); } $field_head_class = 'field_head'; $form_field_class = 'form_field'; $i2ce_config->setIfIsSet($field_head_class, "template_displays/default/field_head_class"); $i2ce_config->setIfIsSet($form_field_class, "template_displays/default/form_field_class"); if ($display !== 'default') { $i2ce_config->setIfIsSet($field_head_class, "template_displays/{$display}/field_head_class"); $i2ce_config->setIfIsSet($form_field_class, "template_displays/{$display}/form_field_class"); } $head_node = $template->query("descendant::*[@class='" . $field_head_class . "']", $form_node); if ($head_node->length > 0) { $head_node = $head_node->item(0); } else { $head_node = false; } $field_node = $template->query("descendant::*[@class='" . $form_field_class . "']", $form_node); if ($field_node->length > 0) { $field_node = $field_node->item(0); } else { $field_node = false; } if ($field_node) { $field_name = $this->getContainer()->getName() . '_' . $this->getName(); $template->addClass($field_node, $field_name); while ($node->hasChildNodes()) { $field_node->appendChild($node->childNodes->item(0)); } } if ($head_node) { $head_node->appendChild($template->createElement("label", array("for" => $ele_name), $head)); } if ($head_node && $node->hasAttribute("showhelp")) { $title_type = $node->getAttribute("showhelp"); if ($this->hasHeader($title_type)) { $title_attr = $this->getHeader($title_type); $head_node->appendChild($template->createElement("span", array('title' => $title_attr, 'class' => 'fieldhelp'), " (?) ")); } } if (!$showForm) { if ($field_node) { $field_node->appendChild($this->getDisplayNode($node, $template)); } } elseif ($display == 'true') { if ($field_node) { $field_node->appendChild($this->getDisplayNode($node, $template)); } } elseif ($template->isReview() || $node->hasAttribute("noedit") && $node->getAttribute('noedit') && $this->issetValue() || $node->hasAttribute('noedit') && $node->getAttribute('noedit') == 'strict') { if ($field_node) { $processorNotEditable = 'processDOMNotEditable'; if ($node->hasAttribute('display') && $this->_hasMethod('processDOMNotEditable_' . $node->getAttribute('display'))) { $processorNotEditable = 'processDOMNotEditable_' . $node->getAttribute('display'); } if ($node->hasAttribute('display')) { $field_node->setAttribute('display', $node->getAttribute('display')); } $this->{$processorNotEditable}($field_node, $template, $node); } } else { $this->setElement(false); $this->processHeaderEditable($template, $node, $head_node); if ($field_node) { if ($this->hasInvalid()) { $this->displayInvalid($template, $field_node); } $processorEditable = 'processDOMEditable'; if ($node->hasAttribute('display') && $this->_hasMethod('processDOMEditable_' . $node->getAttribute('display'))) { $processorEditable = 'processDOMEditable_' . $node->getAttribute('display'); } $postprocessorEditable = 'postprocessDOMEditable'; if ($node->hasAttribute('display') && $this->_hasMethod('postprocessDOMEditable_' . $node->getAttribute('display'))) { $postprocessorEditable = 'postprocessDOMEditable_' . $node->getAttribute('display'); } $this->{$processorEditable}($field_node, $template, $node); $this->{$postprocessorEditable}($field_node, $template, $node); } $element = $this->getElement(); if ($element) { if ($this->hasInvalid()) { $class = "error"; if ($element->hasAttribute("class")) { $class .= " " . $element->getAttribute("class"); } $element->setAttribute("class", $class); } if ($node->hasAttribute("onchange")) { $element->setAttribute("onchange", $node->getAttribute("onchange")); } if ($node->hasAttribute("onfocus")) { $element->setAttribute("onfocus", $node->getAttribute("onfocus")); } } } } else { if (!$showForm || $node->hasAttribute("noedit")) { // Just replacing the node text with the value in the database. $node->appendChild($this->getDisplayNode($node, $template)); } else { $options = array("name" => $ele_name, "type" => "hidden", "value" => $this->getDBValue()); if ($node->hasAttribute('alt_name')) { $options['name'] = $node->getAttribute('alt_name'); } $hidden = $template->createElement("input", $options); $node->parentNode->replaceChild($hidden, $node); } } }