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);
}
}
}