You are here

modal_forms.pages.inc in Modal forms (with ctools) 7

Same filename and directory in other branches
  1. 6 modal_forms.pages.inc

Page callbacks for the modal_forms module.

File

modal_forms.pages.inc
View source
<?php

/**
 * @file
 * Page callbacks for the modal_forms module.
 */

/**
 * A modal user login callback.
 */
function modal_forms_login($js = NULL) {

  // Fall back if $js is not set.
  if (!$js) {
    return drupal_get_form('user_login');
  }
  ctools_include('modal');
  ctools_include('ajax');
  $form_state = array(
    // 'title' => t('Log in'),.
    'ajax' => TRUE,
  );

  // Check to make sure the user has not logged in on another session.
  // If that is the case just reload the page.
  if (user_is_logged_in()) {
    $output = array();
    ctools_add_js('ajax-responder');
    $output[] = ctools_ajax_command_reload();
  }
  else {
    $output = ctools_modal_form_wrapper('user_login', $form_state);
  }
  if (!empty($form_state['executed'])) {

    // We'll just overwrite the form output if it was successful.
    $output = array();
    ctools_add_js('ajax-responder');
    $output[] = ctools_modal_command_dismiss();
    if (isset($_GET['destination'])) {
      $output[] = ctools_ajax_command_redirect($_GET['destination']);
    }
    elseif (module_exists('login_destination')) {
      $destination = login_destination_get_destination('login');
      $output[] = ctools_ajax_command_redirect(is_array($destination) ? $destination[0] : $destination);
    }
    else {
      $output[] = ctools_ajax_command_reload();
    }
  }
  print ajax_render($output);
}

/**
 * A modal user register callback.
 */
function modal_forms_register($js = NULL) {

  // Fall back if $js is not set.
  if (!$js) {
    return drupal_get_form('user_register_form');
  }
  ctools_include('modal');
  ctools_include('ajax');
  $form_state = array(
    // 'title' => t('Create new account'),.
    'ajax' => TRUE,
  );
  $output = ctools_modal_form_wrapper('user_register_form', $form_state);
  if (!empty($form_state['executed'])) {

    // We'll just overwrite the form output if it was successful.
    $output = array();
    ctools_add_js('ajax-responder');
    if (isset($_GET['destination'])) {
      $output[] = ctools_ajax_command_redirect($_GET['destination']);
    }
    elseif (module_exists('login_destination')) {
      $destination = login_destination_get_destination('login');
      $output[] = ctools_ajax_command_redirect(is_array($destination) ? $destination[0] : $destination);
    }
    else {
      $output[] = ctools_ajax_command_reload();
    }
  }
  print ajax_render($output);
}

/**
 * A modal user password callback.
 */
function modal_forms_password($js = NULL) {
  module_load_include('inc', 'user', 'user.pages');

  // Fall back if $js is not set.
  if (!$js) {
    return drupal_get_form('user_pass');
  }
  ctools_include('modal');
  ctools_include('ajax');
  $form_state = array(
    // 'title' => t('Request new password'),.
    'ajax' => TRUE,
  );
  $output = ctools_modal_form_wrapper('user_pass', $form_state);
  if (!empty($form_state['executed'])) {

    // We'll just overwrite the form output if it was successful.
    $output = array();
    ctools_add_js('ajax-responder');
    if (isset($_GET['destination'])) {
      $output[] = ctools_ajax_command_redirect($_GET['destination']);
    }
    else {
      $output[] = ctools_ajax_command_reload();
    }
  }
  print ajax_render($output);
}

/**
 * A modal contact callback.
 */
function modal_forms_contact($js = NULL) {
  module_load_include('inc', 'contact', 'contact.pages');

  // Fall back if $js is not set.
  if (!$js) {
    return drupal_get_form('contact_site_form');
  }
  ctools_include('modal');
  ctools_include('ajax');
  $form_state = array(
    // 'title' => t('Contact'),.
    'ajax' => TRUE,
  );
  $output = ctools_modal_form_wrapper('contact_site_form', $form_state);
  if (!empty($form_state['executed'])) {

    // We'll just overwrite the form output if it was successful.
    $output = array();
    ctools_add_js('ajax-responder');
    if (isset($_GET['destination'])) {
      $output[] = ctools_ajax_command_redirect($_GET['destination']);
    }
    else {
      $output[] = ctools_ajax_command_reload();
    }
  }
  print ajax_render($output);
}

/**
 * A modal personal contact form.
 */
function modal_forms_personal_contact($recipient, $js = NULL) {
  module_load_include('inc', 'contact', 'contact.pages');

  // Fall back if $js is not set.
  if (!$js) {
    return drupal_get_form('contact_personal_form', $recipient);
  }
  ctools_include('modal');
  ctools_include('ajax');
  $form_state = array(
    // 'title' => t('Contact'),.
    'build_info' => array(
      'args' => array(
        $recipient,
      ),
    ),
    'ajax' => TRUE,
  );
  $output = ctools_modal_form_wrapper('contact_personal_form', $form_state);
  if (!empty($form_state['executed'])) {

    // We'll just overwrite the form output if it was successful.
    $output = array();
    ctools_add_js('ajax-responder');
    if (isset($_GET['destination'])) {
      $output[] = ctools_ajax_command_redirect($_GET['destination']);
    }
    else {
      $output[] = ctools_ajax_command_reload();
    }
  }
  print ajax_render($output);
}

/**
 * A modal comment callback.
 */
function modal_forms_comment_reply($node, $js = NULL, $pid = NULL) {
  $output = array();
  $comment = array(
    'pid' => $pid,
    'nid' => $node->nid,
  );

  // Fall back if $js is not set.
  if (!$js) {
    return drupal_get_form('comment_node_' . $node->type . '_form', (object) $comment);
  }
  ctools_include('modal');
  ctools_include('ajax');
  $form_state = array(
    'build_info' => array(
      'args' => array(
        (object) $comment,
      ),
    ),
    // 'title' => t('Comment'),.
    'ajax' => TRUE,
    're_render' => FALSE,
    'no_redirect' => TRUE,
  );

  // Should we show the reply box?
  if ($node->comment != COMMENT_NODE_OPEN) {
    drupal_set_message(t("This discussion is closed: you can't post new comments."), 'error');
    drupal_goto('node/' . $node->nid);
  }
  else {
    $output = drupal_build_form('comment_node_' . $node->type . '_form', $form_state);

    // Remove output bellow the comment.
    unset($output['comment_output_below']);
  }
  if (!$form_state['executed'] || $form_state['rebuild']) {
    $output = ctools_modal_form_render($form_state, $output);
  }
  else {

    // We'll just overwrite the form output if it was successful.
    $output = array();

    // @todo: Uncomment once http://drupal.org/node/1587916 is fixed.
    // @codingStandardsIgnoreStart
    // @code
    // if (is_array($form_state['redirect'])) {
    //  list($path, $options) = $form_state['redirect'];
    //  $output[] = ctools_ajax_command_redirect($path, 0, $options);
    // }
    // @endcode
    // @codingStandardsIgnoreEnd
    if (isset($_GET['destination'])) {
      $output[] = ctools_ajax_command_redirect($_GET['destination']);
    }
    else {
      $output[] = ctools_ajax_command_reload();
    }
  }
  print ajax_render($output);
}

/**
 * Modal display of the node's webform.
 *
 * @param object $node
 *   A node object.
 * @param string $js
 *   A javascript string.
 */
function modal_forms_view_webform($node, $js = NULL) {
  $output = array();

  // If we are in a translation node, and there are no webform['components'], so
  // We should look into the source webform node to load our webform from there.
  if (empty($node->webform['components']) && (isset($node->tnid) && $node->tnid != $node->nid)) {
    $tnode = $node;
    $node = node_load($tnode->tnid);
  }

  // Fall back if $js is not set.
  if (!$js) {
    return drupal_get_form('webform_client_form_' . $node->nid, $node, FALSE);
  }
  ctools_include('modal');
  ctools_include('ajax');
  if (empty($node->webform['components'])) {

    // No webform or no components.
    $output[] = ctools_modal_command_display(t('Webform'), t('No webform found.'));
    print ajax_render($output);
    exit;
  }

  // Get webform title.
  // If the node was translated take the translated value instead of the source.
  $title = isset($tnode) ? check_plain($tnode->title) : check_plain($node->title);
  $form_state = array(
    'title' => $title,
    'ajax' => TRUE,
  );

  // Prevent webform redirect.
  $GLOBALS['conf']['webform_blocks']['client-block-' . $node->nid]['pages_block'] = 1;
  $node->webform_block = TRUE;

  // Pass required parameters.
  $form_state['build_info']['args'] = array(
    $node,
    FALSE,
  );

  // Render the Webform.
  $output = ctools_modal_form_wrapper('webform_client_form_' . $node->nid, $form_state);
  if (!empty($form_state['executed'])) {
    if (!isset($form_state['storage'])) {
      ctools_add_js('ajax-responder');

      // Handle confirmation message or redirect.
      if ('<confirmation>' == $node->webform['redirect_url']) {

        // Use confirmation message if set, default text otherwise.
        // See webform/templates/webform-confirmation.tpl.php.
        $message = empty($node->webform['confirmation']) ? t('Thank you, your submission has been received.') : check_markup($node->webform['confirmation'], $node->webform['confirmation_format'], '', TRUE);
        $confirmation = '<div class="webform-confirmation">' . $message . '</div>';
        $confirmation .= ctools_ajax_text_button(t('Close'), 'modal_forms/nojs/dismiss', t('Close'));
        $output[] = ctools_modal_command_display($title, $confirmation);
      }
      elseif ('<none>' == $node->webform['redirect_url']) {

        // Reload webform node itself.
        $output[] = ctools_ajax_command_reload();
      }
      else {

        // Redirect to URL.
        // Note: Redirect code in webform_client_form_submit() is more complex.
        $url = trim(ltrim($node->webform['redirect_url'], '/'));
        $output[] = ctools_ajax_command_redirect($url);
      }
    }
  }
  print ajax_render($output);
}

/**
 * Closes modal windows.
 */
function modal_forms_dismiss($js = NULL) {
  if (!$js) {

    // We should never be here out of ajax context.
    return MENU_NOT_FOUND;
  }
  ctools_include('modal');
  ctools_include('ajax');
  $output = array(
    ctools_modal_command_dismiss(),
  );
  print ajax_render($output);
}

Functions

Namesort descending Description
modal_forms_comment_reply A modal comment callback.
modal_forms_contact A modal contact callback.
modal_forms_dismiss Closes modal windows.
modal_forms_login A modal user login callback.
modal_forms_password A modal user password callback.
modal_forms_personal_contact A modal personal contact form.
modal_forms_register A modal user register callback.
modal_forms_view_webform Modal display of the node's webform.