setLabel(_('Link:')); $this->addElement($linked); // Add type select $this->addElement('select', 'add_show_repeat_type', [ 'required' => true, 'label' => _('Repeat Type:'), 'class' => ' input_select', 'multiOptions' => [ '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', [ 'label' => _('Select Days:'), 'required' => false, 'multiOptions' => [ '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( [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', [ 'label' => _('Date End:'), 'class' => 'input_text', 'value' => date('Y-m-d'), 'required' => false, 'filters' => ['StringTrim'], 'validators' => [ 'NotEmpty', ['date', false, ['YYYY-MM-DD']], ], ]); // Add no end element $this->addElement('checkbox', 'add_show_no_end', [ '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); } 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([_('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([_('Please select a repeat day')]); } return true; } }