/**
  * Add form elements when a responseDatabase is present
  * @param  \Gems_Form $form existing form type
  * @param  array data existing options set in the form
  * @return array of form elements
  */
 protected function addResponseDatabaseForm($form, &$data, &$elements)
 {
     if (isset($data['tid']) && !empty($data['tid'])) {
         // If we have a responsedatabase and a track id, try something cool ;-)
         $responseDb = $this->project->getResponseDatabase();
         if ($this->db === $responseDb) {
             // We are in the same database, now put that to use by allowing to filter respondents based on an answer in any survey
             $empty = $this->util->getTranslated()->getEmptyDropdownArray();
             $allSurveys = $empty + $this->util->getDbLookup()->getSurveysForExport();
             $element = new \Zend_Form_Element_Select('filter_sid');
             $element->setLabel($this->_('Survey'))->setMultiOptions($allSurveys);
             $groupElements = array($element);
             if (isset($data['filter_sid']) && !empty($data['filter_sid'])) {
                 $filterSurvey = $this->loader->getTracker()->getSurvey($data['filter_sid']);
                 $filterQuestions = $empty + $filterSurvey->getQuestionList($this->locale->getLanguage());
                 $element = new \Zend_Form_Element_Select('filter_answer');
                 $element->setLabel($this->_('Question'))->setMultiOptions($filterQuestions);
                 $groupElements[] = $element;
             }
             if (isset($filterSurvey) && isset($data['filter_answer']) && !empty($data['filter_answer'])) {
                 $questionInfo = $filterSurvey->getQuestionInformation($this->locale->getLanguage());
                 if (array_key_exists($data['filter_answer'], $questionInfo)) {
                     $questionInfo = $questionInfo[$data['filter_answer']];
                 } else {
                     $questionInfo = array();
                 }
                 if (array_key_exists('answers', $questionInfo) && is_array($questionInfo['answers']) && count($questionInfo['answers']) > 1) {
                     $element = new \Zend_Form_Element_Multiselect('filter_value');
                     $element->setMultiOptions($empty + $questionInfo['answers']);
                     $element->setAttrib('size', count($questionInfo['answers']) + 1);
                 } else {
                     $element = new \Zend_Form_Element_Text('filter_value');
                 }
                 $element->setLabel($this->_('Value'));
                 $groupElements[] = $element;
             }
             $form->addDisplayGroup($groupElements, 'filter', array('showLabels' => true, 'Description' => $this->_('Filter')));
             array_shift($elements);
         }
     }
 }
 /**
  * Add a display group to the subform
  *
  * This allows to render multiple fields in one table cell. Provide a description to set the label for
  * the group. When the special option showLabels is set to true, inside the tabel cell all fields will
  * still show their own label.
  *
  * Example:
  * <code>
  * $this->addDisplayGroup(array('firstname', 'infix', 'lastname'), 'name_group', array('description'=>'Name', 'showLabels'=>true);
  * </code>
  * This would result in a two cell table row, with first cell the description of the group 'Name' and in the
  * second cell the three input boxes, with their label in front. If you leave the showLabels out, you will get
  * just three inputboxes for the name parts.
  *
  * @param array $elements   Array with names of the fields you want to add
  * @param string $name      The (unique) name for this new group
  * @param array $options    An array of key=>value options to set for the group
  * @return \Gems_Form_TabSubForm
  */
 public function addDisplayGroup(array $elements, $name, $options = null)
 {
     //Add the group as usual, but skip decorator loading as we don't need that
     return parent::addDisplayGroup($elements, $name, (array) $options + array('disableLoadDefaultDecorators' => true));
 }
 /**
  * Add an element to the form, when a tab (subform) had been added, it will return
  * the subform instead of the form, keep this in mind when chaining methods
  *
  * @param  array $elements
  * @param  string $name
  * @param  array|\Zend_Config $options
  * @return \Gems_TabForm|\Gems_Form_TabSubForm
  * @throws \Zend_Form_Exception if no valid elements provided
  */
 public function addDisplayGroup(array $elements, $name, $options = null)
 {
     if ($this->currentTab) {
         return $this->currentTab->addDisplayGroup($elements, $name, $options);
     } else {
         //Add the group as usual
         parent::addDisplayGroup($elements, $name, $options);
         //Retrieve it and set decorators
         $group = $this->getDisplayGroup($name);
         $group->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => $group->getName() . ' ' . $group->getAttrib('class')))));
         return $this;
     }
 }