danielebarchiesi@4: array( danielebarchiesi@4: 'target_id' => array( danielebarchiesi@4: 'description' => 'The id of the target entity.', danielebarchiesi@4: 'type' => 'int', danielebarchiesi@4: 'unsigned' => TRUE, danielebarchiesi@4: 'not null' => TRUE, danielebarchiesi@4: ), danielebarchiesi@4: ), danielebarchiesi@4: 'indexes' => array( danielebarchiesi@4: 'target_id' => array('target_id'), danielebarchiesi@4: ), danielebarchiesi@4: 'foreign keys' => array(), danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: // Create a foreign key to the target entity type base type, if available. danielebarchiesi@4: $entity_type = $field['settings']['target_type']; danielebarchiesi@4: if (isset($base_tables[$entity_type])) { danielebarchiesi@4: list($base_table, $id_column) = $base_tables[$entity_type]; danielebarchiesi@4: $schema['foreign keys'][$base_table] = array( danielebarchiesi@4: 'table' => $base_table, danielebarchiesi@4: 'columns' => array('target_id' => $id_column), danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Invoke the behaviors to allow them to change the schema. danielebarchiesi@4: foreach (entityreference_get_behavior_handlers($field) as $handler) { danielebarchiesi@4: $handler->schema_alter($schema, $field); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: return $schema; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Update the field configuration to the new plugin structure. danielebarchiesi@4: */ danielebarchiesi@4: function entityreference_update_7000() { danielebarchiesi@4: // Enable ctools. danielebarchiesi@4: if (!module_enable(array('ctools'))) { danielebarchiesi@4: throw new DrupalUpdateException('This version of Entity Reference requires ctools, but it could not be enabled.'); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Get the list of fields of type 'entityreference'. danielebarchiesi@4: $fields = array(); danielebarchiesi@4: foreach (field_info_fields() as $field_name => $field) { danielebarchiesi@4: // Update the field configuration. danielebarchiesi@4: if ($field['type'] == 'entityreference') { danielebarchiesi@4: $settings = &$field['settings']; danielebarchiesi@4: if (!isset($settings['handler'])) { danielebarchiesi@4: $settings['handler'] = 'base'; danielebarchiesi@4: $settings['handler_settings']['target_bundles'] = $settings['target_bundles']; danielebarchiesi@4: unset($settings['target_bundles']); danielebarchiesi@4: field_update_field($field); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Update the instance configurations. danielebarchiesi@4: foreach ($field['bundles'] as $entity_type => $bundles) { danielebarchiesi@4: foreach ($bundles as $bundle) { danielebarchiesi@4: $instance = field_info_instance($entity_type, $field_name, $bundle); danielebarchiesi@4: $save = FALSE; danielebarchiesi@4: if ($instance['widget']['type'] == 'entityreference_autocomplete') { danielebarchiesi@4: $instance['widget']['type'] = 'entityreference_autocomplete_tags'; danielebarchiesi@4: $save = TRUE; danielebarchiesi@4: } danielebarchiesi@4: // When the autocomplete path is the default value, remove it from danielebarchiesi@4: // the configuration. danielebarchiesi@4: if (isset($instance['widget']['settings']['path']) && $instance['widget']['settings']['path'] == 'entityreference/autocomplete') { danielebarchiesi@4: unset($instance['widget']['settings']['path']); danielebarchiesi@4: $save = TRUE; danielebarchiesi@4: } danielebarchiesi@4: if ($save) { danielebarchiesi@4: field_update_instance($instance); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Drop "target_type" from the field schema. danielebarchiesi@4: */ danielebarchiesi@4: function entityreference_update_7001() { danielebarchiesi@4: if (!module_exists('field_sql_storage')) { danielebarchiesi@4: return; danielebarchiesi@4: } danielebarchiesi@4: foreach (field_info_fields() as $field_name => $field) { danielebarchiesi@4: if ($field['type'] != 'entityreference') { danielebarchiesi@4: // Not an entity reference field. danielebarchiesi@4: continue; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Update the field settings. danielebarchiesi@4: $field = field_info_field($field_name); danielebarchiesi@4: unset($field['indexes']['target_entity']); danielebarchiesi@4: $field['indexes']['target_id'] = array('target_id'); danielebarchiesi@4: field_update_field($field); danielebarchiesi@4: danielebarchiesi@4: if ($field['storage']['type'] !== 'field_sql_storage') { danielebarchiesi@4: // Field doesn't use SQL storage, we cannot modify the schema. danielebarchiesi@4: continue; danielebarchiesi@4: } danielebarchiesi@4: $table_name = _field_sql_storage_tablename($field); danielebarchiesi@4: $revision_name = _field_sql_storage_revision_tablename($field); danielebarchiesi@4: danielebarchiesi@4: db_drop_index($table_name, $field_name . '_target_entity'); danielebarchiesi@4: db_drop_index($table_name, $field_name . '_target_id'); danielebarchiesi@4: db_drop_field($table_name, $field_name . '_target_type'); danielebarchiesi@4: db_add_index($table_name, $field_name . '_target_id', array($field_name . '_target_id')); danielebarchiesi@4: danielebarchiesi@4: db_drop_index($revision_name, $field_name . '_target_entity'); danielebarchiesi@4: db_drop_index($revision_name, $field_name . '_target_id'); danielebarchiesi@4: db_drop_field($revision_name, $field_name . '_target_type'); danielebarchiesi@4: db_add_index($revision_name, $field_name . '_target_id', array($field_name . '_target_id')); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Make the target_id column NOT NULL. danielebarchiesi@4: */ danielebarchiesi@4: function entityreference_update_7002() { danielebarchiesi@4: if (!module_exists('field_sql_storage')) { danielebarchiesi@4: return; danielebarchiesi@4: } danielebarchiesi@4: foreach (field_info_fields() as $field_name => $field) { danielebarchiesi@4: if ($field['type'] != 'entityreference') { danielebarchiesi@4: // Not an entity reference field. danielebarchiesi@4: continue; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: if ($field['storage']['type'] !== 'field_sql_storage') { danielebarchiesi@4: // Field doesn't use SQL storage, we cannot modify the schema. danielebarchiesi@4: continue; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: $table_name = _field_sql_storage_tablename($field); danielebarchiesi@4: $revision_name = _field_sql_storage_revision_tablename($field); danielebarchiesi@4: danielebarchiesi@4: db_change_field($table_name, $field_name . '_target_id', $field_name . '_target_id', array( danielebarchiesi@4: 'description' => 'The id of the target entity.', danielebarchiesi@4: 'type' => 'int', danielebarchiesi@4: 'unsigned' => TRUE, danielebarchiesi@4: 'not null' => TRUE, danielebarchiesi@4: )); danielebarchiesi@4: } danielebarchiesi@4: }