You are here

super_login.module in Super Login 8

Same filename and directory in other branches
  1. 7 super_login.module

Functions related to altering of login form.

File

super_login.module
View source
<?php

/**
 * @file
 * Functions related to altering of login form.
 */
use Drupal\Core\Url;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;

/**
 * Implements hook_form_alter().
 *
 * Adjusts form on login page.
 */
function super_login_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if ($form_id == 'user_register_form' && \Drupal::currentUser()
    ->isAnonymous()) {
    $config = \Drupal::config('super_login.settings');
    $form['account']['mail']['#attributes']['autofocus'] = 'autofocus';
    unset($form['account']['mail']['#description']);
    unset($form['account']['name']['#description']);
    $internal_link = Link::createFromRoute(t($config
      ->get('super_login.back_link')), 'user.login')
      ->toString();
    $form['reset'] = [
      '#markup' => '<p class="back-to-login">' . $internal_link . '</p>',
      '#weight' => 100,
    ];
  }
  if ($form_id == 'user_login_form' || $form_id == 'user_pass') {
    $config = \Drupal::config('super_login.settings');

    // Global form functions.
    if ($config
      ->get('super_login.autofocus') == TRUE) {
      $form['name']['#attributes']['autofocus'] = 'autofocus';
    }
    unset($form['name']['#description']);
    unset($form['pass']['#description']);
    if ($config
      ->get('super_login.css') == TRUE) {
      $form['#attached']['library'][] = 'super_login/super_login_css';
      if ($config
        ->get('super_login.button_theme') == 1) {
        $form['#attached']['library'][] = 'super_login/super_login_buttons';
      }
    }
  }
  if ($form_id == 'user_login_form') {
    $form['#attached']['library'][] = 'super_login/super_login_js';
    $form['#attached']['drupalSettings']['show_messages'] = $config
      ->get('super_login.messages');
    $form['title'] = [
      '#markup' => '<p class="login-title">' . t($config
        ->get('super_login.login_title')) . '</p>',
      '#weight' => -100,
    ];
    $internal_link = Link::createFromRoute(t($config
      ->get('super_login.forgot_pw_text')), 'user.pass')
      ->toString();
    $form['reset'] = [
      '#markup' => '<p class="forgot-password">' . $internal_link . '</p>',
      '#weight' => 1,
    ];
    if ($config
      ->get('super_login.capslock')) {
      $form['capslock'] = [
        '#markup' => '<div id="capslockdiv"><p>' . t($config
          ->get('super_login.capslock_msg')) . '</p></div>',
        '#weight' => 2,
      ];
    }
    $user_config = \Drupal::config('user.settings');
    if ($user_config
      ->get('register') != \Drupal\user\UserInterface::REGISTER_ADMINISTRATORS_ONLY) {
      $actions_suffix = '<div class="actions-suffix">';
      $internal_link = Link::createFromRoute(t($config
        ->get('super_login.new_account_text')), 'user.register')
        ->toString();
      $actions_suffix .= $internal_link;
      $actions_suffix .= '</div>';
      $form['actions']['#suffix'] = $actions_suffix;
    }
    $form['name']['#title'] = t($config
      ->get('super_login.login_text'));
    $form['name']['#size'] = 50;
    $form['pass']['#size'] = 50;

    // Set form placeholders.
    if ($config
      ->get('super_login.placeholder')) {
      $placeholders = [
        'name' => $config
          ->get('super_login.login_placeholder'),
        'pass' => $config
          ->get('super_login.pass_placeholder'),
      ];
      foreach ($placeholders as $field_name => $placeholder) {
        if (empty($placeholder)) {
          continue;
        }
        $form[$field_name]['#attributes']['title'] = $placeholder;
        $form[$field_name]['#attributes']['placeholder'] = $placeholder;
      }
    }
    if (!$config
      ->get('super_login.new_account_text')) {
      $form['#attributes']['autocomplete'] = 'off';
      $form['name']['#attributes']['autocomplete'] = 'off';
      $form['pass']['#attributes']['autocomplete'] = 'off';
    }
    $form['#validate'] = is_array($form['#validate']) ? $form['#validate'] : [];
    array_unshift($form['#validate'], 'super_login_user_login_validate');
  }
  if ($form_id == 'user_pass') {
    $config = \Drupal::config('super_login.settings');
    $form['#attached']['library'][] = 'super_login/super_login_pw_js';
    $form['#attached']['drupalSettings']['show_messages'] = $config
      ->get('super_login.messages');
    $form['title'] = [
      '#markup' => '<p class="login-title">' . t($config
        ->get('super_login.password_reset_title')) . '</p>',
      '#weight' => -100,
    ];
    $internal_link = Link::createFromRoute(t($config
      ->get('super_login.back_link')), 'user.login')
      ->toString();
    $form['reset'] = [
      '#markup' => '<p class="back-to-login">' . $internal_link . '</p>',
      '#weight' => 1,
    ];
  }
}

/**
 * Custom validation for user login form.
 */
function super_login_user_login_validate(&$form, FormStateInterface $form_state) {
  $login_type = (int) \Drupal::config('super_login.settings')
    ->get('super_login.login_type');
  $username = mb_strtolower(trim($form_state
    ->getValue('name')));
  if (in_array($login_type, [
    0,
    2,
  ]) && !empty($username)) {
    $user_storage = \Drupal::entityTypeManager()
      ->getStorage('user');
    $user_ids = $user_storage
      ->getQuery()
      ->condition('mail', $username)
      ->condition('status', 1)
      ->range(0, 1)
      ->execute();
    if (!empty($user_ids) && ($user = $user_storage
      ->load(reset($user_ids)))) {
      $form_state
        ->setValue('name', $user
        ->getAccountName());
    }
    elseif ($login_type === 2) {
      $form_state
        ->setValue('name', '-');
    }
  }
}

/**
 * Implements hook_menu_local_tasks_alter().
 *
 * Removes tabs from login page.
 */
function super_login_menu_local_tasks_alter(&$data, $route_name) {
  if ($route_name == 'user.login') {
    unset($data['tabs'][0]['user.pass']);
    unset($data['tabs'][0]['user.register']);
  }
  if ($route_name == 'user.pass') {
    unset($data['tabs'][0]['user.pass']);
    unset($data['tabs'][0]['user.register']);
    unset($data['tabs'][0]['user.login']);
  }
  if ($route_name == 'user.register') {
    unset($data['tabs'][0]['user.pass']);
    unset($data['tabs'][0]['user.register']);
  }
}

Functions