You are here

function legal_login in Legal 7.2

Same name and namespace in other branches
  1. 5 legal.module \legal_login()
  2. 6.8 legal.module \legal_login()
  3. 6.7 legal.module \legal_login()
  4. 7 legal.module \legal_login()

Require registered users to accept new T&C.

1 string reference to 'legal_login'
legal_menu in ./legal.module
Implements hook_menu().

File

./legal.module, line 572
Module file for Legal.

Code

function legal_login($form, $constructor) {
  global $language;

  // Check we have all the data and there are no shenanigans.
  if (!isset($_GET['token']) || !isset($_COOKIE['Drupal_visitor_legal_id']) || !is_numeric($_COOKIE['Drupal_visitor_legal_id']) || !isset($_COOKIE['Drupal_visitor_legal_hash'])) {
    user_cookie_delete('legal_hash');
    user_cookie_delete('legal_id');
    drupal_set_message(t('Operation timed out. Please try to log in again.'));
    drupal_goto();
  }
  $id_hash = $_COOKIE['Drupal_visitor_legal_hash'];
  $uid = $_COOKIE['Drupal_visitor_legal_id'];
  $token = $_GET['token'];
  $result = db_select('users', 'u')
    ->fields('u')
    ->condition('uid', $uid)
    ->range(0, 1)
    ->execute()
    ->fetchAllAssoc('uid');
  $account = array_pop($result);

  // Make sure the account is real and has a last login value.
  if (!isset($account->login)) {
    drupal_goto();
  }

  // Limit how long $id_hash can be used to 1 hour.
  // Timestamp and $id_hash are used to generate the authentication token.
  if (REQUEST_TIME - $account->login > 3600) {
    user_cookie_delete('legal_hash');
    user_cookie_delete('legal_id');
    drupal_goto();
  }
  $accept_every_login = variable_get('accept_every_login', '0');

  // get last accepted version for this account
  $legal_account = legal_get_accept($uid);

  // if no version has been accepted yet, get version with current language revision
  if (empty($legal_account['version'])) {
    $conditions = legal_get_conditions($language->language);

    // no conditions set yet
    if (empty($conditions['conditions'])) {
      return;
    }
  }
  else {

    // get version / revision of last accepted language
    $conditions = legal_get_conditions($legal_account['language']);

    // no conditions set yet
    if (empty($conditions['conditions'])) {
      return;
    }

    // Check latest version of T&C has been accepted.
    $accepted = legal_version_check($uid, $conditions['version'], $conditions['revision'], $legal_account);
    if ($accepted) {
      if ($accept_every_login == 0) {
        return;
      }
      if ($accept_every_login == 1 && isset($_SESSION['legal']['legal_login']) && $_SESSION['legal']['legal_login'] == 1) {
        return;
      }
    }
  }
  $form = legal_display_fields($conditions);
  $form['uid'] = array(
    '#type' => 'value',
    '#value' => $uid,
  );
  $form['token'] = array(
    '#type' => 'value',
    '#value' => $token,
  );
  $form['hash'] = array(
    '#type' => 'value',
    '#value' => $id_hash,
  );
  $form['tc_id'] = array(
    '#type' => 'value',
    '#value' => $conditions['tc_id'],
  );
  $form['version'] = array(
    '#type' => 'value',
    '#value' => $conditions['version'],
  );
  $form['revision'] = array(
    '#type' => 'value',
    '#value' => $conditions['revision'],
  );
  $form['language'] = array(
    '#type' => 'value',
    '#value' => $conditions['language'],
  );
  $form = legal_display_changes($form, $uid);
  $form['save'] = array(
    '#type' => 'submit',
    '#value' => t('Confirm'),
  );
  return $form;
}