diff --git a/inline_entity_form.module b/inline_entity_form.module index be41f13..d3f1af4 100644 --- a/inline_entity_form.module +++ b/inline_entity_form.module @@ -730,6 +730,13 @@ function inline_entity_form_field_widget_form(&$form, &$form_state, $field, $ins } } + // Required mark & validation. + // Drupal doesn't have required marker for fieldset. + if ($element['#required']) { + $element['#title'] .= ' ' . theme('form_required_marker', array('element' => $element)); + $element['#element_validate'][] = 'inline_entity_form_required_field'; + } + return $element; } @@ -1223,6 +1230,38 @@ function inline_entity_form_save_row_weights($element, &$form_state, $form) { } /** + * IEF widget #element_validate callback: Required field validation. + */ +function inline_entity_form_required_field($element, &$form_state, $form) { + // Only react on the submission of the parent form. + if (count($form_state['triggering_element']['#parents']) > 1) { + return; + } + + $entities_data = drupal_array_get_nested_value($form_state['values'], $element['#parents']); + $ief_validated = TRUE; + // Validate against IEF open form. + if (isset($entities_data['form'])) { + $form_errors = form_get_errors(); + if (!empty($form_errors)) { + $reg_exp = "/^" . implode('\]\[', $element['#parents']) . "(.*?)/"; + $ief_errors = preg_grep($reg_exp, array_keys($form_errors)); + if (!empty($ief_errors)) { + $ief_validated = FALSE; + } + } + } + // Empty IEF. + else { + $ief_validated = FALSE; + } + if (!element_children($element['entities']) && !$ief_validated) { + $instance = $form_state['inline_entity_form'][$element['#ief_id']]['instance']; + form_error($element, t('!name (inline reference) field is required.', array('!name' => $instance['label']))); + } +} + +/** * Implements hook_field_attach_submit(). */ function inline_entity_form_field_attach_submit($parent_entity_type, $parent_entity, $form, &$form_state) {