setLabel(_("Link:")); $this->addElement($linked); //Add type select $this->addElement('select', 'add_show_repeat_type', array( 'required' => true, 'label' => _('Repeat Type:'), 'class' => ' input_select', 'multiOptions' => array( "0" => _("weekly"), "1" => _("every 2 weeks"), "4" => _("every 3 weeks"), "5" => _("every 4 weeks"), "2" => _("monthly") ), )); // Add days checkboxes $this->addElement( 'multiCheckbox', 'add_show_day_check', array( 'label' => _('Select Days:'), 'required' => false, 'multiOptions' => array( "0" => _("Sun"), "1" => _("Mon"), "2" => _("Tue"), "3" => _("Wed"), "4" => _("Thu"), "5" => _("Fri"), "6" => _("Sat"), ), )); $repeatMonthlyType = new Zend_Form_Element_Radio("add_show_monthly_repeat_type"); $repeatMonthlyType ->setLabel(_("Repeat By:")) ->setRequired(true) ->setMultiOptions( array(2 => _("day of the month"), 3 => _("day of the week"))) ->setValue(2); $this->addElement($repeatMonthlyType); // Add end date element $this->addElement('text', 'add_show_end_date', array( 'label' => _('Date End:'), 'class' => 'input_text', 'value' => date("Y-m-d"), 'required' => false, 'filters' => array('StringTrim'), 'validators' => array( 'NotEmpty', array('date', false, array('YYYY-MM-DD')) ) )); // Add no end element $this->addElement('checkbox', 'add_show_no_end', array( 'label' => _('No End?'), 'required' => false, 'checked' => true, )); } public function disable() { $elements = $this->getElements(); foreach ($elements as $element) { if ($element->getType() != 'Zend_Form_Element_Hidden') { $element->setAttrib('disabled','disabled'); } } } public function isValid($formData) { if (parent::isValid($formData)) { return $this->checkReliantFields($formData); } else { return false; } } public function checkReliantFields($formData) { if (!$formData['add_show_no_end']) { $start_timestamp = $formData['add_show_start_date']; $end_timestamp = $formData['add_show_end_date']; $showTimeZone = new DateTimeZone($formData['add_show_timezone']); //We're assuming all data is valid at this point (timezone, etc.). $startDate = new DateTime($start_timestamp, $showTimeZone); $endDate = new DateTime($end_timestamp, $showTimeZone); if ($endDate < $startDate) { $this->getElement('add_show_end_date')->setErrors(array(_('End date must be after start date'))); return false; } return true; } if (!isset($formData['add_show_day_check'])) { $this->getElement('add_show_day_check')->setErrors(array(_('Please select a repeat day'))); } return true; } }