You are here

taxonomy_tools_redirect.install in Taxonomy Tools 8

Same filename and directory in other branches
  1. 7 taxonomy_tools_redirect/taxonomy_tools_redirect.install

Install, update and uninstall functions for the Taxonomy Redirect module.

File

taxonomy_tools_redirect/taxonomy_tools_redirect.install
View source
<?php

/**
 * @file
 * Install, update and uninstall functions for the Taxonomy Redirect module.
 */

/**
 * Create field definitions for Taxonomy Redirect specific fields.
 *
 * @return array
 *   An array of field definitions
 */
function taxonomy_tools_redirect_install_fields() {
  $fields = array(
    'field_taxonomy_term_redirect' => array(
      'field_name' => 'field_taxonomy_term_redirect',
      'type' => 'text',
      'settings' => array(
        'max_length' => '255',
      ),
    ),
  );
  return $fields;
}

/**
 * Create field instance definitions for Taxonomy Redirect specific fields.
 *
 * @return array
 *   An array of field instances definitions
 */
function taxonomy_tools_redirect_install_field_instances() {
  $instances = array(
    'field_taxonomy_term_redirect' => array(
      'label' => t('Taxonomy term redirect link'),
      'description' => t('Enter URL this taxonomy term redirects to. You can use internal paths, e.g., %term, %node, (URL aliases will not work) or external addresses, e.g., %example. Enter %front to redirect to front page.', array(
        '%term' => 'taxonomy/term/XXX',
        '%node' => 'node/XXX',
        '%example' => 'http://www.example.com',
        '%front' => '<front>',
      )),
      'widget' => array(
        'weight' => 21,
        'type' => 'text_textfield',
        'settings' => array(
          'size' => 60,
        ),
      ),
      'display' => array(
        'default' => array(
          'label' => 'hidden',
          'type' => 'hidden',
        ),
      ),
      'field_name' => 'field_taxonomy_term_redirect',
    ),
  );
  return $instances;
}

/**
 * Implements hook_enable().
 */
function taxonomy_tools_redirect_enable() {

  // Create field definitions.
  $fields = taxonomy_tools_redirect_install_fields();
  foreach ($fields as $field) {
    $field_info = field_info_field($field['field_name']);
    if (empty($field_info)) {
      field_create_field($field);
    }
  }
  $config = variable_get('taxonomy_tools_redirect_config', array());
  if (!empty($config)) {
    $instances = taxonomy_tools_redirect_install_field_instances();
    foreach ($config as $vid => $setting) {
      if ($setting > 0) {

        // Get the vocabulary machine name for which Taxonomy Publisher
        // will be used.
        $vmn = db_query("SELECT machine_name FROM {taxonomy_vocabulary} WHERE vid = :vid", array(
          ':vid' => $vid,
        ))
          ->fetchField();

        // Create field instances.
        foreach ($instances as $instance) {
          $instance['entity_type'] = 'taxonomy_term';
          $instance['bundle'] = $vmn;
          $instance_info = field_info_instance($instance['entity_type'], $instance['field_name'], $instance['bundle']);
          if (empty($instance_info)) {
            field_create_instance($instance);
          }
        }
      }
    }
  }

  // Restore field values from backup and delete backup.
  foreach ($fields as $field) {
    $backup = $field['field_name'] . '_backup';
    if (db_table_exists($backup)) {
      $original = 'field_data_' . $field['field_name'];
      db_query("INSERT INTO {$original} SELECT * FROM {$backup}");
      db_query("DROP TABLE {$backup}");
    }
  }
  drupal_set_message(t('Taxonomy Redirect enabled'));
}

/**
 * Implements hook_disable().
 */
function taxonomy_tools_redirect_disable() {
  $fields = array(
    'field_taxonomy_term_redirect',
  );
  foreach ($fields as $field) {
    $original = 'field_data_' . $field;
    if (db_table_exists($original)) {

      // Make backup for field values.
      $backup = $field . '_backup';
      db_query("CREATE TABLE {$backup} SELECT * FROM {$original}");
    }
  }

  // Delete fields.
  foreach ($fields as $field) {
    $field_info = field_info_field($field);
    if (!empty($field_info)) {
      field_delete_field($field);
    }
  }
  drupal_set_message(t('Taxonomy Redirect disabled'));
}

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

  // Delete configuration variable.
  variable_del('taxonomy_tools_redirect_config');

  // Delete field values backup.
  $fields = array(
    'field_taxonomy_term_redirect',
  );
  foreach ($fields as $field) {
    $backup = $field . '_backup';
    if (db_table_exists($backup)) {
      db_query("DROP TABLE {$backup}");
    }
  }
  drupal_set_message(t('Taxonomy Redirect uninstalled'));
}

Functions

Namesort descending Description
taxonomy_tools_redirect_disable Implements hook_disable().
taxonomy_tools_redirect_enable Implements hook_enable().
taxonomy_tools_redirect_install_fields Create field definitions for Taxonomy Redirect specific fields.
taxonomy_tools_redirect_install_field_instances Create field instance definitions for Taxonomy Redirect specific fields.
taxonomy_tools_redirect_uninstall Implements hook_uninstall().