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

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