vendor/sulu/sulu/src/Sulu/Component/DocumentManager/Subscriber/Phpcr/QuerySubscriber.php line 87

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\Subscriber\Phpcr;
  11. use PHPCR\Query\QueryInterface;
  12. use PHPCR\Query\QueryManagerInterface;
  13. use PHPCR\SessionInterface;
  14. use Sulu\Component\DocumentManager\Collection\QueryResultCollection;
  15. use Sulu\Component\DocumentManager\Event\QueryCreateEvent;
  16. use Sulu\Component\DocumentManager\Event\QueryExecuteEvent;
  17. use Sulu\Component\DocumentManager\Events;
  18. use Sulu\Component\DocumentManager\Query\Query;
  19. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  20. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  21. /**
  22.  * Handles creation of query and query builder objects.
  23.  */
  24. class QuerySubscriber implements EventSubscriberInterface
  25. {
  26.     /**
  27.      * @var SessionInterface
  28.      */
  29.     private $session;
  30.     /**
  31.      * @var EventDispatcherInterface
  32.      */
  33.     private $eventDispatcher;
  34.     public function __construct(SessionInterface $sessionEventDispatcherInterface $eventDispatcher)
  35.     {
  36.         $this->session $session;
  37.         $this->eventDispatcher $eventDispatcher;
  38.     }
  39.     public static function getSubscribedEvents()
  40.     {
  41.         return [
  42.             Events::QUERY_CREATE => ['handleCreate'500],
  43.             Events::QUERY_CREATE_BUILDER => ['handleCreateBuilder'500],
  44.             Events::QUERY_EXECUTE => ['handleQueryExecute'500],
  45.         ];
  46.     }
  47.     /**
  48.      * Create a new Sulu Query object.
  49.      */
  50.     public function handleCreate(QueryCreateEvent $event)
  51.     {
  52.         $innerQuery $event->getInnerQuery();
  53.         if (\is_string($innerQuery)) {
  54.             $phpcrQuery $this->getQueryManager()->createQuery($innerQueryQueryInterface::JCR_SQL2);
  55.         } elseif ($innerQuery instanceof QueryInterface) {
  56.             $phpcrQuery $innerQuery;
  57.         } else {
  58.             throw new \InvalidArgumentException(\sprintf(
  59.                 'Expected inner query to be either a string or a PHPCR query object, got: "%s"',
  60.                 \is_object($innerQuery) ? \get_class($innerQuery) : \gettype($innerQuery)
  61.             ));
  62.         }
  63.         $event->setQuery(
  64.             new Query(
  65.                 $phpcrQuery,
  66.                 $this->eventDispatcher,
  67.                 $event->getLocale(),
  68.                 $event->getOptions(),
  69.                 $event->getPrimarySelector()
  70.             )
  71.         );
  72.     }
  73.     /**
  74.      * Handle query execution.
  75.      */
  76.     public function handleQueryExecute(QueryExecuteEvent $event)
  77.     {
  78.         $query $event->getQuery();
  79.         $locale $query->getLocale();
  80.         $phpcrResult $query->getPhpcrQuery()->execute();
  81.         $event->setResult(
  82.             new QueryResultCollection($phpcrResult$this->eventDispatcher$locale$event->getOptions())
  83.         );
  84.     }
  85.     /**
  86.      * @return QueryManagerInterface
  87.      */
  88.     private function getQueryManager()
  89.     {
  90.         return $this->session->getWorkspace()->getQueryManager();
  91.     }
  92. }