You are here

path_redirect.install in Path redirect 6

Same filename and directory in other branches
  1. 5 path_redirect.install

Install and uninstall schema and functions for the path_redirect module.

File

path_redirect.install
View source
<?php

/**
 * @file
 * Install and uninstall schema and functions for the path_redirect module.
 */

/**
 * Implement hook_schema().
 */
function path_redirect_schema() {
  $schema['path_redirect'] = array(
    'description' => 'Stores information on redirects.',
    'fields' => array(
      'rid' => array(
        'type' => 'serial',
        'not null' => TRUE,
        'description' => 'Primary Key: Unique path redirect ID.',
      ),
      'source' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'description' => 'The source path to redirect from.',
      ),
      'redirect' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => TRUE,
        'description' => 'The destination path to redirect to.',
      ),
      'query' => array(
        'type' => 'varchar',
        'length' => 255,
        'not null' => FALSE,
        'description' => 'The query string to send to the destination.',
      ),
      'fragment' => array(
        'type' => 'varchar',
        'length' => 50,
        'not null' => FALSE,
        'description' => 'An internal page anchor append to the destination.',
      ),
      'language' => array(
        'description' => 'The language this redirect is for; if blank, the alias will be used for unknown languages.',
        'type' => 'varchar',
        'length' => 12,
        'not null' => TRUE,
        'default' => '',
      ),
      'type' => array(
        'type' => 'int',
        'size' => 'small',
        'not null' => TRUE,
        'description' => 'The HTTP status code to use for the redirect.',
      ),
      'last_used' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'default' => 0,
        'description' => 'The timestamp of when the redirect was last used.',
      ),
    ),
    'primary key' => array(
      'rid',
    ),
    'unique keys' => array(
      'source_language' => array(
        'source',
        'language',
      ),
    ),
  );
  return $schema;
}

/**
 * Implement hook_install().
 */
function path_redirect_install() {
  drupal_install_schema('path_redirect');
}

/**
 * Implement hook_uninstall().
 */
function path_redirect_uninstall() {

  // Remove tables.
  drupal_uninstall_schema('path_redirect');

  // Remove variables.
  variable_del('path_redirect_redirect_warning');
  variable_del('path_redirect_allow_bypass');
  variable_del('path_redirect_auto_redirect');
  variable_del('path_redirect_purge_inactive');
  variable_del('path_redirect_default_status');
  variable_del('path_redirect_nodeapi_enabled');
}

/**
 * Allow longer values for path and redirect. Add a unique key on rid.
 */
function path_redirect_update_1() {
  $ret = array();
  db_change_field($ret, 'path_redirect', 'path', 'path', array(
    'type' => 'varchar',
    'length' => 255,
    'not null' => TRUE,
  ));
  db_change_field($ret, 'path_redirect', 'redirect', 'redirect', array(
    'type' => 'varchar',
    'length' => 255,
    'not null' => TRUE,
  ), array(
    'unique keys' => array(
      'rid',
    ),
  ));
  return $ret;
}

/**
 * Convert the type column to an integer to only store the status code.
 */
function path_redirect_update_2() {
  $ret = array();

  // Convert string status messages to integer status codes.
  update_sql("UPDATE {path_redirect} SET type = '300' WHERE type = 'HTTP/1.0 300 Multiple Choices'");
  update_sql("UPDATE {path_redirect} SET type = '301' WHERE type = 'HTTP/1.0 301 Moved Permanently'");
  update_sql("UPDATE {path_redirect} SET type = '302' WHERE type = 'HTTP/1.0 302 Found'");
  update_sql("UPDATE {path_redirect} SET type = '303' WHERE type = 'HTTP/1.0 303 See Other'");
  update_sql("UPDATE {path_redirect} SET type = '304' WHERE type = 'HTTP/1.0 304 Not Modified'");
  update_sql("UPDATE {path_redirect} SET type = '305' WHERE type = 'HTTP/1.0 305 Use Proxy'");
  update_sql("UPDATE {path_redirect} SET type = '307' WHERE type = 'HTTP/1.0 307 Temporary Redirect'");

  // Convert the type column to store integers now that all values are converted.
  db_change_field($ret, 'path_redirect', 'type', 'type', array(
    'type' => 'int',
    'size' => 'small',
    'not null' => TRUE,
  ));
  return $ret;
}

/**
 * Fix a typo that could have caused the code 306 to be used mistakenly.
 */
function path_redirect_update_3() {
  $ret = array();
  $ret[] = update_sql("UPDATE {path_redirect} SET type = 307 WHERE type = 306");
  return $ret;
}

/**
 * Allow longer values for query strings fix the primary and unique keys.
 */
function path_redirect_update_4() {
  $ret = array();

  // Allow longer query strings.
  db_change_field($ret, 'path_redirect', 'query', 'query', array(
    'type' => 'varchar',
    'length' => 255,
    'not null' => FALSE,
  ));

  // Change the primary key from path to rid and add a unique key on path.
  db_drop_primary_key($ret, 'path_redirect');
  db_drop_unique_key($ret, 'path_redirect', 'rid');
  db_add_primary_key($ret, 'path_redirect', array(
    'rid',
  ));
  db_add_unique_key($ret, 'path_redirect', 'path', array(
    'path',
  ));
  return $ret;
}

/**
 * Backporting schema for successful upgrades to 6.x.
 */
function path_redirect_update_5100() {
  $ret = array();
  db_change_field($ret, 'path_redirect', 'rid', 'rid', array(
    'type' => 'serial',
    'not null' => TRUE,
  ));
  db_change_field($ret, 'path_redirect', 'query', 'query', array(
    'type' => 'varchar',
    'length' => 255,
    'not null' => FALSE,
  ));
  db_change_field($ret, 'path_redirect', 'fragment', 'fragment', array(
    'type' => 'varchar',
    'length' => 50,
    'not null' => FALSE,
  ));
  db_change_field($ret, 'path_redirect', 'type', 'type', array(
    'type' => 'int',
    'size' => 'small',
    'not null' => TRUE,
  ));
  return $ret;
}

/**
 * @defgroup updates-6.x-extra Extra path_redirect updates for 6.x
 * @{
 */

/**
 * Add a last used timestamp field.
 */
function path_redirect_update_6100() {
  $ret = array();
  db_add_field($ret, 'path_redirect', 'last_used', array(
    'type' => 'int',
    'unsigned' => TRUE,
    'not null' => TRUE,
    'default' => 0,
  ));
  $ret[] = update_sql("UPDATE {path_redirect} SET last_used = " . time());
  return $ret;
}

/**
 * Add a language field.
 */
function path_redirect_update_6101() {
  $ret = array();
  db_drop_unique_key($ret, 'path_redirect', 'path');
  db_add_field($ret, 'path_redirect', 'language', array(
    'type' => 'varchar',
    'length' => 12,
    'not null' => TRUE,
    'default' => '',
  ));
  db_add_unique_key($ret, 'path_redirect', 'path_language', array(
    'path',
    'language',
  ));
  return $ret;
}

/**
 * Replace frontpage paths with '<front>'.
 */
function path_redirect_update_6102() {
  $ret = array();
  $frontpage = variable_get('site_frontpage', 'node');
  $ret[] = update_sql("UPDATE {path_redirect} SET redirect = '<front>' WHERE redirect = '{$frontpage}'");
  return $ret;
}

/**
 * Rename the path field to source.
 */
function path_redirect_update_6103() {
  $ret = array();
  db_drop_unique_key($ret, 'path_redirect', 'path_language');
  db_change_field($ret, 'path_redirect', 'path', 'source', array(
    'type' => 'varchar',
    'length' => 255,
    'not null' => TRUE,
  ));
  db_add_unique_key($ret, 'path_redirect', 'source_language', array(
    'source',
    'language',
  ));
  return $ret;
}

/**
 * @} End of "defgroup updates-6.x-extra"
 * The next series of updates should start at 7000.
 */

Functions

Namesort descending Description
path_redirect_install Implement hook_install().
path_redirect_schema Implement hook_schema().
path_redirect_uninstall Implement hook_uninstall().
path_redirect_update_1 Allow longer values for path and redirect. Add a unique key on rid.
path_redirect_update_2 Convert the type column to an integer to only store the status code.
path_redirect_update_3 Fix a typo that could have caused the code 306 to be used mistakenly.
path_redirect_update_4 Allow longer values for query strings fix the primary and unique keys.
path_redirect_update_5100 Backporting schema for successful upgrades to 6.x.
path_redirect_update_6100 Add a last used timestamp field.
path_redirect_update_6101 Add a language field.
path_redirect_update_6102 Replace frontpage paths with '<front>'.
path_redirect_update_6103 Rename the path field to source.