diff --git a/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php b/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php index 9ef1a65..f0b8266 100644 --- a/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php +++ b/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php @@ -9,6 +9,11 @@ use Drupal\Core\Config\Config; use Drupal\Core\Config\Entity\ConfigStorageController; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\Core\Config\ConfigFactory; +use Drupal\Core\Config\StorageInterface; +use Drupal\Core\Entity\EntityManager; +use Drupal\Core\Extension\ModuleHandler; /** * Controller class for field instances. @@ -21,6 +26,69 @@ class FieldInstanceStorageController extends ConfigStorageController { /** + * The module handler. + * + * @var \Drupal\Core\Extension\ModuleHandler + */ + protected $moduleHandler; + + /** + * The entity manager + * + * @var \Drupal\Core\Entity\EntityManager + */ + protected $entityManager; + + /** + * Constructs a FieldStorageController object. + * + * @param string $entity_type + * The entity type for which the instance is created. + * @param array $entity_info + * An array of entity info for the entity type. + * @param \Drupal\Core\Config\ConfigFactory $config_factory + * The config factory service. + * @param \Drupal\Core\Config\StorageInterface $config_storage + * The config storage service. + * @param \Drupal\Core\Entity\EntityManager $entity_manager + * The entity manager. + * @param \Drupal\Core\Extension\ModuleHandler $module_handler + * The module handler. + */ + public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, EntityManager $entity_manager, ModuleHandler $module_handler) { + $this->entityType = $entity_type; + $this->entityInfo = $entity_info; + $this->hookLoadArguments = array(); + $this->idKey = $this->entityInfo['entity_keys']['id']; + + if (isset($this->entityInfo['entity_keys']['status'])) { + $this->statusKey = $this->entityInfo['entity_keys']['status']; + } + else { + $this->statusKey = FALSE; + } + + $this->configFactory = $config_factory; + $this->configStorage = $config_storage; + $this->entityManager = $entity_manager; + $this->moduleHandler = $module_handler; + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, $entity_type, array $entity_info) { + return new static( + $entity_type, + $entity_info, + $container->get('config.factory'), + $container->get('config.storage'), + $container->get('plugin.manager.entity'), + $container->get('module_handler') + ); + } + + /** * {@inheritdoc} */ public function importDelete($name, Config $new_config, Config $old_config) { @@ -48,20 +116,19 @@ public function loadByProperties(array $conditions = array()) { // Get instances stored in configuration. if (isset($conditions['entity_type']) && isset($conditions['bundle']) && isset($conditions['field_name'])) { // Optimize for the most frequent case where we do have a specific ID. - $instances = entity_load_multiple('field_instance', array($conditions['entity_type'] . '.' . $conditions['bundle'] . '.' . $conditions['field_name'])); + $instances = $this->entityManager->getStorageController($this->entityType)->load(array($conditions['entity_type'] . '.' . $conditions['bundle'] . '.' . $conditions['field_name'])); } else { // No specific ID, we need to examine all existing instances. - $instances = entity_load_multiple('field_instance'); + $instances = $this->entityManager->getStorageController($this->entityType)->load(); } // Merge deleted instances (stored in state) if needed. if ($include_deleted) { $state = \Drupal::state(); - $deleted_fields = $state->get('field.field.deleted'); $deleted_instances = $state->get('field.instance.deleted') ?: array(); foreach ($deleted_instances as $id => $config) { - $instances[$id] = entity_create('field_instance', $config); + $instances[$id] = $this->entityManager->getStorageController($this->entityType)->create($config); } } @@ -75,7 +142,7 @@ public function loadByProperties(array $conditions = array()) { $matching_instances = array(); foreach ($instances as $instance) { // Only include instances on unknown entity types if 'include_inactive'. - if (!$include_inactive && !entity_get_info($instance->entity_type)) { + if (!$include_inactive && !$this->entityManager->getDefinition($instance->entity_type)) { continue; } @@ -113,7 +180,7 @@ public function loadByProperties(array $conditions = array()) { } } - module_invoke_all('field_read_instance', $instance); + $this->moduleHandler->invokeAll('field_read_instance', $instance); $matching_instances[] = $instance; } diff --git a/core/modules/field/lib/Drupal/field/FieldStorageController.php b/core/modules/field/lib/Drupal/field/FieldStorageController.php index 91d382f..53ca2fa 100644 --- a/core/modules/field/lib/Drupal/field/FieldStorageController.php +++ b/core/modules/field/lib/Drupal/field/FieldStorageController.php @@ -9,6 +9,11 @@ use Drupal\Core\Config\Config; use Drupal\Core\Config\Entity\ConfigStorageController; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\Core\Config\ConfigFactory; +use Drupal\Core\Config\StorageInterface; +use Drupal\Core\Entity\EntityManager; +use Drupal\Core\Extension\ModuleHandler; /** * Controller class for fields. @@ -16,6 +21,69 @@ class FieldStorageController extends ConfigStorageController { /** + * The module handler. + * + * @var \Drupal\Core\Extension\ModuleHandler + */ + protected $moduleHandler; + + /** + * The entity manager + * + * @var \Drupal\Core\Entity\EntityManager + */ + protected $entityManager; + + /** + * Constructs a FieldStorageController object. + * + * @param string $entity_type + * The entity type for which the instance is created. + * @param array $entity_info + * An array of entity info for the entity type. + * @param \Drupal\Core\Config\ConfigFactory $config_factory + * The config factory service. + * @param \Drupal\Core\Config\StorageInterface $config_storage + * The config storage service. + * @param \Drupal\Core\Entity\EntityManager $entity_manager + * The entity manager. + * @param \Drupal\Core\Extension\ModuleHandler $module_handler + * The module handler. + */ + public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, EntityManager $entity_manager, ModuleHandler $module_handler) { + $this->entityType = $entity_type; + $this->entityInfo = $entity_info; + $this->hookLoadArguments = array(); + $this->idKey = $this->entityInfo['entity_keys']['id']; + + if (isset($this->entityInfo['entity_keys']['status'])) { + $this->statusKey = $this->entityInfo['entity_keys']['status']; + } + else { + $this->statusKey = FALSE; + } + + $this->configFactory = $config_factory; + $this->configStorage = $config_storage; + $this->entityManager = $entity_manager; + $this->moduleHandler = $module_handler; + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, $entity_type, array $entity_info) { + return new static( + $entity_type, + $entity_info, + $container->get('config.factory'), + $container->get('config.storage'), + $container->get('plugin.manager.entity'), + $container->get('module_handler') + ); + } + + /** * {@inheritdoc} */ public function loadByProperties(array $conditions = array()) { @@ -30,18 +98,18 @@ public function loadByProperties(array $conditions = array()) { // Get fields stored in configuration. if (isset($conditions['field_name'])) { // Optimize for the most frequent case where we do have a specific ID. - $fields = entity_load_multiple('field_entity', array($conditions['field_name'])); + $fields = $this->entityManager->getStorageController($this->entityType)->load(array($conditions['field_name'])); } else { // No specific ID, we need to examine all existing fields. - $fields = entity_load_multiple('field_entity'); + $fields = $this->entityManager->getStorageController($this->entityType)->load(); } // Merge deleted fields (stored in state) if needed. if ($include_deleted) { $deleted_fields = \Drupal::state()->get('field.field.deleted') ?: array(); foreach ($deleted_fields as $id => $config) { - $fields[$id] = entity_create('field_entity', $config); + $fields[$id] = $this->entityManager->getStorageController($this->entityType)->create($config); } } @@ -76,7 +144,7 @@ public function loadByProperties(array $conditions = array()) { } } - module_invoke_all('field_read_field', $field); + $this->moduleHandler->invokeAll('field_read_field', $field); // When returning deleted fields, key the results by UUID since they can // include several fields with the same ID.