You are here

function content_multigroup_node_form_fix_required in Content Construction Kit (CCK) 6.3

Fix required flag for required fields.

We need to let the user enter an empty set of fields for a delta subgroup, even if it contains required fields, which is equivalent to say a subgroup should be ignored, not to be stored into the database. So, we need to check for required fields, but only for non-empty subgroups.

When the form is processed for rendering, the required flag is enabled for all required fields, so the user can see what's required and what's not.

When the form is processed for validation, the required flag is disabled, so that FormAPI does not report errors for empty fields.

See also

content_multigroup_node_form_validate().

2 calls to content_multigroup_node_form_fix_required()
content_multigroup_node_form_pre_render in modules/content_multigroup/content_multigroup.node_form.inc
Fix required flag during form rendering stage.
_content_multigroup_node_form_after_build in modules/content_multigroup/content_multigroup.node_form.inc
Fix form and posting data when the form is submitted.

File

modules/content_multigroup/content_multigroup.node_form.inc, line 357
Implementation of node edit functions for content multigroup.

Code

function content_multigroup_node_form_fix_required(&$elements, $required_fields, $required) {
  foreach (element_children($elements) as $key) {
    if (isset($elements[$key]) && $elements[$key]) {
      if (count($elements[$key]['#parents']) >= 3 && in_array($elements[$key]['#parents'][2], $required_fields) && isset($elements[$key]['#required'])) {
        $elements[$key]['#required'] = $required;

        // Required option lists do not have an empty option available. Add one to avoid 'An illegal choice has been detected' errors.
        if (!$required && !empty($elements[$key]['#options']) && substr($elements[$key]['#id'], -7) != '_weight') {
          $empty = array(
            '' => '',
          );
          $elements[$key]['#options'] = $empty + $elements[$key]['#options'];
        }
      }

      // Recurse through all children elements.
      content_multigroup_node_form_fix_required($elements[$key], $required_fields, $required);
    }
  }
}