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

Improved option to genericize dcterms to dc.

parent 5f522cd2
Branches
No related tags found
No related merge requests found
...@@ -148,42 +148,46 @@ class Module extends AbstractModule ...@@ -148,42 +148,46 @@ class Module extends AbstractModule
public function filterOaiPmhRepositoryValues(Event $event): void public function filterOaiPmhRepositoryValues(Event $event): void
{ {
static $genericDcterms; static $genericDcterms;
static $map;
if (is_null($genericDcterms)) { if (is_null($genericDcterms)) {
$services = $this->getServiceLocator(); $services = $this->getServiceLocator();
$settings = $services->get('Omeka\Settings'); $settings = $services->get('Omeka\Settings');
$genericDcterms = $settings->get('oaipmhrepository_generic_dcterms', false); $genericDcterms = array_diff(
$settings->get('oaipmhrepository_generic_dcterms', ['oai_dc', 'cdwalite', 'mets', 'mods']),
['oai_dcterms']
);
$map = include __DIR__ . '/data/mappings/dc_generic.php';
} }
if (!$genericDcterms) { if (!count($genericDcterms) || !count($map)) {
return; return;
} }
$resource = $event->getParam('resource');
// Manage exception for mets and dcterms.
$prefix = $event->getParam('prefix'); $prefix = $event->getParam('prefix');
if ($prefix === 'oai_dcterms') { if (!in_array($prefix, $genericDcterms)) {
return; return;
} }
$resource = $event->getParam('resource');
// Check if the filter is enable for the current format.
if ($prefix === 'mets') { if ($prefix === 'mets') {
$services = $this->getServiceLocator(); $services = $this->getServiceLocator();
$settings = $services->get('Omeka\Settings'); $settings = $services->get('Omeka\Settings');
switch (get_class($resource)) { switch (get_class($resource)) {
case \Omeka\Api\Representation\MediaRepresentation::class:
$dataFormat = $settings->get('oaipmhrepository_mets_data_media');
break;
case \Omeka\Api\Representation\ItemRepresentation::class: case \Omeka\Api\Representation\ItemRepresentation::class:
default: default:
$dataFormat = $settings->get('oaipmhrepository_mets_data_item'); $dataFormat = $settings->get('oaipmhrepository_mets_data_item');
break; break;
case \Omeka\Api\Representation\MediaRepresentation::class:
$dataFormat = $settings->get('oaipmhrepository_mets_data_media');
break;
} }
if ($dataFormat === 'dcterms') { if ($dataFormat === 'dcterms') {
return; return;
} }
} }
$map = include __DIR__ . '/data/mappings/dc_generic.php';
$term = $event->getParam('term'); $term = $event->getParam('term');
if (empty($map[$term])) { if (empty($map[$term])) {
return; return;
......
...@@ -110,7 +110,13 @@ return [ ...@@ -110,7 +110,13 @@ return [
'oaipmhrepository_append_identifier_global' => 'api_url', 'oaipmhrepository_append_identifier_global' => 'api_url',
'oaipmhrepository_append_identifier_site' => 'absolute_site_url', 'oaipmhrepository_append_identifier_site' => 'absolute_site_url',
'oaipmhrepository_oai_set_format' => 'basic', 'oaipmhrepository_oai_set_format' => 'basic',
'oaipmhrepository_generic_dcterms' => true, 'oaipmhrepository_generic_dcterms' => [
// Of course dcterms is not included.
'oai_dc',
'mets',
'cdwalite',
'mods',
],
'oaipmhrepository_mets_data_item' => 'dcterms', 'oaipmhrepository_mets_data_item' => 'dcterms',
'oaipmhrepository_mets_data_media' => 'dcterms', 'oaipmhrepository_mets_data_media' => 'dcterms',
'oaipmhrepository_human_interface' => true, 'oaipmhrepository_human_interface' => true,
......
<?php declare(strict_types=1); <?php declare(strict_types=1);
namespace OaiPmhRepository; namespace OaiPmhRepository;
use Omeka\Mvc\Controller\Plugin\Messenger;
use Omeka\Stdlib\Message;
/** /**
* @var Module $this * @var Module $this
* @var \Laminas\ServiceManager\ServiceLocatorInterface $serviceLocator * @var \Laminas\ServiceManager\ServiceLocatorInterface $serviceLocator
...@@ -86,3 +89,16 @@ if (version_compare($oldVersion, '3.3.0', '<')) { ...@@ -86,3 +89,16 @@ if (version_compare($oldVersion, '3.3.0', '<')) {
$settings->set('oaipmhrepository_mets_data_media', $settings->set('oaipmhrepository_mets_data_media',
$defaultSettings['oaipmhrepository_mets_data_media']); $defaultSettings['oaipmhrepository_mets_data_media']);
} }
if (version_compare($oldVersion, '3.3.5.2', '<')) {
$messenger = new Messenger();
$message = new Message(
'The event "oaipmhrepository.values" that may be used by other modules was deprecated and replaced by event "oaipmhrepository.values.pre".' // @translate
);
$messenger->addWarning($message);
$settings->set(
'oaipmhrepository_generic_dcterms',
$settings->get('oaipmhrepository_generic_dcterms', true) ? ['oai_dc', 'cdwalite', 'mets', 'mods'] : []
);
}
...@@ -188,15 +188,22 @@ class ConfigForm extends Form implements TranslatorAwareInterface ...@@ -188,15 +188,22 @@ class ConfigForm extends Form implements TranslatorAwareInterface
$this->add([ $this->add([
'name' => 'oaipmhrepository_generic_dcterms', 'name' => 'oaipmhrepository_generic_dcterms',
'type' => Element\Checkbox::class, 'type' => Element\MultiCheckbox::class,
'options' => [ 'options' => [
'label' => 'Genericize dcterms', // @translate 'label' => 'Genericize dcterms for specific formats', // @translate
'info' => $this->translate('Use refined terms for Dublin Core elements, for example dcterms:abstract will be merged with dc:description.') // @translate 'info' => $this->translate('Use refined terms for Dublin Core elements, for example dcterms:abstract will be merged with dc:description.') // @translate
. $this->translate('It allows to expose all metadata in the standard oai_dc.') // @translate . $this->translate('It allows to expose all metadata in the standard oai_dc.') // @translate
. $this->translate('For other merges, the event "oaipmhrepository.values.pre" can be used.'), // @translate . $this->translate('For other merges, the event "oaipmhrepository.values.pre" can be used.'), // @translate
'value_options' => [
'oai_dc' => 'oai_dc',
'mets' => 'mets',
'cdwalite' => 'cdwalite',
'mods' => 'mods',
],
], ],
'attributes' => [ 'attributes' => [
'id' => 'oaipmhrepository_generic_dcterms', 'id' => 'oaipmhrepository_generic_dcterms',
'required' => false,
], ],
]); ]);
...@@ -287,6 +294,12 @@ class ConfigForm extends Form implements TranslatorAwareInterface ...@@ -287,6 +294,12 @@ class ConfigForm extends Form implements TranslatorAwareInterface
'min' => '1', 'min' => '1',
], ],
]); ]);
$this->getInputFilter()
->add([
'name' => 'oaipmhrepository_generic_dcterms',
'required' => false,
]);
} }
protected function translate($args) protected function translate($args)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment