You are here

inline_registration.module in Inline Registration 6

File

inline_registration.module
View source
<?php

/**
 * @file
 *
 */

/**
 * Implementation of hook_form_alter().
 */
function inline_registration_form_alter(&$form, $form_state, $form_id) {
  global $user;
  if ($user->uid == 0 && variable_get('inline_registration_' . $form['#node']->type, 0)) {
    $form['register'] = array(
      '#type' => 'fieldset',
      '#title' => t('Login or Register as a New User'),
      '#description' => t('You are not currently logged in. In order to post this item please !login or provide the following details to register.', array(
        '!login' => l(t('login now'), 'user/login', array(
          'query' => drupal_get_destination(),
        )),
      )),
      '#weight' => variable_get('inline_registration_weight_' . $form['#node']->type, 0),
    );
    $form['register']['form'] = drupal_retrieve_form('user_register', $form_state);

    // Remove the user_register submit button in favor of the node submit button
    unset($form['register']['form']['submit']);

    // Rename the user field to remind the user that this is the registration form and not a login field
    $form['register']['form']['name']['#title'] = t('Choose a Username');

    // Add our own validation and submit function to the node_form
    $form['#validate'][] = 'inline_registration_validate';
    $form['#submit'][] = 'inline_registration_submit';

    // And ensure our submit function is called first (so the node is authored by the newly created user)
    $form['#submit'] = array_reverse($form['#submit']);
  }
  if ($form_id == 'node_type_form' && isset($form['identity']['type'])) {
    $form['inline_registration'] = array(
      '#type' => 'fieldset',
      '#title' => t('Registration inline'),
      '#description' => t('Setting for publishing this content from anonymous user, and automatically create account for this.'),
      '#weight' => 20,
      '#collapsible' => TRUE,
      '#collapsed' => variable_get('inline_registration_' . $form['#node_type']->type, 0) ? FALSE : TRUE,
    );
    $form['inline_registration']['inline_registration'] = array(
      '#type' => 'checkbox',
      '#title' => t('Registration inline'),
      '#default_value' => variable_get('inline_registration_' . $form['#node_type']->type, 0),
      '#description' => t('Enable user creation from this content.'),
    );
    $form['inline_registration']['inline_registration_weight'] = array(
      '#type' => 'weight',
      '#title' => t('Weight of field'),
      '#default_value' => variable_get('inline_registration_weight_' . $form['#node_type']->type, -10),
      '#description' => t("Select weight for this field into content creation form."),
      '#delta' => 50,
    );
  }
}

/**
 * Validation routine for inline registration form.
 */
function inline_registration_validate($form, &$form_state) {

  // Validate using user module's validation routine
  unset($form_state['uid']);
  user_module_invoke('validate', $form_state['values'], $form_state['values'], 'account');
}

/**
 * Submit routine for inline registration form.
 */
function inline_registration_submit($form, &$form_state) {
  $status_save = $form_state['values']['status'];
  unset($form_state['values']['uid']);
  unset($form_state['values']['status']);
  user_register_submit($form, $form_state);
  $form_state['values']['name'] = $form_state['user']->name;
  $form_state['values']['uid'] = $form_state['user']->uid;
  $form_state['values']['status'] = $status_save;
}

/**
 * Implementation of hook_nodeapi().
 */
function inline_registration_nodeapi(&$node, $op, $teaser, $page) {

  // Save user uid to node_revisions table when require e-mail verification.
  global $user;
  if ($user->uid != 0) {
    return;
  }
  switch ($op) {
    case 'insert':
      if (!empty($node->vid)) {
        db_query('UPDATE {node_revisions} SET uid = %d WHERE vid = %d', $node->uid, $node->vid);
      }
      break;
  }
  return;
}

Functions

Namesort descending Description
inline_registration_form_alter Implementation of hook_form_alter().
inline_registration_nodeapi Implementation of hook_nodeapi().
inline_registration_submit Submit routine for inline registration form.
inline_registration_validate Validation routine for inline registration form.