commit ed006bfec1fbf39507fcd63c5ef297a70499f636 Author: Andy Postnikov Date: Mon Feb 27 14:21:49 2017 +0200 p2 diff --git a/default_content.services.yml b/default_content.services.yml index b2fd96e..fdd8723 100644 --- a/default_content.services.yml +++ b/default_content.services.yml @@ -2,3 +2,9 @@ services: default_content.manager: class: Drupal\default_content\DefaultContentManager arguments: ['@serializer', '@plugin.manager.rest', '@current_user', '@entity_type.manager', '@entity.repository', '@rest.link_manager', '@event_dispatcher', '@module_handler', '@info_parser'] + + default_content.event_subscriber: + class: Drupal\default_content\EventSubscriber\ConfigImportMissingContentEventSubscriber + arguments: ['@state'] + tags: + - { name: event_subscriber } diff --git a/src/EventSubscriber/ConfigImportMissingContentEventSubscriber.php b/src/EventSubscriber/ConfigImportMissingContentEventSubscriber.php new file mode 100644 index 0000000..24e216c --- /dev/null +++ b/src/EventSubscriber/ConfigImportMissingContentEventSubscriber.php @@ -0,0 +1,75 @@ +getMissingContent() as $uuid => $data) { + \Drupal::logger('default_content') + ->info('Missing content @uuid (@entity_type - @bundle', [ + '@uuid' => $uuid, + '@entity_type' => $data['entity_type'], + '@bundle' => $data['bundle'], + ]); + if ($this->doResolve($uuid, $data)) { + $event->resolveMissingContent($uuid); + } + } + } + + /** + * Resolves importing missed content. + * + * @param string $uuid + * The uuid to search enabled extensions. + * @param array $data + * A list of missing content dependencies. The array is keyed by UUID. Each + * value is an array with the following keys: 'entity_type', 'bundle' and + * 'uuid'. + * + * @return bool + * TRUE when import successful, FALSE otherwise. + */ + protected function doResolve($uuid, array $data) { + // @todo Search for UUID in enabled modules. + $module = 'node'; + $path = implode(DIRECTORY_SEPARATOR, [ + drupal_get_path('module', $module), + $data['entity_type'], + $data['uuid'] . '.json', + ]); + /** @var \Drupal\default_content\DefaultContentManagerInterface $service */ + $service = \Drupal::service('default_content.manager'); + //$service->importContent($module, $uuid); + $service->importContent($path); + return FALSE; + } + +}