Exemple #1
0
 /**
  * Dojo-enable a form instance
  *
  * @param  Zend_Form $form
  * @return void
  */
 public static function enableForm(Zend_Form $form)
 {
     $form->addPrefixPath('Zend_Dojo_Form_Decorator', 'Zend/Dojo/Form/Decorator', 'decorator')->addPrefixPath('Zend_Dojo_Form_Element', 'Zend/Dojo/Form/Element', 'element')->addElementPrefixPath('Zend_Dojo_Form_Decorator', 'Zend/Dojo/Form/Decorator', 'decorator')->addDisplayGroupPrefixPath('Zend_Dojo_Form_Decorator', 'Zend/Dojo/Form/Decorator')->setDefaultDisplayGroupClass('Zend_Dojo_Form_DisplayGroup');
     foreach ($form->getSubForms() as $subForm) {
         self::enableForm($subForm);
     }
     if (null !== ($view = $form->getView())) {
         self::enableView($view);
     }
 }
Exemple #2
0
 /**
  * jQuery-enable a form instance
  *
  * @param  \Zend_Form $form
  * @return void
  */
 public static function enableForm(\Zend_Form $form)
 {
     $form->addPrefixPath('ZendX_JQuery_Form_Decorator', 'ZendX/JQuery/Form/Decorator', 'decorator')->addPrefixPath('ZendX_JQuery_Form_Element', 'ZendX/JQuery/Form/Element', 'element')->addElementPrefixPath('ZendX_JQuery_Form_Decorator', 'ZendX/JQuery/Form/Decorator', 'decorator')->addDisplayGroupPrefixPath('ZendX_JQuery_Form_Decorator', 'ZendX/JQuery/Form/Decorator');
     foreach ($form->getSubForms() as $subForm) {
         self::enableForm($subForm);
     }
     if (null !== ($view = $form->getView())) {
         self::enableView($view);
     }
 }
 /**
  * Adds unique IDs to all elements in the given form.
  *
  * @param Zend_Form $form
  */
 public function enhance(Zend_Form $form)
 {
     foreach ($form->getSubForms() as $subForm) {
         /* @var $subForm Zend_Form */
         $this->enhance($subForm);
     }
     foreach ($form->getElements() as $element) {
         /* @var $element Zend_Form_Element */
         $this->updateId($element);
     }
 }
 /**
  * Recurse through a form object, rendering errors
  *
  * @param  \Zend_Form $form
  * @param  \Zend_View_Interface $view
  * @return string
  */
 protected function _recurseForm(\Zend_Form $form)
 {
     $subFormsWithErrors = array();
     $subFormMessages = array();
     $tabId = 0;
     foreach ($form->getSubForms() as $subForm) {
         if ($subForm instanceof \Gems_Form_TabSubForm) {
             // See if any of the subformelements has an error message
             foreach ($subForm->getElements() as $subFormElement) {
                 $elementMessages = $subFormElement->getMessages();
                 if (count($elementMessages)) {
                     $subFormsWithErrors[$tabId] = $subForm->getAttrib('title');
                     // Save subform title
                     $subForm->setAttrib('jQueryParams', array('class' => 'taberror'));
                     // Add css class to the subform
                     $form->selectTab($tabId);
                     // Select the tab, this way the last tab with error is always selected
                     break;
                     // don't check other elements
                 }
             }
             // Preserve subform level custom messages if we have an error
             if (array_key_exists($tabId, $subFormsWithErrors)) {
                 $subFormMessages[$tabId] = $subForm->getCustomMessages();
             }
             $tabId++;
         }
     }
     // If we found at least one error, and 'verbose' is true
     if ($this->getVerbose() && (!empty($subFormsWithErrors) || $form->isErrors())) {
         // First show form level custom error messages (the elements show their own errors)
         $formMessage = $form->getCustomMessages();
         if (!empty($formMessage)) {
             foreach ($formMessage as $message) {
                 \Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->addMessage($message);
             }
         }
         // Now browse through the tabs with errors
         foreach ($subFormsWithErrors as $tabIdx => $tabName) {
             // If more then one tab, show in which tab we found the errors
             if ($tabId > 1) {
                 $translator = \Zend_Registry::get('Zend_Translate');
                 \Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->addMessage(sprintf($translator->_('Error in tab "%s"'), $tabName));
             }
             // If we have them, show the tab custom error messages
             foreach ($subFormMessages[$tabIdx] as $subFormMessage) {
                 foreach ($subFormMessage as $message) {
                     \Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')->addMessage("--> " . $message);
                 }
             }
         }
     }
 }
Exemple #5
0
 public function testCanSetAllSubFormDecoratorsAtOnce()
 {
     $this->setupSubForm();
     $this->form->setSubFormDecorators(array(array('Callback', array('callback' => 'strip_tags'))));
     foreach ($this->form->getSubForms() as $subForm) {
         $this->assertFalse($subForm->getDecorator('FormElements'));
         $this->assertFalse($subForm->getDecorator('HtmlTag'));
         $this->assertFalse($subForm->getDecorator('Fieldset'));
         $this->assertFalse($subForm->getDecorator('DtDdWrapper'));
         $decorator = $subForm->getDecorator('Callback');
         $this->assertTrue($decorator instanceof \Zend\Form\Decorator\Callback);
     }
 }
Exemple #6
0
 /**
  * Bereitet die Validierung vor.
  * 
  * Zu jedem Language-Element in den Unterformularen wird ein zusätzlicher Validator hinzugefügt, der die POST Daten
  * für alle Unterformulare und die Position des Formulars mitbekommt, damit die Prüfung ausgeführt werden kann.
  * 
  * @param Zend_Form $form
  * @param array $data
  * @param array $context
  */
 public function prepareValidation($form, $data, $context = null)
 {
     $position = 0;
     $languages = $this->getSelectedLanguages($data);
     foreach ($form->getSubForms() as $name => $subform) {
         if (array_key_exists($name, $data)) {
             $element = $subform->getElement(Admin_Form_Document_Title::ELEMENT_LANGUAGE);
             if (!is_null($element)) {
                 $element->addValidator(new Form_Validate_LanguageUsedOnceOnly($languages, $position++));
             }
         }
     }
 }
Exemple #7
0
 /**
  * Change form elements order to match query order
  *
  * @return void
  */
 private function _orderFormElements()
 {
     $hasCustomOrder = false;
     foreach ($this->_form->getSubForms() as $form) {
         foreach ($form->getElements() as $key => $element) {
             if (is_numeric($element->getOrder())) {
                 $hasCustomOrder = true;
                 break;
             }
         }
     }
     if ($hasCustomOrder === true) {
         return;
     }
     $fieldsOrder = array_flip($this->_fields);
     foreach ($this->_form->getSubForms() as $form) {
         $i = 100;
         foreach ($form->getElements() as $key => $element) {
             $fieldOrder = isset($fieldsOrder[$key]) ? $fieldsOrder[$key] : $i++;
             $element->setOrder($fieldOrder);
         }
     }
 }
Exemple #8
0
 protected function _buildTable(Zend_Form $form)
 {
     # generate table header
     if ($this->_tableHeadersBuilt !== true) {
         if ($form instanceof Zend_Form_SubForm) {
             foreach ($form->getElements() as $eName => $e) {
                 if (isset($this->_tableHeaders[$eName])) {
                     throw new Exception(sprintf('Invalid sub-form (table row configuration) "%s" for table layout - table header already set for this column "%s"', $form->getName(), $eName));
                 }
                 $this->_tableHeaders[$eName] = $e->getLabel();
             }
             foreach ($form->getSubForms() as $formName => $subForm) {
                 $this->_buildTable($subForm);
             }
             return false;
         }
         # get headers from first sub-form
         $subform = $form->getSubForms();
         $subform = current($subform);
         $this->_buildTable($subform);
         $this->_tableHeadersBuilt = true;
     }
     if ($form instanceof Zend_Form_SubForm) {
         foreach ($form->getElements() as $eName => $e) {
             if ($this->getOption('doNotSetDecorators') !== true) {
                 $e->setDecorators(array('ViewHelper'));
             }
             if (isset($this->_tableCell[$eName])) {
                 throw new Exception(sprintf('Invalid sub-form (table row configuration) "%s" for table layout - table cell "%s" already set for row %d', $form->getName(), $eName, $this->_rowIndex));
             }
             $this->_tableCell[$eName] = $e;
         }
         foreach ($form->getSubForms() as $formName => $subForm) {
             $this->_buildTable($subForm);
         }
         return;
     }
     # $form is not instance of Zend_Form_SubForm
     $result = array();
     foreach ($form->getSubForms() as $formName => $subForm) {
         $this->_tableCell = array();
         $this->_rowIndex++;
         $this->_buildTable($subForm);
         if (empty($this->_tableCell)) {
             # no data generated from current subform
             continue;
         }
         $result[$this->_rowIndex] = $this->_tableCell;
     }
     if (empty($result)) {
         return '';
     }
     $tableRows = array();
     foreach ($result as $rowIndex => $row) {
         $elements = array();
         foreach ($this->_tableHeaders as $eName => $label) {
             if (!isset($row[$eName])) {
                 throw new Exception(sprintf('Invalid form "%s" for table layout - missing table cell "%s" for row %d', $form->getName(), $eName, $rowIndex));
             }
             # display messages in the same table cell as the input field
             $elements[] = implode('<br />', array_merge($row[$eName]->getMessages(), array($row[$eName]->render())));
         }
         $tableRows[] = '<tr><td>' . implode('</td><td>', $elements) . '</td></tr>' . "\n";
     }
     return '<table><tr><th>' . implode('</th><th>', $this->_tableHeaders) . '</th></tr>' . "\n" . implode('', $tableRows) . '</table>';
 }
 /**
  * Set a form instance
  *
  * @param Zend_Form $form
  * @return Zend_Controller_Action_Helper_MultiPageForm
  */
 public function setForm(Zend_Form $form)
 {
     $this->_form = $form;
     $subForms = $form->getSubForms();
     // Loop through all the subforms and check if they all have a name
     foreach ($subForms as $subForm) {
         $formName = $subForm->getName();
         if (empty($formName)) {
             /**
              * @see Zend_Controller_Action_Exception
              */
             require_once 'Zend/Controller/Action/Exception.php';
             throw new Zend_Controller_Action_Exception('A subform needs to have a name.');
         }
     }
     // Chaining
     return $this;
 }
 /**
  * Retrieve all form subForms/subforms
  *
  * @param bool $sort
  * @return array
  */
 public function getSubForms($sort = false)
 {
     if (!$sort) {
         return parent::getSubForms();
     } else {
         $this->_sort();
         $subForms = array();
         foreach ($this->_order as $key => $order) {
             $subForms[] = $this->getSubForm($key);
         }
         return $subForms;
     }
 }
Exemple #11
0
 /**
  * @group ZF-5613
  */
 public function testAddSubFormsPerConfig()
 {
     // Create form
     $form = new Zend_Form(array('subForms' => array(array('form' => array('elements' => array('foo' => array('text', array('label' => 'Foo', 'decorators' => array('ViewHelper', 'Label')))), 'id' => 'subform1', 'decorators' => array('FormElements')), 'name' => 'subform1', 'order' => 2), array('form' => array('elements' => array('bar' => array('text', array('label' => 'Bar', 'decorators' => array('ViewHelper', 'Label')))), 'id' => 'subform2', 'decorators' => array('FormElements')), 'name' => 'subform2', 'order' => 1))));
     $form->removeDecorator('HtmlTag');
     // Tests
     $subForms = $form->getSubForms();
     $subForm1 = current($subForms);
     $subForm2 = next($subForms);
     $this->assertSame(array('subform1', 'subform2'), array($subForm1->getName(), $subForm2->getName()));
     $expected = '<form enctype="application/x-www-form-urlencoded" action="" method="post">' . PHP_EOL . PHP_EOL . '<label for="subform2-bar" class="optional">Bar</label>' . PHP_EOL . PHP_EOL . '<input type="text" name="subform2[bar]" id="subform2-bar" value="" />' . PHP_EOL . PHP_EOL . '<label for="subform1-foo" class="optional">Foo</label>' . PHP_EOL . PHP_EOL . '<input type="text" name="subform1[foo]" id="subform1-foo" value="" />' . '</form>';
     $this->assertSame($expected, $form->render($this->getView()));
 }
 /**
  * Ermittelt alle Subformen (Subpages)
  * @return Myself_Form_Page_Interface
  */
 public function getSubForms()
 {
     $subForms = parent::getSubForms();
     $newForms = array();
     foreach ($subForms as $form) {
         if (!$form->isAvailable()) {
             // Remove form data from namespace
             unset($this->getNamespace()->{$form->getName()});
             continue;
         }
         $newForms[$form->getName()] = $form;
     }
     return $newForms;
 }
 /**
  * Set a form instance
  *
  * @param Zend_Form $form
  * @return Zym_Controller_Action_Helper_MultiForm
  */
 public function setForm(Zend_Form $form)
 {
     $this->_form = $form;
     $subForms = $form->getSubForms();
     foreach ($subForms as $subForm) {
         $formName = $subForm->getName();
         if (empty($formName)) {
             /**
              * @see Zym_Controller_MultiPageForm_Exception_NoName
              */
             require_once 'Zym/Controller/Action/Helper/MultiPageForm/Exception/NoName.php';
             throw new Zym_Controller_MultiPageForm_Exception_NoName('A subform needs to have a name.');
         }
     }
     return $this;
 }
Exemple #14
0
 /**
  * Create an html code from form elements to render a plain text fom.<br />
  * This function filter subForms and create the read only view.<br />
  * Utilize the elementRender function to do the same with elements.<br />
  *
  * @param Zend_Form  $form  The form to transform into readOnlu view.
  *
  * @return string $this->_html The html code for the elements rendering.
  */
 public function subFormRender(Zend_Form $form, $subFormName = "")
 {
     $subForms = null;
     if (!$this->_listOpened) {
         $this->_html = $this->_openListTag;
         $this->_listOpened = true;
     }
     if (!empty($subFormName)) {
         $subForm = $form->getSubForm($subFormName);
         $this->_html .= $this->elementRender($subForm);
     } else {
         $subForms = $form->getSubForms();
         $nbSubForms = count($subForms);
         $position = 1;
         foreach ($subForms as $subForm) {
             $this->_html .= '<fieldset id = "' . $subForm->getId() . '" class="' . $subForm->getAttrib('class') . '">';
             $this->_html .= '<legend class="readOnly">';
             $this->_html .= $subForm->getLegend();
             $this->_html .= '</legend>';
             // Do not close the list after rendering elemnts of the sub forms.
             $this->_closeList = false;
             // Render sub form elements
             $this->_html .= $this->elementRender($subForm);
             $this->_html .= '</fieldset>';
             if ($this->_addSeparator && in_array($position, $this->_separatorPosition)) {
                 $this->_html .= '<div class="' . $this->_separatorClass . '"></div>';
             }
             $position++;
         }
         $this->_html .= $this->_closeListTag;
     }
     return $this->_html;
 }