You are here

pathauto.install in Pathauto 7

Install, update, and uninstall functions for Pathauto.

File

pathauto.install
View source
<?php

/**
 * @file
 * Install, update, and uninstall functions for Pathauto.
 *
 * @ingroup pathauto
 */

/**
 * Implements hook_schema().
 */
function pathauto_schema() {
  $schema['pathauto_state'] = array(
    'description' => 'The status of each entity alias (whether it was automatically generated or not).',
    'fields' => array(
      'entity_type' => array(
        'type' => 'varchar',
        'length' => 32,
        'not null' => TRUE,
        'description' => 'An entity type.',
      ),
      'entity_id' => array(
        'type' => 'int',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'description' => 'An entity ID.',
      ),
      'pathauto' => array(
        'type' => 'int',
        'size' => 'tiny',
        'not null' => TRUE,
        'default' => 0,
        'description' => 'The automatic alias status of the entity.',
      ),
    ),
    'primary key' => array(
      'entity_type',
      'entity_id',
    ),
  );
  return $schema;
}

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

  // Set some default variables necessary for the module to perform.
  $defaults = array(
    'pathauto_node_pattern' => 'content/[node:title]',
    'pathauto_taxonomy_term_pattern' => '[term:vocabulary]/[term:name]',
    'pathauto_forum_pattern' => '[term:vocabulary]/[term:name]',
    'pathauto_user_pattern' => 'users/[user:name]',
    'pathauto_blog_pattern' => 'blogs/[user:name]',
    // Set hyphen character to replace instead of remove.
    'pathauto_punctuation_hyphen' => 1,
  );
  foreach ($defaults as $variable => $default) {
    if (variable_get($variable) === NULL) {
      variable_set($variable, $default);
    }
  }

  // Set the weight to 1
  db_update('system')
    ->fields(array(
    'weight' => 1,
  ))
    ->condition('type', 'module')
    ->condition('name', 'pathauto')
    ->execute();
}

/**
 * Implements hook_uninstall().
 */
function pathauto_uninstall() {

  // Delete all the pathauto variables and then clear the variable cache.
  db_query("DELETE FROM {variable} WHERE name LIKE 'pathauto_%'");
  cache_clear_all('variables', 'cache');
}

/**
 * Implements hook_requirements().
 */
function pathauto_requirements($phase) {
  $requirements = array();
  $t = get_t();
  if ($phase == 'runtime' && module_exists('pathauto_persist')) {
    $requirements['pathauto'] = array(
      'title' => $t('Pathauto Persist'),
      'value' => $t('Enabled'),
      'description' => $t('Pathauto Persist is installed and enabled. As Pathauto Persist has been merged into Pathauto, the Pathauto Persist module can be safely disabled and removed. All Pathauto Persist settings have been migrated to the Pathauto implementation.'),
      'severity' => REQUIREMENT_INFO,
    );
  }
  return $requirements;
}

/**
 * Remove the unsupported user/%/contact and user/%/tracker pattern variables.
 */
function pathauto_update_6200() {
  variable_del('pathauto_contact_bulkupdate');
  variable_del('pathauto_contact_pattern');
  variable_del('pathauto_contact_supportsfeeds');
  variable_del('pathauto_contact_applytofeeds');
  variable_del('pathauto_tracker_bulkupdate');
  variable_del('pathauto_tracker_pattern');
  variable_del('pathauto_tracker_supportsfeeds');
  variable_del('pathauto_tracker_applytofeeds');
}

/**
 * Empty update since it is handled by pathauto_update_7000().
 */
function pathauto_update_6201() {
}

/**
 * Empty update since it is handled by pathauto_update_7004().
 */
function pathauto_update_6202() {
}

/**
 * Remove obsolete variables since batch API is now used.
 */
function pathauto_update_7000() {
  variable_del('pathauto_max_bulk_update');
  variable_del('pathauto_node_bulkupdate');
  variable_del('pathauto_taxonomy_bulkupdate');
  variable_del('pathauto_forum_bulkupdate');
  variable_del('pathauto_user_bulkupdate');
  variable_del('pathauto_blog_bulkupdate');
  variable_del('pathauto_modulelist');
  variable_del('pathauto_indexaliases');
  variable_del('pathauto_indexaliases_bulkupdate');
}

/**
 * Empty update since feed paths are no longer supported.
 */
function pathauto_update_7001() {
}

/**
 * Update pathauto_taxonomy_[vid]_pattern variables to pathauto_taxonomy_[machinename]_pattern.
 */
function pathauto_update_7002() {
  if (module_exists('taxonomy')) {
    $vocabularies = taxonomy_get_vocabularies();
    foreach ($vocabularies as $vid => $vocabulary) {
      if ($vid == variable_get('forum_nav_vocabulary', '')) {

        // Skip the forum vocabulary.
        continue;
      }
      if ($pattern = variable_get('pathauto_taxonomy_' . $vid . '_pattern', '')) {
        variable_set('pathauto_taxonomy_' . $vocabulary->machine_name . '_pattern', $pattern);
      }
      variable_del('pathauto_taxonomy_' . $vid . '_pattern');
    }
  }
}

/**
 * Rename 'taxonomy' variables to use the entity type 'taxonomy_term'.
 */
function pathauto_update_7003() {
  $variables = db_select('variable', 'v')
    ->fields('v', array(
    'name',
  ))
    ->condition(db_and()
    ->condition('name', db_like("pathauto_taxonomy_") . '%', 'LIKE')
    ->condition('name', db_like("pathauto_taxonomy_term_") . '%', 'NOT LIKE'))
    ->execute()
    ->fetchCol();
  foreach ($variables as $variable) {
    $value = variable_get($variable);
    variable_del($variable);
    $variable = strtr($variable, array(
      'pathauto_taxonomy_' => 'pathauto_taxonomy_term_',
    ));
    variable_set($variable, $value);
  }
}

/**
 * Remove obsolete variables for removed feed handling.
 */
function pathauto_update_7004() {
  variable_del('pathauto_node_supportsfeeds');
  variable_del('pathauto_node_applytofeeds');
  variable_del('pathauto_taxonomy_supportsfeeds');
  variable_del('pathauto_taxonomy_applytofeeds');
  variable_del('pathauto_forum_supportsfeeds');
  variable_del('pathauto_forum_applytofeeds');
  variable_del('pathauto_user_supportsfeeds');
  variable_del('pathauto_user_applytofeeds');
  variable_del('pathauto_blog_supportsfeeds');
  variable_del('pathauto_blog_applytofeeds');
}

/**
 * Fix original incorrect tokens in taxonomy and forum patterns.
 */
function pathauto_update_7005() {
  $replacements = array(
    '[vocabulary:name]' => '[term:vocabulary]',
    '[vocabulary:' => '[term:vocabulary:',
    '[term:catpath]' => '[term:name]',
    '[term:path]' => '[term:name]',
  );
  $variables = db_select('variable', 'v')
    ->fields('v', array(
    'name',
  ))
    ->condition(db_or()
    ->condition('name', db_like("pathauto_taxonomy_term_") . '%' . db_like('pattern'), 'LIKE')
    ->condition('name', db_like("pathauto_forum_") . '%' . db_like('pattern'), 'LIKE'))
    ->execute()
    ->fetchCol();
  foreach ($variables as $variable) {
    if ($pattern = variable_get($variable)) {
      $pattern = strtr($pattern, $replacements);
      variable_set($variable, $pattern);
    }
  }
  return 'Your Pathauto taxonomy and forum patterns have been corrected. You may wish to regenerate your taxonomy and forum term URL aliases.';
}

/**
 * Create pathauto_state table, using data from pathauto_persist if it exists.
 */
function pathauto_update_7006() {
  if (!db_table_exists('pathauto_state')) {
    $schema['pathauto_state'] = array(
      'description' => 'The status of each entity alias (whether it was automatically generated or not).',
      'fields' => array(
        'entity_type' => array(
          'type' => 'varchar',
          'length' => 32,
          'not null' => TRUE,
          'description' => 'The entity type.',
        ),
        'entity_id' => array(
          'type' => 'int',
          'unsigned' => TRUE,
          'not null' => TRUE,
          'description' => 'The entity ID.',
        ),
        'pathauto' => array(
          'type' => 'int',
          'size' => 'tiny',
          'not null' => TRUE,
          'default' => 0,
          'description' => 'The automatic alias status of the entity.',
        ),
      ),
      'primary key' => array(
        'entity_type',
        'entity_id',
      ),
    );
    if (db_table_exists('pathauto_persist')) {

      // Rename pathauto_persist's table, then create a new empty one just so
      // that we can cleanly disable that module.
      db_rename_table('pathauto_persist', 'pathauto_state');
      db_create_table('pathauto_persist', $schema['pathauto_state']);

      // Disable the module and inform the user.
      if (module_exists('pathauto_persist')) {
        module_disable(array(
          'pathauto_persist',
        ));
      }
      return t('The Pathauto Persist module and all of its data has been merged into Pathauto. The Pathauto Persist module has been disabled and can be safely uninstalled.');
    }
    else {
      db_create_table('pathauto_state', $schema['pathauto_state']);
    }
  }
}

/**
 * Build a list of Drupal 6 tokens and their Drupal 7 token names.
 */
function _pathauto_upgrade_token_list() {
  $tokens = array();
}

Related topics

Functions

Namesort descending Description
pathauto_install Implements hook_install().
pathauto_requirements Implements hook_requirements().
pathauto_schema Implements hook_schema().
pathauto_uninstall Implements hook_uninstall().
pathauto_update_6200 Remove the unsupported user/%/contact and user/%/tracker pattern variables.
pathauto_update_6201 Empty update since it is handled by pathauto_update_7000().
pathauto_update_6202 Empty update since it is handled by pathauto_update_7004().
pathauto_update_7000 Remove obsolete variables since batch API is now used.
pathauto_update_7001 Empty update since feed paths are no longer supported.
pathauto_update_7002 Update pathauto_taxonomy_[vid]_pattern variables to pathauto_taxonomy_[machinename]_pattern.
pathauto_update_7003 Rename 'taxonomy' variables to use the entity type 'taxonomy_term'.
pathauto_update_7004 Remove obsolete variables for removed feed handling.
pathauto_update_7005 Fix original incorrect tokens in taxonomy and forum patterns.
pathauto_update_7006 Create pathauto_state table, using data from pathauto_persist if it exists.
_pathauto_upgrade_token_list Build a list of Drupal 6 tokens and their Drupal 7 token names.