You are here

function flexiform_submit_ajax in Flexiform 7

Submit AJAX callback for a flexiform.

1 string reference to 'flexiform_submit_ajax'
flexiform in includes/flexiform.flexiform.inc
Build a flexiform.

File

includes/flexiform.flexiform.inc, line 210
flexiform.flexiform.inc Helper function for embedding the fields into the flexiform in an arbitrary order

Code

function flexiform_submit_ajax($form, $form_state) {

  /** @var \Flexiform $flexiform */
  $flexiform = $form['#flexiform'];
  if (empty($form_state['executed'])) {
    return $form;
  }
  switch ($flexiform->settings['ajax']['response']) {
    case 'refresh':
      $wrapper = $form_state['triggering_element']['#ajax']['wrapper'];

      // Prevent submitted values bleeding into the new form.
      $original_post = $_POST;
      $_POST = array();

      // Prepare args. We reload entities to ensure we have the right one.
      $args = $form_state['build_info']['args'];
      $base_entity = $args[1];
      $base_entity_id = entity_id($flexiform->base_entity, $base_entity);
      $args[1] = entity_load_single($flexiform->base_entity, $base_entity_id);
      $new_form = call_user_func_array('drupal_get_form', array_merge(array(
        $form_state['build_info']['form_id'],
      ), $args));
      $_POST = $original_post;
      unset($original_post);
      $commands = array(
        ajax_command_replace('#' . $wrapper, drupal_render($new_form)),
        ajax_command_prepend('#' . $wrapper, theme('status_messages')),
      );
      break;
    case 'reload':
      ctools_include('ajax');
      $commands = array(
        ctools_ajax_command_reload(),
      );
      break;
    case 'redirect':
      ctools_include('ajax');
      $redirect = !empty($flexiform->settings['ajax']['redirect']) ? $flexiform->settings['ajax']['redirect'] : '';
      $redirect = $form['#flexiform_builder']
        ->replaceCtoolsSubstitutions($redirect);
      $options = array();
      if (!empty($form_state['redirect'])) {
        if (is_array($form_state['redirect'])) {
          $redirect = $form_state['redirect'][0];
          $options = $form_state['redirect'][1];
        }
        else {
          $redirect = $form_state['redirect'];
        }
      }
      $commands = array(
        ctools_ajax_command_redirect($redirect, 0, $options),
      );
      break;
  }
  $context = array(
    'flexiform' => $flexiform,
    'form' => $form,
    'form_state' => $form_state,
  );
  drupal_alter('flexiform_ajax_submit_commands', $commands, $context);
  return array(
    '#type' => 'ajax',
    '#commands' => $commands,
  );
}