diff --git a/core/core.services.yml b/core/core.services.yml index 0e55686..73b74dd 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -69,7 +69,7 @@ services: - { name: persist } config.context.factory: class: Drupal\Core\Config\Context\ConfigContextFactory - arguments: ['@event_dispatcher'] + arguments: ['@event_dispatcher', '@uuid'] config.context: class: Drupal\Core\Config\Context\ContextInterface tags: diff --git a/core/includes/config.inc b/core/includes/config.inc index cede3bc..5b03169 100644 --- a/core/includes/config.inc +++ b/core/includes/config.inc @@ -34,7 +34,8 @@ function config_install_default_config($type, $name) { Drupal::service('event_dispatcher'), Drupal::service('config.factory'), Drupal::entityManager(), - Drupal::lock() + Drupal::lock(), + Drupal::service('uuid') ); $installer->import(); } diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc index 8e4b66e..d37cf22 100644 --- a/core/includes/install.core.inc +++ b/core/includes/install.core.inc @@ -375,7 +375,8 @@ function install_begin_request(&$install_state) { $container->register('config.storage', 'Drupal\Core\Config\InstallStorage'); $container->register('config.context.factory', 'Drupal\Core\Config\Context\ConfigContextFactory') - ->addArgument(new Reference('event_dispatcher')); + ->addArgument(new Reference('event_dispatcher')) + ->addArgument(new Reference('uuid')); $container->register('config.context', 'Drupal\Core\Config\Context\ContextInterface') ->setFactoryService(new Reference('config.context.factory')) @@ -435,6 +436,9 @@ function install_begin_request(&$install_state) { $container->register('url_generator', 'Drupal\Core\Routing\NullGenerator'); + // Register UUID. + CoreServiceProvider::registerUuid($container); + // Register the CSS and JavaScript asset collection renderers. $container->register('asset.css.collection_renderer', 'Drupal\Core\Asset\CssCollectionRenderer'); $container->register('asset.js.collection_renderer', 'Drupal\Core\Asset\JsCollectionRenderer'); diff --git a/core/includes/update.inc b/core/includes/update.inc index 5e8ff4e..c012f36 100644 --- a/core/includes/update.inc +++ b/core/includes/update.inc @@ -13,7 +13,6 @@ use Drupal\Core\Config\FileStorage; use Drupal\Core\Config\ConfigException; use Drupal\Core\DrupalKernel; -use Drupal\Component\Uuid\Uuid; use Drupal\Component\Utility\NestedArray; use Symfony\Component\HttpFoundation\Request; @@ -571,7 +570,7 @@ function update_prepare_d8_language() { // Convert languages to config entities. $result = db_query('SELECT * FROM {language}'); - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); foreach ($result as $language) { Drupal::config('language.entity.' . $language->langcode) ->set('id', $language->langcode) @@ -1529,7 +1528,7 @@ function update_variables_to_state(array $variable_map) { * A $primary_key values of rows to be updated. */ function update_add_uuids(&$sandbox, $table, $primary_key, $values) { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); foreach ($values as $value) { db_update($table) ->fields(array( diff --git a/core/lib/Drupal/Component/Uuid/Com.php b/core/lib/Drupal/Component/Uuid/Com.php index 5a08294..21e39c0 100644 --- a/core/lib/Drupal/Component/Uuid/Com.php +++ b/core/lib/Drupal/Component/Uuid/Com.php @@ -2,7 +2,7 @@ /** * @file - * Definition of Drupal\Component\Uuid\Com. + * Contains \Drupal\Component\Uuid\Com. */ namespace Drupal\Component\Uuid; diff --git a/core/lib/Drupal/Component/Uuid/Pecl.php b/core/lib/Drupal/Component/Uuid/Pecl.php index 5eca5ed..3861138 100644 --- a/core/lib/Drupal/Component/Uuid/Pecl.php +++ b/core/lib/Drupal/Component/Uuid/Pecl.php @@ -2,7 +2,7 @@ /** * @file - * Definition of Drupal\Component\Uuid\Pecl. + * Contains \Drupal\Component\Uuid\Pecl. */ namespace Drupal\Component\Uuid; diff --git a/core/lib/Drupal/Component/Uuid/Php.php b/core/lib/Drupal/Component/Uuid/Php.php index 9c0a170..08c5261 100644 --- a/core/lib/Drupal/Component/Uuid/Php.php +++ b/core/lib/Drupal/Component/Uuid/Php.php @@ -2,7 +2,7 @@ /** * @file - * Definition of Drupal\Component\Uuid\Php. + * Contains \Drupal\Component\Uuid\Php. */ namespace Drupal\Component\Uuid; @@ -46,4 +46,5 @@ public function generate() { return $uuid; } + } diff --git a/core/lib/Drupal/Component/Uuid/Uuid.php b/core/lib/Drupal/Component/Uuid/Uuid.php index 5df83ce..bcda402 100644 --- a/core/lib/Drupal/Component/Uuid/Uuid.php +++ b/core/lib/Drupal/Component/Uuid/Uuid.php @@ -2,48 +2,21 @@ /** * @file - * Definition of Drupal\Component\Uuid\Uuid. + * Contains \Drupal\Component\Uuid\Uuid. */ namespace Drupal\Component\Uuid; /** - * Factory class for UUIDs. - * - * Determines which UUID implementation to use, and uses that to generate - * and validate UUIDs. + * UUID Helper methods. */ class Uuid { /** - * Holds the UUID implementation. - * - * @var Drupal\Component\Uuid\UuidInterface - */ - protected $plugin; - - /** - * Instantiates the correct UUID object. - */ - public function __construct() { - $class = $this->determinePlugin(); - $this->plugin = new $class(); - } - - /** - * Generates a universally unique identifier. - * - * @see Drupal\Component\Uuid\UuidInterface::generate() - */ - public function generate() { - return $this->plugin->generate(); - } - - /** * Checks that a string appears to be in the format of a UUID. * - * Plugins should not implement validation, since UUIDs should be in a - * consistent format across all plugins. + * Implementations should not implement validation, since UUIDs should be in + * a consistent format across all implementations. * * @param string $uuid * The string to test. @@ -51,37 +24,8 @@ public function generate() { * @return bool * TRUE if the string is well formed, FALSE otherwise. */ - public function isValid($uuid) { + public static function isValid($uuid) { return preg_match("/^[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$/", $uuid); } - /** - * Determines the optimal implementation to use for generating UUIDs. - * - * The selection is made based on the enabled PHP extensions with the - * most performant available option chosen. - * - * @return string - * The class name for the optimal UUID generator. - */ - protected function determinePlugin() { - static $plugin; - if (!empty($plugin)) { - return $plugin; - } - - $plugin = 'Drupal\Component\Uuid\Php'; - - // Debian/Ubuntu uses the (broken) OSSP extension as their UUID - // implementation. The OSSP implementation is not compatible with the - // PECL functions. - if (function_exists('uuid_create') && !function_exists('uuid_make')) { - $plugin = 'Drupal\Component\Uuid\Pecl'; - } - // Try to use the COM implementation for Windows users. - elseif (function_exists('com_create_guid')) { - $plugin = 'Drupal\Component\Uuid\Com'; - } - return $plugin; - } } diff --git a/core/lib/Drupal/Core/Config/ConfigImporter.php b/core/lib/Drupal/Core/Config/ConfigImporter.php index d496fe7..ba2ece6 100644 --- a/core/lib/Drupal/Core/Config/ConfigImporter.php +++ b/core/lib/Drupal/Core/Config/ConfigImporter.php @@ -10,6 +10,7 @@ use Drupal\Core\Config\Context\FreeConfigContext; use Drupal\Core\Entity\EntityManager; use Drupal\Core\Lock\LockBackendInterface; +use Drupal\Component\Uuid\UuidInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; /** @@ -95,6 +96,13 @@ class ConfigImporter { protected $validated; /** + * The UUID service. + * + * @var \Drupal\Component\Uuid\UuidInterface + */ + protected $uuidService; + + /** * Constructs a configuration import object. * * @param \Drupal\Core\Config\StorageComparerInterface $storage_comparer @@ -108,18 +116,21 @@ class ConfigImporter { * The entity manager used to import config entities. * @param \Drupal\Core\Lock\LockBackendInterface * The lock backend to ensure multiple imports do not occur at the same time. + * @param \Drupal\Component\Uuid\UuidInterface $uuid_service + * The UUID service. */ - public function __construct(StorageComparerInterface $storage_comparer, EventDispatcherInterface $event_dispatcher, ConfigFactory $config_factory, EntityManager $entity_manager, LockBackendInterface $lock) { + public function __construct(StorageComparerInterface $storage_comparer, EventDispatcherInterface $event_dispatcher, ConfigFactory $config_factory, EntityManager $entity_manager, LockBackendInterface $lock, UuidInterface $uuid_service) { $this->storageComparer = $storage_comparer; $this->eventDispatcher = $event_dispatcher; $this->configFactory = $config_factory; $this->entityManager = $entity_manager; $this->lock = $lock; + $this->uuidService = $uuid_service; $this->processed = $this->storageComparer->getEmptyChangelist(); // Use an override free context for importing so that overrides to do not // pollute the imported data. The context is hard coded to ensure this is // the case. - $this->context = new FreeConfigContext($this->eventDispatcher); + $this->context = new FreeConfigContext($this->eventDispatcher, $this->uuidService); } /** diff --git a/core/lib/Drupal/Core/Config/Context/ConfigContext.php b/core/lib/Drupal/Core/Config/Context/ConfigContext.php index a5382fd..128165b 100644 --- a/core/lib/Drupal/Core/Config/Context/ConfigContext.php +++ b/core/lib/Drupal/Core/Config/Context/ConfigContext.php @@ -10,7 +10,7 @@ use Drupal\Core\Config\Config; use Drupal\Core\Config\ConfigEvent; use Drupal\Component\Utility\NestedArray; -use Drupal\Component\Uuid\Uuid; +use Drupal\Component\Uuid\UuidInterface; use Symfony\Component\EventDispatcher\EventDispatcher; /** @@ -50,13 +50,23 @@ class ConfigContext implements ContextInterface { protected $uuid; /** + * The UUID service. + * + * @var \Drupal\Component\Uuid\UuidInterface + */ + protected $uuidService; + + /** * Constructs the configuration context. * * @param \Symfony\Component\EventDispatcher\EventDispatcher $event_dispatcher * An event dispatcher instance to use for configuration events. + * @param \Drupal\Component\Uuid\UuidInterface + * The UUID service. */ - public function __construct(EventDispatcher $event_dispatcher) { + public function __construct(EventDispatcher $event_dispatcher, UuidInterface $uuid) { $this->eventDispatcher = $event_dispatcher; + $this->uuidService = $uuid; } /** @@ -89,8 +99,7 @@ public function set($key, $value) { * Implements \Drupal\Core\Config\Context\ContextInterface::setUuid(). */ public function setUuid() { - $uuid = new Uuid(); - $this->uuid = $uuid->generate(); + $this->uuid = $this->uuidService->generate(); } /** diff --git a/core/lib/Drupal/Core/Config/Context/ConfigContextFactory.php b/core/lib/Drupal/Core/Config/Context/ConfigContextFactory.php index 1642380..de3fd7b 100644 --- a/core/lib/Drupal/Core/Config/Context/ConfigContextFactory.php +++ b/core/lib/Drupal/Core/Config/Context/ConfigContextFactory.php @@ -9,6 +9,7 @@ use Drupal\Core\Config\Config; use Drupal\Core\Config\ConfigException; +use Drupal\Component\Uuid\UuidInterface; use Symfony\Component\EventDispatcher\EventDispatcher; /** @@ -28,13 +29,23 @@ class ConfigContextFactory { protected $eventDispatcher; /** + * The UUID service. + * + * @var \Drupal\Component\Uuid\UuidInterface + */ + protected $uuidService; + + /** * Constructs the configuration context. * * @param \Symfony\Component\EventDispatcher\EventDispatcher $event_dispatcher * An event dispatcher instance to use for configuration events. + * @param \Drupal\Component\Uuid\UuidInterface + * The UUID service. */ - public function __construct(EventDispatcher $event_dispatcher) { + public function __construct(EventDispatcher $event_dispatcher, UuidInterface $uuid) { $this->eventDispatcher = $event_dispatcher; + $this->uuidService = $uuid; } /** @@ -52,7 +63,7 @@ public function get($class = NULL) { $class = 'Drupal\Core\Config\Context\ConfigContext'; } if (class_exists($class)) { - $context = new $class($this->eventDispatcher); + $context = new $class($this->eventDispatcher, $this->uuidService); } else { throw new ConfigException(sprintf('Unknown config context class: %s', $class)); diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php index 8cfc060..e034d0b 100644 --- a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php +++ b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php @@ -7,7 +7,6 @@ namespace Drupal\Core\Config\Entity; -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityMalformedException; use Drupal\Core\Entity\EntityStorageControllerBase; @@ -15,6 +14,7 @@ use Drupal\Core\Config\ConfigFactory; use Drupal\Core\Config\StorageInterface; use Drupal\Core\Entity\Query\QueryFactory; +use Drupal\Component\Uuid\UuidInterface; use Symfony\Component\DependencyInjection\ContainerInterface; /** @@ -42,6 +42,13 @@ class ConfigStorageController extends EntityStorageControllerBase { protected $uuidKey = 'uuid'; /** + * The UUID service. + * + * @var \Drupal\Component\Uuid\UuidInterface + */ + protected $uuidService; + + /** * Name of the entity's status key or FALSE if a status is not supported. * * @var string|bool @@ -82,8 +89,10 @@ class ConfigStorageController extends EntityStorageControllerBase { * The config storage service. * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query_factory * The entity query factory. + * @param \Drupal\Component\Uuid\UuidInterface $uuid_service + * The UUID service. */ - public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory) { + public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, UuidInterface $uuid_service) { parent::__construct($entity_type, $entity_info); $this->idKey = $this->entityInfo['entity_keys']['id']; @@ -98,6 +107,7 @@ public function __construct($entity_type, array $entity_info, ConfigFactory $con $this->configFactory = $config_factory; $this->configStorage = $config_storage; $this->entityQueryFactory = $entity_query_factory; + $this->uuidService = $uuid_service; } /** @@ -109,7 +119,8 @@ public static function createInstance(ContainerInterface $container, $entity_typ $entity_info, $container->get('config.factory'), $container->get('config.storage'), - $container->get('entity.query') + $container->get('entity.query'), + $container->get('uuid') ); } @@ -323,8 +334,7 @@ public function create(array $values) { // Assign a new UUID if there is none yet. if (!isset($entity->{$this->uuidKey})) { - $uuid = new Uuid(); - $entity->{$this->uuidKey} = $uuid->generate(); + $entity->{$this->uuidKey} = $this->uuidService->generate(); } $entity->postCreate($this); diff --git a/core/lib/Drupal/Core/CoreServiceProvider.php b/core/lib/Drupal/Core/CoreServiceProvider.php index a6cb957..9cd8f5a 100644 --- a/core/lib/Drupal/Core/CoreServiceProvider.php +++ b/core/lib/Drupal/Core/CoreServiceProvider.php @@ -50,6 +50,7 @@ public function register(ContainerBuilder $container) { $container->addScope(new Scope('request')); $this->registerTwig($container); $this->registerModuleHandler($container); + $this->registerUuid($container); $container->addCompilerPass(new RegisterRouteFiltersPass()); // Add a compiler pass for registering event subscribers. @@ -133,4 +134,31 @@ public static function registerTwig(ContainerBuilder $container) { ->addMethodCall('addExtension', array(new Definition('Twig_Extension_Debug'))); } + /** + * Determines and registers the UUID service. + * + * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container + * The container. + * + * @return string + * Class name for the UUID service. + */ + public static function registerUuid(ContainerBuilder $container) { + $uuid_class = 'Drupal\Component\Uuid\Php'; + + // Debian/Ubuntu uses the (broken) OSSP extension as their UUID + // implementation. The OSSP implementation is not compatible with the + // PECL functions. + if (function_exists('uuid_create') && !function_exists('uuid_make')) { + $uuid_class = 'Drupal\Component\Uuid\Pecl'; + } + // Try to use the COM implementation for Windows users. + elseif (function_exists('com_create_guid')) { + $uuid_class = 'Drupal\Component\Uuid\Com'; + } + + $container->register('uuid', $uuid_class); + return $uuid_class; + } + } diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php index bbf1ae0..bf8bb4f 100644 --- a/core/lib/Drupal/Core/Entity/DatabaseStorageController.php +++ b/core/lib/Drupal/Core/Entity/DatabaseStorageController.php @@ -11,8 +11,8 @@ use PDO; use Drupal\Core\Cache\CacheBackendInterface; use Drupal\Core\Entity\Query\QueryInterface; -use Drupal\Component\Uuid\Uuid; use Drupal\Component\Utility\NestedArray; +use Drupal\Component\Uuid\UuidInterface; use Drupal\Core\Database\Connection; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -27,6 +27,13 @@ class DatabaseStorageController extends EntityStorageControllerBase { /** + * The UUID service. + * + * @var \Drupal\Component\Uuid\UuidInterface + */ + protected $uuidService; + + /** * Name of entity's revision database table field, if it supports revisions. * * Has the value FALSE if this entity does not use revisions. @@ -65,7 +72,8 @@ public static function createInstance(ContainerInterface $container, $entity_typ return new static( $entity_type, $entity_info, - $container->get('database') + $container->get('database'), + $container->get('uuid') ); } @@ -78,11 +86,14 @@ public static function createInstance(ContainerInterface $container, $entity_typ * An array of entity info for the entity type. * @param \Drupal\Core\Database\Connection $database * The database connection to be used. + * @param \Drupal\Component\Uuid\UuidInterface $uuid_service + * The UUID service. */ - public function __construct($entity_type, array $entity_info, Connection $database) { + public function __construct($entity_type, array $entity_info, Connection $database, UuidInterface $uuid_service) { parent::__construct($entity_type, $entity_info); $this->database = $database; + $this->uuidService = $uuid_service; // Check if the entity type supports IDs. if (isset($this->entityInfo['entity_keys']['id'])) { @@ -370,8 +381,7 @@ public function create(array $values) { // Assign a new UUID if there is none yet. if ($this->uuidKey && !isset($entity->{$this->uuidKey})) { - $uuid = new Uuid(); - $entity->{$this->uuidKey} = $uuid->generate(); + $entity->{$this->uuidKey} = $this->uuidService->generate(); } $entity->postCreate($this); diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php index ad361d7..7073ec0 100644 --- a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php +++ b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php @@ -14,7 +14,7 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\DatabaseStorageController; use Drupal\Core\Entity\EntityStorageException; -use Drupal\Component\Uuid\Uuid; +use Drupal\Component\Uuid\UuidInterface; use Drupal\Core\Database\Connection; /** @@ -53,8 +53,8 @@ class DatabaseStorageControllerNG extends DatabaseStorageController { /** * Overrides DatabaseStorageController::__construct(). */ - public function __construct($entity_type, array $entity_info, Connection $database) { - parent::__construct($entity_type,$entity_info, $database); + public function __construct($entity_type, array $entity_info, Connection $database, UuidInterface $uuid_service) { + parent::__construct($entity_type,$entity_info, $database, $uuid_service); $this->bundleKey = !empty($this->entityInfo['entity_keys']['bundle']) ? $this->entityInfo['entity_keys']['bundle'] : FALSE; $this->entityClass = $this->entityInfo['class']; diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php index ec05c1a..1966010 100644 --- a/core/lib/Drupal/Core/Entity/Entity.php +++ b/core/lib/Drupal/Core/Entity/Entity.php @@ -7,7 +7,6 @@ namespace Drupal\Core\Entity; -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Language\Language; use Drupal\Core\TypedData\TranslatableInterface; use Drupal\Core\TypedData\TypedDataInterface; @@ -376,8 +375,8 @@ public function createDuplicate() { // Check if the entity type supports UUIDs and generate a new one if so. if (!empty($entity_info['entity_keys']['uuid'])) { - $uuid = new Uuid(); - $duplicate->{$entity_info['entity_keys']['uuid']} = $uuid->generate(); + // @todo Inject the UUID service into the Entity class once possible. + $duplicate->{$entity_info['entity_keys']['uuid']} = \Drupal::service('uuid')->generate(); } return $duplicate; } diff --git a/core/lib/Drupal/Core/Entity/EntityNG.php b/core/lib/Drupal/Core/Entity/EntityNG.php index ac975d1..ffd3a76 100644 --- a/core/lib/Drupal/Core/Entity/EntityNG.php +++ b/core/lib/Drupal/Core/Entity/EntityNG.php @@ -57,6 +57,7 @@ class EntityNG extends Entity { * * @todo: Add methods for getting original fields and for determining * changes. + * @todo: Provide a better way for defining default values. * * @var array */ @@ -789,7 +790,8 @@ public function createDuplicate() { // Check if the entity type supports UUIDs and generate a new one if so. if (!empty($entity_info['entity_keys']['uuid'])) { - $duplicate->{$entity_info['entity_keys']['uuid']}->applyDefaultValue(); + // @todo Inject the UUID service into the Entity class once possible. + $duplicate->{$entity_info['entity_keys']['uuid']}->value = \Drupal::service('uuid')->generate(); } // Check whether the entity type supports revisions and initialize it if so. diff --git a/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php b/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php index 737409d..d06e69d 100644 --- a/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php +++ b/core/lib/Drupal/Core/Entity/Plugin/DataType/UuidItem.php @@ -9,7 +9,6 @@ use Drupal\Core\TypedData\Annotation\DataType; use Drupal\Core\Annotation\Translation; -use Drupal\Component\Uuid\Uuid; /** * Defines the 'uuid_field' entity field item. @@ -35,7 +34,7 @@ class UuidItem extends StringItem { */ public function applyDefaultValue($notify = TRUE) { // Default to one field item with a generated UUID. - $uuid = new Uuid(); + $uuid = \Drupal::service('uuid'); $this->setValue(array('value' => $uuid->generate()), $notify); return $this; } diff --git a/core/modules/block/block.install b/core/modules/block/block.install index 3c1755f..abdd944 100644 --- a/core/modules/block/block.install +++ b/core/modules/block/block.install @@ -4,7 +4,7 @@ * @file * Install, update and uninstall functions for the block module. */ -use Drupal\Component\Uuid\Uuid; + use Drupal\Core\Language\Language; /** @@ -194,7 +194,7 @@ function block_update_8007() { // Populate the {custom_block} and {custom_block_revision} table. $results = db_select('block_custom', 'bc')->fields('bc')->execute(); - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $execute = FALSE; $block_insert = db_insert('custom_block')->fields(array( 'id', diff --git a/core/modules/comment/lib/Drupal/comment/CommentStorageController.php b/core/modules/comment/lib/Drupal/comment/CommentStorageController.php index 8cd1a53..298147b 100644 --- a/core/modules/comment/lib/Drupal/comment/CommentStorageController.php +++ b/core/modules/comment/lib/Drupal/comment/CommentStorageController.php @@ -9,7 +9,6 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\DatabaseStorageControllerNG; -use Drupal\Component\Uuid\Uuid; use LogicException; /** diff --git a/core/modules/config/lib/Drupal/config/Form/ConfigSync.php b/core/modules/config/lib/Drupal/config/Form/ConfigSync.php index 8c5cb96..5ef0722 100644 --- a/core/modules/config/lib/Drupal/config/Form/ConfigSync.php +++ b/core/modules/config/lib/Drupal/config/Form/ConfigSync.php @@ -10,6 +10,8 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\DependencyInjection\ContainerInterface; +use Drupal\Component\Uuid\UuidInterface; + use Drupal\Core\Controller\ControllerInterface; use Drupal\Core\Form\FormInterface; use Drupal\Core\Config\StorageInterface; @@ -81,10 +83,15 @@ class ConfigSync implements ControllerInterface, FormInterface { protected $urlGenerator; /** + * The UUID service. + * + * @var \Drupal\Component\Uuid\UuidInterface + */ + protected $uuidService; + + /** * Constructs the object. * - * @param \Drupal\Core\Database\Connection; $database - * The database object. * @param \Drupal\Core\Config\StorageInterface $sourceStorage * The source storage object. * @param \Drupal\Core\Config\StorageInterface $targetStorage @@ -95,14 +102,13 @@ class ConfigSync implements ControllerInterface, FormInterface { * Event dispatcher. * @param \Drupal\Core\Config\ConfigFactory $config_factory * Configuration object factory. - * @param \Drupal\Core\Entity\EntityManager - * Entity manager. * @param \Drupal\Core\StringTranslation\Translator\TranslatorInterface $translation_manager * The translation manager. * @param \Drupal\Core\Routing\PathBasedGeneratorInterface $url_generator * The url generator service. + * @param \Drupal\Component\Uuid\UuidInterface $uuid_service */ - public function __construct(StorageInterface $sourceStorage, StorageInterface $targetStorage, LockBackendInterface $lock, EventDispatcherInterface $event_dispatcher, ConfigFactory $config_factory, EntityManager $entity_manger, TranslatorInterface $translation_manager, PathBasedGeneratorInterface $url_generator) { + public function __construct(StorageInterface $sourceStorage, StorageInterface $targetStorage, LockBackendInterface $lock, EventDispatcherInterface $event_dispatcher, ConfigFactory $config_factory, EntityManager $entity_manger, TranslatorInterface $translation_manager, PathBasedGeneratorInterface $url_generator, UuidInterface $uuid_service) { $this->sourceStorage = $sourceStorage; $this->targetStorage = $targetStorage; $this->lock = $lock; @@ -111,6 +117,7 @@ public function __construct(StorageInterface $sourceStorage, StorageInterface $t $this->entity_manager = $entity_manger; $this->translationManager = $translation_manager; $this->urlGenerator = $url_generator; + $this->uuidService = $uuid_service; } /** @@ -125,7 +132,8 @@ public static function create(ContainerInterface $container) { $container->get('config.factory'), $container->get('plugin.manager.entity'), $container->get('string_translation'), - $container->get('url_generator') + $container->get('url_generator'), + $container->get('uuid') ); } @@ -234,7 +242,8 @@ public function submitForm(array &$form, array &$form_state) { $this->eventDispatcher, $this->configFactory, $this->entity_manager, - $this->lock + $this->lock, + $this->uuidService ); if ($config_importer->alreadyImporting()) { drupal_set_message($this->translationManager->translate('Another request may be synchronizing configuration already.')); diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityStorageControllerTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityStorageControllerTest.php index c4bb60a..5ab2ea4 100644 --- a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityStorageControllerTest.php +++ b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityStorageControllerTest.php @@ -8,7 +8,6 @@ namespace Drupal\config\Tests; use Drupal\simpletest\DrupalUnitTestBase; -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Config\ConfigDuplicateUUIDException; /** @@ -44,8 +43,7 @@ public function testUUIDConflict() { $original_properties = $entity->getExportProperties(); // Override with a new UUID and try to save. - $uuid = new Uuid(); - $new_uuid = $uuid->generate(); + $new_uuid = $this->container->get('uuid')->generate(); $entity->set('uuid', $new_uuid); try { diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigImporterTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigImporterTest.php index f51e221..7751673 100644 --- a/core/modules/config/lib/Drupal/config/Tests/ConfigImporterTest.php +++ b/core/modules/config/lib/Drupal/config/Tests/ConfigImporterTest.php @@ -60,7 +60,8 @@ function setUp() { $this->container->get('event_dispatcher'), $this->container->get('config.factory'), $this->container->get('plugin.manager.entity'), - $this->container->get('lock') + $this->container->get('lock'), + $this->container->get('uuid') ); $this->copyConfig($this->container->get('config.storage'), $this->container->get('config.storage.staging')); } diff --git a/core/modules/contact/contact.install b/core/modules/contact/contact.install index 60b51b0..de54df5 100644 --- a/core/modules/contact/contact.install +++ b/core/modules/contact/contact.install @@ -5,7 +5,6 @@ * Install, update and uninstall functions for the contact module. */ -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Language\Language; /** @@ -54,7 +53,7 @@ function contact_update_8000() { * @ingroup config_upgrade */ function contact_update_8001() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $result = db_query('SELECT * FROM {contact}'); foreach ($result as $category) { // Take over the category's serial ID as new machine name. diff --git a/core/modules/entity/entity.install b/core/modules/entity/entity.install index 9cbd71e..884ffa0 100644 --- a/core/modules/entity/entity.install +++ b/core/modules/entity/entity.install @@ -5,8 +5,6 @@ * Install, update and uninstall functions for the entity module. */ -use Drupal\Component\Uuid\Uuid; - /** * Returns the raw configuration object for an EntityDisplay entity. * @@ -31,7 +29,7 @@ function _update_8000_entity_get_display($entity_type, $bundle, $view_mode) { } // Initialize a fresh structure. - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $properties = array( 'id' => $id, 'uuid' => $uuid->generate(), @@ -70,7 +68,7 @@ function _update_8000_entity_get_form_display($entity_type, $bundle, $form_mode) } // Initialize a fresh structure. - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $properties = array( 'id' => $id, 'uuid' => $uuid->generate(), diff --git a/core/modules/field/field.install b/core/modules/field/field.install index c46346a..cbb5fd8 100644 --- a/core/modules/field/field.install +++ b/core/modules/field/field.install @@ -5,7 +5,6 @@ * Install, update, and uninstall functions for the Field module. */ -use Drupal\Component\Uuid\Uuid; use Drupal\field\Plugin\Core\Entity\Field; /** @@ -25,7 +24,7 @@ * @ingroup update_api */ function _update_8003_field_create_field(array &$field_config) { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); // Merge in default values. $field_config += array( @@ -74,7 +73,7 @@ function _update_8003_field_create_field(array &$field_config) { * @ingroup update_api */ function _update_8003_field_create_instance(array $field_config, array &$instance_config) { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); // Merge in defaults. $instance_config += array( @@ -246,8 +245,7 @@ function field_update_8002() { * Convert fields and instances to config. */ function field_update_8003() { - $uuid = new Uuid(); - + $uuid = Drupal::service('uuid'); $state = Drupal::state(); $deleted_fields = $state->get('field.field.deleted') ?: array(); $deleted_instances = $state->get('field.instance.deleted') ?: array(); @@ -388,7 +386,7 @@ function field_update_8004() { * the user.user.register form display. */ function field_update_8005() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $user_default_form_display = Drupal::config('entity.form_display.user.user.default'); $user_register_config_data = array( diff --git a/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php b/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php index f9ce249..3fbe680 100644 --- a/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php +++ b/core/modules/field/lib/Drupal/field/FieldInstanceStorageController.php @@ -12,6 +12,7 @@ use Drupal\Core\Entity\Query\QueryFactory; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\Config\ConfigFactory; +use Drupal\Component\Uuid\UuidInterface; use Drupal\Core\Config\StorageInterface; use Drupal\Core\Entity\EntityManager; use Drupal\Core\Extension\ModuleHandler; @@ -59,6 +60,10 @@ class FieldInstanceStorageController extends ConfigStorageController { * The config factory service. * @param \Drupal\Core\Config\StorageInterface $config_storage * The config storage service. + * @param \Drupal\Component\Uuid\UuidInterface $uuid_service + * The UUID service. + * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query_factory + * The entity query factory. * @param \Drupal\Core\Entity\EntityManager $entity_manager * The entity manager. * @param \Drupal\Core\Extension\ModuleHandler $module_handler @@ -66,8 +71,8 @@ class FieldInstanceStorageController extends ConfigStorageController { * @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state * The state key value store. */ - public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, EntityManager $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) { - parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory); + public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, UuidInterface $uuid_service, QueryFactory $entity_query_factory, EntityManager $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) { + parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory, $uuid_service); $this->entityManager = $entity_manager; $this->moduleHandler = $module_handler; $this->state = $state; @@ -82,6 +87,7 @@ public static function createInstance(ContainerInterface $container, $entity_typ $entity_info, $container->get('config.factory'), $container->get('config.storage'), + $container->get('uuid'), $container->get('entity.query'), $container->get('plugin.manager.entity'), $container->get('module_handler'), diff --git a/core/modules/field/lib/Drupal/field/FieldStorageController.php b/core/modules/field/lib/Drupal/field/FieldStorageController.php index 41efe60..e234ab9 100644 --- a/core/modules/field/lib/Drupal/field/FieldStorageController.php +++ b/core/modules/field/lib/Drupal/field/FieldStorageController.php @@ -7,6 +7,7 @@ namespace Drupal\field; +use Drupal\Component\Uuid\UuidInterface; use Drupal\Core\Config\Config; use Drupal\Core\Config\Entity\ConfigStorageController; use Drupal\Core\Entity\Query\QueryFactory; @@ -54,6 +55,10 @@ class FieldStorageController extends ConfigStorageController { * The config factory service. * @param \Drupal\Core\Config\StorageInterface $config_storage * The config storage service. + * @param \Drupal\Component\Uuid\UuidInterface $uuid_service + * The UUID service. + * @param \Drupal\Core\Entity\Query\QueryFactory $entity_query_factory + * The entity query factory. * @param \Drupal\Core\Entity\EntityManager $entity_manager * The entity manager. * @param \Drupal\Core\Extension\ModuleHandler $module_handler @@ -61,9 +66,8 @@ class FieldStorageController extends ConfigStorageController { * @param \Drupal\Core\KeyValueStore\KeyValueStoreInterface $state * The state key value store. */ - public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, QueryFactory $entity_query_factory, EntityManager $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) { - parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory); - + public function __construct($entity_type, array $entity_info, ConfigFactory $config_factory, StorageInterface $config_storage, UuidInterface $uuid_service, QueryFactory $entity_query_factory, EntityManager $entity_manager, ModuleHandler $module_handler, KeyValueStoreInterface $state) { + parent::__construct($entity_type, $entity_info, $config_factory, $config_storage, $entity_query_factory, $uuid_service); $this->entityManager = $entity_manager; $this->moduleHandler = $module_handler; $this->state = $state; @@ -78,6 +82,7 @@ public static function createInstance(ContainerInterface $container, $entity_typ $entity_info, $container->get('config.factory'), $container->get('config.storage'), + $container->get('uuid'), $container->get('entity.query'), $container->get('plugin.manager.entity'), $container->get('module_handler'), diff --git a/core/modules/filter/filter.install b/core/modules/filter/filter.install index 8508e9d..a9d0129 100644 --- a/core/modules/filter/filter.install +++ b/core/modules/filter/filter.install @@ -5,8 +5,6 @@ * Install, update, and uninstall functions for the Filter module. */ -use Drupal\Component\Uuid\Uuid; - /** * @addtogroup updates-7.x-to-8.x * @{ @@ -29,7 +27,7 @@ function filter_update_8000() { * @ingroup config_upgrade */ function filter_update_8001() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $result = db_query('SELECT format, name, cache, status, weight FROM {filter_format}', array(), array('fetch' => PDO::FETCH_ASSOC)); foreach ($result as $format) { $id = $format['format']; diff --git a/core/modules/image/image.install b/core/modules/image/image.install index 39ddedf..182eb71 100644 --- a/core/modules/image/image.install +++ b/core/modules/image/image.install @@ -5,8 +5,6 @@ * Install, update and uninstall functions for the image module. */ -use Drupal\Component\Uuid\Uuid; - /** * Implements hook_install(). */ @@ -128,7 +126,7 @@ function _image_update_get_style_with_effects(array $style) { $effect['data'] = unserialize($effect['data']); // Generate a unique image effect ID for the effect. - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $effect['uuid'] = $uuid->generate(); // Use 'id' instead of 'name'. diff --git a/core/modules/image/lib/Drupal/image/ImageEffectBag.php b/core/modules/image/lib/Drupal/image/ImageEffectBag.php index 7d0c8eb..e7d9899 100644 --- a/core/modules/image/lib/Drupal/image/ImageEffectBag.php +++ b/core/modules/image/lib/Drupal/image/ImageEffectBag.php @@ -8,7 +8,6 @@ namespace Drupal\image; use Drupal\Component\Utility\MapArray; -use Drupal\Component\Uuid\Uuid; use Drupal\Component\Plugin\DefaultPluginBag; /** @@ -51,7 +50,7 @@ public function removeInstanceID($instance_id) { public function updateConfiguration(array $configuration) { // Derive the instance ID from the configuration. if (empty($configuration['uuid'])) { - $uuid_generator = new Uuid(); + $uuid_generator = \Drupal::service('uuid'); $configuration['uuid'] = $uuid_generator->generate(); } $instance_id = $configuration['uuid']; diff --git a/core/modules/language/language.install b/core/modules/language/language.install index 42f9c37..5325cf9 100644 --- a/core/modules/language/language.install +++ b/core/modules/language/language.install @@ -5,7 +5,6 @@ * Install, update and uninstall functions for the language module. */ -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Language\Language; /** diff --git a/core/modules/menu/menu.install b/core/modules/menu/menu.install index f1fc64d..c802e6f 100644 --- a/core/modules/menu/menu.install +++ b/core/modules/menu/menu.install @@ -5,8 +5,6 @@ * Install, update and uninstall functions for the menu module. */ -use Drupal\Component\Uuid\Uuid; - /** * Implements hook_uninstall(). */ @@ -76,7 +74,7 @@ function menu_update_8003() { * @ingroup config_upgrade */ function menu_update_8004() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $result = db_query('SELECT * FROM {menu_custom}'); foreach ($result as $menu) { // Save the config object. diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php index 43d54ce..2a5ff20 100644 --- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php +++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php @@ -11,6 +11,7 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityStorageException; use Drupal\Core\Database\Connection; +use Drupal\Component\Uuid\UuidInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Cmf\Component\Routing\RouteProviderInterface; @@ -52,11 +53,13 @@ class MenuLinkStorageController extends DatabaseStorageController implements Men * An array of entity info for the entity type. * @param \Drupal\Core\Database\Connection $database * The database connection to be used. + * @param \Drupal\Component\Uuid\UuidInterface $uuid_service + * The UUID service. * @param \Symfony\Cmf\Component\Routing\RouteProviderInterface $route_provider * The route provider service. */ - public function __construct($entity_type, array $entity_info, Connection $database, RouteProviderInterface $route_provider) { - parent::__construct($entity_type, $entity_info, $database); + public function __construct($entity_type, array $entity_info, Connection $database, UuidInterface $uuid_service, RouteProviderInterface $route_provider) { + parent::__construct($entity_type, $entity_info, $database, $uuid_service); $this->routeProvider = $route_provider; @@ -85,6 +88,7 @@ public static function createInstance(ContainerInterface $container, $entity_typ $entity_type, $entity_info, $container->get('database'), + $container->get('uuid'), $container->get('router.route_provider') ); } diff --git a/core/modules/node/node.install b/core/modules/node/node.install index 7b42475..65dc9f8 100644 --- a/core/modules/node/node.install +++ b/core/modules/node/node.install @@ -5,7 +5,6 @@ * Install, update and uninstall functions for the node module. */ -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Language\Language; /** @@ -1069,7 +1068,7 @@ function node_update_8019() { * @ingroup config_upgrade */ function node_update_8020() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); // Properties to drop: custom, disabled. $locked = array(); // Note: {node_type}.name was the label, .type the machine name. diff --git a/core/modules/rdf/rdf.install b/core/modules/rdf/rdf.install index 117c910..04c1e62 100644 --- a/core/modules/rdf/rdf.install +++ b/core/modules/rdf/rdf.install @@ -5,7 +5,6 @@ * Install, update and uninstall functions for the rdf module. */ -use Drupal\Component\Uuid\Uuid; /** * Convert RDF mappings to configuration. @@ -13,7 +12,7 @@ * @ingroup config_upgrade */ function rdf_update_8000() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $query = db_query("SELECT * FROM {rdf_mapping}"); // Iterate through all the stored mappings. diff --git a/core/modules/shortcut/shortcut.install b/core/modules/shortcut/shortcut.install index 76e7097..c534b57 100644 --- a/core/modules/shortcut/shortcut.install +++ b/core/modules/shortcut/shortcut.install @@ -5,8 +5,6 @@ * Install, update and uninstall functions for the shortcut module. */ -use Drupal\Component\Uuid\Uuid; - /** * Implements hook_uninstall(). */ @@ -68,7 +66,7 @@ function shortcut_schema() { * Migrate shortcuts into configuration. */ function shortcut_update_8000() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $result = db_query('SELECT * from {shortcut_set}'); $ids = array(); foreach ($result as $set) { diff --git a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php index 04e98f1..837804b 100644 --- a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php +++ b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php @@ -1305,7 +1305,8 @@ public function configImporter() { $this->container->get('event_dispatcher'), $this->container->get('config.factory'), $this->container->get('plugin.manager.entity'), - $this->container->get('lock') + $this->container->get('lock'), + $this->container->get('uuid') ); } // Always recalculate the changelist when called. diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFieldDefaultValueTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFieldDefaultValueTest.php index b070026..5498550 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFieldDefaultValueTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFieldDefaultValueTest.php @@ -7,8 +7,8 @@ namespace Drupal\system\Tests\Entity; -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Language\Language; +use Drupal\Component\Uuid\Uuid; /** * Tests Entity API default field value functionality. @@ -33,7 +33,7 @@ public static function getInfo() { public function setUp() { parent::setUp(); // Initiate the generator object. - $this->uuid = new Uuid(); + $this->uuid = $this->container->get('uuid'); } /** @@ -55,7 +55,7 @@ public function testDefaultValues() { protected function assertDefaultValues($entity_type) { $entity = entity_create($entity_type, array()); $this->assertEqual($entity->langcode->value, Language::LANGCODE_NOT_SPECIFIED, format_string('%entity_type: Default language', array('%entity_type' => $entity_type))); - $this->assertTrue($this->uuid->isValid($entity->uuid->value), format_string('%entity_type: Default UUID', array('%entity_type' => $entity_type))); + $this->assertTrue(Uuid::isValid($entity->uuid->value), format_string('%entity_type: Default UUID', array('%entity_type' => $entity_type))); $this->assertEqual($entity->name->getValue(), array(0 => array('value' => NULL)), 'Field has one empty value by default.'); } } diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUUIDTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUUIDTest.php index 0168bb3..86ae833 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUUIDTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityUUIDTest.php @@ -7,8 +7,6 @@ namespace Drupal\system\Tests\Entity; -use Drupal\Component\Uuid\Uuid; - /** * Tests creation, saving, and loading of entity UUIDs. */ @@ -54,7 +52,7 @@ function testCRUD() { */ protected function assertCRUD($entity_type) { // Verify that no UUID is auto-generated when passing one for creation. - $uuid_service = new Uuid(); + $uuid_service = $this->container->get('uuid'); $uuid = $uuid_service->generate(); $custom_entity = entity_create($entity_type, array( 'name' => $this->randomName(), diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UuidUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UuidUpgradePathTest.php index cf3fb2c..3299d22 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UuidUpgradePathTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UuidUpgradePathTest.php @@ -18,7 +18,7 @@ class UuidUpgradePathTest extends UpgradePathTestBase { public static function getInfo() { return array( - 'name' => 'Uuid upgrade test', + 'name' => 'UUID upgrade test', 'description' => 'Upgrade tests for a node and user data.', 'group' => 'Upgrade path', ); diff --git a/core/modules/system/lib/Drupal/system/Tests/Uuid/UuidUnitTest.php b/core/modules/system/lib/Drupal/system/Tests/Uuid/UuidUnitTest.php deleted file mode 100644 index f2dcdcc..0000000 --- a/core/modules/system/lib/Drupal/system/Tests/Uuid/UuidUnitTest.php +++ /dev/null @@ -1,77 +0,0 @@ - 'UUID handling', - 'description' => "Test the handling of Universally Unique IDentifiers (UUIDs).", - 'group' => 'UUID', - ); - } - - public function setUp() { - // Initiate the generator object. - $this->uuid = new Uuid(); - parent::setUp(); - } - - /** - * Tests generating a UUID. - */ - public function testGenerateUuid() { - $uuid = $this->uuid->generate(); - $this->assertTrue($this->uuid->isValid($uuid), 'UUID generation works.'); - } - - /** - * Tests that generated UUIDs are unique. - */ - public function testUuidIsUnique() { - $uuid1 = $this->uuid->generate(); - $uuid2 = $this->uuid->generate(); - $this->assertNotEqual($uuid1, $uuid2, 'Same UUID was not generated twice.'); - } - - /** - * Tests UUID validation. - */ - function testUuidValidation() { - // These valid UUIDs. - $uuid_fqdn = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; - $uuid_min = '00000000-0000-0000-0000-000000000000'; - $uuid_max = 'ffffffff-ffff-ffff-ffff-ffffffffffff'; - - $this->assertTrue($this->uuid->isValid($uuid_fqdn), format_string('FQDN namespace UUID (@uuid) is valid', array('@uuid' => $uuid_fqdn))); - $this->assertTrue($this->uuid->isValid($uuid_min), format_string('Minimum UUID value (@uuid) is valid', array('@uuid' => $uuid_min))); - $this->assertTrue($this->uuid->isValid($uuid_max), format_string('Maximum UUID value (@uuid) is valid', array('@uuid' => $uuid_max))); - - // These are invalid UUIDs. - $invalid_format = '0ab26e6b-f074-4e44-9da-601205fa0e976'; - $invalid_length = '0ab26e6b-f074-4e44-9daf-1205fa0e9761f'; - - $this->assertFalse($this->uuid->isValid($invalid_format), format_string('@uuid is not a valid UUID', array('@uuid' => $invalid_format))); - $this->assertFalse($this->uuid->isValid($invalid_length), format_string('@uuid is not a valid UUID', array('@uuid' => $invalid_length))); - - } -} diff --git a/core/modules/system/system.install b/core/modules/system/system.install index 3f0fac0..d8a43c3 100644 --- a/core/modules/system/system.install +++ b/core/modules/system/system.install @@ -6,7 +6,6 @@ */ use Drupal\Component\Utility\Crypt; -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Database\Database; use Drupal\Core\Language\Language; @@ -1875,7 +1874,7 @@ function system_update_8044() { * @ingroup config_upgrade */ function system_update_8045() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); // Fetch all date types from {date_format_type}. $date_formats = db_query('SELECT * FROM {date_format_type}')->fetchAllAssoc('type', PDO::FETCH_ASSOC); if (!empty($date_formats)) { diff --git a/core/modules/taxonomy/taxonomy.install b/core/modules/taxonomy/taxonomy.install index f89db3a..4aad595 100644 --- a/core/modules/taxonomy/taxonomy.install +++ b/core/modules/taxonomy/taxonomy.install @@ -5,7 +5,6 @@ * Install, update and uninstall functions for the taxonomy module. */ -use Drupal\Component\Uuid\Uuid; use Drupal\field\Plugin\Core\Entity\Field; /** @@ -308,7 +307,7 @@ function taxonomy_update_8004() { * Convert vocabularies into configuration. */ function taxonomy_update_8005() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $result = db_query('SELECT * FROM {taxonomy_vocabulary}'); foreach ($result as $vocabulary) { diff --git a/core/modules/user/lib/Drupal/user/UserStorageController.php b/core/modules/user/lib/Drupal/user/UserStorageController.php index a441023..ef44662 100644 --- a/core/modules/user/lib/Drupal/user/UserStorageController.php +++ b/core/modules/user/lib/Drupal/user/UserStorageController.php @@ -11,6 +11,7 @@ use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Password\PasswordInterface; use Drupal\Core\Database\Connection; +use Drupal\Component\Uuid\UuidInterface; use Drupal\user\UserDataInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Drupal\Core\Entity\DatabaseStorageControllerNG; @@ -46,13 +47,15 @@ class UserStorageController extends DatabaseStorageControllerNG implements UserS * An array of entity info for the entity type. * @param \Drupal\Core\Database\Connection $database * The database connection to be used. + * @param \Drupal\Component\Uuid\UuidInterface $uuid_service + * The UUID service. * @param \Drupal\Core\Password\PasswordInterface $password * The password hashing service. * @param \Drupal\user\UserDataInterface $user_data * The user data service. */ - public function __construct($entity_type, $entity_info, Connection $database, PasswordInterface $password, UserDataInterface $user_data) { - parent::__construct($entity_type, $entity_info, $database); + public function __construct($entity_type, $entity_info, Connection $database, UuidInterface $uuid_service, PasswordInterface $password, UserDataInterface $user_data) { + parent::__construct($entity_type, $entity_info, $database, $uuid_service); $this->password = $password; $this->userData = $user_data; @@ -66,6 +69,7 @@ public static function createInstance(ContainerInterface $container, $entity_typ $entity_type, $entity_info, $container->get('database'), + $container->get('uuid'), $container->get('password'), $container->get('user.data') ); diff --git a/core/modules/user/tests/Drupal/user/Tests/Views/Argument/RolesRidTest.php b/core/modules/user/tests/Drupal/user/Tests/Views/Argument/RolesRidTest.php index c5cd817..a534d26 100644 --- a/core/modules/user/tests/Drupal/user/Tests/Views/Argument/RolesRidTest.php +++ b/core/modules/user/tests/Drupal/user/Tests/Views/Argument/RolesRidTest.php @@ -8,6 +8,7 @@ namespace Drupal\user\Tests\Views\Argument; use Drupal\Component\Utility\String; +use Drupal\Component\Uuid\Php; use Drupal\Core\DependencyInjection\ContainerBuilder; use Drupal\Tests\UnitTestCase; use Drupal\user\Plugin\Core\Entity\Role; diff --git a/core/modules/user/user.install b/core/modules/user/user.install index 4a48efb..105c246 100644 --- a/core/modules/user/user.install +++ b/core/modules/user/user.install @@ -5,7 +5,6 @@ * Install, update and uninstall functions for the user module. */ -use Drupal\Component\Uuid\Uuid; use Drupal\Core\Language\Language; /** @@ -634,7 +633,7 @@ function user_update_8011() { // of file_save_data() by updating an eventually existing record for that // file. file_unmanaged_save_data($default_image, $destination, FILE_EXISTS_REPLACE); - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); db_merge('file_managed') ->key(array( 'uri' => $destination, @@ -1018,7 +1017,7 @@ function user_update_8016() { * @ingroup config_upgrade */ function user_update_8017() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); $roles = db_select('role', 'r') ->fields('r') @@ -1119,7 +1118,7 @@ function user_update_8019() { * Create the 'register' form mode. */ function user_update_8020() { - $uuid = new Uuid(); + $uuid = Drupal::service('uuid'); Drupal::config("entity.form_mode.user.register") ->set('id', "user.register") diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewTestData.php b/core/modules/views/lib/Drupal/views/Tests/ViewTestData.php index a574474..8ade8c4 100644 --- a/core/modules/views/lib/Drupal/views/Tests/ViewTestData.php +++ b/core/modules/views/lib/Drupal/views/Tests/ViewTestData.php @@ -66,7 +66,8 @@ public static function importTestViews($class, $modules = array()) { \Drupal::service('event_dispatcher'), \Drupal::service('config.factory'), \Drupal::entityManager(), - \Drupal::lock() + \Drupal::lock(), + \Drupal::service('uuid') ); $installer->import(); } diff --git a/core/tests/Drupal/Tests/Component/Uuid/UuidTest.php b/core/tests/Drupal/Tests/Component/Uuid/UuidTest.php new file mode 100644 index 0000000..3383c04 --- /dev/null +++ b/core/tests/Drupal/Tests/Component/Uuid/UuidTest.php @@ -0,0 +1,103 @@ + 'UUID handling', + 'description' => "Test the handling of Universally Unique Identifiers (UUIDs).", + 'group' => 'UUID', + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + // Initiate the generator. We use the CoreServiceProvider to save repeating the + // logic. + $container = new ContainerBuilder(); + $class = CoreServiceProvider::registerUuid($container); + $this->uuidInstances[] = new $class(); + + // Add additional uuid implementations when available. + if ($class != 'Drupal\Component\Uuid\Php') { + $this->uuidInstances[] = new \Drupal\Component\Uuid\Php(); + // If we are on windows add the com implementation as well. + if ($class != 'Drupal\Component\Uuid\Com' && function_exists('com_create_guid')) { + $this->uuidInstances[] = new \Drupal\Component\Uuid\Com(); + } + } + } + + /** + * Tests generating a UUID. + */ + public function testGenerateUuid() { + foreach ($this->uuidInstances as $instance) { + $uuid = $instance->generate(); + $this->assertTrue((bool) Uuid::isValid($uuid)); + } + } + + /** + * Tests that generated UUIDs are unique. + */ + public function testUuidIsUnique() { + foreach ($this->uuidInstances as $instance) { + $uuid1 = $instance->generate(); + $uuid2 = $instance->generate(); + $this->assertNotEquals($uuid1, $uuid2); + } + } + + /** + * Tests UUID validation. + */ + public function testUuidValidation() { + // These valid UUIDs. + $uuid_fqdn = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; + $uuid_min = '00000000-0000-0000-0000-000000000000'; + $uuid_max = 'ffffffff-ffff-ffff-ffff-ffffffffffff'; + + foreach ($this->uuidInstances as $instance) { + $this->assertTrue((bool) Uuid::isValid($uuid_fqdn)); + $this->assertTrue((bool) Uuid::isValid($uuid_min)); + $this->assertTrue((bool) Uuid::isValid($uuid_max)); + } + + // These are invalid UUIDs. + $invalid_format = '0ab26e6b-f074-4e44-9da-601205fa0e976'; + $invalid_length = '0ab26e6b-f074-4e44-9daf-1205fa0e9761f'; + + foreach ($this->uuidInstances as $instance) { + $this->assertFalse((bool) Uuid::isValid($invalid_format)); + $this->assertFalse((bool) Uuid::isValid($invalid_length)); + } + } + +}