/** * @param \HTML_QuickForm2_Node $element * * @return \HTML_QuickForm2_Node */ function initElement(\HTML_QuickForm2_Node $element) { \Debugbar::addMessage(($this->namespace ? $this->namespace . '::' : '') . 'models/' . $this->model->getEntity() . '.' . $element->getName()); $config = \Config::get(($this->namespace ? $this->namespace . '::' : '') . 'models/' . $this->model->getEntity() . '.' . $element->getName()); if (is_array($config)) { foreach ($config as $k => $v) { $method = \Str::camel('set_' . $k); if (is_callable([$element, $method])) { call_user_func([$element, $method], $v); } } } return $element; }
/** * Inserts an element in the container * * If the reference object is not given, the element will be appended. * * @param HTML_QuickForm2_Node Element to insert * @param HTML_QuickForm2_Node Reference to insert before * @return HTML_QuickForm2_Node Inserted element */ public function insertBefore(HTML_QuickForm2_Node $element, HTML_QuickForm2_Node $reference = null) { if (null === $reference) { return $this->appendChild($element); } $offset = 0; foreach ($this as $child) { if ($child === $reference) { if ($this === $element->getContainer()) { $this->removeChild($element); } $element->setContainer($this); array_splice($this->elements, $offset, 0, array($element)); return $element; } $offset++; } throw new HTML_QuickForm2_NotFoundException("Reference element with name '" . $reference->getName() . "' was not found"); }
protected function renameChild(HTML_QuickForm2_Node $element) { $tokens = explode('[', str_replace(']', '', $element->getName())); if ($this === $element->getContainer()) { // Child has already been renamed by its group before if (!is_null($this->previousName) && $this->previousName !== '') { $gtokens = explode('[', str_replace(']', '', $this->previousName)); $pos = array_search(end($gtokens), $tokens); if (!is_null($pos)) { $tokens = array_slice($tokens, $pos + 1); } } } if (is_null($this->name) || $this->name === '') { if (is_null($this->previousName) || $this->previousName === '') { return $element; } else { $elname = $tokens[0]; unset($tokens[0]); foreach ($tokens as $v) { $elname .= '[' . $v . ']'; } } } else { $elname = $this->getName() . '[' . implode('][', $tokens) . ']'; } $element->setName($elname); return $element; }
/** * Prepends group's name to contained element's name * * Used when adding an element to the group or changing group's name * * @param HTML_QuickForm2_Node $element * * @return HTML_QuickForm2_Node */ protected function renameChild(HTML_QuickForm2_Node $element) { $tokens = explode('[', str_replace(']', '', $element->getName())); // Child has already been renamed by its group before if ($this === $element->getContainer() && strlen($this->previousName)) { $gtokens = explode('[', str_replace(']', '', $this->previousName)); if ($gtokens === array_slice($tokens, 0, count($gtokens))) { array_splice($tokens, 0, count($gtokens)); } } if (strlen($this->name)) { $element->setName($this->name . '[' . implode('][', $tokens) . ']'); } elseif (strlen($this->previousName)) { $elname = array_shift($tokens); foreach ($tokens as $token) { $elname .= '[' . $token . ']'; } $element->setName($elname); } return $element; }
/** * Creates an array with fields that are common to all elements * * @param HTML_QuickForm2_Node Element being rendered * * @return array */ public function buildCommonFields(HTML_QuickForm2_Node $element) { $keyn = $this->options['key_id'] ? 'id' : 'name'; $ary = array('id' => $element->getId(), 'frozen' => $element->toggleFrozen(), 'name' => $element->getName()); // Key that we use for putting into arrays so that smarty can extract them. // Note that the name may be empty. $key_val = $ary[$keyn]; if ($key_val == '') { $key_val = $ary['id']; } if ($labels = $element->getLabel()) { if (!is_array($labels) || !$this->options['static_labels']) { $ary['label'] = $labels; } else { foreach ($labels as $key => $label) { $key = is_int($key) ? $key + 1 : $key; if (1 === $key) { $ary['label'] = $label; } else { $ary['label_' . $key] = $label; } } } } // Smarty: group_errors under 'name' or 'id' depending on key_id option: if (($error = $element->getError()) && $this->options['group_errors']) { $this->array['errors'][$key_val] = $error; } elseif ($error) { $ary['error'] = $error; } if (isset($this->styles[$key_val])) { $ary['style'] = $this->styles[$key_val]; } if (!$element instanceof HTML_QuickForm2_Container) { $ary['html'] = $element->__toString(); } else { $ary['elements'] = array(); $ary['attributes'] = $element->getAttributes(true); } return $ary; }