You are here

content_taxonomy.install in Content Taxonomy 6.2

Same filename and directory in other branches
  1. 6 content_taxonomy.install
  2. 7 content_taxonomy.install

File

content_taxonomy.install
View source
<?php

// $Id: $

/**
 * Implementation of hook_install().
 */
function content_taxonomy_install() {
  drupal_load('module', 'content');
  content_notify('install', 'content_taxonomy');
}

/**
 * Implementation of hook_uninstall().
 */
function content_taxonomy_uninstall() {
  drupal_load('module', 'content');
  content_notify('uninstall', 'content_taxonomy');
}

/**
 * Implementation of hook_enable().
 *
 * Notify content module when this module is enabled.
 */
function content_taxonomy_enable() {
  drupal_load('module', 'content');
  content_notify('enable', 'content_taxonomy');
}

/**
 * Implementation of hook_disable().
 *
 * Notify content module when this module is disabled.
 */
function content_taxonomy_disable() {
  drupal_load('module', 'content');
  content_notify('disable', 'content_taxonomy');
}

/**
 * Implemenation of hook_update_N().
 * 
 * updates existing fields from 5.x to 6.x
 */
function content_taxonomy_update_6000() {
  if ($abort = content_check_update('content_taxonomy')) {
    return $abort;
  }
  drupal_load('module', 'content');
  $ret = array();

  // Get the latest cache values and schema.
  content_clear_type_cache(TRUE);
  include_once drupal_get_path('module', 'content') . '/content.install';
  include_once drupal_get_path('module', 'content') . '/includes/content.admin.inc';
  $types = content_types_install();
  foreach ($types as $type_name => $fields) {
    foreach ($fields as $field) {
      switch ($field['type']) {
        case 'content_taxonomy':
          $db_info = content_database_info($field);
          $table = $db_info['table'];

          //fix old settings first and map them to the new ones.
          $result = db_query("SELECT * FROM {" . content_field_tablename() . "} WHERE type = 'content_taxonomy' AND field_name = '%s'", $field['field_name']);
          while ($field = db_fetch_array($result)) {
            $field_settings = unserialize($field['global_settings']);
            $field_settings['save_term_node'] = isset($field_settings['save_term_node']) ? $field_settings['save_term_node'] : 0;
            if ($field_settings['save'] == 'tag') {
              $field_settings['save_term_node'] = 1;
              $field['type_name'] = $type_name;
              $field['columns'] = $db_info['columns'];
              content_alter_schema(array(), $field);
              $sql_nodes = db_query("SELECT * FROM {node} WHERE type = '%s'", $type_name);
              while ($node = db_fetch_object($sql_nodes)) {
                $tids = content_taxonomy_install_terms_by_field($node, $field_settings);
                foreach ($tids as $tid) {
                  $record = array();
                  foreach ($db_info['columns'] as $column => $attributes) {
                    $record[$attributes['column']] = $tid;
                  }
                  $record['nid'] = $node->nid;
                  $record['vid'] = $node->vid;
                  if ($field['multiple']) {
                    $record['delta'] = $tid;
                  }
                  if (db_result(db_query("SELECT COUNT(*) FROM {" . $table . "} WHERE vid = %d", $node->vid))) {
                    content_write_record($table, $record, array(
                      'vid',
                    ));
                  }
                  else {
                    content_write_record($table, $record);
                  }
                }
              }
            }
            if ($field_settings['save'] == 'both') {
              $field_settings['save_term_node'] = 1;
            }
            unset($field_settings['save']);
            $field_settings['hide_taxonomy_fields'] = isset($field_settings['hide_taxonomy_fields']) ? $field_settings['hide_taxonomy_fields'] : TRUE;
            $field_settings['parent'] = $field_settings['tid'];
            $field['global_settings'] = array();
            $setting_names = module_invoke($field['module'], 'field_settings', 'save', $field);
            if (is_array($setting_names)) {
              foreach ($setting_names as $setting) {
                $field['global_settings'][$setting] = isset($field_settings[$setting]) ? $field_settings[$setting] : '';
              }
            }

            // 'columns' is a reserved word in MySQL4, so our column is named 'db_columns'.
            $field['db_columns'] = $field['columns'];
            drupal_write_record(content_field_tablename(), $field, 'field_name');
          }
          foreach ($db_info['columns'] as $column => $attributes) {
            $attributes['not null'] = FALSE;
            $column = $attributes['column'];
            db_change_field($ret, $table, $column, $column, $attributes);
            db_field_set_no_default($ret, $table, $column);
            $ret[] = update_sql("UPDATE {" . $table . "} SET " . $column . " = NULL WHERE " . $column . " = 0");
          }
          break;
      }
    }
  }
  content_associate_fields('content_taxonomy');
  content_associate_fields('content_taxonomy_autocomplete');
  content_associate_fields('content_taxonomy_options');
  content_clear_type_cache(TRUE);
  return $ret;
}

/**
 * Implemenation of hook_update_N().
 * 
 * Renaming of the Parent setting
 */
function content_taxonomy_update_6001() {
  drupal_load('module', 'content');
  $result = db_query("SELECT * FROM {" . content_field_tablename() . "} WHERE type = 'content_taxonomy'");
  while ($field = db_fetch_array($result)) {
    $field['global_settings'] = unserialize($field['global_settings']);
    if (!is_null($field['global_settings']['tid'])) {
      $field['global_settings']['parent'] = $field['global_settings']['tid'];
      unset($field['global_settings']['tid']);
    }

    // 'columns' is a reserved word in MySQL4, so our column is named 'db_columns'.
    $field['db_columns'] = $field['columns'];
    drupal_write_record(content_field_tablename(), $field, 'field_name');
  }
  $result = db_query("SELECT * FROM {" . content_instance_tablename() . "} WHERE widget_type = 'content_taxonomy_select'");
  while ($field = db_fetch_array($result)) {
    $field['widget_settings'] = unserialize($field['widget_settings']);
    $field['widget_settings']['group_parent'] = $field['widget_settings']['group_tid'];
    unset($field['widget_settings']['group_tid']);
    drupal_write_record(content_instance_tablename(), $field, array(
      'field_name',
      'type_name',
    ));
  }
  return array();
}

/**
 * Implemenation of hook_update_N().
 * 
 * Fixing parent setting
 */
function content_taxonomy_update_6002() {
  drupal_load('module', 'content');
  $result = db_query("SELECT * FROM {" . content_field_tablename() . "} WHERE type = 'content_taxonomy'");
  while ($field = db_fetch_array($result)) {
    $field['global_settings'] = unserialize($field['global_settings']);
    if (!$field['global_settings']['parent']) {
      $field['global_settings']['parent'] = 0;
    }

    // 'columns' is a reserved word in MySQL4, so our column is named 'db_columns'.
    $field['db_columns'] = $field['columns'];
    drupal_write_record(content_field_tablename(), $field, 'field_name');
  }
  return array();
}

/**
 * Helper function to get values from term_node table
 * needed in update from 5.x to 6.x
 */
function content_taxonomy_install_terms_by_field($node, $field) {
  $terms = array();
  if (is_numeric($field['tid']) && $field['tid'] > 0 && $field['depth'] == 1) {
    $result = db_query("SELECT n.tid FROM {term_hierarchy} h, {term_node} n, {term_data} td WHERE\n      n.nid = %d AND n.tid = h.tid AND h.parent = %d AND td.tid=n.tid AND td.vid=%d", $node->nid, $field['tid'], $field['vid']);
    while ($data = db_fetch_array($result)) {
      $terms[$data["tid"]] = $data["tid"];
    }
  }
  else {
    $result = taxonomy_node_get_terms_by_vocabulary($node, $field['vid']);
    foreach ($result as $tid => $term) {
      $terms[$tid] = $tid;
    }
  }
  return $terms;
}

Functions

Namesort descending Description
content_taxonomy_disable Implementation of hook_disable().
content_taxonomy_enable Implementation of hook_enable().
content_taxonomy_install Implementation of hook_install().
content_taxonomy_install_terms_by_field Helper function to get values from term_node table needed in update from 5.x to 6.x
content_taxonomy_uninstall Implementation of hook_uninstall().
content_taxonomy_update_6000 Implemenation of hook_update_N().
content_taxonomy_update_6001 Implemenation of hook_update_N().
content_taxonomy_update_6002 Implemenation of hook_update_N().