annotate modules/taxonomy/taxonomy.install @ 2:b74b41bb73f0

-- Google analytics module
author danieleb <danielebarchiesi@me.com>
date Thu, 22 Aug 2013 17:22:54 +0100
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Install, update and uninstall functions for the taxonomy module.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Implements hook_uninstall().
danielebarchiesi@0 10 */
danielebarchiesi@0 11 function taxonomy_uninstall() {
danielebarchiesi@0 12 // Remove variables.
danielebarchiesi@0 13 variable_del('taxonomy_override_selector');
danielebarchiesi@0 14 variable_del('taxonomy_terms_per_page_admin');
danielebarchiesi@0 15 // Remove taxonomy_term bundles.
danielebarchiesi@0 16 $vocabularies = db_query("SELECT machine_name FROM {taxonomy_vocabulary}")->fetchCol();
danielebarchiesi@0 17 foreach ($vocabularies as $vocabulary) {
danielebarchiesi@0 18 field_attach_delete_bundle('taxonomy_term', $vocabulary);
danielebarchiesi@0 19 }
danielebarchiesi@0 20 }
danielebarchiesi@0 21
danielebarchiesi@0 22 /**
danielebarchiesi@0 23 * Implements hook_schema().
danielebarchiesi@0 24 */
danielebarchiesi@0 25 function taxonomy_schema() {
danielebarchiesi@0 26 $schema['taxonomy_term_data'] = array(
danielebarchiesi@0 27 'description' => 'Stores term information.',
danielebarchiesi@0 28 'fields' => array(
danielebarchiesi@0 29 'tid' => array(
danielebarchiesi@0 30 'type' => 'serial',
danielebarchiesi@0 31 'unsigned' => TRUE,
danielebarchiesi@0 32 'not null' => TRUE,
danielebarchiesi@0 33 'description' => 'Primary Key: Unique term ID.',
danielebarchiesi@0 34 ),
danielebarchiesi@0 35 'vid' => array(
danielebarchiesi@0 36 'type' => 'int',
danielebarchiesi@0 37 'unsigned' => TRUE,
danielebarchiesi@0 38 'not null' => TRUE,
danielebarchiesi@0 39 'default' => 0,
danielebarchiesi@0 40 'description' => 'The {taxonomy_vocabulary}.vid of the vocabulary to which the term is assigned.',
danielebarchiesi@0 41 ),
danielebarchiesi@0 42 'name' => array(
danielebarchiesi@0 43 'type' => 'varchar',
danielebarchiesi@0 44 'length' => 255,
danielebarchiesi@0 45 'not null' => TRUE,
danielebarchiesi@0 46 'default' => '',
danielebarchiesi@0 47 'description' => 'The term name.',
danielebarchiesi@0 48 'translatable' => TRUE,
danielebarchiesi@0 49 ),
danielebarchiesi@0 50 'description' => array(
danielebarchiesi@0 51 'type' => 'text',
danielebarchiesi@0 52 'not null' => FALSE,
danielebarchiesi@0 53 'size' => 'big',
danielebarchiesi@0 54 'description' => 'A description of the term.',
danielebarchiesi@0 55 'translatable' => TRUE,
danielebarchiesi@0 56 ),
danielebarchiesi@0 57 'format' => array(
danielebarchiesi@0 58 'type' => 'varchar',
danielebarchiesi@0 59 'length' => 255,
danielebarchiesi@0 60 'not null' => FALSE,
danielebarchiesi@0 61 'description' => 'The {filter_format}.format of the description.',
danielebarchiesi@0 62 ),
danielebarchiesi@0 63 'weight' => array(
danielebarchiesi@0 64 'type' => 'int',
danielebarchiesi@0 65 'not null' => TRUE,
danielebarchiesi@0 66 'default' => 0,
danielebarchiesi@0 67 'description' => 'The weight of this term in relation to other terms.',
danielebarchiesi@0 68 ),
danielebarchiesi@0 69 ),
danielebarchiesi@0 70 'primary key' => array('tid'),
danielebarchiesi@0 71 'foreign keys' => array(
danielebarchiesi@0 72 'vocabulary' => array(
danielebarchiesi@0 73 'table' => 'taxonomy_vocabulary',
danielebarchiesi@0 74 'columns' => array('vid' => 'vid'),
danielebarchiesi@0 75 ),
danielebarchiesi@0 76 ),
danielebarchiesi@0 77 'indexes' => array(
danielebarchiesi@0 78 'taxonomy_tree' => array('vid', 'weight', 'name'),
danielebarchiesi@0 79 'vid_name' => array('vid', 'name'),
danielebarchiesi@0 80 'name' => array('name'),
danielebarchiesi@0 81 ),
danielebarchiesi@0 82 );
danielebarchiesi@0 83
danielebarchiesi@0 84 $schema['taxonomy_term_hierarchy'] = array(
danielebarchiesi@0 85 'description' => 'Stores the hierarchical relationship between terms.',
danielebarchiesi@0 86 'fields' => array(
danielebarchiesi@0 87 'tid' => array(
danielebarchiesi@0 88 'type' => 'int',
danielebarchiesi@0 89 'unsigned' => TRUE,
danielebarchiesi@0 90 'not null' => TRUE,
danielebarchiesi@0 91 'default' => 0,
danielebarchiesi@0 92 'description' => 'Primary Key: The {taxonomy_term_data}.tid of the term.',
danielebarchiesi@0 93 ),
danielebarchiesi@0 94 'parent' => array(
danielebarchiesi@0 95 'type' => 'int',
danielebarchiesi@0 96 'unsigned' => TRUE,
danielebarchiesi@0 97 'not null' => TRUE,
danielebarchiesi@0 98 'default' => 0,
danielebarchiesi@0 99 'description' => "Primary Key: The {taxonomy_term_data}.tid of the term's parent. 0 indicates no parent.",
danielebarchiesi@0 100 ),
danielebarchiesi@0 101 ),
danielebarchiesi@0 102 'indexes' => array(
danielebarchiesi@0 103 'parent' => array('parent'),
danielebarchiesi@0 104 ),
danielebarchiesi@0 105 'foreign keys' => array(
danielebarchiesi@0 106 'taxonomy_term_data' => array(
danielebarchiesi@0 107 'table' => 'taxonomy_term_data',
danielebarchiesi@0 108 'columns' => array('tid' => 'tid'),
danielebarchiesi@0 109 ),
danielebarchiesi@0 110 ),
danielebarchiesi@0 111 'primary key' => array('tid', 'parent'),
danielebarchiesi@0 112 );
danielebarchiesi@0 113
danielebarchiesi@0 114 $schema['taxonomy_vocabulary'] = array(
danielebarchiesi@0 115 'description' => 'Stores vocabulary information.',
danielebarchiesi@0 116 'fields' => array(
danielebarchiesi@0 117 'vid' => array(
danielebarchiesi@0 118 'type' => 'serial',
danielebarchiesi@0 119 'unsigned' => TRUE,
danielebarchiesi@0 120 'not null' => TRUE,
danielebarchiesi@0 121 'description' => 'Primary Key: Unique vocabulary ID.',
danielebarchiesi@0 122 ),
danielebarchiesi@0 123 'name' => array(
danielebarchiesi@0 124 'type' => 'varchar',
danielebarchiesi@0 125 'length' => 255,
danielebarchiesi@0 126 'not null' => TRUE,
danielebarchiesi@0 127 'default' => '',
danielebarchiesi@0 128 'description' => 'Name of the vocabulary.',
danielebarchiesi@0 129 'translatable' => TRUE,
danielebarchiesi@0 130 ),
danielebarchiesi@0 131 'machine_name' => array(
danielebarchiesi@0 132 'type' => 'varchar',
danielebarchiesi@0 133 'length' => 255,
danielebarchiesi@0 134 'not null' => TRUE,
danielebarchiesi@0 135 'default' => '',
danielebarchiesi@0 136 'description' => 'The vocabulary machine name.',
danielebarchiesi@0 137 ),
danielebarchiesi@0 138 'description' => array(
danielebarchiesi@0 139 'type' => 'text',
danielebarchiesi@0 140 'not null' => FALSE,
danielebarchiesi@0 141 'size' => 'big',
danielebarchiesi@0 142 'description' => 'Description of the vocabulary.',
danielebarchiesi@0 143 'translatable' => TRUE,
danielebarchiesi@0 144 ),
danielebarchiesi@0 145 'hierarchy' => array(
danielebarchiesi@0 146 'type' => 'int',
danielebarchiesi@0 147 'unsigned' => TRUE,
danielebarchiesi@0 148 'not null' => TRUE,
danielebarchiesi@0 149 'default' => 0,
danielebarchiesi@0 150 'size' => 'tiny',
danielebarchiesi@0 151 'description' => 'The type of hierarchy allowed within the vocabulary. (0 = disabled, 1 = single, 2 = multiple)',
danielebarchiesi@0 152 ),
danielebarchiesi@0 153 'module' => array(
danielebarchiesi@0 154 'type' => 'varchar',
danielebarchiesi@0 155 'length' => 255,
danielebarchiesi@0 156 'not null' => TRUE,
danielebarchiesi@0 157 'default' => '',
danielebarchiesi@0 158 'description' => 'The module which created the vocabulary.',
danielebarchiesi@0 159 ),
danielebarchiesi@0 160 'weight' => array(
danielebarchiesi@0 161 'type' => 'int',
danielebarchiesi@0 162 'not null' => TRUE,
danielebarchiesi@0 163 'default' => 0,
danielebarchiesi@0 164 'description' => 'The weight of this vocabulary in relation to other vocabularies.',
danielebarchiesi@0 165 ),
danielebarchiesi@0 166 ),
danielebarchiesi@0 167 'primary key' => array('vid'),
danielebarchiesi@0 168 'indexes' => array(
danielebarchiesi@0 169 'list' => array('weight', 'name'),
danielebarchiesi@0 170 ),
danielebarchiesi@0 171 'unique keys' => array(
danielebarchiesi@0 172 'machine_name' => array('machine_name'),
danielebarchiesi@0 173 ),
danielebarchiesi@0 174 );
danielebarchiesi@0 175
danielebarchiesi@0 176 $schema['taxonomy_index'] = array(
danielebarchiesi@0 177 'description' => 'Maintains denormalized information about node/term relationships.',
danielebarchiesi@0 178 'fields' => array(
danielebarchiesi@0 179 'nid' => array(
danielebarchiesi@0 180 'description' => 'The {node}.nid this record tracks.',
danielebarchiesi@0 181 'type' => 'int',
danielebarchiesi@0 182 'unsigned' => TRUE,
danielebarchiesi@0 183 'not null' => TRUE,
danielebarchiesi@0 184 'default' => 0,
danielebarchiesi@0 185 ),
danielebarchiesi@0 186 'tid' => array(
danielebarchiesi@0 187 'description' => 'The term ID.',
danielebarchiesi@0 188 'type' => 'int',
danielebarchiesi@0 189 'unsigned' => TRUE,
danielebarchiesi@0 190 'not null' => TRUE,
danielebarchiesi@0 191 'default' => 0,
danielebarchiesi@0 192 ),
danielebarchiesi@0 193 'sticky' => array(
danielebarchiesi@0 194 'description' => 'Boolean indicating whether the node is sticky.',
danielebarchiesi@0 195 'type' => 'int',
danielebarchiesi@0 196 'not null' => FALSE,
danielebarchiesi@0 197 'default' => 0,
danielebarchiesi@0 198 'size' => 'tiny',
danielebarchiesi@0 199 ),
danielebarchiesi@0 200 'created' => array(
danielebarchiesi@0 201 'description' => 'The Unix timestamp when the node was created.',
danielebarchiesi@0 202 'type' => 'int',
danielebarchiesi@0 203 'not null' => TRUE,
danielebarchiesi@0 204 'default'=> 0,
danielebarchiesi@0 205 ),
danielebarchiesi@0 206 ),
danielebarchiesi@0 207 'indexes' => array(
danielebarchiesi@0 208 'term_node' => array('tid', 'sticky', 'created'),
danielebarchiesi@0 209 'nid' => array('nid'),
danielebarchiesi@0 210 ),
danielebarchiesi@0 211 'foreign keys' => array(
danielebarchiesi@0 212 'tracked_node' => array(
danielebarchiesi@0 213 'table' => 'node',
danielebarchiesi@0 214 'columns' => array('nid' => 'nid'),
danielebarchiesi@0 215 ),
danielebarchiesi@0 216 'term' => array(
danielebarchiesi@0 217 'table' => 'taxonomy_term_data',
danielebarchiesi@0 218 'columns' => array('tid' => 'tid'),
danielebarchiesi@0 219 ),
danielebarchiesi@0 220 ),
danielebarchiesi@0 221 );
danielebarchiesi@0 222
danielebarchiesi@0 223 return $schema;
danielebarchiesi@0 224 }
danielebarchiesi@0 225
danielebarchiesi@0 226 /**
danielebarchiesi@0 227 * Implements hook_field_schema().
danielebarchiesi@0 228 */
danielebarchiesi@0 229 function taxonomy_field_schema($field) {
danielebarchiesi@0 230 return array(
danielebarchiesi@0 231 'columns' => array(
danielebarchiesi@0 232 'tid' => array(
danielebarchiesi@0 233 'type' => 'int',
danielebarchiesi@0 234 'unsigned' => TRUE,
danielebarchiesi@0 235 'not null' => FALSE,
danielebarchiesi@0 236 ),
danielebarchiesi@0 237 ),
danielebarchiesi@0 238 'indexes' => array(
danielebarchiesi@0 239 'tid' => array('tid'),
danielebarchiesi@0 240 ),
danielebarchiesi@0 241 'foreign keys' => array(
danielebarchiesi@0 242 'tid' => array(
danielebarchiesi@0 243 'table' => 'taxonomy_term_data',
danielebarchiesi@0 244 'columns' => array('tid' => 'tid'),
danielebarchiesi@0 245 ),
danielebarchiesi@0 246 ),
danielebarchiesi@0 247 );
danielebarchiesi@0 248 }
danielebarchiesi@0 249
danielebarchiesi@0 250 /**
danielebarchiesi@0 251 * Implements hook_update_dependencies().
danielebarchiesi@0 252 */
danielebarchiesi@0 253 function taxonomy_update_dependencies() {
danielebarchiesi@0 254 // taxonomy_update_7004() migrates taxonomy term data to fields and therefore
danielebarchiesi@0 255 // must run after all Field modules have been enabled, which happens in
danielebarchiesi@0 256 // system_update_7027().
danielebarchiesi@0 257 $dependencies['taxonomy'][7004] = array(
danielebarchiesi@0 258 'system' => 7027,
danielebarchiesi@0 259 );
danielebarchiesi@0 260
danielebarchiesi@0 261 return $dependencies;
danielebarchiesi@0 262 }
danielebarchiesi@0 263
danielebarchiesi@0 264 /**
danielebarchiesi@0 265 * Utility function: get the list of vocabularies directly from the database.
danielebarchiesi@0 266 *
danielebarchiesi@0 267 * This function is valid for a database schema version 7002.
danielebarchiesi@0 268 *
danielebarchiesi@0 269 * @ingroup update_api
danielebarchiesi@0 270 */
danielebarchiesi@0 271 function _update_7002_taxonomy_get_vocabularies() {
danielebarchiesi@0 272 return db_query('SELECT v.* FROM {taxonomy_vocabulary} v ORDER BY v.weight, v.name')->fetchAllAssoc('vid', PDO::FETCH_OBJ);
danielebarchiesi@0 273 }
danielebarchiesi@0 274
danielebarchiesi@0 275 /**
danielebarchiesi@0 276 * Rename taxonomy tables.
danielebarchiesi@0 277 */
danielebarchiesi@0 278 function taxonomy_update_7001() {
danielebarchiesi@0 279 db_rename_table('term_data', 'taxonomy_term_data');
danielebarchiesi@0 280 db_rename_table('term_hierarchy', 'taxonomy_term_hierarchy');
danielebarchiesi@0 281 db_rename_table('term_node', 'taxonomy_term_node');
danielebarchiesi@0 282 db_rename_table('term_relation', 'taxonomy_term_relation');
danielebarchiesi@0 283 db_rename_table('term_synonym', 'taxonomy_term_synonym');
danielebarchiesi@0 284 db_rename_table('vocabulary', 'taxonomy_vocabulary');
danielebarchiesi@0 285 db_rename_table('vocabulary_node_types', 'taxonomy_vocabulary_node_type');
danielebarchiesi@0 286 }
danielebarchiesi@0 287
danielebarchiesi@0 288 /**
danielebarchiesi@0 289 * Add {vocabulary}.machine_name column.
danielebarchiesi@0 290 */
danielebarchiesi@0 291 function taxonomy_update_7002() {
danielebarchiesi@0 292 $field = array(
danielebarchiesi@0 293 'type' => 'varchar',
danielebarchiesi@0 294 'length' => 255,
danielebarchiesi@0 295 'not null' => TRUE,
danielebarchiesi@0 296 'default' => '',
danielebarchiesi@0 297 'description' => 'The vocabulary machine name.',
danielebarchiesi@0 298 );
danielebarchiesi@0 299
danielebarchiesi@0 300 db_add_field('taxonomy_vocabulary', 'machine_name', $field);
danielebarchiesi@0 301
danielebarchiesi@0 302 // Do a direct query here, rather than calling taxonomy_get_vocabularies(),
danielebarchiesi@0 303 // in case Taxonomy module is disabled.
danielebarchiesi@0 304 $vids = db_query('SELECT vid FROM {taxonomy_vocabulary}')->fetchCol();
danielebarchiesi@0 305 foreach ($vids as $vid) {
danielebarchiesi@0 306 $machine_name = 'vocabulary_' . $vid;
danielebarchiesi@0 307 db_update('taxonomy_vocabulary')
danielebarchiesi@0 308 ->fields(array('machine_name' => $machine_name))
danielebarchiesi@0 309 ->condition('vid', $vid)
danielebarchiesi@0 310 ->execute();
danielebarchiesi@0 311 }
danielebarchiesi@0 312
danielebarchiesi@0 313 // The machine_name unique key can only be added after we ensure the
danielebarchiesi@0 314 // machine_name column contains unique values.
danielebarchiesi@0 315 db_add_unique_key('taxonomy_vocabulary', 'machine_name', array('machine_name'));
danielebarchiesi@0 316 }
danielebarchiesi@0 317
danielebarchiesi@0 318 /**
danielebarchiesi@0 319 * Remove the related terms setting from vocabularies.
danielebarchiesi@0 320 *
danielebarchiesi@0 321 * This setting has not been used since Drupal 6. The {taxonomy_relations} table
danielebarchiesi@0 322 * itself is retained to allow for data to be upgraded.
danielebarchiesi@0 323 */
danielebarchiesi@0 324 function taxonomy_update_7003() {
danielebarchiesi@0 325 db_drop_field('taxonomy_vocabulary', 'relations');
danielebarchiesi@0 326 }
danielebarchiesi@0 327
danielebarchiesi@0 328 /**
danielebarchiesi@0 329 * Move taxonomy vocabulary associations for nodes to fields and field instances.
danielebarchiesi@0 330 */
danielebarchiesi@0 331 function taxonomy_update_7004() {
danielebarchiesi@0 332 $taxonomy_index = array(
danielebarchiesi@0 333 'description' => 'Maintains denormalized information about node/term relationships.',
danielebarchiesi@0 334 'fields' => array(
danielebarchiesi@0 335 'nid' => array(
danielebarchiesi@0 336 'description' => 'The {node}.nid this record tracks.',
danielebarchiesi@0 337 'type' => 'int',
danielebarchiesi@0 338 'unsigned' => TRUE,
danielebarchiesi@0 339 'not null' => TRUE,
danielebarchiesi@0 340 'default' => 0,
danielebarchiesi@0 341 ),
danielebarchiesi@0 342 'tid' => array(
danielebarchiesi@0 343 'description' => 'The term ID.',
danielebarchiesi@0 344 'type' => 'int',
danielebarchiesi@0 345 'unsigned' => TRUE,
danielebarchiesi@0 346 'not null' => TRUE,
danielebarchiesi@0 347 'default' => 0,
danielebarchiesi@0 348 ),
danielebarchiesi@0 349 'sticky' => array(
danielebarchiesi@0 350 'description' => 'Boolean indicating whether the node is sticky.',
danielebarchiesi@0 351 'type' => 'int',
danielebarchiesi@0 352 'not null' => FALSE,
danielebarchiesi@0 353 'default' => 0,
danielebarchiesi@0 354 'size' => 'tiny',
danielebarchiesi@0 355 ),
danielebarchiesi@0 356 'created' => array(
danielebarchiesi@0 357 'description' => 'The Unix timestamp when the node was created.',
danielebarchiesi@0 358 'type' => 'int',
danielebarchiesi@0 359 'unsigned' => TRUE,
danielebarchiesi@0 360 'not null' => TRUE,
danielebarchiesi@0 361 'default'=> 0,
danielebarchiesi@0 362 ),
danielebarchiesi@0 363 ),
danielebarchiesi@0 364 'indexes' => array(
danielebarchiesi@0 365 'term_node' => array('tid', 'sticky', 'created'),
danielebarchiesi@0 366 'nid' => array('nid'),
danielebarchiesi@0 367 ),
danielebarchiesi@0 368 'foreign keys' => array(
danielebarchiesi@0 369 'tracked_node' => array(
danielebarchiesi@0 370 'table' => 'node',
danielebarchiesi@0 371 'columns' => array('nid' => 'nid'),
danielebarchiesi@0 372 ),
danielebarchiesi@0 373 'term' => array(
danielebarchiesi@0 374 'table' => 'taxonomy_term_data',
danielebarchiesi@0 375 'columns' => array('tid' => 'tid'),
danielebarchiesi@0 376 ),
danielebarchiesi@0 377 ),
danielebarchiesi@0 378 );
danielebarchiesi@0 379 db_create_table('taxonomy_index', $taxonomy_index);
danielebarchiesi@0 380
danielebarchiesi@0 381 // Use an inline version of Drupal 6 taxonomy_get_vocabularies() here since
danielebarchiesi@0 382 // we can no longer rely on $vocabulary->nodes from the API function.
danielebarchiesi@0 383 $result = db_query('SELECT v.*, n.type FROM {taxonomy_vocabulary} v LEFT JOIN {taxonomy_vocabulary_node_type} n ON v.vid = n.vid ORDER BY v.weight, v.name');
danielebarchiesi@0 384 $vocabularies = array();
danielebarchiesi@0 385 foreach ($result as $record) {
danielebarchiesi@0 386 // If no node types are associated with a vocabulary, the LEFT JOIN will
danielebarchiesi@0 387 // return a NULL value for type.
danielebarchiesi@0 388 if (isset($record->type)) {
danielebarchiesi@0 389 $node_types[$record->vid][$record->type] = $record->type;
danielebarchiesi@0 390 unset($record->type);
danielebarchiesi@0 391 $record->nodes = $node_types[$record->vid];
danielebarchiesi@0 392 }
danielebarchiesi@0 393 elseif (!isset($record->nodes)) {
danielebarchiesi@0 394 $record->nodes = array();
danielebarchiesi@0 395 }
danielebarchiesi@0 396 $vocabularies[$record->vid] = $record;
danielebarchiesi@0 397 }
danielebarchiesi@0 398
danielebarchiesi@0 399 foreach ($vocabularies as $vocabulary) {
danielebarchiesi@0 400 $field_name = 'taxonomy_' . $vocabulary->machine_name;
danielebarchiesi@0 401 $field = array(
danielebarchiesi@0 402 'field_name' => $field_name,
danielebarchiesi@0 403 'module' => 'taxonomy',
danielebarchiesi@0 404 'type' => 'taxonomy_term_reference',
danielebarchiesi@0 405 'cardinality' => $vocabulary->multiple || $vocabulary->tags ? FIELD_CARDINALITY_UNLIMITED : 1,
danielebarchiesi@0 406 'settings' => array(
danielebarchiesi@0 407 'required' => $vocabulary->required ? TRUE : FALSE,
danielebarchiesi@0 408 'allowed_values' => array(
danielebarchiesi@0 409 array(
danielebarchiesi@0 410 'vocabulary' => $vocabulary->machine_name,
danielebarchiesi@0 411 'parent' => 0,
danielebarchiesi@0 412 ),
danielebarchiesi@0 413 ),
danielebarchiesi@0 414 ),
danielebarchiesi@0 415 );
danielebarchiesi@0 416 _update_7000_field_create_field($field);
danielebarchiesi@0 417
danielebarchiesi@0 418 foreach ($vocabulary->nodes as $bundle) {
danielebarchiesi@0 419 $instance = array(
danielebarchiesi@0 420 'label' => $vocabulary->name,
danielebarchiesi@0 421 'field_name' => $field_name,
danielebarchiesi@0 422 'bundle' => $bundle,
danielebarchiesi@0 423 'entity_type' => 'node',
danielebarchiesi@0 424 'settings' => array(),
danielebarchiesi@0 425 'description' => $vocabulary->help,
danielebarchiesi@0 426 'required' => $vocabulary->required,
danielebarchiesi@0 427 'widget' => array(),
danielebarchiesi@0 428 'display' => array(
danielebarchiesi@0 429 'default' => array(
danielebarchiesi@0 430 'type' => 'taxonomy_term_reference_link',
danielebarchiesi@0 431 'weight' => 10,
danielebarchiesi@0 432 ),
danielebarchiesi@0 433 'teaser' => array(
danielebarchiesi@0 434 'type' => 'taxonomy_term_reference_link',
danielebarchiesi@0 435 'weight' => 10,
danielebarchiesi@0 436 ),
danielebarchiesi@0 437 ),
danielebarchiesi@0 438 );
danielebarchiesi@0 439 if ($vocabulary->tags) {
danielebarchiesi@0 440 $instance['widget'] = array(
danielebarchiesi@0 441 'type' => 'taxonomy_autocomplete',
danielebarchiesi@0 442 'module' => 'taxonomy',
danielebarchiesi@0 443 'settings' => array(
danielebarchiesi@0 444 'size' => 60,
danielebarchiesi@0 445 'autocomplete_path' => 'taxonomy/autocomplete',
danielebarchiesi@0 446 ),
danielebarchiesi@0 447 );
danielebarchiesi@0 448 }
danielebarchiesi@0 449 else {
danielebarchiesi@0 450 $instance['widget'] = array(
danielebarchiesi@0 451 'type' => 'select',
danielebarchiesi@0 452 'module' => 'options',
danielebarchiesi@0 453 'settings' => array(),
danielebarchiesi@0 454 );
danielebarchiesi@0 455 }
danielebarchiesi@0 456 _update_7000_field_create_instance($field, $instance);
danielebarchiesi@0 457 }
danielebarchiesi@0 458 }
danielebarchiesi@0 459
danielebarchiesi@0 460 // Some contrib projects stored term node associations without regard for the
danielebarchiesi@0 461 // selections in the taxonomy_vocabulary_node_types table, or have more terms
danielebarchiesi@0 462 // for a single node than the vocabulary allowed. We construct the
danielebarchiesi@0 463 // taxonomyextra field to store all the extra stuff.
danielebarchiesi@0 464
danielebarchiesi@0 465 // Allowed values for this extra vocabs field is every vocabulary.
danielebarchiesi@0 466 $allowed_values = array();
danielebarchiesi@0 467 foreach (_update_7002_taxonomy_get_vocabularies() as $vocabulary) {
danielebarchiesi@0 468 $allowed_values[] = array(
danielebarchiesi@0 469 'vocabulary' => $vocabulary->machine_name,
danielebarchiesi@0 470 'parent' => 0,
danielebarchiesi@0 471 );
danielebarchiesi@0 472 }
danielebarchiesi@0 473
danielebarchiesi@0 474 $field_name = 'taxonomyextra';
danielebarchiesi@0 475 $field = array(
danielebarchiesi@0 476 'field_name' => $field_name,
danielebarchiesi@0 477 'module' => 'taxonomy',
danielebarchiesi@0 478 'type' => 'taxonomy_term_reference',
danielebarchiesi@0 479 'cardinality' => FIELD_CARDINALITY_UNLIMITED,
danielebarchiesi@0 480 'settings' => array(
danielebarchiesi@0 481 'required' => FALSE,
danielebarchiesi@0 482 'allowed_values' => $allowed_values,
danielebarchiesi@0 483 ),
danielebarchiesi@0 484 );
danielebarchiesi@0 485 _update_7000_field_create_field($field);
danielebarchiesi@0 486
danielebarchiesi@0 487 foreach (_update_7000_node_get_types() as $bundle) {
danielebarchiesi@0 488 $instance = array(
danielebarchiesi@0 489 'label' => 'Taxonomy upgrade extras',
danielebarchiesi@0 490 'field_name' => $field_name,
danielebarchiesi@0 491 'entity_type' => 'node',
danielebarchiesi@0 492 'bundle' => $bundle->type,
danielebarchiesi@0 493 'settings' => array(),
danielebarchiesi@0 494 'description' => 'Debris left over after upgrade from Drupal 6',
danielebarchiesi@0 495 'widget' => array(
danielebarchiesi@0 496 'type' => 'taxonomy_autocomplete',
danielebarchiesi@0 497 'module' => 'taxonomy',
danielebarchiesi@0 498 'settings' => array(),
danielebarchiesi@0 499 ),
danielebarchiesi@0 500 'display' => array(
danielebarchiesi@0 501 'default' => array(
danielebarchiesi@0 502 'type' => 'taxonomy_term_reference_link',
danielebarchiesi@0 503 'weight' => 10,
danielebarchiesi@0 504 ),
danielebarchiesi@0 505 'teaser' => array(
danielebarchiesi@0 506 'type' => 'taxonomy_term_reference_link',
danielebarchiesi@0 507 'weight' => 10,
danielebarchiesi@0 508 ),
danielebarchiesi@0 509 ),
danielebarchiesi@0 510 );
danielebarchiesi@0 511 _update_7000_field_create_instance($field, $instance);
danielebarchiesi@0 512 }
danielebarchiesi@0 513
danielebarchiesi@0 514 $fields = array('help', 'multiple', 'required', 'tags');
danielebarchiesi@0 515 foreach ($fields as $field) {
danielebarchiesi@0 516 db_drop_field('taxonomy_vocabulary', $field);
danielebarchiesi@0 517 }
danielebarchiesi@0 518 }
danielebarchiesi@0 519
danielebarchiesi@0 520 /**
danielebarchiesi@0 521 * Migrate {taxonomy_term_node} table to field storage.
danielebarchiesi@0 522 *
danielebarchiesi@0 523 * @todo: This function can possibly be made much faster by wrapping a
danielebarchiesi@0 524 * transaction around all the inserts.
danielebarchiesi@0 525 */
danielebarchiesi@0 526 function taxonomy_update_7005(&$sandbox) {
danielebarchiesi@0 527 // $sandbox contents:
danielebarchiesi@0 528 // - total: The total number of term_node relationships to migrate.
danielebarchiesi@0 529 // - count: The number of term_node relationships that have been
danielebarchiesi@0 530 // migrated so far.
danielebarchiesi@0 531 // - last: The db_query_range() offset to use when querying
danielebarchiesi@0 532 // term_node; this field is incremented in quantities of $batch
danielebarchiesi@0 533 // (1000) but at the end of each call to this function, last and
danielebarchiesi@0 534 // count are the same.
danielebarchiesi@0 535 // - vocabularies: An associative array mapping vocabulary id and node
danielebarchiesi@0 536 // type to field name. If a voc id/node type pair does not appear
danielebarchiesi@0 537 // in this array but a term_node relationship exists mapping a
danielebarchiesi@0 538 // term in voc id to node of that type, the relationship is
danielebarchiesi@0 539 // assigned to the taxonomymyextra field which allows terms of all
danielebarchiesi@0 540 // vocabularies.
danielebarchiesi@0 541 // - cursor[values], cursor[deltas]: The contents of $values and
danielebarchiesi@0 542 // $deltas at the end of the previous call to this function. These
danielebarchiesi@0 543 // need to be preserved across calls because a single batch of
danielebarchiesi@0 544 // 1000 rows from term_node may end in the middle of the terms for
danielebarchiesi@0 545 // a single node revision.
danielebarchiesi@0 546 //
danielebarchiesi@0 547 // $values is the array of values about to be/most recently inserted
danielebarchiesi@0 548 // into the SQL data table for the taxonomy_term_reference
danielebarchiesi@0 549 // field. Before $values is constructed for each record, the
danielebarchiesi@0 550 // $values from the previous insert is checked to see if the two
danielebarchiesi@0 551 // records are for the same node revision id; this enables knowing
danielebarchiesi@0 552 // when to reset the delta counters which are incremented across all
danielebarchiesi@0 553 // terms for a single field on a single revision, but reset for each
danielebarchiesi@0 554 // new field and revision.
danielebarchiesi@0 555 //
danielebarchiesi@0 556 // $deltas is an associative array mapping field name to the number
danielebarchiesi@0 557 // of term references stored so far for the current revision, which
danielebarchiesi@0 558 // provides the delta value for each term reference data insert. The
danielebarchiesi@0 559 // deltas are reset for each new revision.
danielebarchiesi@0 560
danielebarchiesi@0 561 $conditions = array(
danielebarchiesi@0 562 'type' => 'taxonomy_term_reference',
danielebarchiesi@0 563 'deleted' => 0,
danielebarchiesi@0 564 );
danielebarchiesi@0 565 $field_info = _update_7000_field_read_fields($conditions, 'field_name');
danielebarchiesi@0 566
danielebarchiesi@0 567 // This is a multi-pass update. On the first call we need to initialize some
danielebarchiesi@0 568 // variables.
danielebarchiesi@0 569 if (!isset($sandbox['total'])) {
danielebarchiesi@0 570 $sandbox['last'] = 0;
danielebarchiesi@0 571 $sandbox['count'] = 0;
danielebarchiesi@0 572
danielebarchiesi@0 573 // Run the same joins as the query that is used later to retrieve the
danielebarchiesi@0 574 // term_node data, this ensures that bad records in that table - for
danielebarchiesi@0 575 // tids which aren't in taxonomy_term_data or nids which aren't in {node}
danielebarchiesi@0 576 // are not included in the count.
danielebarchiesi@0 577 $sandbox['total'] = db_query('SELECT COUNT(*) FROM {taxonomy_term_data} td INNER JOIN {taxonomy_term_node} tn ON td.tid = tn.tid INNER JOIN {node} n ON tn.nid = n.nid LEFT JOIN {node} n2 ON tn.vid = n2.vid')->fetchField();
danielebarchiesi@0 578
danielebarchiesi@0 579 // Use an inline version of Drupal 6 taxonomy_get_vocabularies() here since
danielebarchiesi@0 580 // we can no longer rely on $vocabulary->nodes from the API function.
danielebarchiesi@0 581 $result = db_query('SELECT v.vid, v.machine_name, n.type FROM {taxonomy_vocabulary} v INNER JOIN {taxonomy_vocabulary_node_type} n ON v.vid = n.vid');
danielebarchiesi@0 582 $vocabularies = array();
danielebarchiesi@0 583 foreach ($result as $record) {
danielebarchiesi@0 584
danielebarchiesi@0 585 // If no node types are associated with a vocabulary, the LEFT JOIN will
danielebarchiesi@0 586 // return a NULL value for type.
danielebarchiesi@0 587 if (isset($record->type)) {
danielebarchiesi@0 588 $vocabularies[$record->vid][$record->type] = 'taxonomy_'. $record->machine_name;
danielebarchiesi@0 589 }
danielebarchiesi@0 590 }
danielebarchiesi@0 591
danielebarchiesi@0 592 if (!empty($vocabularies)) {
danielebarchiesi@0 593 $sandbox['vocabularies'] = $vocabularies;
danielebarchiesi@0 594 }
danielebarchiesi@0 595
danielebarchiesi@0 596 db_create_table('taxonomy_update_7005', array(
danielebarchiesi@0 597 'description' => 'Stores temporary data for taxonomy_update_7005.',
danielebarchiesi@0 598 'fields' => array(
danielebarchiesi@0 599 'n' => array(
danielebarchiesi@0 600 'description' => 'Preserve order.',
danielebarchiesi@0 601 'type' => 'serial',
danielebarchiesi@0 602 'unsigned' => TRUE,
danielebarchiesi@0 603 'not null' => TRUE,
danielebarchiesi@0 604 ),
danielebarchiesi@0 605 'vocab_id' => array(
danielebarchiesi@0 606 'type' => 'int',
danielebarchiesi@0 607 'unsigned' => TRUE,
danielebarchiesi@0 608 'not null' => TRUE,
danielebarchiesi@0 609 'default' => 0,
danielebarchiesi@0 610 ),
danielebarchiesi@0 611 'tid' => array(
danielebarchiesi@0 612 'type' => 'int',
danielebarchiesi@0 613 'unsigned' => TRUE,
danielebarchiesi@0 614 'not null' => TRUE,
danielebarchiesi@0 615 ),
danielebarchiesi@0 616 'nid' => array(
danielebarchiesi@0 617 'type' => 'int',
danielebarchiesi@0 618 'unsigned' => TRUE,
danielebarchiesi@0 619 'not null' => TRUE,
danielebarchiesi@0 620 ),
danielebarchiesi@0 621 'vid' => array(
danielebarchiesi@0 622 'type' => 'int',
danielebarchiesi@0 623 'unsigned' => TRUE,
danielebarchiesi@0 624 'not null' => FALSE,
danielebarchiesi@0 625 'default' => NULL,
danielebarchiesi@0 626 ),
danielebarchiesi@0 627 'type' => array(
danielebarchiesi@0 628 'type' => 'varchar',
danielebarchiesi@0 629 'length' => 32,
danielebarchiesi@0 630 'not null' => TRUE,
danielebarchiesi@0 631 'default' => '',
danielebarchiesi@0 632 ),
danielebarchiesi@0 633 'created' => array(
danielebarchiesi@0 634 'type' => 'int',
danielebarchiesi@0 635 'not null' => FALSE,
danielebarchiesi@0 636 ),
danielebarchiesi@0 637 'sticky' => array(
danielebarchiesi@0 638 'type' => 'int',
danielebarchiesi@0 639 'not null' => FALSE,
danielebarchiesi@0 640 ),
danielebarchiesi@0 641 'is_current' => array(
danielebarchiesi@0 642 'type' => 'int',
danielebarchiesi@0 643 'unsigned' => TRUE,
danielebarchiesi@0 644 'not null' => FALSE,
danielebarchiesi@0 645 ),
danielebarchiesi@0 646 ),
danielebarchiesi@0 647 'primary key' => array('n'),
danielebarchiesi@0 648 ));
danielebarchiesi@0 649
danielebarchiesi@0 650 // Query selects all revisions at once and processes them in revision and
danielebarchiesi@0 651 // term weight order.
danielebarchiesi@0 652 $query = db_select('taxonomy_term_data', 'td');
danielebarchiesi@0 653 // We are migrating term-node relationships. If there are none for a
danielebarchiesi@0 654 // term, we do not need the term_data row.
danielebarchiesi@0 655 $query->join('taxonomy_term_node', 'tn', 'td.tid = tn.tid');
danielebarchiesi@0 656 // If a term-node relationship exists for a nid that does not exist, we
danielebarchiesi@0 657 // cannot migrate it as we have no node to relate it to; thus we do not
danielebarchiesi@0 658 // need that row from term_node.
danielebarchiesi@0 659 $query->join('node', 'n', 'tn.nid = n.nid');
danielebarchiesi@0 660 // If the current term-node relationship is for the current revision of
danielebarchiesi@0 661 // the node, this left join will match and is_current will be non-NULL
danielebarchiesi@0 662 // (we also get the current sticky and created in this case). This
danielebarchiesi@0 663 // tells us whether to insert into the current data tables in addition
danielebarchiesi@0 664 // to the revision data tables.
danielebarchiesi@0 665 $query->leftJoin('node', 'n2', 'tn.vid = n2.vid');
danielebarchiesi@0 666 $query->addField('td', 'vid', 'vocab_id');
danielebarchiesi@0 667 $query->addField('td', 'tid');
danielebarchiesi@0 668 $query->addField('tn', 'nid');
danielebarchiesi@0 669 $query->addField('tn', 'vid');
danielebarchiesi@0 670 $query->addField('n', 'type');
danielebarchiesi@0 671 $query->addField('n2', 'created');
danielebarchiesi@0 672 $query->addField('n2', 'sticky');
danielebarchiesi@0 673 $query->addField('n2', 'nid', 'is_current');
danielebarchiesi@0 674 // This query must return a consistent ordering across multiple calls.
danielebarchiesi@0 675 // We need them ordered by node vid (since we use that to decide when
danielebarchiesi@0 676 // to reset the delta counters) and by term weight so they appear
danielebarchiesi@0 677 // within each node in weight order. However, tn.vid,td.weight is not
danielebarchiesi@0 678 // guaranteed to be unique, so we add tn.tid as an additional sort key
danielebarchiesi@0 679 // because tn.tid,tn.vid is the primary key of the D6 term_node table
danielebarchiesi@0 680 // and so is guaranteed unique. Unfortunately it also happens to be in
danielebarchiesi@0 681 // the wrong order which is less efficient, but c'est la vie.
danielebarchiesi@0 682 $query->orderBy('tn.vid');
danielebarchiesi@0 683 $query->orderBy('td.weight');
danielebarchiesi@0 684 $query->orderBy('tn.tid');
danielebarchiesi@0 685
danielebarchiesi@0 686 // Work around a bug in the PostgreSQL driver that would result in fatal
danielebarchiesi@0 687 // errors when this subquery is used in the insert query below. See
danielebarchiesi@0 688 // https://drupal.org/node/2057693.
danielebarchiesi@0 689 $fields = &$query->getFields();
danielebarchiesi@0 690 unset($fields['td.weight']);
danielebarchiesi@0 691 unset($fields['tn.tid']);
danielebarchiesi@0 692
danielebarchiesi@0 693 db_insert('taxonomy_update_7005')
danielebarchiesi@0 694 ->from($query)
danielebarchiesi@0 695 ->execute();
danielebarchiesi@0 696 }
danielebarchiesi@0 697 else {
danielebarchiesi@0 698 // We do each pass in batches of 1000.
danielebarchiesi@0 699 $batch = 1000;
danielebarchiesi@0 700
danielebarchiesi@0 701 $result = db_query_range('SELECT vocab_id, tid, nid, vid, type, created, sticky, is_current FROM {taxonomy_update_7005} ORDER BY n', $sandbox['last'], $batch);
danielebarchiesi@0 702 if (isset($sandbox['cursor'])) {
danielebarchiesi@0 703 $values = $sandbox['cursor']['values'];
danielebarchiesi@0 704 $deltas = $sandbox['cursor']['deltas'];
danielebarchiesi@0 705 }
danielebarchiesi@0 706 else {
danielebarchiesi@0 707 $deltas = array();
danielebarchiesi@0 708 }
danielebarchiesi@0 709 foreach ($result as $record) {
danielebarchiesi@0 710 $sandbox['count'] += 1;
danielebarchiesi@0 711
danielebarchiesi@0 712 // Use the valid field for this vocabulary and node type or use the
danielebarchiesi@0 713 // overflow vocabulary if there is no valid field.
danielebarchiesi@0 714 $field_name = isset($sandbox['vocabularies'][$record->vocab_id][$record->type]) ? $sandbox['vocabularies'][$record->vocab_id][$record->type] : 'taxonomyextra';
danielebarchiesi@0 715 $field = $field_info[$field_name];
danielebarchiesi@0 716
danielebarchiesi@0 717 // Start deltas from 0, and increment by one for each term attached to a
danielebarchiesi@0 718 // node.
danielebarchiesi@0 719 if (!isset($deltas[$field_name])) {
danielebarchiesi@0 720 $deltas[$field_name] = 0;
danielebarchiesi@0 721 }
danielebarchiesi@0 722
danielebarchiesi@0 723 if (isset($values)) {
danielebarchiesi@0 724
danielebarchiesi@0 725 // If the last inserted revision_id is the same as the current record,
danielebarchiesi@0 726 // use the previous deltas to calculate the next delta.
danielebarchiesi@0 727 if ($record->vid == $values[2]) {
danielebarchiesi@0 728
danielebarchiesi@0 729 // For limited cardinality fields, the delta must not be allowed to
danielebarchiesi@0 730 // exceed the cardinality during the update. So ensure that the
danielebarchiesi@0 731 // delta about to be inserted is within this limit.
danielebarchiesi@0 732 // @see field_default_validate().
danielebarchiesi@0 733 if ($field['cardinality'] != FIELD_CARDINALITY_UNLIMITED && ($deltas[$field_name] + 1) > $field['cardinality']) {
danielebarchiesi@0 734
danielebarchiesi@0 735 // For excess values of a single-term vocabulary, switch over to
danielebarchiesi@0 736 // the overflow field.
danielebarchiesi@0 737 $field_name = 'taxonomyextra';
danielebarchiesi@0 738 $field = $field_info[$field_name];
danielebarchiesi@0 739 if (!isset($deltas[$field_name])) {
danielebarchiesi@0 740 $deltas[$field_name] = 0;
danielebarchiesi@0 741 }
danielebarchiesi@0 742 }
danielebarchiesi@0 743 }
danielebarchiesi@0 744 else {
danielebarchiesi@0 745
danielebarchiesi@0 746 // When the record is a new revision, empty the deltas array.
danielebarchiesi@0 747 $deltas = array($field_name => 0);
danielebarchiesi@0 748 }
danielebarchiesi@0 749 }
danielebarchiesi@0 750
danielebarchiesi@0 751 // Table and column found in the field's storage details. During upgrades,
danielebarchiesi@0 752 // it's always SQL.
danielebarchiesi@0 753 $table_name = "field_data_{$field_name}";
danielebarchiesi@0 754 $revision_name = "field_revision_{$field_name}";
danielebarchiesi@0 755 $value_column = $field_name . '_tid';
danielebarchiesi@0 756
danielebarchiesi@0 757 // Column names and values in field storage are the same for current and
danielebarchiesi@0 758 // revision.
danielebarchiesi@0 759 $columns = array('entity_type', 'entity_id', 'revision_id', 'bundle', 'language', 'delta', $value_column);
danielebarchiesi@0 760 $values = array('node', $record->nid, $record->vid, $record->type, LANGUAGE_NONE, $deltas[$field_name]++, $record->tid);
danielebarchiesi@0 761
danielebarchiesi@0 762 // Insert rows into the revision table.
danielebarchiesi@0 763 db_insert($revision_name)->fields($columns)->values($values)->execute();
danielebarchiesi@0 764
danielebarchiesi@0 765 // is_current column is a node ID if this revision is also current.
danielebarchiesi@0 766 if ($record->is_current) {
danielebarchiesi@0 767 db_insert($table_name)->fields($columns)->values($values)->execute();
danielebarchiesi@0 768
danielebarchiesi@0 769 // Update the {taxonomy_index} table.
danielebarchiesi@0 770 db_insert('taxonomy_index')
danielebarchiesi@0 771 ->fields(array('nid', 'tid', 'sticky', 'created',))
danielebarchiesi@0 772 ->values(array($record->nid, $record->tid, $record->sticky, $record->created))
danielebarchiesi@0 773 ->execute();
danielebarchiesi@0 774 }
danielebarchiesi@0 775 }
danielebarchiesi@0 776
danielebarchiesi@0 777 // Store the set of inserted values and the current revision's deltas in the
danielebarchiesi@0 778 // sandbox.
danielebarchiesi@0 779 $sandbox['cursor'] = array(
danielebarchiesi@0 780 'values' => $values,
danielebarchiesi@0 781 'deltas' => $deltas,
danielebarchiesi@0 782 );
danielebarchiesi@0 783 $sandbox['last'] += $batch;
danielebarchiesi@0 784 }
danielebarchiesi@0 785
danielebarchiesi@0 786 if ($sandbox['count'] < $sandbox['total']) {
danielebarchiesi@0 787 $sandbox['#finished'] = FALSE;
danielebarchiesi@0 788 }
danielebarchiesi@0 789 else {
danielebarchiesi@0 790 db_drop_table('taxonomy_vocabulary_node_type');
danielebarchiesi@0 791 db_drop_table('taxonomy_term_node');
danielebarchiesi@0 792
danielebarchiesi@0 793 // If there are no vocabs, we're done.
danielebarchiesi@0 794 db_drop_table('taxonomy_update_7005');
danielebarchiesi@0 795 $sandbox['#finished'] = TRUE;
danielebarchiesi@0 796
danielebarchiesi@0 797 // Determine necessity of taxonomyextras field.
danielebarchiesi@0 798 $field = $field_info['taxonomyextra'];
danielebarchiesi@0 799 $revision_name = 'field_revision_' . $field['field_name'];
danielebarchiesi@0 800 $node_types = db_select($revision_name)->distinct()->fields($revision_name, array('bundle'))
danielebarchiesi@0 801 ->execute()->fetchCol();
danielebarchiesi@0 802
danielebarchiesi@0 803 if (empty($node_types)) {
danielebarchiesi@0 804 // Delete the overflow field if there are no rows in the revision table.
danielebarchiesi@0 805 _update_7000_field_delete_field('taxonomyextra');
danielebarchiesi@0 806 }
danielebarchiesi@0 807 else {
danielebarchiesi@0 808 // Remove instances which are not actually used.
danielebarchiesi@0 809 $bundles = db_query('SELECT bundle FROM {field_config_instance} WHERE field_name = :field_name', array(':field_name' => 'taxonomyextra'))->fetchCol();
danielebarchiesi@0 810 $bundles = array_diff($bundles, $node_types);
danielebarchiesi@0 811 foreach ($bundles as $bundle) {
danielebarchiesi@0 812 _update_7000_field_delete_instance('taxonomyextra', 'node', $bundle);
danielebarchiesi@0 813 }
danielebarchiesi@0 814 }
danielebarchiesi@0 815 }
danielebarchiesi@0 816 }
danielebarchiesi@0 817
danielebarchiesi@0 818 /**
danielebarchiesi@0 819 * Add {taxonomy_term_data}.format column.
danielebarchiesi@0 820 */
danielebarchiesi@0 821 function taxonomy_update_7006() {
danielebarchiesi@0 822 db_add_field('taxonomy_term_data', 'format', array(
danielebarchiesi@0 823 'type' => 'int',
danielebarchiesi@0 824 'unsigned' => TRUE,
danielebarchiesi@0 825 'not null' => FALSE,
danielebarchiesi@0 826 'description' => 'The {filter_format}.format of the description.',
danielebarchiesi@0 827 ));
danielebarchiesi@0 828 }
danielebarchiesi@0 829
danielebarchiesi@0 830 /**
danielebarchiesi@0 831 * Add index on {taxonomy_term_data}.name column to speed up taxonomy_get_term_by_name().
danielebarchiesi@0 832 */
danielebarchiesi@0 833 function taxonomy_update_7007() {
danielebarchiesi@0 834 db_add_index('taxonomy_term_data', 'name', array('name'));
danielebarchiesi@0 835 }
danielebarchiesi@0 836
danielebarchiesi@0 837 /**
danielebarchiesi@0 838 * Change the weight columns to normal int.
danielebarchiesi@0 839 */
danielebarchiesi@0 840 function taxonomy_update_7008() {
danielebarchiesi@0 841 db_drop_index('taxonomy_term_data', 'taxonomy_tree');
danielebarchiesi@0 842 db_change_field('taxonomy_term_data', 'weight', 'weight', array(
danielebarchiesi@0 843 'type' => 'int',
danielebarchiesi@0 844 'not null' => TRUE,
danielebarchiesi@0 845 'default' => 0,
danielebarchiesi@0 846 'description' => 'The weight of this term in relation to other terms.',
danielebarchiesi@0 847 ), array(
danielebarchiesi@0 848 'indexes' => array(
danielebarchiesi@0 849 'taxonomy_tree' => array('vid', 'weight', 'name'),
danielebarchiesi@0 850 ),
danielebarchiesi@0 851 ));
danielebarchiesi@0 852
danielebarchiesi@0 853 db_drop_index('taxonomy_vocabulary', 'list');
danielebarchiesi@0 854 db_change_field('taxonomy_vocabulary', 'weight', 'weight', array(
danielebarchiesi@0 855 'type' => 'int',
danielebarchiesi@0 856 'not null' => TRUE,
danielebarchiesi@0 857 'default' => 0,
danielebarchiesi@0 858 'description' => 'The weight of this vocabulary in relation to other vocabularies.',
danielebarchiesi@0 859 ), array(
danielebarchiesi@0 860 'indexes' => array(
danielebarchiesi@0 861 'list' => array('weight', 'name'),
danielebarchiesi@0 862 ),
danielebarchiesi@0 863 ));
danielebarchiesi@0 864 }
danielebarchiesi@0 865
danielebarchiesi@0 866 /**
danielebarchiesi@0 867 * Change {taxonomy_term_data}.format into varchar.
danielebarchiesi@0 868 */
danielebarchiesi@0 869 function taxonomy_update_7009() {
danielebarchiesi@0 870 db_change_field('taxonomy_term_data', 'format', 'format', array(
danielebarchiesi@0 871 'type' => 'varchar',
danielebarchiesi@0 872 'length' => 255,
danielebarchiesi@0 873 'not null' => FALSE,
danielebarchiesi@0 874 'description' => 'The {filter_format}.format of the description.',
danielebarchiesi@0 875 ));
danielebarchiesi@0 876 }
danielebarchiesi@0 877
danielebarchiesi@0 878 /**
danielebarchiesi@0 879 * Change {taxonomy_index}.created to support signed int.
danielebarchiesi@0 880 */
danielebarchiesi@0 881 function taxonomy_update_7010() {
danielebarchiesi@0 882 db_change_field('taxonomy_index', 'created', 'created', array(
danielebarchiesi@0 883 'description' => 'The Unix timestamp when the node was created.',
danielebarchiesi@0 884 'type' => 'int',
danielebarchiesi@0 885 'unsigned' => FALSE,
danielebarchiesi@0 886 'not null' => TRUE,
danielebarchiesi@0 887 'default'=> 0,
danielebarchiesi@0 888 ));
danielebarchiesi@0 889 }
danielebarchiesi@0 890