You are here

taxonomy_tools_publisher.install in Taxonomy Tools 8

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

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

File

taxonomy_tools_publisher/taxonomy_tools_publisher.install
View source
<?php

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

/**
 * Create field definitions for Taxonomy Publisher specific fields.
 *
 * @return array
 *   An array of field definitions
 */
function taxonomy_tools_publisher_install_fields() {
  $fields = array(
    'field_taxonomy_term_status' => array(
      'field_name' => 'field_taxonomy_term_status',
      'type' => 'list_boolean',
      'settings' => array(
        'allowed_values' => array(
          0 => '',
          1 => '',
        ),
      ),
    ),
    'field_taxonomy_term_publish_on' => array(
      'field_name' => 'field_taxonomy_term_publish_on',
      'type' => 'datestamp',
      'settings' => array(
        'granularity' => array(
          'year' => 'year',
          'month' => 'month',
          'day' => 'day',
          'hour' => 'hour',
          'minute' => 'minute',
          'second' => 'second',
        ),
        'tz_handling' => 'none',
      ),
    ),
    'field_taxonomy_term_unpublish_on' => array(
      'field_name' => 'field_taxonomy_term_unpublish_on',
      'type' => 'datestamp',
      'settings' => array(
        'granularity' => array(
          'year' => 'year',
          'month' => 'month',
          'day' => 'day',
          'hour' => 'hour',
          'minute' => 'minute',
          'second' => 'second',
        ),
        'tz_handling' => 'none',
      ),
    ),
  );
  return $fields;
}

/**
 * Create field instance definitions for Taxonomy Publisher specific fields.
 *
 * @return array
 *   An array of field instances definitions
 */
function taxonomy_tools_publisher_install_field_instances() {
  $instances = array(
    'field_taxonomy_term_status' => array(
      'label' => 'Published',
      'widget' => array(
        'weight' => 20.1,
        'type' => 'options_onoff',
        'settings' => array(
          'display_label' => 1,
        ),
      ),
      'display' => array(
        'default' => array(
          'label' => 'hidden',
          'type' => 'hidden',
        ),
      ),
      'default_value' => array(
        0 => array(
          'value' => 1,
        ),
      ),
      'field_name' => 'field_taxonomy_term_status',
    ),
    'field_taxonomy_term_publish_on' => array(
      'label' => 'Publish on:',
      'widget' => array(
        'weight' => 20.2,
        'type' => 'date_popup',
        'settings' => array(
          'input_format' => 'd.m.Y - H:i:s',
          'increment' => 1,
        ),
      ),
      'settings' => array(
        'default_value' => 'blank',
      ),
      'display' => array(
        'default' => array(
          'label' => 'hidden',
          'type' => 'hidden',
        ),
      ),
      'field_name' => 'field_taxonomy_term_publish_on',
    ),
    'field_taxonomy_term_unpublish_on' => array(
      'label' => 'Unpublish on:',
      'widget' => array(
        'weight' => 20.3,
        'type' => 'date_popup',
        'settings' => array(
          'input_format' => 'd.m.Y - H:i:s',
          'increment' => 1,
        ),
      ),
      'settings' => array(
        'default_value' => 'blank',
      ),
      'display' => array(
        'default' => array(
          'label' => 'hidden',
          'type' => 'hidden',
        ),
      ),
      'field_name' => 'field_taxonomy_term_unpublish_on',
    ),
  );
  return $instances;
}

/**
 * Create field group definition for Taxonomy Publisher fields.
 *
 * @param string $bundle
 *   A string containing bundle name for which the field group is created
 *
 * @return stdClass
 *   A field group object
 */
function taxonomy_tools_publisher_install_field_group($bundle) {
  $group = new stdClass();
  $group->label = t('Publishing settings');
  $group->weight = 20;
  $group->format_type = 'fieldset';
  $group->group_name = 'group_taxonomy_term_publishing';
  $group->entity_type = 'taxonomy_term';
  $group->bundle = $bundle;
  $group->mode = 'form';
  $group->identifier = 'group_taxonomy_term_publishing|taxonomy_term|' . $bundle . '|form';
  $group->children = array(
    0 => 'field_taxonomy_term_status',
    1 => 'field_taxonomy_term_publish_on',
    2 => 'field_taxonomy_term_unpublish_on',
  );
  $group->format_settings = array(
    'formatter' => 'collapsed',
    'label' => t('Publishing settings'),
    'instance_settings' => array(
      'required_fields' => 0,
      'classes' => '',
      'description' => '',
    ),
  );
  return $group;
}

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

  // Create field definitions.
  $fields = taxonomy_tools_publisher_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_publisher_config', array());
  if (!empty($config)) {
    $instances = taxonomy_tools_publisher_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);
          }
        }

        // Create field group.
        ctools_include('export');
        $group_info = db_query("SELECT * FROM {field_group} WHERE entity_type = 'taxonomy_term' AND bundle = :vmn", array(
          ':vmn' => $vmn,
        ))
          ->fetchAll();
        if (empty($group_info)) {
          $group = taxonomy_tools_publisher_install_field_group($vmn);
          field_group_group_save($group);
        }
      }
    }
  }

  // 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 Publisher enabled'));
}

/**
 * Imlements hook_disable().
 */
function taxonomy_tools_publisher_disable() {
  $fields = array(
    'field_taxonomy_term_status',
    'field_taxonomy_term_publish_on',
    'field_taxonomy_term_unpublish_on',
  );
  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);
    }
  }

  // Delete also field groups.
  db_query("DELETE FROM {field_group} WHERE group_name = :group", array(
    ':group' => 'group_taxonomy_term_publishing',
  ));
  drupal_set_message(t('Taxonomy Publisher disabled'));
}

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

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

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

/**
 * Use vocabulary machine names instead of IDs.
 */
function taxonomy_tools_publisher_update_7101() {
  $config = variable_get('taxonomy_tools_publisher_config', array());
  $new_config = array();
  foreach ($config as $key => $value) {
    $query = db_select('taxonomy_vocabulary', 'foo');
    $query
      ->addField('foo', 'machine_name');
    $query
      ->condition('foo.vid', $key);
    $machine_name = $query
      ->execute()
      ->fetchField();
    if ($key == $value) {
      $new_config[$machine_name] = $machine_name;
    }
    else {
      $new_config[$machine_name] = 0;
    }
  }
  variable_set('taxonomy_tools_publisher_config', $new_config);
}

Functions

Namesort descending Description
taxonomy_tools_publisher_disable Imlements hook_disable().
taxonomy_tools_publisher_enable Implements hook_enable().
taxonomy_tools_publisher_install_fields Create field definitions for Taxonomy Publisher specific fields.
taxonomy_tools_publisher_install_field_group Create field group definition for Taxonomy Publisher fields.
taxonomy_tools_publisher_install_field_instances Create field instance definitions for Taxonomy Publisher specific fields.
taxonomy_tools_publisher_uninstall Implements hook_uninstall().
taxonomy_tools_publisher_update_7101 Use vocabulary machine names instead of IDs.