Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions event/listener.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ public static function getSubscribedEvents()
'core.ucp_display_module_before' => 'load_language',
'core.acp_main_notice' => 'compatibility_notice',
'core.help_manager_add_block_after' => 'wpn_faq',
'core.page_footer' => 'append_agreement',
];
}

Expand Down Expand Up @@ -198,6 +199,28 @@ public function wpn_faq($event)
}
}

/**
* Append language to privacy agreement.
*
* @return void
*/
public function append_agreement()
{
if (!$this->config['wpn_webpush_enable']
|| !$this->template->retrieve_var('S_AGREEMENT')
|| $this->template->retrieve_var('AGREEMENT_TITLE') !== $this->language->lang('PRIVACY'))
{
return;
}

if (!$this->language->is_set('NOTIFY_WEBPUSH_PRIVACY_POLICY'))
{
$this->language->add_lang('webpushnotifications_module_ucp', 'phpbb/webpushnotifications');
}

$this->template->append_var('AGREEMENT_TEXT', $this->language->lang('NOTIFY_WEBPUSH_PRIVACY_POLICY', $this->config['sitename']));
}

/**
* Can notifications be used by the user?
*
Expand Down
1 change: 1 addition & 0 deletions language/en/webpushnotifications_module_ucp.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,5 @@
'NOTIFY_WEBPUSH_POPUP_DISABLE_EXPLAIN' => 'We show a reminder asking you to allow browser notifications when they are not currently enabled or when we cannot detect them. Turn this off to permanently stop these reminder pop-ups on all your devices. If you turn this off, you will not be warned if your browser notifications stop working in the future.',
'NOTIFY_WEBPUSH_POPUP_ENABLER' => 'Enable reminders',
'NOTIFY_WEBPUSH_POPUP_DISABLER' => 'Disable reminders',
'NOTIFY_WEBPUSH_PRIVACY_POLICY' => '<br><br><h3>Push Notifications</h3>If you enable push notifications, “%1$s” stores a browser subscription linked to your account. Notifications are routed through a third-party push service used by your browser or device (such as Google, Mozilla, Apple, or Microsoft), which processes the subscription identifier and delivery metadata. Push messages are encrypted, and notification details are retrieved directly from “%1$s”. You can disable push notifications at any time through your board or browser settings.',
]);
1 change: 1 addition & 0 deletions language/ru/webpushnotifications_module_ucp.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,5 @@
'NOTIFY_WEBPUSH_POPUP_DISABLE_EXPLAIN' => 'Мы показываем напоминание с просьбой разрешить уведомления браузера, если они сейчас не включены или если мы не можем их обнаружить. Отключите эту функцию, чтобы навсегда убрать эти напоминания на всех ваших устройствах. Если вы отключите эту функцию, вы больше не будете получать предупреждения, если уведомления браузера перестанут работать в будущем.',
'NOTIFY_WEBPUSH_POPUP_ENABLER' => 'Включить напоминания',
'NOTIFY_WEBPUSH_POPUP_DISABLER' => 'Отключить напоминания',
'NOTIFY_WEBPUSH_PRIVACY_POLICY' => '<br><br><h3>Браузерные push—уведомления</h3>Браузерные push—уведомления на конференции «%1$s» используют сторонние службы push-уведомлений в зависимости от используемого браузера или устройства (например, соответствующие службы Google, Mozilla, Apple или Microsoft), которые обрабатывают идентификаторы и метаданные подписок. Текст сообщений зашифровывается, остальные данные о push—уведомлениях загружаются напрямую с конференции «%1$s». Вы можете отключить браузерные push—уведомления в настройках конференции или браузера.',
]);
47 changes: 47 additions & 0 deletions tests/event/listener_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ public function test_getSubscribedEvents()
'core.ucp_display_module_before',
'core.acp_main_notice',
'core.help_manager_add_block_after',
'core.page_footer',
], array_keys(\phpbb\webpushnotifications\event\listener::getSubscribedEvents()));
}

Expand Down Expand Up @@ -419,6 +420,52 @@ public function test_wpn_faq()
$this->listener->wpn_faq($event);
}

/**
* Data for test_append_agreement
*
* @return array
*/
public function append_agreement_data()
{
return [
'no agreement' => [true, false, 'PRIVACY', 0],
'terms page' => [true, true, 'TERMS', 0],
'privacy page but disabled' => [false, true, 'PRIVACY', 0],
'privacy page, enabled' => [true, true, 'PRIVACY', 1],
];
}

/**
* Test the append_agreement method
*
* @dataProvider append_agreement_data
* @param bool $show_agreement Whether to display agreement text
* @param mixed $s_agreement S_AGREEMENT template variable value
* @param mixed $agreement_title AGREEMENT_TITLE template variable value
* @param int $expected_append_calls Expected append_var calls
*/
public function test_append_agreement($show_agreement, $s_agreement, $agreement_title, $expected_append_calls)
{
$this->config['wpn_webpush_enable'] = $show_agreement;
$this->config['sitename'] = 'Test Board';

$this->template->expects(self::atMost(2))
->method('retrieve_var')
->withConsecutive(['S_AGREEMENT'], ['AGREEMENT_TITLE'])
->willReturnOnConsecutiveCalls($s_agreement, $this->language->lang($agreement_title));

$this->template->expects($expected_append_calls ? self::once() : self::never())
->method('append_var')
->with('AGREEMENT_TEXT', self::callback(function ($agreement_text) {
self::assertTrue($this->language->is_set('NOTIFY_WEBPUSH_PRIVACY_POLICY'));
self::assertSame($this->language->lang('NOTIFY_WEBPUSH_PRIVACY_POLICY', 'Test Board'), $agreement_text);
return true;
}));

$this->set_listener();
$this->listener->append_agreement();
}

private function lang($string)
{
return $this->language->lang($string);
Expand Down