content_taxonomy_migrate.module 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. /**
  3. * @file
  4. *
  5. */
  6. /**
  7. * Implements hook_content_migrate_field_alter().
  8. */
  9. function content_taxonomy_migrate_content_migrate_field_alter(&$field_value, $instance_value) {
  10. if ($field_value['type'] == 'content_taxonomy') {
  11. $field_value['type'] = 'taxonomy_term_reference';
  12. $field_value['module'] = 'taxonomy';
  13. // Transform field settings.
  14. $old_settings = $field_value['settings'];
  15. $vocabulary = taxonomy_vocabulary_load($old_settings['vid']);
  16. $field_value['settings'] = array();
  17. $field_value['settings']['allowed_values'] = array();
  18. $field_value['settings']['allowed_values'][0]['vocabulary'] = $vocabulary->machine_name;
  19. $field_value['settings']['allowed_values'][0]['parent'] = $old_settings['parent'];
  20. }
  21. }
  22. /**
  23. * Implements hook_content_migrate_instance_alter().
  24. */
  25. function content_taxonomy_migrate_content_migrate_instance_alter(&$instance_value, $field_value) {
  26. // Only work on content_taxonomy fields.
  27. if ($field_value['type'] != 'content_taxonomy') {
  28. return;
  29. }
  30. // Track whether fields are managed by this module.
  31. $fix_this_instance = FALSE;
  32. // Fix the widget.
  33. if ($instance_value['widget_type'] == "content_taxonomy_autocomplete") {
  34. $fix_this_instance = TRUE;
  35. $instance_value['widget_type'] = 'taxonomy_autocomplete';
  36. $instance_value['widget']['type'] = 'taxonomy_autocomplete';
  37. $instance_value['widget']['module'] = 'taxonomy';
  38. }
  39. elseif ($instance_value['widget_type'] == "content_taxonomy_options" || $instance_value['widget_type'] == "content_taxonomy_tree") {
  40. $fix_this_instance = TRUE;
  41. $instance_value['widget_type'] = 'options_buttons';
  42. $instance_value['widget']['type'] = 'options_buttons';
  43. $instance_value['widget']['module'] = 'options';
  44. }
  45. elseif ($instance_value['widget_type'] == "content_taxonomy_select" || $instance_value['widget_type'] == 'content_taxonomy_hs') {
  46. $fix_this_instance = TRUE;
  47. $instance_value['widget_type'] = 'options_select';
  48. $instance_value['widget']['type'] = 'options_select';
  49. $instance_value['widget']['module'] = 'options';
  50. }
  51. // Fix the formatter.
  52. foreach ($instance_value['display'] as $context => $settings) {
  53. if ($instance_value['display'][$context]['type'] == 'default') {
  54. $fix_this_instance = TRUE;
  55. $instance_value['display'][$context]['type'] = 'taxonomy_term_reference_plain';
  56. }
  57. elseif ($instance_value['display'][$context]['type'] == 'link') {
  58. $fix_this_instance = TRUE;
  59. $instance_value['display'][$context]['type'] = 'taxonomy_term_reference_link';
  60. }
  61. if ($instance_value['display'][$context]['module'] == 'content_taxonomy_options') {
  62. $fix_this_instance = TRUE;
  63. $instance_value['display'][$context]['module'] = 'options';
  64. }
  65. }
  66. // Fix the defaults.
  67. if ($fix_this_instance && !empty($instance_value['default_value'])) {
  68. foreach ($instance_value['default_value'] as $key => $default) {
  69. // Need to check isset() and is_null() because the value could be NULL.
  70. if (isset($instance_value['default_value'][$key]['value']) || is_null($instance_value['default_value'][$key]['value'])) {
  71. // Remove any empty 'value' strings.
  72. if (empty($instance_value['default_value'][$key]['value'])) {
  73. unset($instance_value['default_value'][$key]['value']);
  74. }
  75. // Rename the 'value' string as 'tid'.
  76. else {
  77. $instance_value['default_value'][$key]['tid'] = $instance_value['default_value'][$key]['value'];
  78. unset($instance_value['default_value'][$key]['value']);
  79. }
  80. // Remove a junk value carried over from D6.
  81. if (isset($instance_value['default_value'][$key]['_error_element'])) {
  82. unset($instance_value['default_value'][$key]['_error_element']);
  83. $updated = TRUE;
  84. }
  85. // If the array is empty, just remove it.
  86. if (empty($instance_value['default_value'][$key])) {
  87. unset($instance_value['default_value'][$key]);
  88. }
  89. }
  90. // There are no default values left.
  91. if (empty($instance_value['default_value'])) {
  92. $instance_value['default_value'] = NULL;
  93. }
  94. }
  95. }
  96. }
  97. /**
  98. * Implements hook_content_migrate_data_record_alter().
  99. */
  100. function content_taxonomy_migrate_content_migrate_data_record_alter(&$record, $field) {
  101. if ($field['type'] == 'taxonomy_term_reference') {
  102. // Copy field_FIELD_NAME_value (D6) to field_FIELD_NAME_tid (D7).
  103. if (isset($record[$field['field_name'] . '_value']) && !isset($record[$field['field_name'] . '_tid'])) {
  104. $record[$field['field_name'] . '_tid'] = $record[$field['field_name'] . '_value'];
  105. }
  106. // Fill the taxonomy_index.
  107. if (variable_get('taxonomy_maintain_index_table', TRUE) && $field['storage']['type'] == 'field_sql_storage' && $record['entity_type'] == 'node') {
  108. if (isset($record[$field['field_name'] . "_tid"]) && $record[$field['field_name'] . "_tid"]) {
  109. $entity = node_load($record['entity_id']);
  110. db_delete('taxonomy_index')->condition('nid', $entity->nid)->condition('tid', $record[$field['field_name'] . "_tid"])->execute();
  111. $query = db_insert('taxonomy_index')->fields(array('nid', 'tid', 'sticky', 'created', ));
  112. $query->values(array(
  113. 'nid' => $entity->nid,
  114. 'tid' => $record[$field['field_name'] . "_tid"],
  115. 'sticky' => $entity->sticky,
  116. 'created' => $entity->created,
  117. ));
  118. $query->execute();
  119. }
  120. }
  121. }
  122. }