View source
<?php
function content_taxonomy_install() {
drupal_load('module', 'content');
content_notify('install', 'content_taxonomy');
}
function content_taxonomy_uninstall() {
drupal_load('module', 'content');
content_notify('uninstall', 'content_taxonomy');
}
function content_taxonomy_enable() {
drupal_load('module', 'content');
content_notify('enable', 'content_taxonomy');
}
function content_taxonomy_disable() {
drupal_load('module', 'content');
content_notify('disable', 'content_taxonomy');
}
function content_taxonomy_update_6000() {
if ($abort = content_check_update('content_taxonomy')) {
return $abort;
}
drupal_load('module', 'content');
$ret = array();
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'];
$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] : '';
}
}
$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;
}
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']);
}
$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();
}
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;
}
$field['db_columns'] = $field['columns'];
drupal_write_record(content_field_tablename(), $field, 'field_name');
}
return array();
}
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;
}