You are here

function subform_buffer_errors in Subform 7

Buffers errors seperating them per (sub)form.

2 calls to subform_buffer_errors()
subform_buffer in ./subform.module
Buffers errors and uploads seperating them per (sub)form.
theme_subform in ./subform.module
Returns HTML for a subform.

File

./subform.module, line 825
Defines a subform element type.

Code

function subform_buffer_errors($op, &$subform_element, $propagate = FALSE) {
  static $errors_stack = array();
  static $sections_stack = array();
  static $messages_stack = array();
  $errors =& drupal_static('form_set_error', array());
  $sections =& drupal_static('form_set_error:limit_validation_errors');
  switch ($op) {
    case 'start':
      $errors_stack[] = $errors;
      $sections_stack[] = $sections;
      $messages_stack[] = isset($_SESSION['messages']['error']) ? $_SESSION['messages']['error'] : array();
      $errors = $subform_element['#subform_errors'];
      $sections = NULL;
      if (isset($_SESSION['messages']['error'])) {
        unset($_SESSION['messages']['error']);
      }
      break;
    case 'end':
      $subform_element['#subform_errors'] += $errors;
      if (isset($_SESSION['messages']['error'])) {
        $subform_element['#subform_error_messages'] += $_SESSION['messages']['error'];
      }
      $errors = array_pop($errors_stack);
      $sections = array_pop($sections_stack);
      $_SESSION['messages']['error'] = array_pop($messages_stack);
      if (empty($_SESSION['messages']['error'])) {
        unset($_SESSION['messages']['error']);
      }

      // If the subform contains errors inform the parent form, but only if
      // the subform is required.
      if ($propagate && !empty($subform_element['#subform_errors'])) {
        $prior_errors = $errors;
        form_error($subform_element);

        // If the error was added (not skipped by #limit_validation_errors) to
        // the parent form also display subform's error messages.
        if ($errors != $prior_errors && !empty($subform_element['#subform_error_messages'])) {
          $subform_element['#subform_has_errors'] = TRUE;
          if (!isset($_SESSION['messages']['error'])) {
            $_SESSION['messages']['error'] = array();
          }
          $_SESSION['messages']['error'] += $subform_element['#subform_error_messages'];
          $subform_element['#subform_error_messages'] = array();
        }
      }
      break;
  }
}