From 106468fab17fca98aa26007417a026077970e226 Mon Sep 17 00:00:00 2001 From: Daniel Berthereau <Daniel.github@Berthereau.net> Date: Mon, 23 Sep 2019 00:00:00 +0200 Subject: [PATCH] Added a method to filter list of metadata. --- src/OaiPmh/Metadata/AbstractMetadata.php | 12 ++++++++++++ src/OaiPmh/ResponseGenerator.php | 20 ++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/OaiPmh/Metadata/AbstractMetadata.php b/src/OaiPmh/Metadata/AbstractMetadata.php index d1428c5..c8a3b61 100644 --- a/src/OaiPmh/Metadata/AbstractMetadata.php +++ b/src/OaiPmh/Metadata/AbstractMetadata.php @@ -8,6 +8,7 @@ */ namespace OaiPmhRepository\OaiPmh\Metadata; +use ArrayObject; use DOMElement; use OaiPmhRepository\OaiPmh\AbstractXmlGenerator; use OaiPmhRepository\OaiPmh\OaiSet\OaiSetInterface; @@ -79,6 +80,17 @@ abstract class AbstractMetadata $this->createElementWithChildren($parent, 'metadataFormat', $elements); } + /** + * Filter the query for the two main List verbs. + * + * @see \OaiPmhRepository\OaiPmh\ResponseGenerator::listResponse() + * + * @param ArrayObject $query + */ + public function filterList(ArrayObject $query) + { + } + public function appendRecord(DOMElement $parent, ItemRepresentation $item) { $document = $parent->ownerDocument; diff --git a/src/OaiPmh/ResponseGenerator.php b/src/OaiPmh/ResponseGenerator.php index f28b858..e105c1f 100644 --- a/src/OaiPmh/ResponseGenerator.php +++ b/src/OaiPmh/ResponseGenerator.php @@ -8,6 +8,7 @@ */ namespace OaiPmhRepository\OaiPmh; +use ArrayObject; use DateTime; use DomDocument; use Doctrine\ORM\Tools\Pagination\Paginator; @@ -622,8 +623,9 @@ class ResponseGenerator extends AbstractXmlGenerator $itemRepository = $entityManager->getRepository('Omeka\Entity\Item'); $qb = $itemRepository->createQueryBuilder('Omeka\Entity\Item'); + $qb->select('Omeka\Entity\Item'); - $query = []; + $query = new ArrayObject; // Public/private is automatically managed for anonymous requests. @@ -652,8 +654,15 @@ class ResponseGenerator extends AbstractXmlGenerator } } + $metadataFormatManager = $this->serviceLocator->get(\OaiPmhRepository\OaiPmh\MetadataFormatManager::class); + $metadataFormat = $metadataFormatManager->get($metadataPrefix); + $metadataFormat->setOaiSet($this->oaiSet); + + $metadataFormat->filterList($query); + + /** @var \Omeka\Api\Adapter\ItemAdapter $itemAdapter */ $itemAdapter = $apiAdapterManager->get('items'); - $itemAdapter->buildQuery($qb, $query); + $itemAdapter->buildQuery($qb, $query->getArrayCopy()); if ($from) { $qb->andWhere($qb->expr()->orX( @@ -683,9 +692,8 @@ class ResponseGenerator extends AbstractXmlGenerator $qb->setParameter('until_1', $until); $qb->setParameter('until_2', $until); } - $qb->groupBy('Omeka\Entity\Item.id'); - $qb->select('Omeka\Entity\Item'); + $qb->groupBy('Omeka\Entity\Item.id'); // This limit call will form the basis of the flow control $qb->setMaxResults($this->_listLimit); @@ -703,14 +711,10 @@ class ResponseGenerator extends AbstractXmlGenerator $method = 'appendRecord'; } - $metadataFormatManager = $this->serviceLocator->get(\OaiPmhRepository\OaiPmh\MetadataFormatManager::class); - $verbElement = $this->document->createElement($verb); $this->document->documentElement->appendChild($verbElement); foreach ($paginator as $itemEntity) { $item = $itemAdapter->getRepresentation($itemEntity); - $metadataFormat = $metadataFormatManager->get($metadataPrefix); - $metadataFormat->setOaiSet($this->oaiSet); $metadataFormat->$method($verbElement, $item); } if ($rows > ($cursor + $this->_listLimit)) { -- GitLab