Skip to content
Snippets Groups Projects
Commit 106468fa authored by Daniel Berthereau's avatar Daniel Berthereau
Browse files

Added a method to filter list of metadata.

parent 7a9b1463
Branches
No related tags found
No related merge requests found
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
*/ */
namespace OaiPmhRepository\OaiPmh\Metadata; namespace OaiPmhRepository\OaiPmh\Metadata;
use ArrayObject;
use DOMElement; use DOMElement;
use OaiPmhRepository\OaiPmh\AbstractXmlGenerator; use OaiPmhRepository\OaiPmh\AbstractXmlGenerator;
use OaiPmhRepository\OaiPmh\OaiSet\OaiSetInterface; use OaiPmhRepository\OaiPmh\OaiSet\OaiSetInterface;
...@@ -79,6 +80,17 @@ abstract class AbstractMetadata ...@@ -79,6 +80,17 @@ abstract class AbstractMetadata
$this->createElementWithChildren($parent, 'metadataFormat', $elements); $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) public function appendRecord(DOMElement $parent, ItemRepresentation $item)
{ {
$document = $parent->ownerDocument; $document = $parent->ownerDocument;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
*/ */
namespace OaiPmhRepository\OaiPmh; namespace OaiPmhRepository\OaiPmh;
use ArrayObject;
use DateTime; use DateTime;
use DomDocument; use DomDocument;
use Doctrine\ORM\Tools\Pagination\Paginator; use Doctrine\ORM\Tools\Pagination\Paginator;
...@@ -622,8 +623,9 @@ class ResponseGenerator extends AbstractXmlGenerator ...@@ -622,8 +623,9 @@ class ResponseGenerator extends AbstractXmlGenerator
$itemRepository = $entityManager->getRepository('Omeka\Entity\Item'); $itemRepository = $entityManager->getRepository('Omeka\Entity\Item');
$qb = $itemRepository->createQueryBuilder('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. // Public/private is automatically managed for anonymous requests.
...@@ -652,8 +654,15 @@ class ResponseGenerator extends AbstractXmlGenerator ...@@ -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 = $apiAdapterManager->get('items');
$itemAdapter->buildQuery($qb, $query); $itemAdapter->buildQuery($qb, $query->getArrayCopy());
if ($from) { if ($from) {
$qb->andWhere($qb->expr()->orX( $qb->andWhere($qb->expr()->orX(
...@@ -683,9 +692,8 @@ class ResponseGenerator extends AbstractXmlGenerator ...@@ -683,9 +692,8 @@ class ResponseGenerator extends AbstractXmlGenerator
$qb->setParameter('until_1', $until); $qb->setParameter('until_1', $until);
$qb->setParameter('until_2', $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 // This limit call will form the basis of the flow control
$qb->setMaxResults($this->_listLimit); $qb->setMaxResults($this->_listLimit);
...@@ -703,14 +711,10 @@ class ResponseGenerator extends AbstractXmlGenerator ...@@ -703,14 +711,10 @@ class ResponseGenerator extends AbstractXmlGenerator
$method = 'appendRecord'; $method = 'appendRecord';
} }
$metadataFormatManager = $this->serviceLocator->get(\OaiPmhRepository\OaiPmh\MetadataFormatManager::class);
$verbElement = $this->document->createElement($verb); $verbElement = $this->document->createElement($verb);
$this->document->documentElement->appendChild($verbElement); $this->document->documentElement->appendChild($verbElement);
foreach ($paginator as $itemEntity) { foreach ($paginator as $itemEntity) {
$item = $itemAdapter->getRepresentation($itemEntity); $item = $itemAdapter->getRepresentation($itemEntity);
$metadataFormat = $metadataFormatManager->get($metadataPrefix);
$metadataFormat->setOaiSet($this->oaiSet);
$metadataFormat->$method($verbElement, $item); $metadataFormat->$method($verbElement, $item);
} }
if ($rows > ($cursor + $this->_listLimit)) { if ($rows > ($cursor + $this->_listLimit)) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment