From 64a8b99d2cab24c8062a2c919f3e3ab23b1388c9 Mon Sep 17 00:00:00 2001 From: Neil Hastings Date: Fri, 24 Jul 2020 12:50:41 -0400 Subject: [PATCH] Do not create index.json file on export (#2396) * Do not create index.json file on export * PHPCS fix * PHPCS fix --- .../src/TomeExporter.php | 57 +++++++++---------- .../va_gov_content_export.services.yml | 2 +- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/docroot/modules/custom/va_gov_content_export/src/TomeExporter.php b/docroot/modules/custom/va_gov_content_export/src/TomeExporter.php index 6b6d871939..1a7344cc44 100644 --- a/docroot/modules/custom/va_gov_content_export/src/TomeExporter.php +++ b/docroot/modules/custom/va_gov_content_export/src/TomeExporter.php @@ -4,10 +4,13 @@ use Drupal\Core\Config\StorageInterface; use Drupal\Core\Entity\EntityTypeManagerInterface; -use Drupal\Core\File\FileSystemInterface; use Drupal\Core\Session\AccountSwitcherInterface; +use Drupal\file\FileInterface; +use Drupal\tome_sync\Event\ContentCrudEvent; +use Drupal\tome_sync\Event\TomeSyncEvents; use Drupal\tome_sync\Exporter; use Drupal\tome_sync\FileSyncInterface; +use Drupal\tome_sync\TomeSyncHelper; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Serializer\Serializer; use Drupal\Core\Entity\ContentEntityInterface; @@ -19,13 +22,6 @@ */ class TomeExporter extends Exporter { - /** - * File System. - * - * @var \Drupal\Core\File\FileSystemInterface - */ - protected $fileSystem; - /** * An array of excluded entity types. * @@ -66,8 +62,6 @@ class TomeExporter extends Exporter { * The account switcher. * @param \Drupal\tome_sync\FileSyncInterface $file_sync * The file sync service. - * @param \Drupal\Core\File\FileSystemInterface $file_system - * The file system interface. * @param \Drupal\va_gov_content_export\AddBreadcrumbToEntity $addBreadcrumbToEntity * The BreadcrumbEntity Manager. */ @@ -78,13 +72,11 @@ public function __construct( EventDispatcherInterface $event_dispatcher, AccountSwitcherInterface $account_switcher, FileSyncInterface $file_sync, - FileSystemInterface $file_system, AddBreadcrumbToEntity $addBreadcrumbToEntity ) { parent::__construct($content_storage, $serializer, $entity_type_manager, $event_dispatcher, $account_switcher, $file_sync); - $this->fileSystem = $file_system; $this->addBreadcrumbToEntity = $addBreadcrumbToEntity; } @@ -99,31 +91,36 @@ public function exportContent(ContentEntityInterface $entity) { return; } + // We override all of the parent export to not create the index file. + $this->switchToAdmin(); $this->addBreadcrumbToEntity->alterEntity($entity); - parent::exportContent($entity); + $data = $this->serializer->normalize($entity, 'json'); + $this->contentStorage->write(TomeSyncHelper::getContentName($entity), $data); + + if ($entity instanceof FileInterface) { + $this->fileSync->exportFile($entity); + } + $event = new ContentCrudEvent($entity); + $this->eventDispatcher->dispatch(TomeSyncEvents::EXPORT_CONTENT, $event); + $this->switchBack(); } /** - * Acquires a lock for writing to the index. - * - * @return resource - * A file pointer resource on success. + * {@inheritdoc} * - * @throws \Exception - * Throws an exception when the index file cannot be written to. - * - * @TODO rework this error logic since this can cause a node not to save. + * Overriding to remove the updating of the index file. */ - protected function acquireContentIndexLock() { - $destination = $this->getContentIndexFilePath(); - $directory = dirname($destination); - // Overridden to allow the drupal file system to create the directory. - $this->fileSystem->prepareDirectory($directory, FileSystemInterface::CREATE_DIRECTORY); - $handle = fopen($destination, 'c+'); - if (!flock($handle, LOCK_EX)) { - throw new \Exception('Unable to acquire lock for the index file.'); + public function deleteContentExport(ContentEntityInterface $entity) { + // It would be cool if hook_entity_translation_delete() is invoked for + // every translation of an entity when it's deleted. But it isn't. :-(. + foreach (array_keys($entity->getTranslationLanguages()) as $langcode) { + $this->contentStorage->delete(TomeSyncHelper::getContentName($entity->getTranslation($langcode))); + } + if ($entity instanceof FileInterface) { + $this->fileSync->deleteFileExport($entity); } - return $handle; + $event = new ContentCrudEvent($entity); + $this->eventDispatcher->dispatch(TomeSyncEvents::DELETE_CONTENT, $event); } } diff --git a/docroot/modules/custom/va_gov_content_export/va_gov_content_export.services.yml b/docroot/modules/custom/va_gov_content_export/va_gov_content_export.services.yml index d6766d796a..d2695851c9 100644 --- a/docroot/modules/custom/va_gov_content_export/va_gov_content_export.services.yml +++ b/docroot/modules/custom/va_gov_content_export/va_gov_content_export.services.yml @@ -7,7 +7,7 @@ services: tome_sync.exporter.va_gov_content_export: class: Drupal\va_gov_content_export\TomeExporter decorates: tome_sync.exporter - arguments: ['@tome_sync.storage.content', '@serializer', '@entity_type.manager', '@event_dispatcher', '@account_switcher', '@tome_sync.file_sync', '@file_system', '@va_gov.content_export.breadcrumb_update'] + arguments: ['@tome_sync.storage.content', '@serializer', '@entity_type.manager', '@event_dispatcher', '@account_switcher', '@tome_sync.file_sync', '@va_gov.content_export.breadcrumb_update'] va_gov.content_export.breadcrumb_update: class: Drupal\va_gov_content_export\AddBreadcrumbToEntity arguments: ['@breadcrumb', '@router.route_provider', '@paramconverter_manager', '@graphql.buffer.subrequest', '@current_route_match']