Commit 2735f129 authored by alexpott's avatar alexpott
Browse files

Issue #2333501 by swentel | marcvangend: Implement ThirdPartySettingsInterface...

Issue #2333501 by swentel | marcvangend: Implement ThirdPartySettingsInterface in EntityView|FormDisplay.
parent 47480954
...@@ -77,6 +77,11 @@ core.entity_view_display.*.*.*: ...@@ -77,6 +77,11 @@ core.entity_view_display.*.*.*:
sequence: sequence:
- type: boolean - type: boolean
label: 'Value' label: 'Value'
third_party_settings:
type: sequence
label: 'Third party settings'
sequence:
- type: entity_view_display.third_party.[%key]
# Overview configuration information for form mode displays. # Overview configuration information for form mode displays.
core.entity_form_display.*.*.*: core.entity_form_display.*.*.*:
...@@ -109,9 +114,11 @@ core.entity_form_display.*.*.*: ...@@ -109,9 +114,11 @@ core.entity_form_display.*.*.*:
sequence: sequence:
- type: boolean - type: boolean
label: 'Component' label: 'Component'
dependencies: third_party_settings:
type: config_dependencies type: sequence
label: 'Dependencies' label: 'Third party settings'
sequence:
- type: entity_form_display.third_party.[%key]
# Default schema for entity display field with undefined type. # Default schema for entity display field with undefined type.
entity_view_display.field.*: entity_view_display.field.*:
......
...@@ -7,10 +7,12 @@ ...@@ -7,10 +7,12 @@
namespace Drupal\Core\Entity\Display; namespace Drupal\Core\Entity\Display;
use Drupal\Core\Config\Entity\ThirdPartySettingsInterface;
/** /**
* Provides a common interface for entity displays. * Provides a common interface for entity displays.
*/ */
interface EntityDisplayInterface { interface EntityDisplayInterface extends ThirdPartySettingsInterface {
/** /**
* Creates a duplicate of the entity display object on a different view mode. * Creates a duplicate of the entity display object on a different view mode.
......
...@@ -11,12 +11,15 @@ ...@@ -11,12 +11,15 @@
use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Entity\Display\EntityDisplayInterface; use Drupal\Core\Entity\Display\EntityDisplayInterface;
use Drupal\field\Entity\FieldInstanceConfig; use Drupal\field\Entity\FieldInstanceConfig;
use Drupal\Core\Config\Entity\ThirdPartySettingsTrait;
/** /**
* Provides a common base class for entity view and form displays. * Provides a common base class for entity view and form displays.
*/ */
abstract class EntityDisplayBase extends ConfigEntityBase implements EntityDisplayInterface { abstract class EntityDisplayBase extends ConfigEntityBase implements EntityDisplayInterface {
use ThirdPartySettingsTrait;
/** /**
* Unique ID for the config entity. * Unique ID for the config entity.
* *
......
...@@ -8,14 +8,14 @@ ...@@ -8,14 +8,14 @@
namespace Drupal\entity\Tests; namespace Drupal\entity\Tests;
use Drupal\Core\Entity\Entity\EntityViewMode; use Drupal\Core\Entity\Entity\EntityViewMode;
use Drupal\simpletest\DrupalUnitTestBase; use Drupal\simpletest\KernelTestBase;
/** /**
* Tests the entity display configuration entities. * Tests the entity display configuration entities.
* *
* @group entity * @group entity
*/ */
class EntityDisplayTest extends DrupalUnitTestBase { class EntityDisplayTest extends KernelTestBase {
public static $modules = array('entity', 'field', 'entity_test', 'user', 'text', 'field_test', 'node', 'system'); public static $modules = array('entity', 'field', 'entity_test', 'user', 'text', 'field_test', 'node', 'system');
...@@ -58,6 +58,11 @@ public function testEntityDisplayCRUD() { ...@@ -58,6 +58,11 @@ public function testEntityDisplayCRUD() {
$this->assertEqual($display->getComponent($name), $expected[$name]); $this->assertEqual($display->getComponent($name), $expected[$name]);
} }
// Ensure that third party settings were added to the config entity.
// These are added by entity_test_entity_presave() implemented in
// entity_test module.
$this->assertEqual('bar', $display->getThirdPartySetting('entity_test', 'foo'), 'Third party settings were added to the entity view display.');
// Check that getComponents() returns options for all components. // Check that getComponents() returns options for all components.
$expected['name'] = array( $expected['name'] = array(
'label' => 'hidden', 'label' => 'hidden',
...@@ -288,7 +293,7 @@ public function testRenameDeleteBundle() { ...@@ -288,7 +293,7 @@ public function testRenameDeleteBundle() {
$expected_view_dependencies = array( $expected_view_dependencies = array(
'entity' => array('field.instance.node.article_rename.body', 'node.type.article_rename'), 'entity' => array('field.instance.node.article_rename.body', 'node.type.article_rename'),
'module' => array('text', 'user') 'module' => array('entity_test', 'text', 'user')
); );
// Check that the display has dependencies on the bundle, fields and the // Check that the display has dependencies on the bundle, fields and the
// modules that provide the formatters. // modules that provide the formatters.
......
entity_view_display.third_party.entity_test:
type: mapping
label: 'Schema for entity_test module additions to entity_view_display entity'
mapping:
foo:
type: string
label: 'Label for foo'
...@@ -369,6 +369,10 @@ function entity_test_entity_presave(EntityInterface $entity) { ...@@ -369,6 +369,10 @@ function entity_test_entity_presave(EntityInterface $entity) {
if (isset($GLOBALS['entity_test_throw_exception'])) { if (isset($GLOBALS['entity_test_throw_exception'])) {
throw new Exception('Entity presave exception', 1); throw new Exception('Entity presave exception', 1);
} }
if ($entity->getEntityType()->id() == 'entity_view_display') {
$entity->setThirdPartySetting('entity_test', 'foo', 'bar');
}
} }
/** /**
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment