From fd270c625183992a97d13bc61fca2942eb11ce64 Mon Sep 17 00:00:00 2001 From: Faisal Ahammad Date: Tue, 17 Feb 2026 00:12:21 +0600 Subject: [PATCH] Fix: Required validation for Ninja Forms integration --- integrations/ninja-forms/class-field.php | 24 ++++++ tests/NinjaFormsValidationTest.php | 100 +++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 tests/NinjaFormsValidationTest.php diff --git a/integrations/ninja-forms/class-field.php b/integrations/ninja-forms/class-field.php index ec8fcd22..adf3567f 100755 --- a/integrations/ninja-forms/class-field.php +++ b/integrations/ninja-forms/class-field.php @@ -62,6 +62,30 @@ public function admin_form_element($id, $value) return ""; } + /** + * Validate the field value. + * + * Overrides parent to handle checkbox-specific required validation, + * since checkboxes submit '0' when unchecked which the parent considers valid. + * + * @since 4.9 + * + * @param array $field The field data. + * @param array $data The form data. + * @return array Array of validation errors, empty if valid. + */ + public function validate($field, $data) + { + $errors = parent::validate($field, $data); + + if (isset($field['required']) && 1 == intval($field['required']) && empty($field['value'])) { + $errors['slug'] = 'required-error'; + $errors['message'] = esc_html__('This field is required.', 'mailchimp-for-wp'); + } + + return $errors; + } + /** * Custom Columns * Creates what is displayed in the columns on the submissions page. diff --git a/tests/NinjaFormsValidationTest.php b/tests/NinjaFormsValidationTest.php new file mode 100644 index 00000000..d056afdb --- /dev/null +++ b/tests/NinjaFormsValidationTest.php @@ -0,0 +1,100 @@ + 1, + 'value' => 0, + ]; + $form_data = []; + + $errors = $field->validate($field_data, $form_data); + + $this->assertIsArray($errors); + $this->assertArrayHasKey('slug', $errors, 'Error slug should be present'); + $this->assertEquals('required-error', $errors['slug']); + } + + public function testRequiredValidationPassesOnChecked() + { + $field = new MC4WP_Ninja_Forms_Field(); + + $field_data = [ + 'required' => 1, + 'value' => 1, + ]; + $form_data = []; + + $errors = $field->validate($field_data, $form_data); + + $this->assertEmpty($errors, 'Validation should pass for required checked field'); + } + + public function testOptionalValidationPassesOnUnchecked() + { + $field = new MC4WP_Ninja_Forms_Field(); + + $field_data = [ + 'required' => 0, + 'value' => 0, + ]; + $form_data = []; + + $errors = $field->validate($field_data, $form_data); + + $this->assertEmpty($errors, 'Validation should pass for optional unchecked field'); + } +}