-
Notifications
You must be signed in to change notification settings - Fork 0
/
Module.php
148 lines (135 loc) · 6.05 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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<?php
namespace WebMonetization;
use Omeka\Form\Element\RestoreTextarea;
use Omeka\Module\AbstractModule;
use Zend\EventManager\Event;
use Zend\EventManager\SharedEventManagerInterface;
class Module extends AbstractModule
{
const MESSAGE_MONETIZATION_DISABLED = 'You can support this site by enabling <a href="https://coil.com/">web monetization</a>.'; // @translate
const MESSAGE_SITE_DISABLED = 'Please support this site by turning on micro-donations.'; // @translate
const MESSAGE_SITE_ENABLED = 'Thank you for supporting this site with your micro-donations!'; // @translate
public function getConfig()
{
return include sprintf('%s/config/module.config.php', __DIR__);
}
public function attachListeners(SharedEventManagerInterface $sharedEventManager)
{
$services = $this->getServiceLocator();
$sharedEventManager->attach(
'Omeka\Form\SiteSettingsForm',
'form.add_elements',
[$this, 'addSiteSettings']
);
// Apply web monetization to all public site controllers.
$config = $services->get('Config');
$controllers = array_merge(
array_keys($config['controllers']['invokables']),
array_keys($config['controllers']['factories'])
);
foreach ($controllers as $controller) {
if (false !== strpos($controller, '\Controller\Site\\')) {
$sharedEventManager->attach(
$controller,
'view.layout',
[$this, 'applyWebMonetization']
);
}
}
}
public function addSiteSettings(Event $event)
{
$form = $event->getTarget();
$form->add([
'type' => 'fieldset',
'name' => 'web_monetization',
'options' => [
'label' => 'Web Monetization', // @translate
],
]);
$form->get('web_monetization')->add([
'type' => 'text',
'name' => 'web_monetization_payment_pointer',
'options' => [
'label' => 'Payment pointer', // @translate
],
'attributes' => [
'value' => $form->getSiteSettings()->get('web_monetization_payment_pointer'),
'pattern' => '^\$.+',
],
]);
$form->get('web_monetization')->add([
'type' => 'checkbox',
'name' => 'web_monetization_enable_by_default',
'options' => [
'label' => 'Payments turned on by default', // @translate
],
'attributes' => [
'value' => $form->getSiteSettings()->get('web_monetization_enable_by_default'),
],
]);
$form->get('web_monetization')->add([
'type' => 'checkbox',
'name' => 'web_monetization_add_banner',
'options' => [
'label' => 'Add banner', // @translate
],
'attributes' => [
'value' => $form->getSiteSettings()->get('web_monetization_add_banner'),
],
]);
$element = new RestoreTextarea('web_monetization_message_monetization_disabled');
$element
->setLabel('Monetization disabled message') // @translate
->setAttributes([
'rows' => '2',
])
->setRestoreButtonText('Restore default message') // @translate
->setValue($form->getSiteSettings()->get('web_monetization_message_monetization_disabled') ?? self::MESSAGE_MONETIZATION_DISABLED)
->setRestoreValue(self::MESSAGE_MONETIZATION_DISABLED);
$form->get('web_monetization')->add($element);
$element = new RestoreTextarea('web_monetization_message_site_disabled');
$element
->setLabel('Site disabled message') // @translate
->setAttributes([
'rows' => '2',
])
->setRestoreButtonText('Restore default message') // @translate
->setValue($form->getSiteSettings()->get('web_monetization_message_site_disabled') ?? self::MESSAGE_SITE_DISABLED)
->setRestoreValue(self::MESSAGE_SITE_DISABLED);
$form->get('web_monetization')->add($element);
$element = new RestoreTextarea('web_monetization_message_site_enabled');
$element
->setLabel('Site enabled message') // @translate
->setAttributes([
'rows' => '2',
])
->setRestoreButtonText('Restore default message') // @translate
->setValue($form->getSiteSettings()->get('web_monetization_message_site_enabled') ?? self::MESSAGE_SITE_ENABLED)
->setRestoreValue(self::MESSAGE_SITE_ENABLED);
$form->get('web_monetization')->add($element);
$form->get('web_monetization')->add($element);
}
public function applyWebMonetization(Event $event)
{
$view = $event->getTarget();
$paymentPointer = $view->siteSetting('web_monetization_payment_pointer');
if (!$paymentPointer) {
return;
}
// Append the web monetization scripts and provide the needed variables.
$view->headLink()->appendStylesheet($view->assetUrl('css/web-monetization-control.css', 'WebMonetization'));
$view->headScript()->appendFile($view->assetUrl('js/web-monetization.js', 'WebMonetization'));
$view->headScript()->appendFile($view->assetUrl('js/web-monetization-control.js', 'WebMonetization'));
$view->headMeta()->appendName('web_monetization_path', $view->url('site', [], true));
$view->headMeta()->appendName('web_monetization_payment_pointer', $paymentPointer);
$view->headMeta()->appendName('web_monetization_enable_by_default', (bool) $view->siteSetting('web_monetization_enable_by_default'));
// Add the banner if configured to do so.
if ($view->siteSetting('web_monetization_add_banner')) {
$view->htmlElement('body')->appendAttribute(
'data-web-monetization-banner',
$view->webMonetization()->control()
);
}
}
}