-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathModule.php
96 lines (93 loc) · 4.02 KB
/
Module.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?php
namespace OutputFormats;
use Omeka\Module\AbstractModule;
use Laminas\EventManager\Event;
use Laminas\EventManager\SharedEventManagerInterface;
class Module extends AbstractModule
{
public function getConfig()
{
return include sprintf('%s/config/module.config.php', __DIR__);
}
public function attachListeners(SharedEventManagerInterface $sharedEventManager)
{
/*
* Render output format selectors.
*/
$services = $this->getServiceLocator();
$config = $services->get('Config');
$selectors = $config['output_formats_selectors'];
$siteSettings = $services->get('Omeka\Settings\Site');
foreach ($selectors as $selector) {
$sharedEventManager->attach(
$selector['controller'],
$selector['event'],
function (Event $event) use ($selector, $siteSettings) {
// Check if this selector should be rendered.
$services = $this->getServiceLocator();
$status = $services->get('Omeka\Status');
if ($status->isSiteRequest()) {
$addSelectorsSite = $services
->get('Omeka\Settings\Site')
->get('output_formats_add_selectors_site');
if (!$addSelectorsSite) {
// Do not render this selector.
return;
}
}
// Render the selector.
$view = $event->getTarget();
$query = $view->params()->fromQuery();
if ($status->isSiteRequest()) {
// Limit results to the current site.
$query['site_id'] = $view->currentSite()->id();
// Respect the site's pagination_per_page setting.
$query['per_page'] = $siteSettings->get('pagination_per_page');
// In sites, an item set page is a special item browse page
// that routes to the item controller. Here we add the item
// set ID to the query if it exists as route param.
$itemSetId = $view->params()->fromRoute('item-set-id');
if ($itemSetId) {
$query['item_set_id[]'] = $itemSetId;
}
}
echo $view->outputFormatsSelector(
$selector['resource'],
$view->params()->fromRoute('id'),
$query
);
},
// Execute with a low priority so the control is at the bottom.
-100
);
}
/*
* Add site settings.
*/
$sharedEventManager->attach(
'Omeka\Form\SiteSettingsForm',
'form.add_elements',
function (Event $event) {
$services = $this->getServiceLocator();
$siteSettings = $services->get('Omeka\Settings\Site');
$form = $event->getTarget();
// Add the element group.
$elementGroups = $form->getOption('element_groups', []);
$elementGroups['output_formats'] = 'Output Formats'; // @translate
$form->setOption('element_groups', $elementGroups);
// Add the element.
$form->add([
'type' => 'checkbox',
'name' => 'output_formats_add_selectors_site',
'options' => [
'element_group' => 'output_formats',
'label' => 'Add output format selector to public resource pages', // @translate
],
'attributes' => [
'value' => $siteSettings->get('output_formats_add_selectors_site'),
],
]);
}
);
}
}