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

Filtered values in the default formats.

parent 3712cd61
No related branches found
No related tags found
No related merge requests found
...@@ -162,13 +162,20 @@ by harvesters or other tools and because the RRCHNM itself removed the [schema] ...@@ -162,13 +162,20 @@ by harvesters or other tools and because the RRCHNM itself removed the [schema]
from the last site. from the last site.
**NOTE**: Because of its limited support by harvesters, the format is not **NOTE**: Because of its limited support by harvesters, the format is not
implemented. implemented in Omeka S.
### Other formats ### Other formats
Other formats can be added or replace an existing one via a key in the config Other formats can be added or replace an existing one via a key in the config
`['oaipmhrepository']['metadata_formats']`. `['oaipmhrepository']['metadata_formats']`.
### Customization
The output can be customized via the filter `oaipmhrepository.values`, that is
triggered for each term. So it is possible to remove, to update or to append
some values, or to convert some properties from other vocabularies into the
standard formats.
Warning Warning
------- -------
......
...@@ -16,7 +16,6 @@ use Omeka\Api\Representation\AbstractResourceEntityRepresentation; ...@@ -16,7 +16,6 @@ use Omeka\Api\Representation\AbstractResourceEntityRepresentation;
use Omeka\Api\Representation\ItemRepresentation; use Omeka\Api\Representation\ItemRepresentation;
use Omeka\Api\Representation\ValueRepresentation; use Omeka\Api\Representation\ValueRepresentation;
use Omeka\Settings\SettingsInterface; use Omeka\Settings\SettingsInterface;
use Zend\EventManager\Event;
use Zend\EventManager\EventManagerAwareInterface; use Zend\EventManager\EventManagerAwareInterface;
use Zend\EventManager\EventManagerAwareTrait; use Zend\EventManager\EventManagerAwareTrait;
...@@ -159,18 +158,16 @@ abstract class AbstractMetadata ...@@ -159,18 +158,16 @@ abstract class AbstractMetadata
$term, $term,
$values $values
) { ) {
/** @var \Zend\EventManager\EventManager $eventManager */ $args = [];
$eventManager = $this->getEventManager(); $args['prefix'] = $this->getMetadataPrefix();
/** @var \ArrayObject $args */
$args = $eventManager->prepareArgs([]);
$args['repository'] = self::class;
$args['resource'] = $resource;
$args['term'] = $term; $args['term'] = $term;
$args['resource'] = $resource;
$args['values'] = $values; $args['values'] = $values;
$event = new Event('oaipmhrepository.values', $this, $args); /** @var \ArrayObject $args */
$eventManager->triggerEvent($event); $eventManager = $this->getEventManager();
$args = $eventManager->prepareArgs($args);
$eventManager->trigger('oaipmhrepository.values', $this, $args);
return $args['values']; return $args['values'];
} }
......
...@@ -61,6 +61,7 @@ class CdwaLite extends AbstractMetadata ...@@ -61,6 +61,7 @@ class CdwaLite extends AbstractMetadata
* Required. Fill with 'Unknown' if omitted. * Required. Fill with 'Unknown' if omitted.
*/ */
$types = $item->value('dcterms:type', ['all' => true, 'default' => []]); $types = $item->value('dcterms:type', ['all' => true, 'default' => []]);
$types = $this->filterValues($item, 'dcterms:type', $types);
$objectWorkTypeWrap = $this->appendNewElement($descriptive, 'cdwalite:objectWorkTypeWrap'); $objectWorkTypeWrap = $this->appendNewElement($descriptive, 'cdwalite:objectWorkTypeWrap');
if (empty($types)) { if (empty($types)) {
$types[] = 'Unknown'; $types[] = 'Unknown';
...@@ -74,6 +75,7 @@ class CdwaLite extends AbstractMetadata ...@@ -74,6 +75,7 @@ class CdwaLite extends AbstractMetadata
* Required. Fill with 'Unknown' if omitted. * Required. Fill with 'Unknown' if omitted.
*/ */
$titles = $item->value('dcterms:title', ['all' => true, 'default' => []]); $titles = $item->value('dcterms:title', ['all' => true, 'default' => []]);
$titles = $this->filterValues($item, 'dcterms:title', $titles);
$titleWrap = $this->appendNewElement($descriptive, 'cdwalite:titleWrap'); $titleWrap = $this->appendNewElement($descriptive, 'cdwalite:titleWrap');
foreach ($titles as $title) { foreach ($titles as $title) {
...@@ -86,6 +88,7 @@ class CdwaLite extends AbstractMetadata ...@@ -86,6 +88,7 @@ class CdwaLite extends AbstractMetadata
* Non-repeatable, implode for inclusion of many creators. * Non-repeatable, implode for inclusion of many creators.
*/ */
$creators = $item->value('dcterms:creator', ['all' => true, 'default' => []]); $creators = $item->value('dcterms:creator', ['all' => true, 'default' => []]);
$creators = $this->filterValues($item, 'dcterms:creator', $creators);
$creatorTexts = []; $creatorTexts = [];
foreach ($creators as $creator) { foreach ($creators as $creator) {
...@@ -121,6 +124,7 @@ class CdwaLite extends AbstractMetadata ...@@ -121,6 +124,7 @@ class CdwaLite extends AbstractMetadata
* Non-repeatable, include only first date. * Non-repeatable, include only first date.
*/ */
$date = $item->value('dcterms:date'); $date = $item->value('dcterms:date');
$date = $this->filterValues($item, 'dcterms:date', $date);
$dateText = $date ? (string) $date : 'Unknown'; $dateText = $date ? (string) $date : 'Unknown';
$this->appendNewElement($descriptive, 'cdwalite:displayCreationDate', $dateText); $this->appendNewElement($descriptive, 'cdwalite:displayCreationDate', $dateText);
...@@ -130,6 +134,7 @@ class CdwaLite extends AbstractMetadata ...@@ -130,6 +134,7 @@ class CdwaLite extends AbstractMetadata
*/ */
$indexingDatesWrap = $this->appendNewElement($descriptive, 'cdwalite:indexingDatesWrap'); $indexingDatesWrap = $this->appendNewElement($descriptive, 'cdwalite:indexingDatesWrap');
$dates = $item->value('dcterms:date', ['all' => true, 'default' => []]); $dates = $item->value('dcterms:date', ['all' => true, 'default' => []]);
$dates = $this->filterValues($item, 'dcterms:date', $dates);
foreach ($dates as $date) { foreach ($dates as $date) {
$indexingDatesSet = $this->appendNewElement($indexingDatesWrap, 'cdwalite:indexingDatesSet'); $indexingDatesSet = $this->appendNewElement($indexingDatesWrap, 'cdwalite:indexingDatesSet');
$this->appendNewElement($indexingDatesSet, 'cdwalite:earliestDate', (string) $date); $this->appendNewElement($indexingDatesSet, 'cdwalite:earliestDate', (string) $date);
...@@ -147,6 +152,7 @@ class CdwaLite extends AbstractMetadata ...@@ -147,6 +152,7 @@ class CdwaLite extends AbstractMetadata
* Not required. * Not required.
*/ */
$subjects = $item->value('dcterms:subject', ['all' => true, 'default' => []]); $subjects = $item->value('dcterms:subject', ['all' => true, 'default' => []]);
$subjects = $this->filterValues($item, 'dcterms:subject', $subjects);
$classWrap = $this->appendNewElement($descriptive, 'cdwalite:classWrap'); $classWrap = $this->appendNewElement($descriptive, 'cdwalite:classWrap');
foreach ($subjects as $subject) { foreach ($subjects as $subject) {
$this->appendNewElement($classWrap, 'cdwalite:classification', (string) $subject); $this->appendNewElement($classWrap, 'cdwalite:classification', (string) $subject);
...@@ -156,6 +162,7 @@ class CdwaLite extends AbstractMetadata ...@@ -156,6 +162,7 @@ class CdwaLite extends AbstractMetadata
* Not required. * Not required.
*/ */
$descriptions = $item->value('dcterms:description', ['all' => true, 'default' => []]); $descriptions = $item->value('dcterms:description', ['all' => true, 'default' => []]);
$descriptions = $this->filterValues($item, 'dcterms:description', $descriptions);
if (!empty($descriptions)) { if (!empty($descriptions)) {
$descriptiveNoteWrap = $this->appendNewElement($descriptive, 'cdwalite:descriptiveNoteWrap'); $descriptiveNoteWrap = $this->appendNewElement($descriptive, 'cdwalite:descriptiveNoteWrap');
foreach ($descriptions as $description) { foreach ($descriptions as $description) {
...@@ -175,6 +182,7 @@ class CdwaLite extends AbstractMetadata ...@@ -175,6 +182,7 @@ class CdwaLite extends AbstractMetadata
* Not required. * Not required.
*/ */
$rights = $item->value('dcterms:rights', ['all' => true, 'default' => []]); $rights = $item->value('dcterms:rights', ['all' => true, 'default' => []]);
$rights = $this->filterValues($item, 'dcterms:rights', $rights);
foreach ($rights as $right) { foreach ($rights as $right) {
$this->appendNewElement($administrative, 'cdwalite:rightsWork', (string) $right); $this->appendNewElement($administrative, 'cdwalite:rightsWork', (string) $right);
} }
......
...@@ -66,7 +66,9 @@ class Mets extends AbstractMetadata ...@@ -66,7 +66,9 @@ class Mets extends AbstractMetadata
]; ];
foreach ($dcElementNames as $elementName) { foreach ($dcElementNames as $elementName) {
$values = $item->value("dcterms:$elementName", ['all' => true, 'default' => []]); $term = 'dcterms:' . $elementName;
$values = $item->value($term, ['all' => true, 'default' => []]);
$values = $this->filterValues($item, $term, $values);
foreach ($values as $value) { foreach ($values as $value) {
$this->appendNewElement($dcXml, "dc:$elementName", (string) $value); $this->appendNewElement($dcXml, "dc:$elementName", (string) $value);
} }
...@@ -111,9 +113,11 @@ class Mets extends AbstractMetadata ...@@ -111,9 +113,11 @@ class Mets extends AbstractMetadata
$fileIds[] = $fileId; $fileIds[] = $fileId;
foreach ($dcElementNames as $elementName) { foreach ($dcElementNames as $elementName) {
$dcElements = $media->value("dcterms:$elementName", ['all' => true, 'default' => []]); $term = 'dcterms:' . $elementName;
foreach ($dcElements as $value) { $values = $media->value($term, ['all' => true, 'default' => []]);
$this->appendNewElement($fileDcXml, "dc:$elementName", (string) $value); $values = $this->filterValues($media, $term, $values);
foreach ($values as $value) {
$this->appendNewElement($fileDcXml, 'dc:' . $elementName, (string) $value);
} }
} }
} }
......
...@@ -49,12 +49,14 @@ class Mods extends AbstractMetadata ...@@ -49,12 +49,14 @@ class Mods extends AbstractMetadata
. ' ' . self::METADATA_SCHEMA); . ' ' . self::METADATA_SCHEMA);
$titles = $item->value('dcterms:title', ['all' => true, 'default' => []]); $titles = $item->value('dcterms:title', ['all' => true, 'default' => []]);
$titles = $this->filterValues($item, 'dcterms:title', $titles);
foreach ($titles as $title) { foreach ($titles as $title) {
$titleInfo = $this->appendNewElement($mods, 'titleInfo'); $titleInfo = $this->appendNewElement($mods, 'titleInfo');
$this->appendNewElement($titleInfo, 'title', (string) $title); $this->appendNewElement($titleInfo, 'title', (string) $title);
} }
$creators = $item->value('dcterms:creator', ['all' => true, 'default' => []]); $creators = $item->value('dcterms:creator', ['all' => true, 'default' => []]);
$creators = $this->filterValues($item, 'dcterms:creator', $creators);
foreach ($creators as $creator) { foreach ($creators as $creator) {
$name = $this->appendNewElement($mods, 'name'); $name = $this->appendNewElement($mods, 'name');
$this->appendNewElement($name, 'namePart', (string) $creator); $this->appendNewElement($name, 'namePart', (string) $creator);
...@@ -64,6 +66,7 @@ class Mods extends AbstractMetadata ...@@ -64,6 +66,7 @@ class Mods extends AbstractMetadata
} }
$contributors = $item->value('dcterms:contributor', ['all' => true, 'default' => []]); $contributors = $item->value('dcterms:contributor', ['all' => true, 'default' => []]);
$contributors = $this->filterValues($item, 'dcterms:contributor', $contributors);
foreach ($contributors as $contributor) { foreach ($contributors as $contributor) {
$name = $this->appendNewElement($mods, 'name'); $name = $this->appendNewElement($mods, 'name');
$this->appendNewElement($name, 'namePart', (string) $contributor); $this->appendNewElement($name, 'namePart', (string) $contributor);
...@@ -73,23 +76,27 @@ class Mods extends AbstractMetadata ...@@ -73,23 +76,27 @@ class Mods extends AbstractMetadata
} }
$subjects = $item->value('dcterms:subject', ['all' => true, 'default' => []]); $subjects = $item->value('dcterms:subject', ['all' => true, 'default' => []]);
$subjects = $this->filterValues($item, 'dcterms:subject', $subjects);
foreach ($subjects as $subject) { foreach ($subjects as $subject) {
$subjectTag = $this->appendNewElement($mods, 'subject'); $subjectTag = $this->appendNewElement($mods, 'subject');
$this->appendNewElement($subjectTag, 'topic', (string) $subject); $this->appendNewElement($subjectTag, 'topic', (string) $subject);
} }
$descriptions = $item->value('dcterms:description', ['all' => true, 'default' => []]); $descriptions = $item->value('dcterms:description', ['all' => true, 'default' => []]);
$descriptions = $this->filterValues($item, 'dcterms:description', $descriptions);
foreach ($descriptions as $description) { foreach ($descriptions as $description) {
$this->appendNewElement($mods, 'note', (string) $description); $this->appendNewElement($mods, 'note', (string) $description);
} }
$formats = $item->value('dcterms:format', ['all' => true, 'default' => []]); $formats = $item->value('dcterms:format', ['all' => true, 'default' => []]);
$formats = $this->filterValues($item, 'dcterms:format', $formats);
foreach ($formats as $format) { foreach ($formats as $format) {
$physicalDescription = $this->appendNewElement($mods, 'physicalDescription'); $physicalDescription = $this->appendNewElement($mods, 'physicalDescription');
$this->appendNewElement($physicalDescription, 'form', (string) $format); $this->appendNewElement($physicalDescription, 'form', (string) $format);
} }
$languages = $item->value('dcterms:language', ['all' => true, 'default' => []]); $languages = $item->value('dcterms:language', ['all' => true, 'default' => []]);
$languages = $this->filterValues($item, 'dcterms:language', $languages);
foreach ($languages as $language) { foreach ($languages as $language) {
$languageElement = $this->appendNewElement($mods, 'language'); $languageElement = $this->appendNewElement($mods, 'language');
$languageTerm = $this->appendNewElement($languageElement, 'languageTerm', (string) $language); $languageTerm = $this->appendNewElement($languageElement, 'languageTerm', (string) $language);
...@@ -97,16 +104,19 @@ class Mods extends AbstractMetadata ...@@ -97,16 +104,19 @@ class Mods extends AbstractMetadata
} }
$rights = $item->value('dcterms:rights', ['all' => true, 'default' => []]); $rights = $item->value('dcterms:rights', ['all' => true, 'default' => []]);
$rights = $this->filterValues($item, 'dcterms:rights', $rights);
foreach ($rights as $right) { foreach ($rights as $right) {
$this->appendNewElement($mods, 'accessCondition', (string) $right); $this->appendNewElement($mods, 'accessCondition', (string) $right);
} }
$types = $item->value('dcterms:type', ['all' => true, 'default' => []]); $types = $item->value('dcterms:type', ['all' => true, 'default' => []]);
$types = $this->filterValues($item, 'dcterms:type', $types);
foreach ($types as $type) { foreach ($types as $type) {
$this->appendNewElement($mods, 'genre', (string) $type); $this->appendNewElement($mods, 'genre', (string) $type);
} }
$identifiers = $item->value('dcterms:identifier', ['all' => true, 'default' => []]); $identifiers = $item->value('dcterms:identifier', ['all' => true, 'default' => []]);
$identifiers = $this->filterValues($item, 'dcterms:identifier', $identifiers);
foreach ($identifiers as $identifier) { foreach ($identifiers as $identifier) {
$text = (string) $identifier; $text = (string) $identifier;
$idElement = $this->appendNewElement($mods, 'identifier', $text); $idElement = $this->appendNewElement($mods, 'identifier', $text);
...@@ -118,11 +128,13 @@ class Mods extends AbstractMetadata ...@@ -118,11 +128,13 @@ class Mods extends AbstractMetadata
} }
$sources = $item->value('dcterms:source', ['all' => true, 'default' => []]); $sources = $item->value('dcterms:source', ['all' => true, 'default' => []]);
$sources = $this->filterValues($item, 'dcterms:source', $sources);
foreach ($sources as $source) { foreach ($sources as $source) {
$this->_addRelatedItem($mods, (string) $source, true); $this->_addRelatedItem($mods, (string) $source, true);
} }
$relations = $item->value('dcterms:relation', ['all' => true, 'default' => []]); $relations = $item->value('dcterms:relation', ['all' => true, 'default' => []]);
$relations = $this->filterValues($item, 'dcterms:relation', $relations);
foreach ($relations as $relation) { foreach ($relations as $relation) {
$this->_addRelatedItem($mods, (string) $relation); $this->_addRelatedItem($mods, (string) $relation);
} }
...@@ -146,7 +158,9 @@ class Mods extends AbstractMetadata ...@@ -146,7 +158,9 @@ class Mods extends AbstractMetadata
$url->setAttribute('usage', 'primary display'); $url->setAttribute('usage', 'primary display');
$publishers = $item->value('dcterms:publisher', ['all' => true, 'default' => []]); $publishers = $item->value('dcterms:publisher', ['all' => true, 'default' => []]);
$publishers = $this->filterValues($item, 'dcterms:publishers', $publishers);
$dates = $item->value('dcterms:date', ['all' => true, 'default' => []]); $dates = $item->value('dcterms:date', ['all' => true, 'default' => []]);
$dates = $this->filterValues($item, 'dcterms:date', $dates);
// Empty originInfo sections are illegal // Empty originInfo sections are illegal
if (count($publishers) + count($dates) > 0) { if (count($publishers) + count($dates) > 0) {
......
...@@ -63,7 +63,9 @@ class OaiDc extends AbstractMetadata ...@@ -63,7 +63,9 @@ class OaiDc extends AbstractMetadata
* compliant per-node declarations. * compliant per-node declarations.
*/ */
foreach ($dcElementNames as $elementName) { foreach ($dcElementNames as $elementName) {
$values = $item->value("dcterms:$elementName", ['all' => true, 'default' => []]); $term = 'dcterms:' . $elementName;
$values = $item->value($term, ['all' => true, 'default' => []]);
$values = $this->filterValues($item, $term, $values);
foreach ($values as $value) { foreach ($values as $value) {
$this->appendNewElement($oai_dc, "dc:$elementName", (string) $value); $this->appendNewElement($oai_dc, "dc:$elementName", (string) $value);
} }
......
...@@ -19,6 +19,7 @@ class CdwaLiteFactory implements FactoryInterface ...@@ -19,6 +19,7 @@ class CdwaLiteFactory implements FactoryInterface
$oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager'); $oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager');
$oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base')); $oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base'));
$metadataFormat = new CdwaLite(); $metadataFormat = new CdwaLite();
$metadataFormat->setEventManager($services->get('EventManager'));
$metadataFormat->setSettings($settings); $metadataFormat->setSettings($settings);
$metadataFormat->setOaiSet($oaiSet); $metadataFormat->setOaiSet($oaiSet);
$isGlobalRepository = !$services->get('ControllerPluginManager') $isGlobalRepository = !$services->get('ControllerPluginManager')
......
...@@ -19,6 +19,7 @@ class MetsFactory implements FactoryInterface ...@@ -19,6 +19,7 @@ class MetsFactory implements FactoryInterface
$oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager'); $oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager');
$oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base')); $oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base'));
$metadataFormat = new Mets(); $metadataFormat = new Mets();
$metadataFormat->setEventManager($services->get('EventManager'));
$metadataFormat->setSettings($settings); $metadataFormat->setSettings($settings);
$metadataFormat->setOaiSet($oaiSet); $metadataFormat->setOaiSet($oaiSet);
$isGlobalRepository = !$services->get('ControllerPluginManager') $isGlobalRepository = !$services->get('ControllerPluginManager')
......
...@@ -19,6 +19,7 @@ class ModsFactory implements FactoryInterface ...@@ -19,6 +19,7 @@ class ModsFactory implements FactoryInterface
$oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager'); $oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager');
$oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base')); $oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base'));
$metadataFormat = new Mods(); $metadataFormat = new Mods();
$metadataFormat->setEventManager($services->get('EventManager'));
$metadataFormat->setSettings($settings); $metadataFormat->setSettings($settings);
$metadataFormat->setOaiSet($oaiSet); $metadataFormat->setOaiSet($oaiSet);
$isGlobalRepository = !$services->get('ControllerPluginManager') $isGlobalRepository = !$services->get('ControllerPluginManager')
......
...@@ -19,6 +19,7 @@ class OaiDcFactory implements FactoryInterface ...@@ -19,6 +19,7 @@ class OaiDcFactory implements FactoryInterface
$oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager'); $oaiSetManager = $services->get('OaiPmhRepository\OaiPmh\OaiSetManager');
$oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base')); $oaiSet = $oaiSetManager->get($settings->get('oaipmhrepository_oai_set_format', 'base'));
$metadataFormat = new OaiDc(); $metadataFormat = new OaiDc();
$metadataFormat->setEventManager($services->get('EventManager'));
$metadataFormat->setSettings($settings); $metadataFormat->setSettings($settings);
$metadataFormat->setOaiSet($oaiSet); $metadataFormat->setOaiSet($oaiSet);
$isGlobalRepository = !$services->get('ControllerPluginManager') $isGlobalRepository = !$services->get('ControllerPluginManager')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment