diff -u b/core/modules/field/field.attach.inc b/core/modules/field/field.attach.inc --- b/core/modules/field/field.attach.inc +++ b/core/modules/field/field.attach.inc @@ -1588,6 +1588,7 @@ $instances = field_read_instances(); foreach ($instances as $id => $instance) { if ($instance['entity_type'] == $entity_type && $instance['bundle'] == $bundle_old) { + // @fieldcmi config('field.instance.' . $instance['entity_type'] . '.' . $bundle_old . '.' . $instance['field_name'])->rename('field.instance.' . $instance['entity_type'] . '.' . $bundle_new . '.' . $instance['field_name']); config('field.instance.' . $instance['entity_type'] . '.' . $bundle_new . '.' . $instance['field_name'])->set('bundle', $bundle_new)->save(); } @@ -1598,8 +1599,9 @@ entity_info_cache_clear(); // Rename bundle settings. - if (config('field.settings.' . $entity_type . '.' . $bundle_old)->get()) { - config('field.settings.' . $entity_type . '.' . $bundle_old)->rename('field.settings.' . $entity_type . '.' . $bundle_new); + // @fieldcmi entity_load('bundle', '$entity_type . '.' . $bundle_old');? + if (config('field.bundle.' . $entity_type . '.' . $bundle_old)->get()) { + config('field.bundle.' . $entity_type . '.' . $bundle_old)->rename('field.settings.' . $entity_type . '.' . $bundle_new); } // Let other modules act on renaming the bundle. @@ -1638,7 +1640,9 @@ field_cache_clear(); // Clear bundle display settings. - config('field.settings.' . $entity_type . '.' . $bundle)->delete(); + // @fieldcmi + entity_load('bundle', $entity_type . '.' . $bundle)->delete(); + //config('field.settings.' . $entity_type . '.' . $bundle)->delete(); // Let other modules act on deleting the bundle. module_invoke_all('field_attach_delete_bundle', $entity_type, $bundle, $instances); diff -u b/core/modules/field/field.crud.inc b/core/modules/field/field.crud.inc --- b/core/modules/field/field.crud.inc +++ b/core/modules/field/field.crud.inc @@ -163,7 +163,16 @@ $field['id'] = field_generate_id(); // Save the configuration. - config('field.field.' . $field['field_name'])->setData($field)->save(); + // @fieldcmi + + $e_field = entity_create('fieldentity', array( + 'id' => $field['field_name'], + 'label' => $field['field_name'], + 'data' => $field, + )); +// $e_field->data = $field; + $e_field->save(); + //config('field.field.' . $field['field_name'])->setData($field)->save(); // Invoke hook_field_storage_create_field after the field is // complete (e.g. it has its id). @@ -174,7 +183,9 @@ catch (Exception $e) { // If storage creation failed, remove the field_config record before // rethrowing the exception. - config('field.field.' . $field['field_name'])->delete(); + // @fieldcmi + entity_delete_multiple('fieldentity', array($field['field_name'])); + //config('field.field.' . $field['field_name'])->delete(); throw $e; } @@ -263,7 +274,11 @@ unset($field['bundles']); // Store the field. - config('field.field.' . $field['field_name'])->setData($field)->save(); + // @fieldcmi + $e_field = entity_load('fieldentity', $field['field_name']); + $e_field->data = $field; + $e_field->save(); + //config('field.field.' . $field['field_name'])->setData($field)->save(); // Clear caches field_cache_clear(); @@ -331,15 +346,18 @@ } // Get configuration fields. - $config_fields = config_get_storage_names_with_prefix('field.field'); + // @fieldcmi + // $config_fields = config_get_storage_names_with_prefix('field.field'); + $config_fields = entity_load_multiple('fieldentity'); // Merge deleted fields. if (!empty($deleted_fields)) { $config_fields += $deleted_fields; } foreach ($config_fields as $config) { - if (!is_array($config)) { - $field = config($config)->get(); + // @fieldcmi + if (is_object($config)) { + $field = $config->data; } else { $field = $config; @@ -399,7 +417,9 @@ $field['deleted'] = TRUE; $deleted_fields[$field['id']] = $field; state()->set('field.field.deleted', $deleted_fields); - config('field.field.' . $field['field_name'])->delete(); + // @fieldcmi + entity_delete_multiple('fieldentity', array($field['field_name'])); + //config('field.field.' . $field['field_name'])->delete(); // Clear the cache. field_cache_clear(); @@ -484,7 +504,7 @@ throw new FieldException($message); } - _field_write_instance($instance); + _field_write_instance($instance, TRUE); // Clear caches field_cache_clear(); @@ -543,7 +563,7 @@ * @param $instance * An instance structure. */ -function _field_write_instance(&$instance) { +function _field_write_instance(&$instance, $create = TRUE) { $field = field_read_field($instance['field_name']); $field_type = field_info_field_types($field['type']); @@ -609,7 +629,20 @@ } // Save into config. - config('field.instance.' . $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'])->setData($instance)->save(); + //config('field.instance.' . $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'])->setData($instance)->save(); + // @fieldcmi + if ($create) { + $e_instance = entity_create('instance', array( + 'id' => $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'], + 'label' => $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'], + 'data' => $instance, + )); + } + else { + $e_instance = entity_load('instance', $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name']); + $e_instance->data = $instance; + } + $e_instance->save(); } /** @@ -667,15 +700,17 @@ } // Get configuration instances. - $config_instances = config_get_storage_names_with_prefix('field.instance'); + // @fieldcmi + //$config_instances = config_get_storage_names_with_prefix('field.instance'); + $config_instances = entity_load_multiple('instance'); // Merge deleted instances. if (!empty($deleted_instances)) { $config_instances += $deleted_instances; } foreach ($config_instances as $config) { - if (!is_array($config)) { - $instance = config($config)->get(); + if (is_object($config)) { + $instance = $config->data; } else { $instance = $config; @@ -685,7 +720,11 @@ // Get data from the field. If the field is marked as deleted, we // need to get it from the state storage. - $field = config('field.field.' . $instance['field_name'])->get(); + //$field = config('field.field.' . $instance['field_name'])->get(); + $field = entity_load('fieldentity', $instance['field_name']); + if (is_object($field)) { + $field = $field->data; + } if ($include_deleted) { if (empty($field) && isset($deleted_fields[$instance['field_id']])) { $field = $deleted_fields[$instance['field_id']]; @@ -745,7 +784,9 @@ $instance['deleted'] = TRUE; $deleted_instances[$instance['id']] = $instance; state()->set('field.instance.deleted', $deleted_instances); - config('field.instance.' . $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'])->delete(); + // @fieldcmi + entity_load('instance', $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'])->delete(); + //config('field.instance.' . $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'])->delete(); // Clear the cache. field_cache_clear(); @@ -944,8 +985,6 @@ * The instance record to purge. */ function field_purge_instance($instance) { - config('field.instance.' . $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'])->delete(); - // Notify the storage engine. $field = field_info_field_by_id($instance['field_id']); module_invoke($field['storage']['module'], 'field_storage_purge_instance', $instance); diff -u b/core/modules/field/field.install b/core/modules/field/field.install --- b/core/modules/field/field.install +++ b/core/modules/field/field.install @@ -308,7 +308,13 @@ $field['storage_active'] = $field['storage']['active']; if (!$field['deleted']) { - config('field.field.' . $field['field_name'])->setData($field)->save(); + // @fieldcmi + $e_field = entity_create('fieldentity', array( + 'id' => $field['field_name'], + 'label' => $field['field_name'], + 'data' => $field, + )); + $e_field->save(); } else { $deleted_fields[$field['field_name']] = $field; @@ -331,7 +337,11 @@ $instance['id'] = field_generate_id(); if (!$instance['deleted']) { - config('field.instance.' . $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'])->setData($instance)->save(); + entity_create('instance', array( + 'id' => $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'], + 'label' => $instance['entity_type'] . '.' . $instance['bundle'] . '.' . $instance['field_name'], + 'data' => $instance, + ))->save(); } else { $deleted_instances[$instance['id']] = $instance; @@ -349,7 +359,11 @@ list($entity_type, $bundle) = explode('__', $identifier); // Save the configuration. - config('field.settings.' . $entity_type. '.' . $bundle)->setData(unserialize($record->value))->save(); + entity_create('bundle', array( + 'id' => $entity_type. '.' . $bundle, + 'label' => $entity_type. '.' . $bundle, + 'data' => unserialize($record->value), + ))->save(); // Remove the variable. update_variable_del($record->name); diff -u b/core/modules/field/field.module b/core/modules/field/field.module --- b/core/modules/field/field.module +++ b/core/modules/field/field.module @@ -331,6 +331,7 @@ /** * Implements hook_config_import_create(). */ +// @fieldcmi function field_config_import_create($name, $new_config, $old_config) { list($module, $type) = explode('.', $name); @@ -338,7 +339,7 @@ return; } - $config = $new_config->get(); + $config = $new_config->get('data'); switch ($type) { case 'field': @@ -353,6 +354,7 @@ /** * Implements hook_config_import_change(). */ +// @fieldcmi function field_config_import_change($name, $new_config, $old_config) { list($module, $type) = explode('.', $name); @@ -360,7 +362,7 @@ return; } - $config = $new_config->get(); + $config = $new_config->get('data'); switch ($type) { case 'field': @@ -375,6 +377,7 @@ /** * Implements hook_config_import_delete(). */ +// @fieldcmi function field_config_import_delete($name, $new_config, $old_config) { list($module, $type) = explode('.', $name); @@ -384,11 +387,11 @@ switch ($type) { case 'field': - $config = $old_config->get(); + $config = $old_config->get('data'); field_delete_field($config['field_name']); break; case 'instance': - $config = $old_config->get(); + $config = $old_config->get('data'); // In case the field has been deleted through this import hook, // the instance will be deleted by that already. if (!empty($config)) { @@ -596,7 +599,11 @@ if (!$field['deleted']) { // We can not use field_update_field because the prior_field does not // check whether a field is really there or not. - config('field.field.' . $field['field_name'])->setData($field)->save(); + // @fieldcmi + $e_field = entity_load('fieldentity', $field['field_name']); + $e_field->data = $field; + $e_field->save(); + // config('field.field.' . $field['field_name'])->setData($field)->save(); } else { $deleted_fields[$field['id']] = $field; @@ -807,11 +814,35 @@ $identifier = $entity_type . '.' . $bundle; if (isset($settings)) { - config('field.settings.' . $identifier)->setData($settings)->save(); + // @fieldcmi + $e_bundle = entity_load('bundle', $identifier); + if ($e_bundle) { + $e_bundle->data = $settings; + } + else { + $e_bundle = entity_create('bundle', array( + 'id' => $identifier, + 'label' => $identifier, + 'data' => $settings, + )); + } + $e_bundle->save(); + // config('field.settings.' . $identifier)->setData($settings)->save(); field_info_cache_clear(); } else { - $settings = config('field.settings.' . $identifier)->get(); + $e_bundle = entity_load('bundle', $identifier); + if ($e_bundle) { + $e_bundle->data = $settings; + } + else { + $e_bundle = entity_create('bundle', array( + 'id' => $identifier, + 'label' => $identifier, + 'data' => $settings, + )); + } + $e_bundle->save(); if (empty($settings)) { $settings = array(); } diff -u b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php --- b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/CrudTest.php @@ -46,7 +46,10 @@ $this->assertIdentical($mem['field_test_field_create_field'][0][0], $field_definition, 'hook_field_create_field() called with correct arguments.'); // Read the configuration. - $record = config('field.field.' . $field_definition['field_name'])->get(); + // @fieldcmi + $e_record = entity_load('fieldentity', $field_definition['field_name']); + $record = $e_record->data; + //$record = config('field.field.' . $field_definition['field_name'])->get(); // Ensure that basic properties are preserved. $this->assertEqual($record['field_name'], $field_definition['field_name'], 'The field name is properly saved.'); @@ -155,7 +158,9 @@ function testCreateFieldFail() { $field_name = 'duplicate'; $field_definition = array('field_name' => $field_name, 'type' => 'test_field', 'storage' => array('type' => 'field_test_storage_failure')); - $field = config('field.field.' . $field_name)->get(); + //$field = config('field.field.' . $field_name)->get(); + // @fieldcmi + $field = entity_load('fieldentity', $field_name); // The field does not exist. $this->assertFalse($field, 'The field does not exist.'); @@ -170,7 +175,8 @@ } // The field does not exist. - $field = config('field.field.' . $field_name)->get(); + // $field = config('field.field.' . $field_name)->get(); + $field = entity_load('fieldentity', $field_name); $this->assertFalse($field, 'The field does not exist.'); } diff -u b/core/modules/field/lib/Drupal/field/Tests/FieldImportChangeTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldImportChangeTest.php --- b/core/modules/field/lib/Drupal/field/Tests/FieldImportChangeTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FieldImportChangeTest.php @@ -55,7 +55,7 @@ // Change label. $staging = $this->container->get('config.storage.staging'); $instance = $staging->read($this->instance_name); - $instance['label'] = 'Test update import field'; + $instance['data']['label'] = 'Test update import field'; $staging->write($this->instance_name, $instance); // Import again. diff -u b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php --- b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FieldInfoTest.php @@ -133,7 +133,10 @@ // Simulate a stored field definition missing a field setting (e.g. a // third-party module adding a new field setting has been enabled, and // existing fields do not know the setting yet). - $field = config('field.field.' . $field_definition['field_name'])->get(); + // @fieldcmi + //$field = config('field.field.' . $field_definition['field_name'])->get(); + $e_field = entity_load('fieldentity', $field_definition['field_name']); + $field = $e_field->data; $field['data']['settings'] = array(); field_update_field($field); @@ -166,8 +169,9 @@ // Simulate a stored instance definition missing various settings (e.g. a // third-party module adding instance, widget or display settings has been // enabled, but existing instances do not know the new settings). - $instance = config('field.instance.' . $instance_definition['entity_type'] . '.' . $instance_definition['bundle'] . '.' . $instance_definition['field_name'])->get(); - + //$instance = config('field.instance.' . $instance_definition['entity_type'] . '.' . $instance_definition['bundle'] . '.' . $instance_definition['field_name'])->get(); + $e_instance = entity_load('instance', $instance_definition['entity_type'] . '.' . $instance_definition['bundle'] . '.' . $instance_definition['field_name']); + $instance = $e_instance->data; $instance['settings'] = array(); $instance['widget']['settings'] = 'unavailable_widget'; $instance['widget']['settings'] = array(); diff -u b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php --- b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FieldInstanceCrudTest.php @@ -57,8 +57,9 @@ field_create_instance($this->instance_definition); // Read the configuration. - $record = config('field.instance.' . $this->instance_definition['entity_type'] . '.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name'])->get(); - + //$record = config('field.instance.' . $this->instance_definition['entity_type'] . '.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name'])->get(); + $e_record = entity_load('instance', $this->instance_definition['entity_type'] . '.' . $this->instance_definition['bundle'] . '.' . $this->instance_definition['field_name']); + $record = $e_record->data; $field_type = field_info_field_types($this->field['type']); $widget_type = field_info_widget_types($field_type['default_widget']); $formatter_type = field_info_formatter_types($field_type['default_formatter']); diff -u b/core/modules/field/modules/field_sql_storage/field_sql_storage.install b/core/modules/field/modules/field_sql_storage/field_sql_storage.install --- b/core/modules/field/modules/field_sql_storage/field_sql_storage.install +++ b/core/modules/field/modules/field_sql_storage/field_sql_storage.install @@ -12,7 +12,8 @@ $schema = array(); // Dynamic (data) tables. - module_load_include('module', 'field'); + //module_load_include('module', 'field'); + //drupal_classloader_register('field', dirname(drupal_get_filename('module', 'field'))); $fields = field_read_fields(array(), array('include_deleted' => TRUE, 'include_inactive' => TRUE)); drupal_load('module', 'field_sql_storage'); foreach ($fields as $field) { diff -u b/core/modules/field/tests/modules/field_test_config/config/field.field.field_test_import.yml b/core/modules/field/tests/modules/field_test_config/config/field.field.field_test_import.yml --- b/core/modules/field/tests/modules/field_test_config/config/field.field.field_test_import.yml +++ b/core/modules/field/tests/modules/field_test_config/config/field.field.field_test_import.yml @@ -1,47 +1,53 @@ -field_name: field_test_import -type: text -translatable: false -entity_types: { } -cardinality: '1' -locked: false -settings: - max_length: '255' -storage: - type: field_sql_storage - settings: { } - module: field_sql_storage +id: field_test_import +uuid: fb38277f-1fd4-49d5-8d09-9d7037fdcce9 +name: '' +label: field_test_import +data: + field_name: field_test_import + type: text + translatable: false + entity_types: { } + cardinality: '1' + locked: false + settings: + max_length: '255' + storage: + type: field_sql_storage + settings: { } + module: field_sql_storage + active: 1 + details: + sql: + FIELD_LOAD_CURRENT: + field_data_field_test_import: + value: field_test_import_value + format: field_test_import_format + FIELD_LOAD_REVISION: + field_revision_field_test_import: + value: field_test_import_value + format: field_test_import_format + deleted: 0 + module: text active: 1 - details: - sql: - FIELD_LOAD_CURRENT: - field_data_field_test_import: - value: field_test_import_value - format: field_test_import_format - FIELD_LOAD_REVISION: - field_revision_field_test_import: - value: field_test_import_value - format: field_test_import_format -deleted: 0 -module: text -active: 1 -columns: - value: - type: varchar - length: '255' - 'not null': false - format: - type: varchar - length: 255 - 'not null': false -'foreign keys': - format: - table: filter_format - columns: - format: format -indexes: - format: - - format -storage_type: field_sql_storage -storage_module: field_sql_storage -storage_active: 1 -id: b5a22b + columns: + value: + type: varchar + length: '255' + 'not null': false + format: + type: varchar + length: 255 + 'not null': false + 'foreign keys': + format: + table: filter_format + columns: + format: format + indexes: + format: + - format + storage_type: field_sql_storage + storage_module: field_sql_storage + storage_active: 1 + id: b5a22b +langcode: und diff -u b/core/modules/field/tests/modules/field_test_config/config/field.instance.node.test_import.field_test_import.yml b/core/modules/field/tests/modules/field_test_config/config/field.instance.node.test_import.field_test_import.yml --- b/core/modules/field/tests/modules/field_test_config/config/field.instance.node.test_import.field_test_import.yml +++ b/core/modules/field/tests/modules/field_test_config/config/field.instance.node.test_import.field_test_import.yml @@ -1,34 +1,40 @@ -field_name: field_test_import -entity_type: node -bundle: test_import -label: 'Test import field' -widget: - weight: '-2' - type: text_textfield - module: text - active: 0 - settings: - size: '60' -field_id: b5a22b -id: 948dff -settings: - text_processing: '0' - user_register_form: false -display: - default: - label: above - type: text_default - settings: { } +id: node.test_import.field_test_import +uuid: 392b4e9d-6157-412e-9603-3d622512f498 +name: '' +label: node.test_import.field_test_import +data: + field_name: field_test_import + entity_type: node + bundle: test_import + label: 'Test import field' + widget: + weight: '-2' + type: text_textfield module: text - weight: 2 -required: 0 -description: '' -deleted: 0 -active: 1 -locked: false -type: text -module: text -storage_type: field_sql_storage -storage_active: 1 -storage_module: field_sql_storage -default_value: null + active: 0 + settings: + size: '60' + field_id: b5a22b + id: 948dff + settings: + text_processing: '0' + user_register_form: false + display: + default: + label: above + type: text_default + settings: { } + module: text + weight: 2 + required: 0 + description: '' + deleted: 0 + active: 1 + locked: false + type: text + module: text + storage_type: field_sql_storage + storage_active: 1 + storage_module: field_sql_storage + default_value: null +langcode: und only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php +++ b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php @@ -322,11 +322,11 @@ protected function buildQuery($ids, $revision_id = FALSE) { } // Add fields from the {entity} table. - $entity_fields = $this->entityInfo['schema_fields_sql']['base_table']; + $entity_fields = drupal_schema_fields_sql($this->entityInfo['base_table']); if ($this->revisionKey) { // Add all fields from the {entity_revision} table. - $entity_revision_fields = drupal_map_assoc($this->entityInfo['schema_fields_sql']['revision_table']); + $entity_revision_fields = drupal_map_assoc(drupal_schema_fields_sql($this->entityInfo['revision_table'])); // The id field is provided by entity, so remove it. unset($entity_revision_fields[$this->idKey]); only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php +++ b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php @@ -234,7 +234,7 @@ protected function invokeHook($hook, EntityInterface $entity) { */ protected function mapToStorageRecord(EntityInterface $entity) { $record = new \stdClass(); - foreach ($this->entityInfo['schema_fields_sql']['base_table'] as $name) { + foreach (drupal_schema_fields_sql($this->entityInfo['base_table']) as $name) { $record->$name = $entity->$name->value; } return $record; only in patch2: unchanged: --- a/core/lib/Drupal/Core/Entity/EntityManager.php +++ b/core/lib/Drupal/Core/Entity/EntityManager.php @@ -268,12 +268,12 @@ protected function processDefinition(&$definition, $plugin_id) { } // Prepare entity schema fields SQL info for // Drupal\Core\Entity\DatabaseStorageControllerInterface::buildQuery(). - if (isset($definition['base_table'])) { - $definition['schema_fields_sql']['base_table'] = drupal_schema_fields_sql($definition['base_table']); - if (isset($definition['revision_table'])) { - $definition['schema_fields_sql']['revision_table'] = drupal_schema_fields_sql($definition['revision_table']); - } - } + //if (isset($definition['base_table'])) { + // $definition['schema_fields_sql']['base_table'] = drupal_schema_fields_sql($definition['base_table']); + // if (isset($definition['revision_table'])) { + // $definition['schema_fields_sql']['revision_table'] = drupal_schema_fields_sql($definition['revision_table']); + // } + //} } } only in patch2: unchanged: --- a/core/modules/field/field.info +++ b/core/modules/field/field.info @@ -3,6 +3,6 @@ description = Field API to add fields to entities like nodes and users. package = Core version = VERSION core = 8.x -dependencies[] = field_sql_storage +;dependencies[] = field_sql_storage required = TRUE stylesheets[all][] = theme/field.css only in patch2: unchanged: --- /dev/null +++ b/core/modules/field/lib/Drupal/field/Plugin/Core/Entity/Bundle.php @@ -0,0 +1,60 @@ +