Loading media_entity.install +39 −5 Original line number Diff line number Diff line Loading @@ -177,6 +177,23 @@ function _media_entity_get_bundles_using_exif() { return $bundles; } /** * Gets all media base field overrides. * * @return array[] * The key is the field name where the override belongs to and the value is * an array of all bundles the field is used in. */ function _media_entity_get_base_field_overrides() { $fields = []; $prefix = 'core.base_field_override.media.'; foreach (\Drupal::configFactory()->listAll($prefix) as $override) { list($bundle, $field) = explode('.', mb_substr($override, mb_strlen($prefix))); $fields[$field][] = $bundle; } return $fields; } /** * Implements hook_requirements(). */ Loading Loading @@ -384,14 +401,31 @@ function media_entity_update_8201() { } unset($snapshots); // Fix the schema. // Renames the revision fields in the media_revision table and ensures that // overrides of these fields are also changed properly. /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definitions */ $field_definitions = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions('media'); $db = Database::getConnection()->schema(); $db->changeField('media_revision', 'revision_uid', 'revision_user', $field_definitions['revision_user']->getColumns()[$field_definitions['revision_user']->getMainPropertyName()]); $db->changeField('media_revision', 'revision_timestamp', 'revision_created', $field_definitions['revision_created']->getColumns()[$field_definitions['revision_created']->getMainPropertyName()]); $db->changeField('media_revision', 'revision_log', 'revision_log_message', $field_definitions['revision_log_message']->getColumns()[$field_definitions['revision_log_message']->getMainPropertyName()]); $field_renames = [ 'revision_uid' => 'revision_user', 'revision_timestamp' => 'revision_created', 'revision_log' => 'revision_log_message', ]; $field_overrides = _media_entity_get_base_field_overrides(); foreach ($field_renames as $old_field => $new_field) { $field_columns = $field_definitions[$new_field]->getColumns(); $field_property_name = $field_definitions[$new_field]->getMainPropertyName(); $db->changeField('media_revision', $old_field, $new_field, $field_columns[$field_property_name]); if (!empty($field_overrides[$old_field])) { foreach ($field_overrides[$old_field] as $bundle) { $config_factory->getEditable("core.base_field_override.media.$bundle.$old_field") ->set('id', "media.$bundle.$new_field") ->set('field_name', $new_field) ->save(TRUE); $config_factory->rename("core.base_field_override.media.$bundle.$old_field", "core.base_field_override.media.$bundle.$new_field"); } } } // Delete file/image media types automatically created by core media and // associated fields. foreach ($prefixes as $prefix) { Loading tests/fixtures/core.base_field_override.testfor2933338.yml 0 → 100644 +18 −0 Original line number Diff line number Diff line uuid: a217bb4a-0bfe-4616-87af-e1ea1f18dbf9 langcode: en status: true dependencies: config: - media_entity.bundle.image id: media.image.revision_log field_name: revision_log entity_type: media bundle: image label: 'Revision Log' description: 'The log entry explaining the changes in this revision.' required: false translatable: true default_value: { } default_value_callback: '' settings: { } field_type: string_long tests/src/Functional/CoreMediaUpdatePathTest.php +29 −0 Original line number Diff line number Diff line Loading @@ -171,6 +171,35 @@ class CoreMediaUpdatePathTest extends UpdatePathTestBase { $this->assertArraySubset($this->config('core.entity_view_mode.media.full')->get('dependencies'), ['module' => ['media']]); } /** * Test that field overrides are also renamed. */ public function testFieldOverrides() { $field_overrides = Yaml::decode(file_get_contents(__DIR__ . '/../../fixtures/core.base_field_override.testfor2933338.yml')); $connection = Database::getConnection(); $connection->insert('config') ->fields([ 'collection', 'name', 'data', ]) ->values([ 'collection' => '', 'name' => 'core.base_field_override.media.image.revision_log', 'data' => serialize($field_overrides), ]) ->execute(); $this->runUpdates(); $this->assertTrue($this->config('core.base_field_override.media.image.revision_log')->isNew()); $new_field_config = $this->config('core.base_field_override.media.image.revision_log_message'); $this->assertFalse($new_field_config->isNew()); $this->assertArraySubset($new_field_config->get('dependencies'), ['config' => ['media.type.image']]); $this->assertSame('media.image.revision_log_message', $new_field_config->get('id')); $this->assertSame('revision_log_message', $new_field_config->get('field_name')); } /** * Clicks a link on the front page and checks for some selectors. * Loading Loading
media_entity.install +39 −5 Original line number Diff line number Diff line Loading @@ -177,6 +177,23 @@ function _media_entity_get_bundles_using_exif() { return $bundles; } /** * Gets all media base field overrides. * * @return array[] * The key is the field name where the override belongs to and the value is * an array of all bundles the field is used in. */ function _media_entity_get_base_field_overrides() { $fields = []; $prefix = 'core.base_field_override.media.'; foreach (\Drupal::configFactory()->listAll($prefix) as $override) { list($bundle, $field) = explode('.', mb_substr($override, mb_strlen($prefix))); $fields[$field][] = $bundle; } return $fields; } /** * Implements hook_requirements(). */ Loading Loading @@ -384,14 +401,31 @@ function media_entity_update_8201() { } unset($snapshots); // Fix the schema. // Renames the revision fields in the media_revision table and ensures that // overrides of these fields are also changed properly. /** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_definitions */ $field_definitions = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions('media'); $db = Database::getConnection()->schema(); $db->changeField('media_revision', 'revision_uid', 'revision_user', $field_definitions['revision_user']->getColumns()[$field_definitions['revision_user']->getMainPropertyName()]); $db->changeField('media_revision', 'revision_timestamp', 'revision_created', $field_definitions['revision_created']->getColumns()[$field_definitions['revision_created']->getMainPropertyName()]); $db->changeField('media_revision', 'revision_log', 'revision_log_message', $field_definitions['revision_log_message']->getColumns()[$field_definitions['revision_log_message']->getMainPropertyName()]); $field_renames = [ 'revision_uid' => 'revision_user', 'revision_timestamp' => 'revision_created', 'revision_log' => 'revision_log_message', ]; $field_overrides = _media_entity_get_base_field_overrides(); foreach ($field_renames as $old_field => $new_field) { $field_columns = $field_definitions[$new_field]->getColumns(); $field_property_name = $field_definitions[$new_field]->getMainPropertyName(); $db->changeField('media_revision', $old_field, $new_field, $field_columns[$field_property_name]); if (!empty($field_overrides[$old_field])) { foreach ($field_overrides[$old_field] as $bundle) { $config_factory->getEditable("core.base_field_override.media.$bundle.$old_field") ->set('id', "media.$bundle.$new_field") ->set('field_name', $new_field) ->save(TRUE); $config_factory->rename("core.base_field_override.media.$bundle.$old_field", "core.base_field_override.media.$bundle.$new_field"); } } } // Delete file/image media types automatically created by core media and // associated fields. foreach ($prefixes as $prefix) { Loading
tests/fixtures/core.base_field_override.testfor2933338.yml 0 → 100644 +18 −0 Original line number Diff line number Diff line uuid: a217bb4a-0bfe-4616-87af-e1ea1f18dbf9 langcode: en status: true dependencies: config: - media_entity.bundle.image id: media.image.revision_log field_name: revision_log entity_type: media bundle: image label: 'Revision Log' description: 'The log entry explaining the changes in this revision.' required: false translatable: true default_value: { } default_value_callback: '' settings: { } field_type: string_long
tests/src/Functional/CoreMediaUpdatePathTest.php +29 −0 Original line number Diff line number Diff line Loading @@ -171,6 +171,35 @@ class CoreMediaUpdatePathTest extends UpdatePathTestBase { $this->assertArraySubset($this->config('core.entity_view_mode.media.full')->get('dependencies'), ['module' => ['media']]); } /** * Test that field overrides are also renamed. */ public function testFieldOverrides() { $field_overrides = Yaml::decode(file_get_contents(__DIR__ . '/../../fixtures/core.base_field_override.testfor2933338.yml')); $connection = Database::getConnection(); $connection->insert('config') ->fields([ 'collection', 'name', 'data', ]) ->values([ 'collection' => '', 'name' => 'core.base_field_override.media.image.revision_log', 'data' => serialize($field_overrides), ]) ->execute(); $this->runUpdates(); $this->assertTrue($this->config('core.base_field_override.media.image.revision_log')->isNew()); $new_field_config = $this->config('core.base_field_override.media.image.revision_log_message'); $this->assertFalse($new_field_config->isNew()); $this->assertArraySubset($new_field_config->get('dependencies'), ['config' => ['media.type.image']]); $this->assertSame('media.image.revision_log_message', $new_field_config->get('id')); $this->assertSame('revision_log_message', $new_field_config->get('field_name')); } /** * Clicks a link on the front page and checks for some selectors. * Loading