public function editAction()
 {
     $this->_helper->layout()->setLayout('submenu');
     $id = $this->_getParam('id');
     $category = Model_Hm_Category::findOneByIdForAdmin($id)->fetchOne();
     $form = $this->_getForm();
     $this->view->form = $form;
     $form->populate($category->toArray(true));
     if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getPost())) {
         $category->fromArray($form->getValues());
         $category->save();
         $this->_helper->redirector('admin');
     }
 }
 public function init()
 {
     /*
      * 
      * Settings
      * 
      */
     $this->setName('holidayhome');
     $this->setMethod('post');
     /*
      * 
      * Elements
      * 
      */
     $element = new Zend_Form_Element_Select('hm_geo_city_id');
     $element->setLabel('Plaats')->addMultiOption('', '...')->setRequired(true);
     $geo = Doctrine_Query::create()->from('Model_Hm_Geo_City c')->leftJoin('c.Region r, r.Country y, y.Translation tr')->where('tr.lang = ?', Model_Lang::getCurrent())->orderBy('tr.name, r.name, c.name')->execute();
     foreach ($geo as $city) {
         $element->addMultiOption($city->id, $city->Region->Country->translationHandler()->name . " - " . $city->Region->name . " - " . $city->name);
     }
     $this->addElement($element);
     $element = new Zend_Form_Element_Select('hm_owner_id');
     $element->setLabel('Eigenaar')->addMultiOption('', '...')->setRequired(true);
     $owners = Doctrine_Query::create()->from('Model_Hm_Owner o')->leftJoin('o.User u')->orderBy('u.surname')->select('o.id')->execute();
     foreach ($owners as $owner) {
         $label = $owner->User->surname . ', ' . $owner->User->initials . ' ' . $owner->User->insertion . ' - (' . $owner->debtor_no . ')';
         $element->addMultiOption($owner->id, $label);
     }
     $this->addElement($element);
     $element = new Zend_Form_Element_Select('active');
     $element->setLabel('Actief')->setRequired(true)->addMultiOption('', '...')->addMultiOption('true', 'Actief')->addMultiOption('false', 'Niet actief');
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('name');
     $element->setLabel('Naam')->setValidators(array(array('stringLength', null, array('min' => 4, 'max' => 128))))->setAttrib('maxlength', 128)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('address');
     $element->setLabel('Straat')->setValidators(array(array('stringLength', null, array('min' => 4, 'max' => 128))))->setAttrib('maxlength', 128)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('number');
     $element->setLabel('Huisnummer')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('code');
     $element->setLabel('Code')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('zipcode');
     $element->setLabel('Postcode')->setValidators(array(array('stringLength', null, array('min' => 2, 'max' => 8))))->setAttrib('maxlength', 8)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('surface_lot');
     $element->setLabel('Kavel')->setValidators(array(array('digits')))->setFilters(array(array('int')))->setAttrib('maxlength', 6);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('surface_build');
     $element->setLabel('Bebouwd')->setValidators(array(array('digits')))->setFilters(array(array('int')))->setAttrib('maxlength', 6);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('persons');
     $element->setLabel('Personen')->setValidators(array(array('digits')))->setFilters(array(array('int')))->setAttrib('maxlength', 6)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('bedrooms');
     $element->setLabel('Slaapkamers')->setValidators(array(array('digits')))->setFilters(array(array('int')))->setAttrib('maxlength', 6)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('toilets');
     $element->setLabel('Toiletten')->setValidators(array(array('digits')))->setFilters(array(array('int')))->setAttrib('maxlength', 6)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('showers');
     $element->setLabel('Badkamers')->setValidators(array(array('digits')))->setFilters(array(array('int')))->setAttrib('maxlength', 6)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('coordinate');
     $element->setLabel('Coordinaat')->setValidators(array(array('stringLength', null, array('min' => 8, 'max' => 32))))->setAttrib('maxlength', 32)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('price');
     $element->setLabel('Basisprijs')->setAttrib('maxlength', 20)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('extra_percentage');
     $element->setLabel('Gebroken week percentage')->setAttrib('maxlength', 20)->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('maintenance_central_heating');
     $element->setLabel('Onderhoud centrale verwarming')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('maintenance_garden');
     $element->setLabel('Onderhoud tuin')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('insurance_name');
     $element->setLabel('Verzekerinig')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('wifi_password');
     $element->setLabel('Wifi wachtwoord')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('insurance_policy_no');
     $element->setLabel('Polisnummer')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('insurance_agent');
     $element->setLabel('Contactpersoon')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128);
     $this->addElement($element);
     $element = new Zend_Form_Element_Text('insurance_phone_no');
     $element->setLabel('Telefoonnummer')->setValidators(array(array('stringLength', null, array('max' => 128))))->setAttrib('maxlength', 128);
     $this->addElement($element);
     $element = new Zend_Form_Element_Select('vat_publish');
     $element->setLabel('Belasting plichtig')->addMultiOption(null, '..')->addMultiOption('true', 'Ja')->addMultiOption('false', 'Nee')->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_Select('vat_outside');
     $element->setLabel('Belasting buitenland')->addMultiOption(null, '..')->addMultiOption('true', 'Ja')->addMultiOption('false', 'Nee')->setRequired(true);
     $this->addElement($element);
     $element = new Zend_Form_Element_MultiCheckbox('Categories');
     $element->setLabel('Categorieen waar woning in hoort');
     $categories = Model_Hm_Category::listAll()->execute();
     foreach ($categories as $category) {
         $element->addMultiOption($category->id, $category->translationHandler()->name);
     }
     $this->addElement($element);
     $element = new Zend_Form_Element_MultiCheckbox('Options');
     $element->setLabel('Kenmerken van deze woning');
     $options = Model_Hm_Op_Option::listAll()->execute();
     foreach ($options as $option) {
         $element->addMultiOption($option->id, $option->Category->translationHandler()->name . ' - ' . $option->translationHandler()->name);
     }
     $this->addElement($element);
     $element = new Zend_Form_Element_Submit('holidayhome_submit');
     $element->setLabel('Verwerken')->setAttrib('class', 'submit');
     $this->addElement($element);
     /*
      * 
      * Translations
      * 
      */
     // Create new translations subform
     $subForm = new Zend_Form_SubForm('Translation');
     // Run all languages
     foreach (Model_Hm_Lang::listAll() as $lang) {
         // Create subform for language
         $subSubForm = new Zend_Form_SubForm($lang->code);
         // Create description field
         $element = new Zend_Form_Element_Textarea('description');
         $element->setLabel('Omschrijving')->setAttrib('class', 'autoexpand')->setAttrib('rows', 2)->setAttrib('cols', 24)->setRequired(true)->setValidators(array(array('stringLength', false, array('min' => 40))));
         $subSubForm->addElement($element);
         // Add description field to language subform
         // Put each language in different fieldset
         $subSubForm->addDisplayGroup(array('description'), $lang->code, array('class' => 'textarea', 'legend' => 'Vertaling - ' . $lang->name));
         // Add language subform to Translation subform
         $subForm->addSubForm($subSubForm, $lang->code);
     }
     // Add Translation subform to normal form
     $this->addSubForm($subForm, 'Translation', 19);
     /*
      * 
      * Display groups
      * 
      */
     $this->addDisplayGroup(array('Options'), 'OptionsGroup', array('class' => 'checkboxes', 'legend' => 'Kenmerken', 'order' => 17));
     $this->addDisplayGroup(array('address', 'number', 'zipcode', 'code', 'hm_geo_city_id'), 'Adres', array('legend' => 'Adres', 'order' => 2));
     $this->addDisplayGroup(array('persons', 'bedrooms', 'toilets', 'showers'), 'Indeling', array('legend' => 'Indeling', 'order' => 3));
     $this->addDisplayGroup(array('surface_lot', 'surface_build'), 'Oppervlakte', array('legend' => 'Oppervlakte', 'order' => 6));
     $this->addDisplayGroup(array('vat_publish', 'vat_outside'), 'Belasting', array('legend' => 'Belasting', 'order' => 5));
     $this->addDisplayGroup(array('price', 'extra_percentage'), 'Prijscalculatie', array('legend' => 'Prijscalculatie', 'order' => 4));
     $this->addDisplayGroup(array('maintenance_central_heating', 'maintenance_garden', 'wifi_password'), 'hulpdiensten', array('legend' => 'Overige', 'order' => 11));
     $this->addDisplayGroup(array('insurance_name', 'insurance_policy_no', 'insurance_agent', 'insurance_phone_no'), 'verzekering', array('legend' => 'Verzekering', 'order' => 10));
     $this->addDisplayGroup(array('Categories'), 'categoriesgroup', array('legend' => 'Categorieen', 'class' => 'checkboxes', 'order' => 12));
     $this->addDisplayGroup(array('hm_owner_id', 'active', 'name', 'coordinate'), 'algemeen', array('legend' => 'Algemeen', 'order' => 1));
     $this->addDisplayGroup(array('holidayhome_submit'), 'submit', array('order' => 20, 'class' => 'submit'));
     /*
      * 
      * Decorators
      * 
      */
     $decorators = array('FormElements', 'Form');
     $displayGroupDecorators = array('Description', 'FormElements', 'Fieldset');
     $elementDecorators = array('Description', 'ViewHelper', 'Errors', array(array('p' => 'HtmlTag'), array('tag' => 'p')), array('Label', array('tag' => 'p')));
     $subDecorators = array('FormElements');
     $subDisplayGroupDecorators = array('Description', 'FormElements', 'Fieldset', array('HtmlTag', array('tag' => 'div')));
     $subElementDecorators = array('Description', 'ViewHelper', 'Errors', array(array('p' => 'HtmlTag'), array('tag' => 'p')), array('Label', array('tag' => 'p')));
     /*
      * 
      * Set decorators
      * 
      */
     $this->setDecorators($decorators)->setElementDecorators($elementDecorators)->setDisplayGroupDecorators($displayGroupDecorators);
     $translation = $this->getSubForm('Translation')->setDecorators($subDecorators)->setDisplayGroupDecorators($subDisplayGroupDecorators)->setElementDecorators($subElementDecorators);
     $subsubforms = $translation->getSubForms();
     foreach ($subsubforms as $subsubform) {
         $subsubform->setDecorators($subDecorators)->setDisplayGroupDecorators($subDisplayGroupDecorators)->setElementDecorators($subElementDecorators);
     }
     $submit = $this->getElement('holidayhome_submit');
     $submit->setDecorators(array('ViewHelper'));
 }