Issue #3069696 by Berdir, andypost, dhirendra.mishra, longwave, alexpott: Remove BC layers from the entity system

merge-requests/2419/head
Alex Pott 2020-02-26 08:25:29 +00:00
parent 926087384e
commit b57afe5c7f
No known key found for this signature in database
GPG Key ID: 31905460D4A69276
43 changed files with 26 additions and 1649 deletions

View File

@ -374,31 +374,6 @@ abstract class ConfigEntityBase extends EntityBase implements ConfigEntityInterf
return $this;
}
/**
* {@inheritdoc}
*/
public function urlInfo($rel = 'edit-form', array $options = []) {
// Unless language was already provided, avoid setting an explicit language.
$options += ['language' => NULL];
return parent::urlInfo($rel, $options);
}
/**
* {@inheritdoc}
*/
public function url($rel = 'edit-form', $options = []) {
// Do not remove this override: the default value of $rel is different.
return parent::url($rel, $options);
}
/**
* {@inheritdoc}
*/
public function link($text = NULL, $rel = 'edit-form', array $options = []) {
// Do not remove this override: the default value of $rel is different.
return parent::link($text, $rel, $options);
}
/**
* {@inheritdoc}
*/

View File

@ -1244,16 +1244,9 @@ abstract class ContentEntityBase extends EntityBase implements \IteratorAggregat
* {@inheritdoc}
*/
public function label() {
$label = NULL;
$entity_type = $this->getEntityType();
if (($label_callback = $entity_type->get('label_callback')) && is_callable($label_callback)) {
@trigger_error('Entity type ' . $this->getEntityTypeId() . ' defines a label callback. Support for that is deprecated in drupal:8.0.0 and will be removed in drupal:9.0.0. Override the EntityInterface::label() method instead. See https://www.drupal.org/node/3050794', E_USER_DEPRECATED);
$label = call_user_func($label_callback, $this);
if ($this->getEntityType()->getKey('label')) {
return $this->getEntityKey('label');
}
elseif (($label_key = $entity_type->getKey('label'))) {
$label = $this->getEntityKey('label');
}
return $label;
}
/**

View File

@ -86,7 +86,8 @@ class ContentEntityNullStorage extends ContentEntityStorageBase {
/**
* {@inheritdoc}
*/
protected function doLoadRevisionFieldItems($revision_id) {
protected function doLoadMultipleRevisionsFieldItems($revision_ids) {
return [];
}
/**

View File

@ -580,45 +580,13 @@ abstract class ContentEntityStorageBase extends EntityStorageBase implements Con
/**
* Actually loads revision field item values from the storage.
*
* @param int|string $revision_id
* The revision identifier.
*
* @return \Drupal\Core\Entity\EntityInterface|null
* The specified entity revision or NULL if not found.
*
* @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0.
* \Drupal\Core\Entity\ContentEntityStorageBase::doLoadMultipleRevisionsFieldItems()
* should be implemented instead.
*
* @see https://www.drupal.org/node/2924915
*/
abstract protected function doLoadRevisionFieldItems($revision_id);
/**
* Actually loads revision field item values from the storage.
*
* This method should always be overridden and not called either directly or
* from parent::doLoadMultipleRevisionsFieldItems. It will be marked abstract
* in drupal:9.0.0
*
* @param array $revision_ids
* An array of revision identifiers.
*
* @return \Drupal\Core\Entity\EntityInterface[]
* The specified entity revisions or an empty array if none are found.
*
* @todo Remove this logic and make the method abstract in
* https://www.drupal.org/project/drupal/issues/3069696
*/
protected function doLoadMultipleRevisionsFieldItems($revision_ids) {
@trigger_error('Calling ' . __NAMESPACE__ . 'ContentEntityStorageBase::doLoadMultipleRevisionsFieldItems() directly is deprecated in drupal:8.8.0 and the method will be made abstract in drupal:9.0.0. Storage implementations should override and implement their own loading logic. See https://www.drupal.org/node/3069692', E_USER_DEPRECATED);
$revisions = [];
foreach ($revision_ids as $revision_id) {
$revisions[] = $this->doLoadRevisionFieldItems($revision_id);
}
return $revisions;
}
abstract protected function doLoadMultipleRevisionsFieldItems($revision_ids);
/**
* {@inheritdoc}

View File

@ -1,15 +0,0 @@
<?php
namespace Drupal\Core\Entity;
@trigger_error('The ' . __NAMESPACE__ . '\Entity is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Instead, use ' . __NAMESPACE__ . '\EntityBase. See https://www.drupal.org/node/3021808', E_USER_DEPRECATED);
/**
* Defines a base entity class.
*
* @deprecated in drupal:8.7.0 and is removed from drupal:9.0.0. Use
* \Drupal\Core\Entity\EntityBase instead.
*
* @see https://www.drupal.org/node/3021808
*/
abstract class Entity extends EntityBase {}

View File

@ -148,24 +148,9 @@ abstract class EntityBase implements EntityInterface {
* {@inheritdoc}
*/
public function label() {
$label = NULL;
$entity_type = $this->getEntityType();
if (($label_callback = $entity_type->get('label_callback')) && is_callable($label_callback)) {
@trigger_error('Entity type ' . $this->getEntityTypeId() . ' defines a label callback. Support for that is deprecated in drupal:8.0.0 and will be removed in drupal:9.0.0. Override the EntityInterface::label() method instead. See https://www.drupal.org/node/3050794', E_USER_DEPRECATED);
$label = call_user_func($label_callback, $this);
if (($label_key = $this->getEntityType()->getKey('label')) && isset($this->{$label_key})) {
return $this->{$label_key};
}
elseif (($label_key = $entity_type->getKey('label')) && isset($this->{$label_key})) {
$label = $this->{$label_key};
}
return $label;
}
/**
* {@inheritdoc}
*/
public function urlInfo($rel = 'canonical', array $options = []) {
@trigger_error('EntityInterface::urlInfo() is deprecated in Drupal 8.0.0 and will be removed in Drupal 9.0.0. EntityInterface::toUrl() instead. See https://www.drupal.org/node/2614344', E_USER_DEPRECATED);
return $this->toUrl($rel, $options);
}
/**
@ -249,14 +234,6 @@ abstract class EntityBase implements EntityInterface {
return $this->getEntityType()->getLinkTemplates();
}
/**
* {@inheritdoc}
*/
public function link($text = NULL, $rel = 'canonical', array $options = []) {
@trigger_error("EntityInterface::link() is deprecated in Drupal 8.0.0 and will be removed in Drupal 9.0.0. Use EntityInterface::toLink()->toString() instead. Note, the default relationship for configuration entities changes from 'edit-form' to 'canonical'. See https://www.drupal.org/node/2614344", E_USER_DEPRECATED);
return $this->toLink($text, $rel, $options)->toString();
}
/**
* {@inheritdoc}
*/
@ -270,23 +247,6 @@ abstract class EntityBase implements EntityInterface {
return new Link($text, $url);
}
/**
* {@inheritdoc}
*/
public function url($rel = 'canonical', $options = []) {
@trigger_error('EntityInterface::url() is deprecated in Drupal 8.0.0 and will be removed in Drupal 9.0.0. EntityInterface::toUrl() instead. Note, a \Drupal\Core\Url object is returned. See https://www.drupal.org/node/2614344', E_USER_DEPRECATED);
// While self::toUrl() will throw an exception if the entity has no id,
// the expected result for a URL is always a string.
if ($this->id() === NULL || !$this->hasLinkTemplate($rel)) {
return '';
}
$uri = $this->toUrl($rel);
$options += $uri->getOptions();
$uri->setOptions($options);
return $uri->toString();
}
/**
* Gets an array of placeholders for this entity.
*

View File

@ -97,26 +97,6 @@ interface EntityDefinitionUpdateManagerInterface {
*/
public function getChangeList();
/**
* Applies all the detected valid changes.
*
* Use this with care, as it will apply updates for any module, which will
* lead to unpredictable results.
*
* @throws \Drupal\Core\Entity\EntityStorageException
* This exception is thrown if a change cannot be applied without
* unacceptable data loss. In such a case, the site administrator needs to
* apply some other process, such as a custom update function or a
* migration via the Migrate module.
*
* @deprecated in drupal:8.7.0 and is removed from drupal:9.0.0. Use
* \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface::getChangeList()
* and execute each entity type and field storage update manually instead.
*
* @see https://www.drupal.org/node/3034742
*/
public function applyUpdates();
/**
* Returns an entity type definition ready to be manipulated.
*

View File

@ -183,12 +183,6 @@ abstract class EntityDisplayBase extends ConfigEntityBase implements EntityDispl
if (!$definition->isDisplayConfigurable($this->displayContext) || (!isset($this->content[$name]) && !isset($this->hidden[$name]))) {
$options = $definition->getDisplayOptions($this->displayContext);
// @todo Remove handling of 'type' in https://www.drupal.org/node/2799641.
if (!isset($options['region']) && !empty($options['type']) && $options['type'] === 'hidden') {
$options['region'] = 'hidden';
@trigger_error("Support for using 'type' => 'hidden' in a component is deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. Use 'region' => 'hidden' instead. See https://www.drupal.org/node/2801513", E_USER_DEPRECATED);
}
if (!empty($options['region']) && $options['region'] === 'hidden') {
$this->removeComponent($name);
}
@ -253,13 +247,6 @@ abstract class EntityDisplayBase extends ConfigEntityBase implements EntityDispl
public function preSave(EntityStorageInterface $storage) {
// Ensure that a region is set on each component.
foreach ($this->getComponents() as $name => $component) {
// @todo Remove this BC layer in Drupal 9.
// @see https://www.drupal.org/project/drupal/issues/2799641
if (!isset($component['region']) && isset($component['type']) && $component['type'] === 'hidden') {
@trigger_error("Support for using 'type' => 'hidden' in a component is deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. Use 'region' => 'hidden' instead. See https://www.drupal.org/node/2801513", E_USER_DEPRECATED);
$this->removeComponent($name);
}
// Ensure that a region is set.
if (isset($this->content[$name]) && !isset($component['region'])) {
// Directly set the component to bypass other changes in setComponent().
@ -272,29 +259,6 @@ abstract class EntityDisplayBase extends ConfigEntityBase implements EntityDispl
parent::preSave($storage);
}
/**
* Handles a component type of 'hidden'.
*
* The logic of this method has been duplicated inline in the preSave()
* method so that this method may remain deprecated and trigger an error.
*
* @param string $name
* The name of the component.
* @param array $component
* The component array.
*
* @deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. No
* replacement is provided.
*
* @see https://www.drupal.org/node/2801513
*/
protected function handleHiddenType($name, array $component) {
@trigger_error(__METHOD__ . ' is deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. No replacement is provided. See https://www.drupal.org/node/2801513', E_USER_DEPRECATED);
if (!isset($component['region']) && isset($component['type']) && $component['type'] === 'hidden') {
$this->removeComponent($name);
}
}
/**
* {@inheritdoc}
*/

View File

@ -95,26 +95,6 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf
*/
public function label();
/**
* Gets the URL object for the entity.
*
* @param string $rel
* The link relationship type, for example: canonical or edit-form.
* @param array $options
* See \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() for
* the available options.
*
* @return \Drupal\Core\Url
* The URL object.
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0.
* Use \Drupal\Core\Entity\EntityInterface::toUrl() instead.
*
* @see https://www.drupal.org/node/2614344
* @see \Drupal\Core\Entity\EntityInterface::toUrl
*/
public function urlInfo($rel = 'canonical', array $options = []);
/**
* Gets the URL object for the entity.
*
@ -153,49 +133,6 @@ interface EntityInterface extends AccessibleInterface, CacheableDependencyInterf
*/
public function toUrl($rel = 'canonical', array $options = []);
/**
* Gets the public URL for this entity.
*
* @param string $rel
* The link relationship type, for example: canonical or edit-form.
* @param array $options
* See \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() for
* the available options.
*
* @return string
* The URL for this entity.
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0.
* Please use toUrl() instead.
*
* @see https://www.drupal.org/node/2614344
* @see \Drupal\Core\Entity\EntityInterface::toUrl
*/
public function url($rel = 'canonical', $options = []);
/**
* Deprecated way of generating a link to the entity. See toLink().
*
* @param string|null $text
* (optional) The link text for the anchor tag as a translated string.
* If NULL, it will use the entity's label. Defaults to NULL.
* @param string $rel
* (optional) The link relationship type. Defaults to 'canonical'.
* @param array $options
* See \Drupal\Core\Routing\UrlGeneratorInterface::generateFromRoute() for
* the available options.
*
* @return string
* An HTML string containing a link to the entity.
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0.
* Use \Drupal\Core\EntityInterface::toLink()->toString() instead.
*
* @see https://www.drupal.org/node/2614344
* @see \Drupal\Core\Entity\EntityInterface::toLink()
*/
public function link($text = NULL, $rel = 'canonical', array $options = []);
/**
* Generates the HTML for a link to this entity.
*

View File

@ -104,23 +104,6 @@ class EntityListBuilder extends EntityHandlerBase implements EntityListBuilderIn
return $query->execute();
}
/**
* Gets the label of an entity.
*
* @param \Drupal\Core\Entity\EntityInterface $entity
* The entity being listed.
*
* @return string
* The entity label.
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0.
* Use $entity->label() instead. This method used to escape the entity
* label. The render system's autoescape is now relied upon.
*/
protected function getLabel(EntityInterface $entity) {
return $entity->label();
}
/**
* {@inheritdoc}
*/

View File

@ -18,18 +18,11 @@ interface EntityPublishedInterface extends EntityInterface {
/**
* Sets the entity as published.
*
* @param bool|null $published
* (optional and deprecated) TRUE to set this entity to published, FALSE to
* set it to unpublished. Defaults to NULL. This parameter is deprecated in
* Drupal 8.3.0 and will be removed before Drupal 9.0.0. Use this method,
* without any parameter, to set the entity as published and
* setUnpublished() to set the entity as unpublished.
*
* @return $this
*
* @see \Drupal\Core\Entity\EntityPublishedInterface::setUnpublished()
*/
public function setPublished($published = NULL);
public function setPublished();
/**
* Sets the entity as unpublished.

View File

@ -51,16 +51,9 @@ trait EntityPublishedTrait {
/**
* {@inheritdoc}
*/
public function setPublished($published = NULL) {
if ($published !== NULL) {
@trigger_error('The $published parameter is deprecated since version 8.3.x and will be removed in 9.0.0.', E_USER_DEPRECATED);
$value = (bool) $published;
}
else {
$value = TRUE;
}
public function setPublished() {
$key = $this->getEntityType()->getKey('published');
$this->set($key, $value);
$this->set($key, TRUE);
return $this;
}

View File

@ -35,8 +35,6 @@ abstract class SelectionPluginBase extends PluginBase implements SelectionInterf
public function defaultConfiguration() {
return [
'target_type' => NULL,
// @todo Remove this key in Drupal 9.0.x.
'handler' => $this->getPluginId(),
'entity' => NULL,
];
}
@ -52,17 +50,11 @@ abstract class SelectionPluginBase extends PluginBase implements SelectionInterf
* {@inheritdoc}
*/
public function setConfiguration(array $configuration) {
// Resolve backward compatibility level configurations, if any.
$this->resolveBackwardCompatibilityConfiguration($configuration);
// Merge in defaults.
$this->configuration = NestedArray::mergeDeep(
$this->defaultConfiguration(),
$configuration
);
// Ensure a backward compatibility level configuration.
$this->ensureBackwardCompatibilityConfiguration();
}
/**
@ -94,75 +86,4 @@ abstract class SelectionPluginBase extends PluginBase implements SelectionInterf
*/
public function entityQueryAlter(SelectInterface $query) {}
/**
* Moves the backward compatibility level configurations in the right place.
*
* In order to keep backward compatibility, we copy all settings, except
* 'target_type', 'handler' and 'entity' under 'handler_settings', following
* the structure from the field config. If the plugin was instantiated using
* the 'handler_settings' level, those values will be used. In case of
* conflict, the root level settings will take precedence. The backward
* compatibility aware configuration will have the next structure:
* - target_type
* - handler (will be removed in Drupal 9.0.x, it's the plugin id)
* - entity
* - setting_1
* - setting_2
* ...
* - setting_N
* - handler_settings: (will be removed in Drupal 9.0.x)
* - setting_1
* - setting_2
* ...
* - setting_N
*
* @param array $configuration
* The configuration array to be altered.
*
* @internal
*
* @todo Remove this method call and its method in Drupal 9.
*
* @see https://www.drupal.org/project/drupal/issues/3069757
* @see https://www.drupal.org/node/2870971
*/
protected function resolveBackwardCompatibilityConfiguration(array &$configuration) {
if (isset($this->defaultConfiguration()['handler_settings'])) {
throw new \InvalidArgumentException("{$this->getPluginDefinition()['class']}::defaultConfiguration() should not contain a 'handler_settings' key. All settings should be placed in the root level.");
}
// Extract the BC level from the passed configuration, if any.
if (array_key_exists('handler_settings', $configuration)) {
if (!is_array($configuration['handler_settings'])) {
throw new \InvalidArgumentException("The setting 'handler_settings' is reserved and cannot be used.");
}
@trigger_error("Providing settings under 'handler_settings' is deprecated in drupal:8.4.0 support for 'handler_settings' is removed from drupal:9.0.0. Move the settings in the root of the configuration array. See https://www.drupal.org/node/2870971", E_USER_DEPRECATED);
// Settings passed in the root level take precedence over BC settings.
$configuration += $configuration['handler_settings'];
unset($configuration['handler_settings']);
}
}
/**
* Ensures a backward compatibility level configuration.
*
* @internal
*
* @todo Remove this method call and its method in Drupal 9.
*
* @see https://www.drupal.org/project/drupal/issues/3069757
* @see https://www.drupal.org/node/2870971
*/
protected function ensureBackwardCompatibilityConfiguration() {
$keys = ['handler', 'target_type', 'entity', 'handler_settings'];
// Synchronize back 'handler_settings'.
foreach ($this->configuration as $key => $value) {
// Filter out keys that belong strictly to the root level.
if (!in_array($key, $keys, TRUE)) {
$this->configuration['handler_settings'][$key] = $value;
}
}
}
}

View File

@ -44,16 +44,10 @@ class EntityRepository implements EntityRepositoryInterface {
* @param \Drupal\Core\Plugin\Context\ContextRepositoryInterface $context_repository
* The context repository service.
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager, ContextRepositoryInterface $context_repository = NULL) {
public function __construct(EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager, ContextRepositoryInterface $context_repository) {
$this->entityTypeManager = $entity_type_manager;
$this->languageManager = $language_manager;
if (isset($context_repository)) {
$this->contextRepository = $context_repository;
}
else {
@trigger_error('The context.repository service must be passed to EntityRepository::__construct(), it is required before Drupal 9.0.0. See https://www.drupal.org/node/2938929.', E_USER_DEPRECATED);
$this->contextRepository = \Drupal::service('context.repository');
}
$this->contextRepository = $context_repository;
}
/**

View File

@ -88,18 +88,13 @@ abstract class EntityStorageBase extends EntityHandlerBase implements EntityStor
* @param \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface|null $memory_cache
* The memory cache.
*/
public function __construct(EntityTypeInterface $entity_type, MemoryCacheInterface $memory_cache = NULL) {
public function __construct(EntityTypeInterface $entity_type, MemoryCacheInterface $memory_cache) {
$this->entityTypeId = $entity_type->id();
$this->entityType = $entity_type;
$this->idKey = $this->entityType->getKey('id');
$this->uuidKey = $this->entityType->getKey('uuid');
$this->langcodeKey = $this->entityType->getKey('langcode');
$this->entityClass = $this->entityType->getClass();
if (!isset($memory_cache)) {
@trigger_error('The $memory_cache parameter was added in Drupal 8.6.x and will be required in 9.0.0. See https://www.drupal.org/node/2973262', E_USER_DEPRECATED);
$memory_cache = \Drupal::service('entity.memory_cache');
}
$this->memoryCache = $memory_cache;
$this->memoryCacheTag = 'entity.memory_cache:' . $this->entityTypeId;
}

View File

@ -91,18 +91,6 @@ class EntityType extends PluginDefinition implements EntityTypeInterface {
*/
protected $links = [];
/**
* The name of a callback that returns the label of the entity.
*
* @var callable|null
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the
* EntityInterface::label() method instead for dynamic labels.
*
* @see \Drupal\Core\Entity\EntityInterface::label()
*/
protected $label_callback = NULL;
/**
* The name of the entity type which provides bundles.
*
@ -662,31 +650,6 @@ class EntityType extends PluginDefinition implements EntityTypeInterface {
return $this;
}
/**
* {@inheritdoc}
*/
public function getLabelCallback() {
@trigger_error('EntityType::getLabelCallback() is deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the EntityInterface::label() method instead for dynamic labels. See https://www.drupal.org/node/3050794', E_USER_DEPRECATED);
return $this->label_callback;
}
/**
* {@inheritdoc}
*/
public function setLabelCallback($callback) {
@trigger_error('EntityType::setLabelCallback() is deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the EntityInterface::label() method instead for dynamic labels. See https://www.drupal.org/node/3050794', E_USER_DEPRECATED);
$this->label_callback = $callback;
return $this;
}
/**
* {@inheritdoc}
*/
public function hasLabelCallback() {
@trigger_error('EntityType::hasabelCallback() is deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the EntityInterface::label() method instead for dynamic labels. See https://www.drupal.org/node/3050794', E_USER_DEPRECATED);
return isset($this->label_callback);
}
/**
* {@inheritdoc}
*/
@ -773,14 +736,6 @@ class EntityType extends PluginDefinition implements EntityTypeInterface {
return $this->label;
}
/**
* {@inheritdoc}
*/
public function getLowercaseLabel() {
@trigger_error('EntityType::getLowercaseLabel() is deprecated in drupal:8.8.0 and is removed from drupal:9.0.0. Instead, you should call getSingularLabel(). See https://www.drupal.org/node/3075567', E_USER_DEPRECATED);
return mb_strtolower($this->getLabel());
}
/**
* {@inheritdoc}
*/

View File

@ -475,62 +475,6 @@ interface EntityTypeInterface extends PluginDefinitionInterface {
*/
public function setLinkTemplate($key, $path);
/**
* Gets the callback for the label of the entity.
*
* The function takes an entity and returns the label of the entity. Use
* language() on the entity to get information on the requested language. The
* entity label is the main string associated with an entity; for example, the
* title of a node or the subject of a comment. If there is an entity object
* property that defines the label, use the 'label' element of the
* 'entity_keys' return value component to provide this information. If more
* complex logic is needed to determine the label of an entity, you can
* instead specify a callback function here, which will be called to determine
* the entity label.
*
* @return callable|null
* The callback, or NULL if none exists.
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the
* EntityInterface::label() method instead for dynamic labels.
*
* @see \Drupal\Core\Entity\EntityInterface::label()
* @see \Drupal\Core\Entity\EntityTypeInterface::setLabelCallback()
* @see \Drupal\Core\Entity\EntityTypeInterface::hasLabelCallback()
*/
public function getLabelCallback();
/**
* Sets the label callback.
*
* @param callable $callback
* A callable that returns the label of the entity.
*
* @return $this
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the
* EntityInterface::label() method instead for dynamic labels.
*
* @see \Drupal\Core\Entity\EntityInterface::label()
* @see \Drupal\Core\Entity\EntityTypeInterface::getLabelCallback()
* @see \Drupal\Core\Entity\EntityTypeInterface::hasLabelCallback()
*/
public function setLabelCallback($callback);
/**
* Indicates if a label callback exists.
*
* @return bool
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the
* EntityInterface::label() method instead for dynamic labels.
*
* @see \Drupal\Core\Entity\EntityInterface::label()
* @see \Drupal\Core\Entity\EntityTypeInterface::getLabelCallback()
* @see \Drupal\Core\Entity\EntityTypeInterface::setLabelCallback()
*/
public function hasLabelCallback();
/**
* Gets the name of the entity type which provides bundles.
*
@ -656,20 +600,6 @@ interface EntityTypeInterface extends PluginDefinitionInterface {
*/
public function getLabel();
/**
* Gets the lowercase form of the human-readable entity type name.
*
* @return string
* The lowercase form of the human-readable entity type name.
*
* @deprecated in drupal:8.8.0 and is removed from drupal:9.0.0.
* Instead, you should call getSingularLabel().
* See https://www.drupal.org/node/3075567
*
* @see \Drupal\Core\Entity\EntityTypeInterface::getLabel()
*/
public function getLowercaseLabel();
/**
* Gets the uppercase plural form of the name of the entity type.
*

View File

@ -98,12 +98,4 @@ class EntityTypeRepository implements EntityTypeRepositoryInterface {
throw new NoCorrespondingEntityClassException($class_name);
}
/**
* {@inheritdoc}
*/
public function clearCachedDefinitions() {
@trigger_error(__METHOD__ . ' is deprecated in drupal:8.0.0 and is removed in drupal:9.0.0', E_USER_DEPRECATED);
$this->classNameEntityTypeMap = [];
}
}

View File

@ -42,11 +42,4 @@ interface EntityTypeRepositoryInterface {
*/
public function getEntityTypeFromClass($class_name);
/**
* Clear the static cache.
*
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0.
*/
public function clearCachedDefinitions();
}

View File

@ -64,7 +64,7 @@ class KeyValueEntityStorage extends EntityStorageBase {
* @param \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface $memory_cache
* The memory cache.
*/
public function __construct(EntityTypeInterface $entity_type, KeyValueStoreInterface $key_value_store, UuidInterface $uuid_service, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache = NULL) {
public function __construct(EntityTypeInterface $entity_type, KeyValueStoreInterface $key_value_store, UuidInterface $uuid_service, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache) {
parent::__construct($entity_type, $memory_cache);
$this->keyValueStore = $key_value_store;
$this->uuidService = $uuid_service;

View File

@ -1,9 +0,0 @@
<?php
namespace Drupal\Core\Entity\Plugin\EntityReferenceSelection;
/**
* @deprecated in drupal:8.0.0 and is removed from drupal:9.0.0.
* Use \Drupal\Core\Entity\Plugin\EntityReferenceSelection\DefaultSelection
*/
class SelectionBase extends DefaultSelection {}

View File

@ -157,24 +157,6 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt
);
}
/**
* Gets the base field definitions for a content entity type.
*
* @return \Drupal\Core\Field\FieldDefinitionInterface[]
* The array of base field definitions for the entity type, keyed by field
* name.
*
* @deprecated in drupal:8.7.0 and is removed from drupal:9.0.0.
* Use \Drupal\Core\Entity\EntityFieldManagerInterface::getActiveFieldStorageDefinitions()
* instead.
*
* @see https://www.drupal.org/node/3040966
*/
public function getFieldStorageDefinitions() {
@trigger_error('SqlContentEntityStorage::getFieldStorageDefinitions() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityFieldManagerInterface::getActiveFieldStorageDefinitions() instead. See https://www.drupal.org/node/3040966.', E_USER_DEPRECATED);
return $this->entityFieldManager->getBaseFieldDefinitions($this->entityTypeId);
}
/**
* Constructs a SqlContentEntityStorage object.
*
@ -195,7 +177,7 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityFieldManagerInterface $entity_field_manager, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache = NULL, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, EntityTypeManagerInterface $entity_type_manager = NULL) {
public function __construct(EntityTypeInterface $entity_type, Connection $database, EntityFieldManagerInterface $entity_field_manager, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache, EntityTypeBundleInfoInterface $entity_type_bundle_info, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct($entity_type, $entity_field_manager, $cache, $memory_cache, $entity_type_bundle_info);
$this->database = $database;
$this->languageManager = $language_manager;
@ -624,17 +606,6 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt
}
}
/**
* {@inheritdoc}
*/
protected function doLoadRevisionFieldItems($revision_id) {
@trigger_error('"\Drupal\Core\Entity\ContentEntityStorageBase::doLoadRevisionFieldItems()" is deprecated in Drupal 8.5.x and will be removed before Drupal 9.0.0. "\Drupal\Core\Entity\ContentEntityStorageBase::doLoadMultipleRevisionsFieldItems()" should be implemented instead. See https://www.drupal.org/node/2924915.', E_USER_DEPRECATED);
$revisions = $this->doLoadMultipleRevisionsFieldItems([$revision_id]);
return !empty($revisions) ? reset($revisions) : NULL;
}
/**
* {@inheritdoc}
*/
@ -1803,22 +1774,4 @@ class SqlContentEntityStorage extends ContentEntityStorageBase implements SqlEnt
return $as_bool ? (bool) $count : (int) $count;
}
/**
* Determines whether the passed field has been already deleted.
*
* @param \Drupal\Core\Field\FieldStorageDefinitionInterface $storage_definition
* The field storage definition.
*
* @return bool
* Whether the field has been already deleted.
*
* @deprecated in drupal:8.5.0 and is removed from drupal:9.0.0. Use
* \Drupal\Core\Field\FieldStorageDefinitionInterface::isDeleted() instead.
*
* @see https://www.drupal.org/node/2907785
*/
protected function storageDefinitionIsDeleted(FieldStorageDefinitionInterface $storage_definition) {
return $storage_definition->isDeleted();
}
}

View File

@ -1,146 +0,0 @@
<?php
namespace Drupal\Core\Entity\Sql;
use Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\StringTranslation\TranslatableMarkup;
/**
* Defines a schema converter for entity types with existing data.
*
* @deprecated in drupal:8.7.0 and is removed from drupal:9.0.0.
* Use \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface::updateFieldableEntityType()
* instead.
*
* @see https://www.drupal.org/node/3029997
*/
class SqlContentEntityStorageSchemaConverter {
/**
* The entity type ID this schema converter is responsible for.
*
* @var string
*/
protected $entityTypeId;
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* The entity definition update manager service.
*
* @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface
*/
protected $entityDefinitionUpdateManager;
/**
* SqlContentEntityStorageSchemaConverter constructor.
*
* @param string $entity_type_id
* The ID of the entity type.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
* @param \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface $entity_definition_update_manager
* Entity definition update manager service.
*/
public function __construct($entity_type_id, EntityTypeManagerInterface $entity_type_manager, EntityDefinitionUpdateManagerInterface $entity_definition_update_manager) {
@trigger_error('\Drupal\Core\Entity\Sql\SqlContentEntityStorageSchemaConverter is deprecated in Drupal 8.7.0, will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface::updateFieldableEntityType() instead. See https://www.drupal.org/node/3029997.', E_USER_DEPRECATED);
$this->entityTypeId = $entity_type_id;
$this->entityTypeManager = $entity_type_manager;
$this->entityDefinitionUpdateManager = $entity_definition_update_manager;
}
/**
* Converts an entity type with existing data to be revisionable.
*
* This process does the following tasks:
* - creates the schema from scratch with the new revisionable entity type
* definition (i.e. the current definition of the entity type from code)
* using temporary table names;
* - loads the initial entity data by using the last installed entity and
* field storage definitions;
* - saves the entity data to the temporary tables;
* - at the end of the process:
* - deletes the original tables and replaces them with the temporary ones
* that hold the new (revisionable) entity data;
* - updates the installed entity schema data;
* - updates the entity type definition in order to trigger the
* \Drupal\Core\Entity\EntityTypeEvents::UPDATE event;
* - updates the field storage definitions in order to mark the
* revisionable ones as such.
*
* In case of an error during the entity save process, the temporary tables
* are deleted and the original entity type and field storage definitions are
* restored.
*
* @param array $sandbox
* The sandbox array from a hook_update_N() implementation.
* @param string[] $fields_to_update
* (optional) An array of field names that should be converted to be
* revisionable. Note that the 'langcode' field, if present, is updated
* automatically. Defaults to an empty array.
*
* @throws \Exception
* Re-throws any exception raised during the update process.
*/
public function convertToRevisionable(array &$sandbox, array $fields_to_update = []) {
/** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
$this->entityTypeManager->useCaches(FALSE);
$entity_type = $this->entityTypeManager->getDefinition($this->entityTypeId);
/** @var \Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface $last_installed_schema_repository */
$last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository');
$field_storage_definitions = $last_installed_schema_repository->getLastInstalledFieldStorageDefinitions($this->entityTypeId);
// Add the revision ID field.
$field_name = $entity_type->getKey('revision');
$field_storage_definitions[$entity_type->getKey('revision')] = BaseFieldDefinition::create('integer')
->setName($field_name)
->setTargetEntityTypeId($entity_type->id())
->setTargetBundle(NULL)
->setLabel(t('Revision ID'))
->setReadOnly(TRUE)
->setSetting('unsigned', TRUE);
// Add the 'revision_default' field.
$field_name = $entity_type->getRevisionMetadataKey('revision_default');
$field_storage_definitions[$field_name] = BaseFieldDefinition::create('boolean')
->setName($field_name)
->setTargetEntityTypeId($entity_type->id())
->setTargetBundle(NULL)
->setLabel(t('Default revision'))
->setDescription(t('A flag indicating whether this was a default revision when it was saved.'))
->setStorageRequired(TRUE)
->setTranslatable(FALSE)
->setRevisionable(TRUE);
// Add the 'revision_translation_affected' field if needed.
if ($entity_type->isTranslatable()) {
$field_name = $entity_type->getKey('revision_translation_affected');
$field_storage_definitions[$field_name] = BaseFieldDefinition::create('boolean')
->setName($field_name)
->setTargetEntityTypeId($entity_type->id())
->setTargetBundle(NULL)
->setLabel(new TranslatableMarkup('Revision translation affected'))
->setDescription(new TranslatableMarkup('Indicates if the last edit of a translation belongs to current revision.'))
->setReadOnly(TRUE)
->setRevisionable(TRUE)
->setTranslatable(TRUE);
}
// Mark various fields as revisionable.
$field_storage_definitions[$entity_type->getKey('langcode')]->setRevisionable(TRUE);
foreach ($fields_to_update as $field_name) {
$field_storage_definitions[$field_name]->setRevisionable(TRUE);
}
$this->entityDefinitionUpdateManager->updateFieldableEntityType($entity_type, $field_storage_definitions, $sandbox);
}
}

View File

@ -1,51 +0,0 @@
<?php
namespace Drupal\Core\Entity\Sql;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
@trigger_error(__NAMESPACE__ . '\TemporaryTableMapping is deprecated in Drupal 8.7.x and will be removed before Drupal 9.0.0. Use the default table mapping with a prefix instead.', E_USER_DEPRECATED);
/**
* Defines a temporary table mapping class.
*
* @deprecated in drupal:8.7.0 and is removed from drupal:9.0.0. Use the
* default table mapping with a prefix instead.
*/
class TemporaryTableMapping extends DefaultTableMapping {
/**
* {@inheritdoc}
*/
protected function generateFieldTableName(FieldStorageDefinitionInterface $storage_definition, $revision) {
return static::getTempTableName(parent::generateFieldTableName($storage_definition, $revision));
}
/**
* Generates a temporary table name.
*
* The method accounts for a maximum table name length of 64 characters.
*
* @param string $table_name
* The initial table name.
* @param string $prefix
* (optional) The prefix to use for the new table name. Defaults to 'tmp_'.
*
* @return string
* The final table name.
*/
public static function getTempTableName($table_name, $prefix = 'tmp_') {
$tmp_table_name = $prefix . $table_name;
// Limit the string to 48 characters, keeping a 16 characters margin for db
// prefixes.
if (strlen($table_name) > 48) {
$short_table_name = substr($table_name, 0, 34);
$table_hash = substr(hash('sha256', $table_name), 0, 10);
$tmp_table_name = $prefix . $short_table_name . $table_hash;
}
return $tmp_table_name;
}
}

View File

@ -53,7 +53,7 @@ class CommentStorage extends SqlContentEntityStorage implements CommentStorageIn
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
public function __construct(EntityTypeInterface $entity_info, Connection $database, EntityFieldManagerInterface $entity_field_manager, AccountInterface $current_user, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache, EntityTypeBundleInfoInterface $entity_type_bundle_info = NULL, EntityTypeManagerInterface $entity_type_manager = NULL) {
public function __construct(EntityTypeInterface $entity_info, Connection $database, EntityFieldManagerInterface $entity_field_manager, AccountInterface $current_user, CacheBackendInterface $cache, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache, EntityTypeBundleInfoInterface $entity_type_bundle_info, EntityTypeManagerInterface $entity_type_manager) {
parent::__construct($entity_info, $database, $entity_field_manager, $cache, $language_manager, $memory_cache, $entity_type_bundle_info, $entity_type_manager);
$this->currentUser = $current_user;
}

View File

@ -313,9 +313,6 @@ class CommentLinkBuilderTest extends UnitTestCase {
$node->expects($this->any())
->method('toUrl')
->willReturn($url);
$node->expects($this->any())
->method('url')
->willReturn(['route_name' => 'node.view']);
return $node;
}

View File

@ -22,7 +22,6 @@ use Drupal\rest\RestResourceConfigInterface;
* ),
* config_prefix = "resource",
* admin_permission = "administer rest resources",
* label_callback = "getLabelFromPlugin",
* entity_keys = {
* "id" = "id"
* },
@ -88,17 +87,6 @@ class RestResourceConfig extends ConfigEntityBase implements RestResourceConfigI
}
}
/**
* The label callback for this configuration entity.
*
* @return string The label.
*/
protected function getLabelFromPlugin() {
$plugin_definition = $this->getResourcePluginManager()
->getDefinition(['id' => $this->plugin_id]);
return $plugin_definition['label'];
}
/**
* Returns the resource plugin manager.
*

View File

@ -98,8 +98,8 @@ abstract class EntityResourceTestBase extends ResourceTestBase {
protected static $uniqueFieldNames = [];
/**
* Optionally specify which field is the 'label' field. Some entities specify
* a 'label_callback', but not a 'label' entity key. For example: User.
* Optionally specify which field is the 'label' field. Some entities do not
* specify a 'label' entity key. For example: User.
*
* @see ::getInvalidNormalizedEntityToCreate
*

View File

@ -1,24 +0,0 @@
<?php
namespace Drupal\entity_test\Entity;
/**
* Test entity class.
*
* @ContentEntityType(
* id = "entity_test_label_callback",
* label = @Translation("Entity test label callback"),
* persistent_cache = FALSE,
* base_table = "entity_test_label_callback",
* label_callback = "entity_test_label_callback",
* entity_keys = {
* "id" = "id",
* "bundle" = "type",
* "uuid" = "uuid",
* "langcode" = "langcode",
* }
* )
*/
class EntityTestLabelCallback extends EntityTest {
}

View File

@ -991,13 +991,6 @@ class ViewUI implements ViewEntityInterface {
return $this->storage->save();
}
/**
* {@inheritdoc}
*/
public function urlInfo($rel = 'edit-form', array $options = []) {
return $this->storage->toUrl($rel, $options);
}
/**
* {@inheritdoc}
*/
@ -1005,13 +998,6 @@ class ViewUI implements ViewEntityInterface {
return $this->storage->toUrl($rel, $options);
}
/**
* {@inheritdoc}
*/
public function link($text = NULL, $rel = 'edit-form', array $options = []) {
return $this->storage->link($text, $rel, $options);
}
/**
* {@inheritdoc}
*/
@ -1169,13 +1155,6 @@ class ViewUI implements ViewEntityInterface {
return $this->storage->referencedEntities();
}
/**
* {@inheritdoc}
*/
public function url($rel = 'edit-form', $options = []) {
return $this->storage->url($rel, $options);
}
/**
* {@inheritdoc}
*/

View File

@ -274,8 +274,8 @@ class FieldSqlStorageTest extends EntityKernelTestBase {
*/
public function testLongNames() {
// Use one of the longest entity_type names in core.
$entity_type = $bundle = 'entity_test_label_callback';
$this->installEntitySchema('entity_test_label_callback');
$entity_type = $bundle = 'entity_test_multivalue_basefield';
$this->installEntitySchema('entity_test_multivalue_basefield');
$storage = $this->container->get('entity_type.manager')->getStorage($entity_type);
// Create two fields and generate random values.

View File

@ -1,103 +0,0 @@
<?php
namespace Drupal\KernelTests\Core\Entity;
use Drupal\Core\Entity\Entity\EntityViewDisplay;
use Drupal\KernelTests\KernelTestBase;
/**
* Tests Deprecated EntityDisplayBase functionality.
*
* @group Entity
* @group legacy
*/
class LegacyEntityDisplayBaseTest extends KernelTestBase {
/**
* {@inheritdoc}
*/
public static $modules = [
'entity_test',
'entity_test_third_party',
'field',
'system',
'comment',
'user',
];
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->installEntitySchema('comment');
$this->installEntitySchema('entity_test');
$this->installSchema('user', ['users_data']);
}
/**
* Tests legacy handling of 'type' => 'hidden'.
*
* @group legacy
*
* @expectedDeprecation Support for using 'type' => 'hidden' in a component is deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. Use 'region' => 'hidden' instead. See https://www.drupal.org/node/2801513
*/
public function testLegacyPreSave() {
$entity_display = EntityViewDisplay::create([
'targetEntityType' => 'entity_test',
'bundle' => 'entity_test',
'mode' => 'default',
'status' => TRUE,
'content' => [
'foo' => ['type' => 'visible'],
'bar' => ['type' => 'hidden'],
'name' => ['type' => 'hidden', 'region' => 'content'],
],
]);
// Ensure that no region is set on the component.
$this->assertArrayNotHasKey('region', $entity_display->getComponent('foo'));
$this->assertArrayNotHasKey('region', $entity_display->getComponent('bar'));
// Ensure that a region is set on the component after saving.
$entity_display->save();
// The component with a visible type has been assigned a region.
$component = $entity_display->getComponent('foo');
$this->assertArrayHasKey('region', $component);
$this->assertSame('content', $component['region']);
// The component with a hidden type has been removed.
$this->assertNull($entity_display->getComponent('bar'));
// The component with a valid region and hidden type is unchanged.
$component = $entity_display->getComponent('name');
$this->assertArrayHasKey('region', $component);
$this->assertSame('content', $component['region']);
}
/**
* Tests the deprecated ::handleHiddenType() method.
*
* @expectedDeprecation Drupal\Core\Entity\EntityDisplayBase::handleHiddenType is deprecated in drupal:8.3.0 and is removed from drupal:9.0.0. No replacement is provided. See https://www.drupal.org/node/2801513
*/
public function testHandleHiddenType() {
$entity_display = EntityViewDisplay::create([
'targetEntityType' => 'entity_test',
'bundle' => 'entity_test',
'mode' => 'default',
'status' => TRUE,
'content' => [
'foo' => ['type' => 'visible'],
'bar' => ['type' => 'hidden'],
'name' => ['type' => 'hidden', 'region' => 'content'],
],
]);
$method = new \ReflectionMethod($entity_display, 'handleHiddenType');
$method->setAccessible(TRUE);
$this->assertSame(['type' => 'hidden'], $entity_display->getComponent('bar'));
$method->invoke($entity_display, 'bar', ['type' => 'hidden']);
$this->assertNull($entity_display->getComponent('bar'));
}
}

View File

@ -1,52 +0,0 @@
<?php
namespace Drupal\KernelTests\Core\Entity;
use Drupal\Core\Entity\Sql\SqlContentEntityStorageSchemaConverter;
use Drupal\Tests\system\Functional\Entity\Traits\EntityDefinitionTestTrait;
/**
* Tests the SqlContentEntityStorageSchemaConverter class.
*
* @coversDefaultClass \Drupal\Core\Entity\Sql\SqlContentEntityStorageSchemaConverter
*
* @group Entity
* @group legacy
*/
class SqlContentEntityStorageSchemaConverterTest extends EntityKernelTestBase {
use EntityDefinitionTestTrait;
/**
* @covers ::convertToRevisionable
*
* @expectedDeprecation \Drupal\Core\Entity\Sql\SqlContentEntityStorageSchemaConverter is deprecated in Drupal 8.7.0, will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface::updateFieldableEntityType() instead. See https://www.drupal.org/node/3029997.
*/
public function testConvertToRevisionable() {
$schema = \Drupal::database()->schema();
$this->assertFalse($schema->tableExists('entity_test_new'), 'Schema for the "entity_test_new" entity type does not exist.');
// Check that the "entity_test_new" schema has been created.
$this->enableNewEntityType();
$this->assertTrue($schema->tableExists('entity_test_new'), 'Schema for the "entity_test_new" entity type has been created.');
// Update the entity type definition to revisionable.
$entity_type = clone \Drupal::entityTypeManager()->getDefinition('entity_test_new');
$keys = $entity_type->getKeys();
$keys['revision'] = 'revision_id';
$entity_type->set('entity_keys', $keys);
$entity_type->set('revision_table', 'entity_test_new_revision');
$this->state->set('entity_test_new.entity_type', $entity_type);
\Drupal::entityTypeManager()->clearCachedDefinitions();
$revisionable_schema_converter = new SqlContentEntityStorageSchemaConverter(
'entity_test_new',
\Drupal::entityTypeManager(),
\Drupal::entityDefinitionUpdateManager()
);
$sandbox = [];
$revisionable_schema_converter->convertToRevisionable($sandbox, []);
$this->assertTrue($schema->tableExists('entity_test_new_revision'), 'Schema for the "entity_test_new" entity type has been created.');
}
}

View File

@ -472,31 +472,6 @@ class ContentEntityBaseUnitTest extends UnitTestCase {
$this->assertEquals(AccessResult::allowed(), $this->entity->access('create', NULL, TRUE));
}
/**
* @covers ::label
*
* @group legacy
*/
public function testLabel() {
$this->addExpectedDeprecationMessage('Entity type ' . $this->entityTypeId . ' defines a label callback. Support for that is deprecated in drupal:8.0.0 and will be removed in drupal:9.0.0. Override the EntityInterface::label() method instead. See https://www.drupal.org/node/3050794');
// Make a mock with one method that we use as the entity's label callback.
// We check that it is called, and that the entity's label is the callback's
// return value.
$callback_label = $this->randomMachineName();
$callback_container = $this->createMock(get_class());
$callback_container->expects($this->once())
->method(__FUNCTION__)
->will($this->returnValue($callback_label));
$this->entityType->expects($this->once())
->method('get')
->with('label_callback')
->will($this->returnValue([$callback_container, __FUNCTION__]));
$this->assertSame($callback_label, $this->entity->label());
}
/**
* Data provider for testGet().
*

View File

@ -1,35 +0,0 @@
<?php
namespace Drupal\Tests\Core\Entity;
use Drupal\Core\Entity\EntityDefinitionUpdateManager;
use Drupal\Core\Entity\EntityFieldManagerInterface;
use Drupal\Core\Entity\EntityLastInstalledSchemaRepositoryInterface;
use Drupal\Core\Entity\EntityTypeListenerInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Field\FieldStorageDefinitionListenerInterface;
use Drupal\Tests\UnitTestCase;
/**
* @coversDefaultClass \Drupal\Core\Entity\EntityDefinitionUpdateManager
* @group Entity
* @group legacy
*/
class EntityDefinitionUpdateManagerTest extends UnitTestCase {
/**
* @expectedDeprecation Unsilenced deprecation: EntityDefinitionUpdateManagerInterface::applyUpdates() is deprecated in 8.7.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface::getChangeList() and execute each entity type and field storage update manually instead. See https://www.drupal.org/node/3034742.
*/
public function testDeprecatedApplyUpdates() {
$entity_type_manager = $this->prophesize(EntityTypeManagerInterface::class)->reveal();
$entity_last_installed_schema_repository = $this->prophesize(EntityLastInstalledSchemaRepositoryInterface::class)->reveal();
$entity_field_manager = $this->prophesize(EntityFieldManagerInterface::class)->reveal();
$entity_type_listener = $this->prophesize(EntityTypeListenerInterface::class)->reveal();
$field_storage_definition_listener = $this->prophesize(FieldStorageDefinitionListenerInterface::class)->reveal();
$entity_definition_update_manager = new EntityDefinitionUpdateManager($entity_type_manager, $entity_last_installed_schema_repository, $entity_field_manager, $entity_type_listener, $field_storage_definition_listener);
$this->assertNull($entity_definition_update_manager->applyUpdates());
}
}

View File

@ -9,7 +9,7 @@ use Drupal\Core\Link;
use Drupal\Tests\UnitTestCase;
/**
* @coversDefaultClass \Drupal\Core\Entity\Entity
* @coversDefaultClass \Drupal\Core\Entity\EntityBase
* @group Entity
*/
class EntityLinkTest extends UnitTestCase {
@ -52,88 +52,12 @@ class EntityLinkTest extends UnitTestCase {
\Drupal::setContainer($container);
}
/**
* Tests for the Entity::link() method
*
* @covers ::link
*
* @dataProvider providerTestLink
*
* @group legacy
*
* Note this is only a legacy test because it triggers a call to
* \Drupal\Core\Entity\EntityTypeInterface::getLabelCallback() which is mocked
* and triggers a deprecation error. Remove when ::getLabelCallback() is
* removed.
*/
public function testLink($entity_label, $link_text, $expected_text, $link_rel = 'canonical', array $link_options = []) {
$language = new Language(['id' => 'es']);
$link_options += ['language' => $language];
$this->languageManager->expects($this->any())
->method('getLanguage')
->with('es')
->willReturn($language);
$route_name_map = [
'canonical' => 'entity.test_entity_type.canonical',
'edit-form' => 'entity.test_entity_type.edit_form',
];
$route_name = $route_name_map[$link_rel];
$entity_id = 'test_entity_id';
$entity_type_id = 'test_entity_type';
$expected = '<a href="/test_entity_type/test_entity_id">' . $expected_text . '</a>';
$entity_type = $this->createMock('Drupal\Core\Entity\EntityTypeInterface');
$entity_type->expects($this->once())
->method('getLinkTemplates')
->willReturn($route_name_map);
$entity_type->expects($this->any())
->method('getKey')
->willReturnMap([
['label', 'label'],
['langcode', 'langcode'],
]);
$this->entityTypeManager
->expects($this->any())
->method('getDefinition')
->with($entity_type_id)
->will($this->returnValue($entity_type));
/** @var \Drupal\Core\Entity\Entity $entity */
$entity = $this->getMockForAbstractClass('Drupal\Core\Entity\EntityBase', [
['id' => $entity_id, 'label' => $entity_label, 'langcode' => 'es'],
$entity_type_id,
]);
$expected_link = Link::createFromRoute(
$expected_text,
$route_name,
[$entity_type_id => $entity_id],
['entity_type' => $entity_type_id, 'entity' => $entity] + $link_options
)->setLinkGenerator($this->linkGenerator);
$this->linkGenerator->expects($this->once())
->method('generateFromLink')
->with($this->equalTo($expected_link))
->willReturn($expected);
$this->assertSame($expected, $entity->toLink($link_text, $link_rel, $link_options)->toString());
}
/**
* Tests for the Entity::toLink() method
*
* @covers ::toLink
*
* @dataProvider providerTestLink
*
* @group legacy
*
* Note this is only a legacy test because it triggers a call to
* \Drupal\Core\Entity\EntityTypeInterface::getLabelCallback() which is mocked
* and triggers a deprecation error. Remove when ::getLabelCallback() is
* removed.
*/
public function testToLink($entity_label, $link_text, $expected_text, $link_rel = 'canonical', array $link_options = []) {
$language = new Language(['id' => 'es']);

View File

@ -520,47 +520,4 @@ class EntityTypeTest extends UnitTestCase {
$this->assertEquals('example_entity_type', $entity_type->id());
}
/**
* @covers ::getLabelCallback
*
* @group legacy
*
* @deprecatedMessage EntityType::getLabelCallback() is deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the EntityInterface::label() method instead for dynamic labels. See https://www.drupal.org/node/3050794
*/
public function testGetLabelCallack() {
$entity_type = $this->setUpEntityType(['label_callback' => 'label_function']);
$this->assertSame('label_function', $entity_type->getLabelCallback());
$entity_type = $this->setUpEntityType([]);
$this->assertNull($entity_type->getLabelCallback());
}
/**
* @covers ::setLabelCallback
*
* @group legacy
*
* @deprecatedMessage EntityType::setLabelCallback() is deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the EntityInterface::label() method instead for dynamic labels. See https://www.drupal.org/node/3050794
*/
public function testSetLabelCallack() {
$entity_type = $this->setUpEntityType([]);
$entity_type->setLabelCallback('label_function');
$this->assertSame('label_function', $entity_type->get('label_callback'));
}
/**
* @covers ::hasLabelCallback
*
* @group legacy
*
* @deprecatedMessage EntityType::hasLabelCallback() is deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Override the EntityInterface::label() method instead for dynamic labels. See https://www.drupal.org/node/3050794
*/
public function testHasLabelCallack() {
$entity_type = $this->setUpEntityType(['label_callback' => 'label_function']);
$this->assertTrue($entity_type->hasLabelCallback());
$entity_type = $this->setUpEntityType([]);
$this->assertFalse($entity_type->hasLabelCallback());
}
}

View File

@ -14,7 +14,7 @@ use Drupal\Tests\Traits\ExpectDeprecationTrait;
use Drupal\Tests\UnitTestCase;
/**
* @coversDefaultClass \Drupal\Core\Entity\Entity
* @coversDefaultClass \Drupal\Core\Entity\EntityBase
* @group Entity
* @group Access
*/
@ -169,33 +169,17 @@ class EntityUnitTest extends UnitTestCase {
/**
* @covers ::label
* @group legacy
*/
public function testLabel() {
$this->addExpectedDeprecationMessage('Entity type ' . $this->entityTypeId . ' defines a label callback. Support for that is deprecated in drupal:8.0.0 and will be removed in drupal:9.0.0. Override the EntityInterface::label() method instead. See https://www.drupal.org/node/3050794');
// Make a mock with one method that we use as the entity's uri_callback. We
// check that it is called, and that the entity's label is the callback's
// return value.
$callback_label = $this->randomMachineName();
$property_label = $this->randomMachineName();
$callback_container = $this->createMock(get_class());
$callback_container->expects($this->once())
->method(__FUNCTION__)
->will($this->returnValue($callback_label));
$this->entityType->expects($this->at(0))
->method('get')
->with('label_callback')
->will($this->returnValue([$callback_container, __FUNCTION__]));
$this->entityType->expects($this->at(2))
$this->entityType->expects($this->atLeastOnce())
->method('getKey')
->with('label')
->will($this->returnValue('label'));
// Set a dummy property on the entity under test to test that the label can
// be returned form a property if there is no callback.
$this->entityTypeManager->expects($this->at(1))
$this->entityTypeManager->expects($this->atLeastOnce())
->method('getDefinition')
->with($this->entityTypeId)
->will($this->returnValue([
@ -205,7 +189,6 @@ class EntityUnitTest extends UnitTestCase {
]));
$this->entity->label = $property_label;
$this->assertSame($callback_label, $this->entity->label());
$this->assertSame($property_label, $this->entity->label());
}

View File

@ -10,16 +10,15 @@ use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\Exception\UndefinedLinkTemplateException;
use Drupal\Core\Entity\RevisionableInterface;
use Drupal\Core\GeneratedUrl;
use Drupal\Core\Link;
use Drupal\Core\Routing\UrlGeneratorInterface;
use Drupal\Core\Url;
use Drupal\Tests\UnitTestCase;
use Symfony\Component\Routing\Exception\MissingMandatoryParametersException;
/**
* Tests URL handling of the \Drupal\Core\Entity\Entity class.
* Tests URL handling of the \Drupal\Core\Entity\EntityBase class.
*
* @coversDefaultClass \Drupal\Core\Entity\Entity
* @coversDefaultClass \Drupal\Core\Entity\EntityBase
*
* @group Entity
*/
@ -378,164 +377,6 @@ class EntityUrlTest extends UnitTestCase {
return $test_cases;
}
/**
* Tests the urlInfo() method.
*
* @param string $rel
* The link relation to test.
* @param array $options
* An array of URL options to test with.
*
* @covers ::urlInfo
*
* @dataProvider providerTestUrlInfo
*
* @group legacy
* @expectedDeprecation EntityInterface::urlInfo() is deprecated in Drupal 8.0.0 and will be removed in Drupal 9.0.0. EntityInterface::toUrl() instead. See https://www.drupal.org/node/2614344
*/
public function testUrlInfo($rel, $options) {
$entity = $this->getEntity(EntityBase::class, [], ['toUrl']);
$entity->expects($this->once())
->method('toUrl')
->with($rel, $options);
$entity->urlInfo($rel, $options);
}
/**
* Tests the link() method.
*
* @covers ::urlInfo
*
* @group legacy
* @expectedDeprecation EntityInterface::link() is deprecated in Drupal 8.0.0 and will be removed in Drupal 9.0.0. Use EntityInterface::toLink()->toString() instead. Note, the default relationship for configuration entities changes from 'edit-form' to 'canonical'. See https://www.drupal.org/node/2614344
*/
public function testLink() {
$link = $this->createMock(Link::class);
$link->expects($this->once())
->method('toString')
->willReturn('<a href="/foo">The link</a>');
$entity = $this->getEntity(EntityBase::class, [], ['toLink']);
$entity->expects($this->once())
->method('toLink')
->with(NULL, 'canonical')
->willReturn($link);
$this->assertEquals('<a href="/foo">The link</a>', $entity->link());
}
/**
* Provides data for testUrlInfo().
*
* @return array
* An array of test cases for testUrlInfo().
*/
public function providerTestUrlInfo() {
$test_cases = [];
$test_cases['default'] = ['canonical', []];
$test_cases['with_option'] = ['canonical', ['absolute' => TRUE]];
$test_cases['revision'] = ['revision', []];
return $test_cases;
}
/**
* Tests the url() method without an entity ID.
*
* @param string $rel
* The link relation to test.
*
* @covers ::url
* @covers ::hasLinkTemplate
* @covers ::linkTemplates
*
* @dataProvider providerTestUrl
*
* @group legacy
* @expectedDeprecation EntityInterface::url() is deprecated in Drupal 8.0.0 and will be removed in Drupal 9.0.0. EntityInterface::toUrl() instead. Note, a \Drupal\Core\Url object is returned. See https://www.drupal.org/node/2614344
*/
public function testUrlEmpty($rel) {
$entity = $this->getEntity(EntityBase::class, []);
$this->assertEquals('', $entity->url($rel));
}
/**
* Provides data for testUrlEmpty().
*
* @return array
* An array of test cases for testUrlEmpty().
*/
public function providerTestUrlEmpty() {
$test_cases = [];
$test_cases['default'] = ['canonical', []];
$test_cases['revision'] = ['revision', []];
return $test_cases;
}
/**
* Tests the url() method.
*
* @param string $rel
* The link relation to test.
* @param array $options
* An array of URL options to call url() with.
* @param array $default_options
* An array of URL options that toUrl() should generate.
* @param array $expected_options
* An array of combined URL options that should be set on the final URL.
*
* @covers ::url
* @covers ::hasLinkTemplate
* @covers ::linkTemplates
*
* @dataProvider providerTestUrl
*
* @group legacy
* @expectedDeprecation EntityInterface::url() is deprecated in Drupal 8.0.0 and will be removed in Drupal 9.0.0. EntityInterface::toUrl() instead. Note, a \Drupal\Core\Url object is returned. See https://www.drupal.org/node/2614344
*/
public function testUrl($rel, $options, $default_options, $expected_options) {
$entity = $this->getEntity(EntityBase::class, ['id' => $this->entityId], ['toUrl']);
$this->registerLinkTemplate($rel);
$uri = $this->prophesize(Url::class);
$uri->getOptions()->willReturn($default_options);
$uri->setOptions($expected_options)->shouldBeCalled();
$url_string = "/test-entity/{$this->entityId}/$rel";
$uri->toString()->willReturn($url_string);
$entity->expects($this->once())
->method('toUrl')
->with($rel)
->willReturn($uri->reveal());
$this->assertEquals($url_string, $entity->url($rel, $options));
}
/**
* Provides data for testUrl().
*
* @return array
* An array of test cases for testUrl().
*/
public function providerTestUrl() {
$test_cases = [];
$test_cases['default'] = ['canonical', [], [], []];
$test_cases['revision'] = ['revision', [], [], []];
$test_cases['option'] = ['canonical', ['absolute' => TRUE], [], ['absolute' => TRUE]];
$test_cases['default_option'] = ['canonical', [], ['absolute' => TRUE], ['absolute' => TRUE]];
$test_cases['option_merge'] = ['canonical', ['absolute' => TRUE], ['entity_type' => $this->entityTypeId], ['absolute' => TRUE, 'entity_type' => $this->entityTypeId]];
$test_cases['option_override'] = ['canonical', ['absolute' => TRUE], ['absolute' => FALSE], ['absolute' => TRUE]];
return $test_cases;
}
/**
* Tests the uriRelationships() method.
*

View File

@ -1,51 +0,0 @@
<?php
namespace Drupal\Tests\Core\Entity;
use Drupal\Core\Entity\ContentEntityNullStorage;
use PHPUnit\Framework\TestCase;
/**
* Tests deprecated methods of ContentEntityStorageBase.
*
* @group Entity
* @group legacy
*
* @coversDefaultClass \Drupal\Core\Entity\ContentEntityStorageBase
*/
class LegacyContentEntityStorageBaseTest extends TestCase {
/**
* Tests doLoadMultipleRevisionsFieldItems triggers an error.
*
* @covers ::doLoadMultipleRevisionsFieldItems
*
* @expectedDeprecation Calling Drupal\Core\EntityContentEntityStorageBase::doLoadMultipleRevisionsFieldItems() directly is deprecated in drupal:8.8.0 and the method will be made abstract in drupal:9.0.0. Storage implementations should override and implement their own loading logic. See https://www.drupal.org/node/3069692
*/
public function testDoLoadMultipleRevisionFieldItems() {
$storage = new TestContentEntityStorageBase();
$items = $storage->doLoadMultipleRevisionsFieldItems([]);
$this->assertSame([], $items);
}
}
/**
* Test class for ContentEntityStorageBaseTest.
*/
class TestContentEntityStorageBase extends ContentEntityNullStorage {
/**
* Constructs a TestContentEntityStorageBase object.
*/
public function __construct() {
}
/**
* {@inheritdoc}
*/
public function doLoadMultipleRevisionsFieldItems($revision_ids) {
return parent::doLoadMultipleRevisionsFieldItems($revision_ids);
}
}

View File

@ -4,7 +4,6 @@ namespace Drupal\Tests\Core\Entity\Sql;
use Drupal\Core\Entity\Sql\DefaultTableMapping;
use Drupal\Core\Entity\Sql\SqlContentEntityStorageException;
use Drupal\Core\Entity\Sql\TemporaryTableMapping;
use Drupal\Tests\UnitTestCase;
/**
@ -572,17 +571,6 @@ class DefaultTableMappingTest extends UnitTestCase {
return $data;
}
/**
* @coversDefaultClass \Drupal\Core\Entity\Sql\TemporaryTableMapping
*
* @expectedDeprecation Drupal\Core\Entity\Sql\TemporaryTableMapping is deprecated in Drupal 8.7.x and will be removed before Drupal 9.0.0. Use the default table mapping with a prefix instead.
* @group legacy
*/
public function testTemporaryTableMapping() {
$table_mapping = new TemporaryTableMapping($this->entityType, [], '');
$this->assertTrue($table_mapping instanceof DefaultTableMapping);
}
/**
* Sets up a field storage definition for the test.
*

View File

@ -1450,18 +1450,6 @@ class SqlContentEntityStorageTest extends UnitTestCase {
}
/**
* @covers ::getFieldStorageDefinitions
*
* @expectedDeprecation SqlContentEntityStorage::getFieldStorageDefinitions() is deprecated in Drupal 8.7.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Entity\EntityFieldManagerInterface::getActiveFieldStorageDefinitions() instead. See https://www.drupal.org/node/3040966.
*
* @group legacy
*/
public function testGetFieldStorageDefinitions() {
$this->setUpEntityStorage();
$this->entityStorage->getFieldStorageDefinitions();
}
/**
* Sets up the module handler with no implementations.
*/

View File

@ -1,237 +0,0 @@
<?php
namespace Drupal\Tests\Core\EntityReferenceSelection;
use Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase;
use Drupal\Tests\UnitTestCase;
/**
* Provides unit testing for selection handlers.
*
* @coversDefaultClass \Drupal\Core\Entity\EntityReferenceSelection\SelectionPluginBase
*
* @group entity_reference
* @group legacy
*/
class EntityReferenceSelectionUnitTest extends UnitTestCase {
/**
* Tests invalid default configuration.
*
* @covers ::defaultConfiguration
* @covers ::resolveBackwardCompatibilityConfiguration
*/
public function testInvalidDefaultConfiguration() {
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage("TestSelectionWithInvalidDefaultConfiguration::defaultConfiguration() should not contain a 'handler_settings' key. All settings should be placed in the root level.");
new TestSelectionWithInvalidDefaultConfiguration(
[],
'test_selector',
['class' => 'TestSelectionWithInvalidDefaultConfiguration']
);
}
/**
* Tests the selection handler with malformed 'handler_settings' value.
*
* @covers ::setConfiguration
* @covers ::resolveBackwardCompatibilityConfiguration
*/
public function testMalformedHandlerSettingsValue() {
$this->expectException(\InvalidArgumentException::class);
$this->expectExceptionMessage("The setting 'handler_settings' is reserved and cannot be used.");
new TestSelection(
// The deprecated 'handler_setting' should be an array.
['handler_settings' => FALSE],
'test_selector',
['class' => 'TestSelectionWithInvalidDefaultConfiguration']
);
}
/**
* Provides test data for ::testSetConfiguration()
*
* @return array
*
* @see \Drupal\Tests\Core\EntityReferenceSelection\testSetConfiguration
*/
public function providerTestSetConfiguration() {
return [
[
[
'setting1' => 'foo',
'setting2' => [
'bar' => 'bar value',
'baz' => 'baz value',
],
],
],
[
[
'handler_settings' => [
'setting1' => 'foo',
'setting2' => [
'bar' => 'bar value',
'baz' => 'baz value',
],
],
],
],
[
[
'setting1' => 'foo',
'handler_settings' => [
'setting2' => [
'bar' => 'bar value',
'baz' => 'baz value',
],
],
],
],
[
[
'setting1' => 'foo',
'setting2' => [
'bar' => 'bar value',
'baz' => 'baz value',
],
'handler_settings' => [
// Same setting from root level takes precedence.
'setting2' => 'this will be overwritten',
],
],
],
];
}
/**
* Tests selection handler plugin configuration set.
*
* @dataProvider providerTestSetConfiguration
* @covers ::setConfiguration
* @covers ::resolveBackwardCompatibilityConfiguration
* @covers ::ensureBackwardCompatibilityConfiguration
*
* @param array $options
* The configuration passed to the plugin.
*/
public function testSetConfiguration($options) {
$selection = new TestSelection($options, 'test_selector', []);
$expected = [
'target_type' => NULL,
'handler' => 'test_selector',
'entity' => NULL,
'setting1' => 'foo',
'setting2' => [
'qux' => 'qux value',
'bar' => 'bar value',
'baz' => 'baz value',
],
'setting3' => 'foobar',
'handler_settings' => [
'setting1' => 'foo',
'setting2' => [
'qux' => 'qux value',
'bar' => 'bar value',
'baz' => 'baz value',
],
'setting3' => 'foobar',
],
];
$this->assertArrayEquals($expected, $selection->getConfiguration());
}
/**
* Tests the selection handler plugin BC structure.
*
* @covers ::setConfiguration
* @covers ::resolveBackwardCompatibilityConfiguration
* @covers ::ensureBackwardCompatibilityConfiguration
*/
public function testSetConfigurationBcLevel() {
$config = [
'target_type' => 'some_entity_type_id',
'handler' => 'test_selector',
'setting1' => 'foo',
];
$selection = new TestSelection($config, 'test_selector', []);
$expected = [
'target_type' => 'some_entity_type_id',
'handler' => 'test_selector',
'entity' => NULL,
'setting1' => 'foo',
'setting2' => ['qux' => 'qux value'],
'setting3' => 'foobar',
'handler_settings' => [
'setting1' => 'foo',
'setting2' => ['qux' => 'qux value'],
'setting3' => 'foobar',
],
];
$this->assertArrayEquals($expected, $selection->getConfiguration());
// Read the stored values and override a setting.
$config = $selection->getConfiguration();
$config['setting1'] = 'bar';
$selection->setConfiguration($config);
$expected['setting1'] = 'bar';
$expected['handler_settings']['setting1'] = 'bar';
$this->assertArrayEquals($expected, $selection->getConfiguration());
}
/**
* Tests deprecation error triggering.
*
* @covers ::setConfiguration
* @covers ::resolveBackwardCompatibilityConfiguration
* @expectedDeprecation Providing settings under 'handler_settings' is deprecated in drupal:8.4.0 support for 'handler_settings' is removed from drupal:9.0.0. Move the settings in the root of the configuration array. See https://www.drupal.org/node/2870971
*/
public function testDeprecationErrorTriggering() {
// Configuration with BC level.
$config = ['handler_settings' => ['setting1' => TRUE]];
new TestSelection($config, 'test_selector', []);
// Ensure at least one assertion.
$this->assertTrue(TRUE);
}
}
/**
* Provides a testing plugin.
*/
class TestSelection extends SelectionPluginBase {
public function defaultConfiguration() {
return [
'setting2' => [
'qux' => 'qux value',
],
'setting3' => 'foobar',
] + parent::defaultConfiguration();
}
public function getReferenceableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {}
public function validateReferenceableEntities(array $ids) {}
public function countReferenceableEntities($match = NULL, $match_operator = 'CONTAINS') {}
}
/**
* Provides a testing plugin with invalid default configuration.
*/
class TestSelectionWithInvalidDefaultConfiguration extends TestSelection {
public function defaultConfiguration() {
return [
'handler_settings' => ['foo' => 'bar'],
];
}
}