vendor/sulu/sulu/src/Sulu/Component/DocumentManager/DocumentManager.php line 29

Open in your IDE?
  1. <?php
  2. /*
  3. * This file is part of Sulu.
  4. *
  5. * (c) Sulu GmbH
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace Sulu\Component\DocumentManager;
  11. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  12. use Symfony\Component\OptionsResolver\OptionsResolver;
  13. use Symfony\Contracts\Service\ResetInterface;
  14. class DocumentManager implements DocumentManagerInterface, ResetInterface
  15. {
  16. /**
  17. * @var array<string, OptionsResolver> Cached options resolver instances
  18. */
  19. private $optionsResolvers = [];
  20. public function __construct(private EventDispatcherInterface $eventDispatcher)
  21. {
  22. }
  23. public function find($identifier, $locale = null, array $options = [])
  24. {
  25. $options = $this->getOptionsResolver(Events::FIND)->resolve($options);
  26. $event = new Event\FindEvent($identifier, $locale, $options);
  27. $this->eventDispatcher->dispatch($event, Events::FIND);
  28. return $event->getDocument();
  29. }
  30. public function create($alias)
  31. {
  32. $event = new Event\CreateEvent($alias);
  33. $this->eventDispatcher->dispatch($event, Events::CREATE);
  34. return $event->getDocument();
  35. }
  36. public function persist($document, $locale = null, array $options = [])
  37. {
  38. $options = $this->getOptionsResolver(Events::PERSIST)->resolve($options);
  39. $event = new Event\PersistEvent($document, $locale, $options);
  40. $this->eventDispatcher->dispatch($event, Events::PERSIST);
  41. }
  42. public function remove($document/*, array $options = []*/)
  43. {
  44. $options = \func_num_args() >= 2 ? (array) \func_get_arg(1) : [];
  45. $options = $this->getOptionsResolver(Events::REMOVE)->resolve($options);
  46. $event = new Event\RemoveEvent($document, $options);
  47. $this->eventDispatcher->dispatch($event, Events::REMOVE);
  48. }
  49. public function removeLocale($document, $locale)
  50. {
  51. $event = new Event\RemoveLocaleEvent($document, $locale);
  52. $this->eventDispatcher->dispatch($event, Events::REMOVE_LOCALE);
  53. }
  54. public function move($document, $destId)
  55. {
  56. $event = new Event\MoveEvent($document, $destId);
  57. $this->eventDispatcher->dispatch($event, Events::MOVE);
  58. }
  59. public function copy($document, $destPath)
  60. {
  61. $event = new Event\CopyEvent($document, $destPath);
  62. $this->eventDispatcher->dispatch($event, Events::COPY);
  63. return $event->getCopiedPath();
  64. }
  65. public function copyLocale($document, $srcLocale, $destLocale)
  66. {
  67. $event = new Event\CopyLocaleEvent($document, $srcLocale, $destLocale);
  68. $this->eventDispatcher->dispatch($event, Events::COPY_LOCALE);
  69. }
  70. public function reorder($document, $destId)
  71. {
  72. $event = new Event\ReorderEvent($document, $destId);
  73. $this->eventDispatcher->dispatch($event, Events::REORDER);
  74. }
  75. public function publish($document, $locale = null, array $options = [])
  76. {
  77. $options = $this->getOptionsResolver(Events::PUBLISH)->resolve($options);
  78. $event = new Event\PublishEvent($document, $locale, $options);
  79. $this->eventDispatcher->dispatch($event, Events::PUBLISH);
  80. }
  81. public function unpublish($document, $locale)
  82. {
  83. $event = new Event\UnpublishEvent($document, $locale);
  84. $this->eventDispatcher->dispatch($event, Events::UNPUBLISH);
  85. }
  86. public function removeDraft($document, $locale)
  87. {
  88. $event = new Event\RemoveDraftEvent($document, $locale);
  89. $this->eventDispatcher->dispatch($event, Events::REMOVE_DRAFT);
  90. }
  91. public function restore($document, $locale, $version, array $options = [])
  92. {
  93. $options = $this->getOptionsResolver(Events::RESTORE)->resolve($options);
  94. $event = new Event\RestoreEvent($document, $locale, $version, $options);
  95. $this->eventDispatcher->dispatch($event, Events::RESTORE);
  96. }
  97. public function refresh($document)
  98. {
  99. $event = new Event\RefreshEvent($document);
  100. $this->eventDispatcher->dispatch($event, Events::REFRESH);
  101. }
  102. public function flush()
  103. {
  104. $event = new Event\FlushEvent();
  105. $this->eventDispatcher->dispatch($event, Events::FLUSH);
  106. }
  107. public function clear()
  108. {
  109. $event = new Event\ClearEvent();
  110. $this->eventDispatcher->dispatch($event, Events::CLEAR);
  111. }
  112. /**
  113. * @return void
  114. */
  115. public function reset()
  116. {
  117. $this->clear();
  118. }
  119. public function createQuery($query, $locale = null, array $options = [])
  120. {
  121. $event = new Event\QueryCreateEvent($query, $locale, $options);
  122. $this->eventDispatcher->dispatch($event, Events::QUERY_CREATE);
  123. return $event->getQuery();
  124. }
  125. private function getOptionsResolver(string $eventName): OptionsResolver
  126. {
  127. if (isset($this->optionsResolvers[$eventName])) {
  128. return $this->optionsResolvers[$eventName];
  129. }
  130. $resolver = new OptionsResolver();
  131. $resolver->setDefault('locale', null);
  132. $event = new Event\ConfigureOptionsEvent($resolver);
  133. $this->eventDispatcher->dispatch($event, Events::CONFIGURE_OPTIONS);
  134. $this->optionsResolvers[$eventName] = $resolver;
  135. return $resolver;
  136. }
  137. }