You are here

login_destination.install in Login Destination 7

Same filename and directory in other branches
  1. 6.2 login_destination.install

Install, update and uninstall functions for the Login Destination module.

File

login_destination.install
View source
<?php

/**
 * @file
 * Install, update and uninstall functions for the Login Destination module.
 */

/**
 * Implements hook_schema().
 */
function login_destination_schema() {
  $schema['login_destination'] = array(
    'description' => 'Login Destination rules.',
    'fields' => array(
      'id' => array(
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'description' => 'Primary Key: Unique ID.',
      ),
      'triggers' => array(
        'type' => 'text',
        'not null' => TRUE,
        'description' => 'Triggers on which to perform redirect',
      ),
      'roles' => array(
        'type' => 'text',
        'not null' => TRUE,
        'description' => 'Roles to perform redirect for',
      ),
      'pages_type' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'size' => 'tiny',
        'description' => 'Flag to indicate from which pages to redirect. (0 = all pages except listed pages, 1 = only listed pages, 2 = Use custom PHP code)',
      ),
      'pages' => array(
        'type' => 'text',
        'not null' => TRUE,
        'description' => 'Pages from which to redirect',
      ),
      'destination_type' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'size' => 'tiny',
        'description' => 'Flag to indicate the destination type. (0 = static URL, 1 = PHP code)',
      ),
      'destination' => array(
        'type' => 'text',
        'not null' => TRUE,
        'description' => 'Redirect destination',
      ),
      'weight' => array(
        'type' => 'int',
        'not null' => TRUE,
        'default' => 0,
        'description' => "The rule's weight.",
      ),
      'enabled' => array(
        'type' => 'int',
        'not null' => TRUE,
        'unsigned' => TRUE,
        'default' => 1,
        'description' => "The rule enabled/disabled status.",
      ),
    ),
    'primary key' => array(
      'id',
    ),
    'indexes' => array(
      'list' => array(
        'weight',
      ),
    ),
  );
  return $schema;
}

/**
 * Implements hook_install().
 */
function login_destination_install() {

  // Update the alter option of 'user/logout' to TRUE,
  // (menu_save invokes necessary hooks).
  $result = db_query("\n    SELECT mlid, menu_name\n    FROM {menu_links}\n    WHERE link_path = 'user/logout' OR link_path = 'user/login' OR  link_path = 'user'\n    ORDER BY mlid ASC");
  foreach ($result as $res) {
    $item = menu_link_load($res->mlid);
    $item['options']['alter'] = TRUE;
    db_update('menu_links')
      ->fields(array(
      'options' => serialize($item['options']),
    ))
      ->condition('mlid', $item['mlid'])
      ->execute();
  }
}

/**
 * Implements hook_uninstall().
 */
function login_destination_uninstall() {
  variable_del('login_destination_preserve_destination');
  variable_del('login_destination_immediate_redirect');
}

/**
 * Update login_destination variables.
 */
function login_destination_update_7000() {
  $type = variable_get('ld_condition_type', 'always');
  $snippet = variable_get('ld_condition_snippet', '');
  if ($type == 'snippet') {
    $form_state['values']['pages_type'] = 2;

    // We introduced php tags.
    $form_state['values']['pages'] = '<?php ' . $snippet . '?>';
  }
  elseif ($type == 'pages') {
    $form_state['values']['pages_type'] = 1;
    $form_state['values']['pages'] = $snippet;
  }
  else {
    $form_state['values']['pages_type'] = 0;
    $form_state['values']['pages'] = $snippet;
  }
  $type = variable_get('ld_url_type', 'static');
  $snippet = variable_get('ld_url_destination', '');
  if ($type == 'snippet') {
    $form_state['values']['destination_type'] = 1;

    // Syntax for return value has changed.
    $form_state['values']['destination'] = '<?php /* ' . $snippet . ' */ ?>';
  }
  else {
    $form_state['values']['destination_type'] = 0;
    $form_state['values']['destination'] = $snippet;
  }
  $form_state['values']['triggers'] = serialize(array(
    'login',
  ));
  $form_state['values']['roles'] = serialize(array());
  drupal_write_record('login_destination', $form_state['values']);
  variable_set('login_destination_preserve_destination', variable_get('ld_destination', 0));
  variable_del('ld_condition_type');
  variable_del('ld_condition_snippet');
  variable_del('ld_destination');
  variable_del('ld_url_type');
  variable_del('ld_url_destination');
}

/**
 * Add 'enabled'-field to 'login_destination' table.
 */
function login_destination_update_7001() {
  $spec = array(
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 1,
  );
  db_add_field('login_destination', 'enabled', $spec);
}

/**
 * Clear hooks cache.
 */
function login_destination_update_7002() {
  cache_clear_all('hook_info', 'cache_bootstrap');
}

/**
 * Automatically give all roles with permission "Administer Users" the new dedicated permission
 * "Administer Login Destination settings".
 */
function login_destination_update_7003() {
  drupal_set_message(t('The Login Destination module has just been updated.<br>
  A new permission called "Administer Login Destination settings" has now been
  added.<br>Previously the access to the Login Destination\'s settings page was
  managed by the "Administer Users" permission.<br>That\'s why all roles with
  that old permission have been just automatically given the new dedicated
  "Administer Login Destination settings" permission.<br>If you want to
  duoble-check things, you can go to the
  <a href="/admin/people/permissions" title="Permissions page" >Permissions page</a> now.'));
  $roles = user_roles(TRUE, 'administer users');
  foreach ($roles as $rid => $role_name) {
    user_role_grant_permissions($rid, array(
      'administer login destination settings',
    ));
  }
}

Functions

Namesort descending Description
login_destination_install Implements hook_install().
login_destination_schema Implements hook_schema().
login_destination_uninstall Implements hook_uninstall().
login_destination_update_7000 Update login_destination variables.
login_destination_update_7001 Add 'enabled'-field to 'login_destination' table.
login_destination_update_7002 Clear hooks cache.
login_destination_update_7003 Automatically give all roles with permission "Administer Users" the new dedicated permission "Administer Login Destination settings".