request->get($field); if ($value !== null && $value !== '' && ctype_digit(trim((string) $value))) { $data[$field] = (int) trim((string) $value); } } return $data; } public function rules(): array { $rules = [ 'reminders_enabled' => 'nullable|sanitizeText', 'yearly_renewal_reminders_enabled' => 'nullable|sanitizeText', 'yearly_renewal_reminder_days' => 'nullable', 'trial_end_reminders_enabled' => 'nullable|sanitizeText', 'trial_end_reminder_days' => 'nullable', 'monthly_renewal_reminders_enabled' => 'nullable|sanitizeText', 'monthly_renewal_reminder_days' => 'nullable', 'quarterly_renewal_reminders_enabled' => 'nullable|sanitizeText', 'quarterly_renewal_reminder_days' => 'nullable', 'half_yearly_renewal_reminders_enabled' => 'nullable|sanitizeText', 'half_yearly_renewal_reminder_days' => 'nullable', 'renewal_reminders_enabled' => 'nullable|sanitizeText', 'renewal_reminder_overdue_days' => 'nullable|sanitizeText', ]; // Only validate days fields when their corresponding toggle is enabled $conditionalRules = [ 'yearly_renewal_reminders_enabled' => ['yearly_renewal_reminder_days' => 'integer|min:7|max:90'], 'trial_end_reminders_enabled' => ['trial_end_reminder_days' => 'integer|min:1|max:14'], 'monthly_renewal_reminders_enabled' => ['monthly_renewal_reminder_days' => 'integer|min:3|max:28'], 'quarterly_renewal_reminders_enabled' => ['quarterly_renewal_reminder_days' => 'integer|min:7|max:60'], 'half_yearly_renewal_reminders_enabled' => ['half_yearly_renewal_reminder_days' => 'integer|min:7|max:60'], ]; foreach ($conditionalRules as $toggle => $daysRules) { if ($this->request->get($toggle) === 'yes') { $rules = array_merge($rules, $daysRules); } } return $rules; } public function messages(): array { return [ 'yearly_renewal_reminder_days.integer' => __('Yearly renewal reminder days must be a whole number.', 'fluent-cart'), 'yearly_renewal_reminder_days.min' => __('Yearly renewal reminder days must be at least 7.', 'fluent-cart'), 'yearly_renewal_reminder_days.max' => __('Yearly renewal reminder days must not exceed 90.', 'fluent-cart'), 'trial_end_reminder_days.integer' => __('Trial end reminder days must be a whole number.', 'fluent-cart'), 'trial_end_reminder_days.min' => __('Trial end reminder days must be at least 1.', 'fluent-cart'), 'trial_end_reminder_days.max' => __('Trial end reminder days must not exceed 14.', 'fluent-cart'), 'monthly_renewal_reminder_days.integer' => __('Monthly renewal reminder days must be a whole number.', 'fluent-cart'), 'monthly_renewal_reminder_days.min' => __('Monthly renewal reminder days must be at least 3.', 'fluent-cart'), 'monthly_renewal_reminder_days.max' => __('Monthly renewal reminder days must not exceed 28.', 'fluent-cart'), 'quarterly_renewal_reminder_days.integer' => __('Quarterly renewal reminder days must be a whole number.', 'fluent-cart'), 'quarterly_renewal_reminder_days.min' => __('Quarterly renewal reminder days must be at least 7.', 'fluent-cart'), 'quarterly_renewal_reminder_days.max' => __('Quarterly renewal reminder days must not exceed 60.', 'fluent-cart'), 'half_yearly_renewal_reminder_days.integer' => __('Half yearly renewal reminder days must be a whole number.', 'fluent-cart'), 'half_yearly_renewal_reminder_days.min' => __('Half yearly renewal reminder days must be at least 7.', 'fluent-cart'), 'half_yearly_renewal_reminder_days.max' => __('Half yearly renewal reminder days must not exceed 60.', 'fluent-cart'), ]; } public function sanitize(): array { return [ 'reminders_enabled' => 'sanitize_text_field', 'yearly_renewal_reminders_enabled' => 'sanitize_text_field', 'yearly_renewal_reminder_days' => 'intval', 'trial_end_reminders_enabled' => 'sanitize_text_field', 'trial_end_reminder_days' => 'intval', 'monthly_renewal_reminders_enabled' => 'sanitize_text_field', 'monthly_renewal_reminder_days' => 'intval', 'quarterly_renewal_reminders_enabled' => 'sanitize_text_field', 'quarterly_renewal_reminder_days' => 'intval', 'half_yearly_renewal_reminders_enabled' => 'sanitize_text_field', 'half_yearly_renewal_reminder_days' => 'intval', 'renewal_reminders_enabled' => 'sanitize_text_field', 'renewal_reminder_overdue_days' => 'sanitize_text_field', ]; } }