/** * Set Form defaults * - disable default decorators * - set form & displaygroup decorators * - set needed prefix path for bootstrap decorators * - set form element decorators * * @param Zend_Form $form The form instance. * @param string $format Standard, minimal, table. * * @return void */ protected static function setFormDefaults(Zend_Form $form, $format) { $form->setDisableLoadDefaultDecorators(true); $form->setDisplayGroupDecorators(self::$_DisplayGroupDecorator[$format]); $form->setDecorators(self::$_FormDecorator[$format]); if (self::BOOTSTRAP == $format || self::BOOTSTRAP_MINIMAL == $format) { $form->addElementPrefixPath('Dfi_Form_Decorator', 'Dfi/Form/Decorator', Zend_Form::DECORATOR); $form->addPrefixPath('Dfi_Form_Decorator', 'Dfi/Form/Decorator', Zend_Form::DECORATOR); } $form->setElementDecorators(self::$_ElementDecorator[$format]); return; }
public function testCanSetAllDisplayGroupDecoratorsAtOnce() { $this->setupDisplayGroups(); $this->form->setDisplayGroupDecorators(array(array('Callback', array('callback' => 'strip_tags')))); foreach ($this->form->getDisplayGroups() as $element) { $this->assertFalse($element->getDecorator('FormElements')); $this->assertFalse($element->getDecorator('HtmlTag')); $this->assertFalse($element->getDecorator('Fieldset')); $this->assertFalse($element->getDecorator('DtDdWrapper')); $decorator = $element->getDecorator('Callback'); $this->assertTrue($decorator instanceof \Zend\Form\Decorator\Callback); } }
/** * Set the form decorators by the given string format or by the default div style * * @param object $objForm Zend_Form pointer-reference * @param string $constFormat Project_Plugin_FormDecoratorDefinition constants * @return NULL */ public static function setFormDecorator(Zend_Form $form, $format = self::BOOTSTRAP, $submit_str = 'submit', $cancel_str = 'cancel') { /** * - disable default decorators * - set form & displaygroup decorators */ $form->setDisableLoadDefaultDecorators(true); $form->setDisplayGroupDecorators(self::$_DisplayGroupDecorator[$format]); $form->setDecorators(self::$_FormDecorator[$format]); // set needed prefix path for bootstrap decorators if ($format == self::BOOTSTRAP) { $form->addElementPrefixPath('EasyBib_Form_Decorator', 'EasyBib/Form/Decorator', Zend_Form::DECORATOR); } // set form element decorators $form->setElementDecorators(self::$_ElementDecorator[$format]); // set submit button decorators if ($form->getElement($submit_str)) { $form->getElement($submit_str)->setDecorators(self::$_SubmitDecorator[$format]); if ($format == self::BOOTSTRAP) { $attribs = $form->getElement($submit_str)->getAttrib('class'); if (empty($attribs)) { $attribs = array('btn', 'primary'); } else { if (is_string($attribs)) { $attribs = array($attribs); } $attribs = array_unique(array_merge(array('btn'), $attribs)); } $form->getElement($submit_str)->setAttrib('class', $attribs)->setAttrib('type', 'submit'); if ($form->getElement($cancel_str)) { $form->getElement($submit_str)->getDecorator('HtmlTag')->setOption('openOnly', true); } } } // set cancel button decorators if ($form->getElement($cancel_str)) { $form->getElement($cancel_str)->setDecorators(self::$_ResetDecorator[$format]); if ($format == self::BOOTSTRAP) { $attribs = $form->getElement($cancel_str)->getAttrib('class'); if (empty($attribs)) { $attribs = array('btn'); } else { if (is_string($attribs)) { $attribs = array($attribs); } $attribs = array_unique(array_merge(array('btn'), $attribs)); } $form->getElement($cancel_str)->setAttrib('class', $attribs)->setAttrib('type', 'reset'); if ($form->getElement($submit_str)) { $form->getElement($cancel_str)->getDecorator('HtmlTag')->setOption('closeOnly', true); } } } // set hidden input decorators foreach ($form->getElements() as $e) { if ($e->getType() == 'Zend_Form_Element_Hidden') { $e->setDecorators(self::$_HiddenDecorator[$format]); } } }
public function form($values = array()) { $config = Zend_Registry::get('config'); $form = new Zend_Form(); $form->setAttrib('id', 'eventForm')->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'zend_form')), 'Form')); $workshop = new Workshop(); $where = $workshop->getAdapter()->quoteInto('status = ?', 'enabled'); $workshops = $workshop->fetchAll($where, 'title'); $workshopList = array(); foreach ($workshops as $w) { $workshopList[$w->workshopId] = $w->title; } $workshopElement = $form->createElement('select', 'workshop', array('label' => 'Workshop:')); $workshopElement->setMultiOptions($workshopList)->setValue(isset($values['workshopId']) ? $values['workshopId'] : ''); $location = new Location(); $where = $location->getAdapter()->quoteInto('status = ?', 'enabled'); $locations = $location->fetchAll($where, 'name'); $locationList = array(); $locationCapacity = array(); foreach ($locations as $l) { $locationList[$l->locationId] = $l->name; $locationCapacity['loc_' . $l->locationId] = $l->capacity; } $locationIds = array_keys($locationList); // add the location capacities to the page in js so we can process it as a json object for the "live" max size changing with location selection Zend_Layout::getMvcInstance()->getView()->headScript()->appendScript('var locationCapacitiesString = ' . Zend_Json::encode($locationCapacity) . ';'); $locationElement = $form->createElement('select', 'location', array('label' => 'Location:')); $locationElement->setMultiOptions($locationList)->setValue(isset($values['locationId']) ? $values['locationId'] : $locationCapacity['loc_' . $locationIds[0]]); $date = $form->createElement('text', 'date', array('label' => 'Date:')); $date->setRequired(true)->addFilter('StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '128')->setAttrib('style', 'width: 200px')->setValue(isset($values['date']) ? strftime('%A, %B %e, %Y', strtotime($values['date'])) : ''); $password = $form->createElement('text', 'password', array('label' => 'Event Password:'******'StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '100')->setValue(isset($values['password']) ? $values['password'] : ''); // add the start time selector $startTimeSub = new Zend_Form_SubForm(); $startTimeSub->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'zend_form')))); $startTimeSub->setAttrib('class', 'sub'); $startTimeHour = $startTimeSub->createElement('select', 'hour', array('label' => 'Start Time:')); for ($i = 1; $i <= 12; $i++) { $startTimeHour->addMultiOption($i, $i); } $startTimeHour->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')), array('Label'))); $startTimeHour->setValue(isset($values['startTime']) ? date('g', strtotime($values['startTime'])) : date('g')); $startTimeMinute = $startTimeSub->createElement('select', 'minute'); for ($i = 0; $i < 60; $i += 5) { $startTimeMinute->addMultiOption(str_pad($i, 2, '0', STR_PAD_LEFT), str_pad($i, 2, '0', STR_PAD_LEFT)); } $startTimeMinute->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')))); $startTimeMinute->setValue(isset($values['startTime']) ? date('i', strtotime($values['startTime'])) : date('i')); $startTimeMeridian = $startTimeSub->createElement('select', 'meridian'); $startTimeMeridian->addMultiOption('am', 'AM')->addMultiOption('pm', 'PM')->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')))); $startTimeMeridian->setValue(isset($values['startTime']) ? date('a', strtotime($values['startTime'])) : date('a')); $startTimeSub->addElements(array($startTimeHour, $startTimeMinute, $startTimeMeridian)); // add the end time selector $endTimeSub = new Zend_Form_SubForm(); $endTimeSub->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'zend_form')))); $endTimeSub->setAttrib('class', 'sub'); $endTimeHour = $endTimeSub->createElement('select', 'hour', array('label' => 'End Time:')); for ($i = 1; $i <= 12; $i++) { $endTimeHour->addMultiOption($i, $i); } $endTimeHour->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')), array('Label'))); $endTimeHour->setValue(isset($values['endTime']) ? date('g', strtotime($values['endTime'])) : date('g')); $endTimeMinute = $endTimeSub->createElement('select', 'minute'); for ($i = 0; $i < 60; $i += 5) { $endTimeMinute->addMultiOption(str_pad($i, 2, '0', STR_PAD_LEFT), str_pad($i, 2, '0', STR_PAD_LEFT)); } $endTimeMinute->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')))); $endTimeMinute->setValue(isset($values['endTime']) ? date('i', strtotime($values['endTime'])) : date('i')); $endTimeMeridian = $endTimeSub->createElement('select', 'meridian'); $endTimeMeridian->addMultiOption('am', 'AM')->addMultiOption('pm', 'PM')->setDecorators(array(array('ViewHelper', array('helper' => 'formSelect')))); $endTimeMeridian->setValue(isset($values['endTime']) ? date('a', strtotime($values['endTime'])) : date('a')); $endTimeSub->addElements(array($endTimeHour, $endTimeMinute, $endTimeMeridian)); // get all the users available for the instructor list $otAccount = new Ot_Account(); $accounts = $otAccount->fetchAll(null, array('lastName', 'firstName'))->toArray(); $instructorList = array(); foreach ($accounts as $a) { $instructorList[$a['accountId']] = $a['lastName'] . ", " . $a['firstName']; } $instructorElement = $form->createElement('multiselect', 'instructors', array('label' => 'Instructor(s):')); $instructorElement->setMultiOptions($instructorList)->setAttrib('size', 10)->setValue(isset($values['instructorIds']) ? $values['instructorIds'] : ''); $minSize = $form->createElement('text', 'minSize', array('label' => 'Min Size:')); $minSize->setRequired(true)->addFilter('StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '64')->setAttrib('style', 'width: 50px;')->setValue(isset($values['minSize']) ? $values['minSize'] : $config->user->defaultMinWorkshopSize->val); $maxSize = $form->createElement('text', 'maxSize', array('label' => 'Max Size:')); $maxSize->setRequired(true)->addFilter('StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '64')->setAttrib('style', 'width: 50px;')->setValue(isset($values['maxSize']) ? $values['maxSize'] : $locationElement->getValue()); $waitlistSize = $form->createElement('text', 'waitlistSize', array('label' => 'Waitlist Size:')); $waitlistSize->setRequired(true)->addFilter('StringTrim')->addFilter('StripTags')->setAttrib('maxlength', '64')->setAttrib('style', 'width: 50px;')->setValue(isset($values['waitlistSize']) ? $values['waitlistSize'] : $config->user->defaultWorkshopWaitlistSize->val); $evaluationType = $form->createElement('select', 'evaluationType', array('label' => 'Evaluation Type:')); $evaluationType->setMultiOptions(array('default' => 'Default', 'google' => 'Google Form'))->setRequired(true)->setValue(isset($values['evaluationType']) ? $values['evaluationType'] : 'default'); $formKey = $form->createElement('textarea', 'formKey', array('label' => 'Google Form Question Key:')); $formKey->setAttribs(array('cols' => '10', 'rows' => '5', 'style' => 'width : 250px;'))->addDecorators(array('ViewHelper', 'Errors', 'HtmlTag', array('Label', array('tag' => 'span')), array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div', 'id' => 'formKey', 'class' => 'elm'))))->setValue(isset($values['formKey']) ? $values['formKey'] : ''); $answerKey = $form->createElement('textarea', 'answerKey', array('label' => 'Google Form Answer Key:')); $answerKey->addFilter('StringTrim')->addFilter('StripTags')->setAttribs(array('cols' => '10', 'rows' => '3', 'style' => 'width : 250px;'))->addDecorators(array('ViewHelper', 'Errors', 'HtmlTag', array('Label', array('tag' => 'span')), array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div', 'id' => 'answerKey', 'class' => 'elm'))))->setValue(isset($values['answerKey']) ? $values['answerKey'] : ''); $submit = $form->createElement('submit', 'submitButton', array('label' => 'Submit')); $submit->setDecorators(array(array('ViewHelper', array('helper' => 'formSubmit')))); $cancel = $form->createElement('button', 'cancel', array('label' => 'Cancel')); $cancel->setAttrib('id', 'cancel'); $cancel->setDecorators(array(array('ViewHelper', array('helper' => 'formButton')))); $form->addElements(array($workshopElement, $locationElement, $password, $date, $evaluationType))->addSubForms(array('startTime' => $startTimeSub, 'endTime' => $endTimeSub))->addElements(array($minSize, $maxSize, $waitlistSize, $instructorElement)); $form->addDisplayGroup(array('instructors'), 'instructors-group', array('legend' => 'Instructors')); $form->addDisplayGroup(array('workshop', 'password', 'location', 'minSize', 'maxSize', 'waitlistSize'), 'generalInformation', array('legend' => 'General Information')); $form->setElementDecorators(array('ViewHelper', 'Errors', array('HtmlTag', array('tag' => 'div', 'class' => 'elm')), array('Label', array('tag' => 'span'))))->addElements(array($submit, $cancel)); $form->addElements(array($evaluationType, $formKey, $answerKey)); $form->addDisplayGroup(array('evaluationType', 'formKey', 'answerKey'), 'evaluationTypes', array('legend' => 'Evaluations')); $form->addDisplayGroup(array('submitButton', 'cancel'), 'buttons'); $form->setDisplayGroupDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'class' => 'widget-content')), array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div', 'class' => array('widget-footer', 'ui-corner-bottom'), 'placement' => Zend_Form_Decorator_Abstract::APPEND)), array('FieldSet', array('class' => 'formField')))); $buttons = $form->getDisplayGroup('buttons'); $buttons->setDecorators(array('FormElements', array('HtmlTag', array('tag' => 'div', 'style' => 'clear : both;')))); if (isset($values['eventId'])) { $eventId = $form->createElement('hidden', 'eventId'); $eventId->setValue($values['eventId']); $eventId->setDecorators(array(array('ViewHelper', array('helper' => 'formHidden')))); $form->addElement($eventId); } return $form; }