Example #1
0
 /**
  * @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;
 }
Example #2
0
 /**
  * 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");
 }
Example #3
0
 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;
 }
Example #4
0
 /**
  * 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;
 }
Example #5
0
 /**
  * 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;
 }