'How to cross-validate contact form 7 form fields?

I want to make two sperate check box groupe. Lets say

Front end courses
-Bootstrap
-React Js
-Angular js

Back end courses
-C#
-Node
-PHP

on submitting form I want to make sure at least one course is selected by the user. Lets say a student selects ReactJs.

I have tried below code but it makes one option mandatory for all checkbox groups

[Checkbox* checkbox-11 ",Bootstrap" "React Js" "Angular JS"]

[Checkbox* checkbox-12 ",C#" "Node" "PHP"]

How can I make at least one option selected mandatory from any of the checkbox groups



Solution 1:[1]

field validation takes place post form submission. To solve this problem you need to make neither field mandatory, and then do a custom validation on the server side. CF7 plugin allows you to add custom validation to individual field but does not allow you to validate a field wrt to the value of other fields in the form.

To do this you need an extension such as the Smart Grid-layout plugin which has a validation hook that gives you access to the entire form's submitted data and therefore cross-validate your fields,

add_filter('cf7sg_validate_submission', 'cross_validate_submission',10,3);
function cross_validate_submission($validation, $submission, $form_key){
  if(empty($submission['fe-courses']) && empty($submission['be-courses'])){
    $validation['fe-courses']='You need to select at least 1 course!';
  }
  return $validation;
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Aurovrata