Skip to content

Commit cb256fe

Browse files
authored
Merge pull request #23 from iMattPro/translations
Admin editable consent dialog text
2 parents b7b893b + 843745f commit cb256fe

21 files changed

Lines changed: 1230 additions & 23 deletions

acp/consentmanager_info.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public function module()
2323
'auth' => 'ext_phpbb/consentmanager && acl_a_board',
2424
'cat' => ['ACP_CONSENTMANAGER'],
2525
],
26+
'banner' => [
27+
'title' => 'ACP_CONSENTMANAGER_BANNER',
28+
'auth' => 'ext_phpbb/consentmanager && acl_a_board',
29+
'cat' => ['ACP_CONSENTMANAGER'],
30+
],
2631
'export' => [
2732
'title' => 'ACP_CONSENTMANAGER_EXPORT',
2833
'auth' => 'ext_phpbb/consentmanager && acl_a_board',

acp/consentmanager_module.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ public function main($id, $mode)
2626

2727
switch ($mode)
2828
{
29+
case 'banner':
30+
$this->tpl_name = 'consentmanager_acp_banner';
31+
$this->page_title = 'ACP_CONSENTMANAGER_BANNER';
32+
$controller->handle_consent_text();
33+
break;
34+
2935
case 'export':
3036
$this->tpl_name = 'consentmanager_acp_export';
3137
$this->page_title = 'ACP_CONSENTMANAGER_EXPORT';
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{% include 'overall_header.html' %}
2+
3+
<h1>{{ lang('ACP_CONSENTMANAGER') }}</h1>
4+
5+
<p>{{ lang('ACP_CONSENTMANAGER_BANNER_EXPLAIN') }}</p>
6+
7+
{% if S_ERROR %}
8+
<div class="errorbox">
9+
<h3>{{ lang('WARNING') }}</h3>
10+
<p>{{ ERROR_MSG }}</p>
11+
</div>
12+
{% endif %}
13+
14+
<form id="acp_consentmanager_banner" method="post" action="{{ U_ACTION }}">
15+
<table class="table1 zebra-table">
16+
<thead>
17+
<tr>
18+
<th>{{ lang('LANGUAGE') }}</th>
19+
{% for field in CONSENTMANAGER_BANNER_FIELDS %}
20+
<th>{{ field.LABEL }}</th>
21+
{% endfor %}
22+
</tr>
23+
</thead>
24+
<tbody>
25+
{% for language in CONSENTMANAGER_BANNER_LANGUAGES %}
26+
<tr>
27+
<td style="width: 16%;">
28+
<strong>{{ language.NAME }}</strong><br>
29+
<code>{{ language.ISO }}</code>
30+
</td>
31+
{% for translation in language.TRANSLATIONS %}
32+
<td>
33+
<textarea name="translations[{{ language.ISO }}][{{ translation.KEY }}]" rows="4" cols="36" style="width:80%">{{ translation.VALUE|e('html') }}</textarea>
34+
</td>
35+
{% endfor %}
36+
</tr>
37+
{% endfor %}
38+
</tbody>
39+
</table>
40+
41+
<p>{{ lang('ACP_CONSENTMANAGER_BANNER_FALLBACK_EXPLAIN') }}</p>
42+
43+
<fieldset class="submit-buttons">
44+
<input class="button1" type="submit" id="submit" name="submit" value="{{ lang('SUBMIT') }}">
45+
{{ S_FORM_TOKEN }}
46+
</fieldset>
47+
</form>
48+
49+
{% include 'overall_footer.html' %}

config/services.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,21 @@ services:
77
arguments:
88
- '@cache'
99

10+
phpbb.consentmanager.translation_manager:
11+
class: phpbb\consentmanager\service\translation_manager
12+
arguments:
13+
- '@dbal.conn'
14+
- '@phpbb.consentmanager.cache'
15+
- '@language'
16+
- '%core.root_path%'
17+
- '%core.php_ext%'
18+
- '%tables.phpbb.consentmanager.translations%'
19+
1020
phpbb.consentmanager.service:
1121
class: phpbb\consentmanager\service\consent_manager
1222
arguments:
1323
- '@phpbb.consentmanager.cache'
24+
- '@phpbb.consentmanager.translation_manager'
1425
- '@config'
1526
- '@config_text'
1627
- '@language'
@@ -65,6 +76,7 @@ services:
6576
arguments:
6677
- '@language'
6778
- '@phpbb.consentmanager.acp_manager'
79+
- '@phpbb.consentmanager.translation_manager'
6880
- '@request'
6981
- '@template'
7082
- '%core.root_path%'

config/tables.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
parameters:
22
tables.phpbb.consentmanager.consent_logs: '%core.table_prefix%consentmanager_logs'
3+
tables.phpbb.consentmanager.translations: '%core.table_prefix%consentmanager_translations'

controller/acp_controller.php

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
namespace phpbb\consentmanager\controller;
1212

1313
use phpbb\consentmanager\service\acp_manager;
14+
use phpbb\consentmanager\service\translation_manager;
1415
use phpbb\language\language;
1516
use phpbb\request\request;
17+
use phpbb\request\request_interface;
1618
use phpbb\template\template;
1719

1820
class acp_controller
@@ -23,6 +25,9 @@ class acp_controller
2325
/** @var acp_manager */
2426
protected $acp_manager;
2527

28+
/** @var translation_manager */
29+
protected $translation_manager;
30+
2631
/** @var request */
2732
protected $request;
2833

@@ -41,17 +46,19 @@ class acp_controller
4146
/**
4247
* Constructor.
4348
*
44-
* @param language $language Language service
45-
* @param acp_manager $acp_manager ACP manager service
46-
* @param request $request Request service
47-
* @param template $template Template service
48-
* @param string $root_path phpBB root path
49-
* @param string $php_ext PHP file extension
49+
* @param language $language Language service
50+
* @param acp_manager $acp_manager ACP manager service
51+
* @param translation_manager $translation_manager Translation manager service
52+
* @param request $request Request service
53+
* @param template $template Template service
54+
* @param string $root_path phpBB root path
55+
* @param string $php_ext PHP file extension
5056
*/
51-
public function __construct(language $language, acp_manager $acp_manager, request $request, template $template, $root_path, $php_ext)
57+
public function __construct(language $language, acp_manager $acp_manager, translation_manager $translation_manager, request $request, template $template, $root_path, $php_ext)
5258
{
5359
$this->language = $language;
5460
$this->acp_manager = $acp_manager;
61+
$this->translation_manager = $translation_manager;
5562
$this->request = $request;
5663
$this->template = $template;
5764
$this->root_path = $root_path;
@@ -116,6 +123,41 @@ public function handle()
116123
$this->assign_template_vars();
117124
}
118125

126+
/**
127+
* Handle the ACP consent text page request.
128+
*
129+
* @return void
130+
*/
131+
public function handle_consent_text()
132+
{
133+
add_form_key('phpbb_consentmanager_banner');
134+
135+
if ($this->request->is_set_post('submit'))
136+
{
137+
$this->validate_form_key('phpbb_consentmanager_banner');
138+
139+
$translations = $this->request->variable('translations', ['' => ['' => '']], true, request_interface::POST);
140+
unset($translations['']);
141+
$errors = [];
142+
$saved = $this->translation_manager->save_translations(
143+
is_array($translations) ? $translations : [],
144+
array_keys(translation_manager::BANNER_FIELDS),
145+
$errors
146+
);
147+
148+
if (!$saved)
149+
{
150+
$this->assign_banner_template_vars($errors, is_array($translations) ? $translations : []);
151+
return;
152+
}
153+
154+
$this->acp_manager->log_admin_action('LOG_CONSENTMANAGER_BANNER_UPDATED');
155+
trigger_error($this->language->lang('ACP_CONSENTMANAGER_BANNER_UPDATED') . adm_back_link($this->u_action));
156+
}
157+
158+
$this->assign_banner_template_vars();
159+
}
160+
119161
/**
120162
* Handle the ACP consent logs page request.
121163
*
@@ -318,6 +360,18 @@ protected function assign_export_template_vars(array $form_data, array $errors =
318360
]);
319361
}
320362

363+
protected function assign_banner_template_vars(array $errors = [], array $submitted_translations = null)
364+
{
365+
$this->template->assign_vars(array_merge(
366+
$this->translation_manager->get_banner_template_data($submitted_translations),
367+
[
368+
'S_ERROR' => !empty($errors),
369+
'ERROR_MSG' => implode('<br>', $errors),
370+
'U_ACTION' => $this->u_action,
371+
]
372+
));
373+
}
374+
321375
protected function get_find_username_url()
322376
{
323377
return append_sid(

language/en/acp_consentmanager.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@
4747
'ACP_CONSENTMANAGER_INVALID_INTEGRATIONS' => 'The integrations field must contain a valid JSON array.',
4848
'ACP_CONSENTMANAGER_INVALID_INTEGRATION_ENTRY' => 'Integration entry %1$s is invalid. Each entry must include a safe id, supported category, and valid script source URL.',
4949
'ACP_CONSENTMANAGER_INVALID_JSON' => 'Invalid JSON',
50+
'ACP_CONSENTMANAGER_BANNER_EXPLAIN' => 'Customise or translate the default text shown in the consent banner and privacy settings dialog for each installed language. BBCode and URLs are supported.',
51+
'ACP_CONSENTMANAGER_BANNER_TITLE' => 'Banner title',
52+
'ACP_CONSENTMANAGER_BANNER_MESSAGE' => 'Banner message',
53+
'ACP_CONSENTMANAGER_BANNER_SUBTEXT' => 'Banner subtext',
54+
'ACP_CONSENTMANAGER_BANNER_FALLBACK_EXPLAIN' => 'Leave a field blank to remove the custom translation and use Consent Manager’s default text for that language.',
55+
'ACP_CONSENTMANAGER_BANNER_TEXT_TOO_LONG' => 'Consent text values must be %d characters or fewer.',
56+
'ACP_CONSENTMANAGER_BANNER_UPDATED' => 'Consent text updated.',
5057
'CONSENTMANAGER_CATEGORY_NECESSARY' => 'Necessary',
5158
'CONSENTMANAGER_CATEGORY_ANALYTICS' => 'Analytics',
5259
'CONSENTMANAGER_CATEGORY_MARKETING' => 'Marketing',

language/en/common.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
'CONSENTMANAGER_DEFAULT_BANNER_TEXT' => 'This forum uses cookies to keep you signed in, secure your account, and ensure the site works properly. With your consent, we may also use optional cookies and similar technologies for analytics, marketing, and embedded media.',
3232
'CONSENTMANAGER_DEFAULT_BANNER_SUBTEXT' => 'You can change your preferences at any time in the Privacy Settings.',
3333
'CONSENTMANAGER_CATEGORY_NECESSARY' => 'Necessary',
34-
'CONSENTMANAGER_CATEGORY_NECESSARY_EXPLAIN' => 'Required for forum security, authentication, and core phpBB functionality.',
34+
'CONSENTMANAGER_CATEGORY_NECESSARY_EXPLAIN' => 'Required for forum security, authentication, and essential site functionality.',
3535
'CONSENTMANAGER_CATEGORY_ANALYTICS' => 'Analytics',
3636
'CONSENTMANAGER_CATEGORY_ANALYTICS_EXPLAIN' => 'Helps us understand how the forum is used so we can measure performance and improve the experience.',
3737
'CONSENTMANAGER_CATEGORY_MARKETING' => 'Marketing',

language/en/info_acp_consentmanager.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
$lang = array_merge($lang, [
2222
'ACP_CONSENTMANAGER' => 'Consent Manager',
2323
'ACP_CONSENTMANAGER_SETTINGS' => 'Settings',
24+
'ACP_CONSENTMANAGER_BANNER' => 'Consent Text',
2425
'ACP_CONSENTMANAGER_EXPORT' => 'Consent Logs',
2526
'LOG_CONSENTMANAGER_UPDATED' => '<strong>Updated Consent Manager settings</strong>',
27+
'LOG_CONSENTMANAGER_BANNER_UPDATED' => '<strong>Updated Consent Manager consent text</strong>',
2628
'LOG_CONSENTMANAGER_REPROMPT' => '<strong>Forced Consent Manager re-prompt by increasing the consent version</strong>',
2729
'LOG_CONSENTMANAGER_EXPORT' => '<strong>Exported Consent Manager logs as CSV</strong>',
2830
'LOG_CONSENTMANAGER_DELETE' => '<strong>Deleted Consent Manager log records</strong>',
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
/**
3+
*
4+
* Consent Manager extension for the phpBB Forum Software package.
5+
*
6+
* @copyright (c) 2026
7+
* @license GNU General Public License, version 2 (GPL-2.0)
8+
*
9+
*/
10+
11+
namespace phpbb\consentmanager\migrations;
12+
13+
class m3_banner_translations extends \phpbb\db\migration\migration
14+
{
15+
public function effectively_installed()
16+
{
17+
return $this->db_tools->sql_table_exists($this->table_prefix . 'consentmanager_translations');
18+
}
19+
20+
public static function depends_on()
21+
{
22+
return ['\phpbb\consentmanager\migrations\m2_media_category'];
23+
}
24+
25+
public function update_schema()
26+
{
27+
return [
28+
'add_tables' => [
29+
$this->table_prefix . 'consentmanager_translations' => [
30+
'COLUMNS' => [
31+
'translation_id' => ['UINT', null, 'auto_increment'],
32+
'translation_key' => ['VCHAR:100', ''],
33+
'lang_iso' => ['VCHAR:30', ''],
34+
'translation_text' => ['MTEXT_UNI', ''],
35+
'translation_text_parsed' => ['MTEXT_UNI', ''],
36+
'translation_uid' => ['VCHAR:8', ''],
37+
'translation_bitfield' => ['VCHAR:255', ''],
38+
'translation_options' => ['UINT', 0],
39+
'updated_at' => ['TIMESTAMP', 0],
40+
],
41+
'PRIMARY_KEY' => 'translation_id',
42+
'KEYS' => [
43+
'lookup' => ['UNIQUE', ['translation_key', 'lang_iso']],
44+
'lang_iso' => ['INDEX', 'lang_iso'],
45+
],
46+
],
47+
],
48+
];
49+
}
50+
51+
public function revert_schema()
52+
{
53+
return [
54+
'drop_tables' => [
55+
$this->table_prefix . 'consentmanager_translations',
56+
],
57+
];
58+
}
59+
60+
public function update_data()
61+
{
62+
return [
63+
['module.add', ['acp', 'ACP_CONSENTMANAGER', [
64+
'module_basename' => '\phpbb\consentmanager\acp\consentmanager_module',
65+
'modes' => ['banner'],
66+
]]],
67+
];
68+
}
69+
70+
public function revert_data()
71+
{
72+
return [
73+
['module.remove', ['acp', 'ACP_CONSENTMANAGER', 'ACP_CONSENTMANAGER_BANNER']],
74+
];
75+
}
76+
}

0 commit comments

Comments
 (0)