annotate sites/all/modules/entityreference/entityreference.install @ 4:ce11bbd8f642

added modules
author danieleb <danielebarchiesi@me.com>
date Thu, 19 Sep 2013 10:38:44 +0100
parents
children
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2
danielebarchiesi@4 3 /**
danielebarchiesi@4 4 * Implements hook_uninstall().
danielebarchiesi@4 5 */
danielebarchiesi@4 6 function entityreference_uninstall() {
danielebarchiesi@4 7 variable_del('entityreference:base-tables');
danielebarchiesi@4 8 }
danielebarchiesi@4 9
danielebarchiesi@4 10 /**
danielebarchiesi@4 11 * Implements hook_field_schema().
danielebarchiesi@4 12 */
danielebarchiesi@4 13 function entityreference_field_schema($field) {
danielebarchiesi@4 14 if ($field['type'] == 'entityreference') {
danielebarchiesi@4 15 // Load the base table configuration from the cache.
danielebarchiesi@4 16 $base_tables = variable_get('entityreference:base-tables', array());
danielebarchiesi@4 17
danielebarchiesi@4 18 $schema = array(
danielebarchiesi@4 19 'columns' => array(
danielebarchiesi@4 20 'target_id' => array(
danielebarchiesi@4 21 'description' => 'The id of the target entity.',
danielebarchiesi@4 22 'type' => 'int',
danielebarchiesi@4 23 'unsigned' => TRUE,
danielebarchiesi@4 24 'not null' => TRUE,
danielebarchiesi@4 25 ),
danielebarchiesi@4 26 ),
danielebarchiesi@4 27 'indexes' => array(
danielebarchiesi@4 28 'target_id' => array('target_id'),
danielebarchiesi@4 29 ),
danielebarchiesi@4 30 'foreign keys' => array(),
danielebarchiesi@4 31 );
danielebarchiesi@4 32
danielebarchiesi@4 33 // Create a foreign key to the target entity type base type, if available.
danielebarchiesi@4 34 $entity_type = $field['settings']['target_type'];
danielebarchiesi@4 35 if (isset($base_tables[$entity_type])) {
danielebarchiesi@4 36 list($base_table, $id_column) = $base_tables[$entity_type];
danielebarchiesi@4 37 $schema['foreign keys'][$base_table] = array(
danielebarchiesi@4 38 'table' => $base_table,
danielebarchiesi@4 39 'columns' => array('target_id' => $id_column),
danielebarchiesi@4 40 );
danielebarchiesi@4 41 }
danielebarchiesi@4 42
danielebarchiesi@4 43 // Invoke the behaviors to allow them to change the schema.
danielebarchiesi@4 44 foreach (entityreference_get_behavior_handlers($field) as $handler) {
danielebarchiesi@4 45 $handler->schema_alter($schema, $field);
danielebarchiesi@4 46 }
danielebarchiesi@4 47
danielebarchiesi@4 48 return $schema;
danielebarchiesi@4 49 }
danielebarchiesi@4 50 }
danielebarchiesi@4 51
danielebarchiesi@4 52 /**
danielebarchiesi@4 53 * Update the field configuration to the new plugin structure.
danielebarchiesi@4 54 */
danielebarchiesi@4 55 function entityreference_update_7000() {
danielebarchiesi@4 56 // Enable ctools.
danielebarchiesi@4 57 if (!module_enable(array('ctools'))) {
danielebarchiesi@4 58 throw new DrupalUpdateException('This version of Entity Reference requires ctools, but it could not be enabled.');
danielebarchiesi@4 59 }
danielebarchiesi@4 60
danielebarchiesi@4 61 // Get the list of fields of type 'entityreference'.
danielebarchiesi@4 62 $fields = array();
danielebarchiesi@4 63 foreach (field_info_fields() as $field_name => $field) {
danielebarchiesi@4 64 // Update the field configuration.
danielebarchiesi@4 65 if ($field['type'] == 'entityreference') {
danielebarchiesi@4 66 $settings = &$field['settings'];
danielebarchiesi@4 67 if (!isset($settings['handler'])) {
danielebarchiesi@4 68 $settings['handler'] = 'base';
danielebarchiesi@4 69 $settings['handler_settings']['target_bundles'] = $settings['target_bundles'];
danielebarchiesi@4 70 unset($settings['target_bundles']);
danielebarchiesi@4 71 field_update_field($field);
danielebarchiesi@4 72 }
danielebarchiesi@4 73 }
danielebarchiesi@4 74
danielebarchiesi@4 75 // Update the instance configurations.
danielebarchiesi@4 76 foreach ($field['bundles'] as $entity_type => $bundles) {
danielebarchiesi@4 77 foreach ($bundles as $bundle) {
danielebarchiesi@4 78 $instance = field_info_instance($entity_type, $field_name, $bundle);
danielebarchiesi@4 79 $save = FALSE;
danielebarchiesi@4 80 if ($instance['widget']['type'] == 'entityreference_autocomplete') {
danielebarchiesi@4 81 $instance['widget']['type'] = 'entityreference_autocomplete_tags';
danielebarchiesi@4 82 $save = TRUE;
danielebarchiesi@4 83 }
danielebarchiesi@4 84 // When the autocomplete path is the default value, remove it from
danielebarchiesi@4 85 // the configuration.
danielebarchiesi@4 86 if (isset($instance['widget']['settings']['path']) && $instance['widget']['settings']['path'] == 'entityreference/autocomplete') {
danielebarchiesi@4 87 unset($instance['widget']['settings']['path']);
danielebarchiesi@4 88 $save = TRUE;
danielebarchiesi@4 89 }
danielebarchiesi@4 90 if ($save) {
danielebarchiesi@4 91 field_update_instance($instance);
danielebarchiesi@4 92 }
danielebarchiesi@4 93 }
danielebarchiesi@4 94 }
danielebarchiesi@4 95 }
danielebarchiesi@4 96 }
danielebarchiesi@4 97
danielebarchiesi@4 98 /**
danielebarchiesi@4 99 * Drop "target_type" from the field schema.
danielebarchiesi@4 100 */
danielebarchiesi@4 101 function entityreference_update_7001() {
danielebarchiesi@4 102 if (!module_exists('field_sql_storage')) {
danielebarchiesi@4 103 return;
danielebarchiesi@4 104 }
danielebarchiesi@4 105 foreach (field_info_fields() as $field_name => $field) {
danielebarchiesi@4 106 if ($field['type'] != 'entityreference') {
danielebarchiesi@4 107 // Not an entity reference field.
danielebarchiesi@4 108 continue;
danielebarchiesi@4 109 }
danielebarchiesi@4 110
danielebarchiesi@4 111 // Update the field settings.
danielebarchiesi@4 112 $field = field_info_field($field_name);
danielebarchiesi@4 113 unset($field['indexes']['target_entity']);
danielebarchiesi@4 114 $field['indexes']['target_id'] = array('target_id');
danielebarchiesi@4 115 field_update_field($field);
danielebarchiesi@4 116
danielebarchiesi@4 117 if ($field['storage']['type'] !== 'field_sql_storage') {
danielebarchiesi@4 118 // Field doesn't use SQL storage, we cannot modify the schema.
danielebarchiesi@4 119 continue;
danielebarchiesi@4 120 }
danielebarchiesi@4 121 $table_name = _field_sql_storage_tablename($field);
danielebarchiesi@4 122 $revision_name = _field_sql_storage_revision_tablename($field);
danielebarchiesi@4 123
danielebarchiesi@4 124 db_drop_index($table_name, $field_name . '_target_entity');
danielebarchiesi@4 125 db_drop_index($table_name, $field_name . '_target_id');
danielebarchiesi@4 126 db_drop_field($table_name, $field_name . '_target_type');
danielebarchiesi@4 127 db_add_index($table_name, $field_name . '_target_id', array($field_name . '_target_id'));
danielebarchiesi@4 128
danielebarchiesi@4 129 db_drop_index($revision_name, $field_name . '_target_entity');
danielebarchiesi@4 130 db_drop_index($revision_name, $field_name . '_target_id');
danielebarchiesi@4 131 db_drop_field($revision_name, $field_name . '_target_type');
danielebarchiesi@4 132 db_add_index($revision_name, $field_name . '_target_id', array($field_name . '_target_id'));
danielebarchiesi@4 133 }
danielebarchiesi@4 134 }
danielebarchiesi@4 135
danielebarchiesi@4 136 /**
danielebarchiesi@4 137 * Make the target_id column NOT NULL.
danielebarchiesi@4 138 */
danielebarchiesi@4 139 function entityreference_update_7002() {
danielebarchiesi@4 140 if (!module_exists('field_sql_storage')) {
danielebarchiesi@4 141 return;
danielebarchiesi@4 142 }
danielebarchiesi@4 143 foreach (field_info_fields() as $field_name => $field) {
danielebarchiesi@4 144 if ($field['type'] != 'entityreference') {
danielebarchiesi@4 145 // Not an entity reference field.
danielebarchiesi@4 146 continue;
danielebarchiesi@4 147 }
danielebarchiesi@4 148
danielebarchiesi@4 149 if ($field['storage']['type'] !== 'field_sql_storage') {
danielebarchiesi@4 150 // Field doesn't use SQL storage, we cannot modify the schema.
danielebarchiesi@4 151 continue;
danielebarchiesi@4 152 }
danielebarchiesi@4 153
danielebarchiesi@4 154 $table_name = _field_sql_storage_tablename($field);
danielebarchiesi@4 155 $revision_name = _field_sql_storage_revision_tablename($field);
danielebarchiesi@4 156
danielebarchiesi@4 157 db_change_field($table_name, $field_name . '_target_id', $field_name . '_target_id', array(
danielebarchiesi@4 158 'description' => 'The id of the target entity.',
danielebarchiesi@4 159 'type' => 'int',
danielebarchiesi@4 160 'unsigned' => TRUE,
danielebarchiesi@4 161 'not null' => TRUE,
danielebarchiesi@4 162 ));
danielebarchiesi@4 163 }
danielebarchiesi@4 164 }