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
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,20 @@

All notable changes to this project will be documented in this file.

## 0.4.0-dev - 2026-05-16

### Added

- Added a registry of active services registered with Consent Manager to the ACP.
- Added live JSON validation to the manual (ACP-managed) integrations field.

### Changed

- Improved the ACP description of the manual (ACP-managed) integrations.
- Improved formatting of buttons in the Consent Manager modal on mobile devices.
- Improved CSRF protections when deleting consent logs.
- Switched the Privacy settings link to a new lock icon.

## 0.3.0-dev - 2026-05-12

### Added
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

Consent Manager is a GDPR-ready privacy/cookie consent management solution built for phpBB forums.

It adds a consent banner, settings modal, and category-based controls, allowing visitors to accept all, reject all, or choose specific tracking types. A footer link lets users revisit and update their preferences at any time.
It adds a consent banner, settings modal, and category-based controls, allowing visitors to accept all, reject all, or choose specific cookie types. A footer link lets users revisit and update their preferences at any time.

The extension also provides an easy integration point for other phpBB extensions, enabling them to make their non-essential scripts compliant.

Expand Down
16 changes: 13 additions & 3 deletions adm/style/consentmanager_acp.html
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,19 @@ <h3>{{ lang('WARNING') }}</h3>
<fieldset>
<legend>{{ lang('ACP_CONSENTMANAGER_INTEGRATIONS') }}</legend>
<dl>
<dt><label for="consentmanager_integrations">{{ lang('ACP_CONSENTMANAGER_INTEGRATIONS') ~ lang('COLON') }}</label><br><span>{{ lang('ACP_CONSENTMANAGER_INTEGRATIONS_EXPLAIN') }}</span><br><br>
<span><strong>{{ lang('EXAMPLE') ~ lang('COLON') }}</strong></span><br>
<pre><samp class="error">{{ CONSENTMANAGER_INTEGRATIONS_EXAMPLE }}</samp></pre>
<dt><label for="consentmanager_integrations">{{ lang('ACP_CONSENTMANAGER_INTEGRATIONS') ~ lang('COLON') }}</label>
<br>
{{ lang('ACP_CONSENTMANAGER_INTEGRATIONS_EXPLAIN') }}<br>
<br>
{{ lang('ACP_CONSENTMANAGER_INTEGRATIONS_FORMAT') }}<br>
<pre><samp class="error">{{ CONSENTMANAGER_INTEGRATIONS_EXAMPLE }}</samp></pre><br>
<strong>{{ lang('ACP_CONSENTMANAGER_INTEGRATIONS_REQUIRED') ~ lang('COLON') }}</strong><br>
&bull; <samp class="error">id</samp>{{ lang('COLON')}} {{ lang('ACP_CONSENTMANAGER_INTEGRATIONS_REQUIRED_ID') }}<br>
&bull; <samp class="error">category</samp>{{ lang('COLON')}} {{ lang('ACP_CONSENTMANAGER_INTEGRATIONS_REQUIRED_CAT') }} <samp class="error">necessary</samp>, <samp class="error">analytics</samp>, <samp class="error">marketing</samp>, <samp class="error">media</samp>.<br>
&bull; <samp class="error">src</samp>{{ lang('COLON')}} {{ lang('ACP_CONSENTMANAGER_INTEGRATIONS_REQUIRED_SRC') }}<br>
<br>
<strong>{{ lang('ACP_CONSENTMANAGER_INTEGRATIONS_OPTIONAL') ~ lang('COLON') }}</strong><br>
&bull; <samp class="error">label</samp>, <samp class="error">description</samp>, <samp class="error">async</samp>, <samp class="error">defer</samp>
</dt>
<dd>
<div style="position: relative; display: inline-block;">
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"type": "phpbb-extension",
"description": "Centralized GDPR-compliant consent and deferred script loading for phpBB forums.",
"homepage": "https://www.phpbb.com/",
"version": "0.3.0-dev",
"version": "0.4.0-dev",
"keywords": ["phpbb", "extension", "gdpr", "consent", "cookies"],
"license": "GPL-2.0-only",
"authors": [
Expand Down
9 changes: 7 additions & 2 deletions language/en/acp_consentmanager.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@
'ACP_CONSENTMANAGER_MEDIA' => 'Enable embedded media category',
'ACP_CONSENTMANAGER_MEDIA_EXPLAIN' => 'Allows videos, players, widgets, and other iframe-based external media to be loaded after consent.',
'ACP_CONSENTMANAGER_INTEGRATIONS' => 'Manual integrations',
'ACP_CONSENTMANAGER_INTEGRATIONS_EXPLAIN' => 'Use this to add third-party analytics, marketing, or other scripts directly from the ACP. These integrations appear in the consent UI and are only loaded after the required consent has been granted.<br><br>Provide a JSON array of integrations.<br><br>Each object must include: <samp class="error">id</samp>, <samp class="error">category</samp>, <samp class="error">src</samp>. The <samp class="error">id</samp> may only use letters, numbers, dots, underscores, colons, and hyphens. The <samp class="error">category</samp> must be <samp class="error">necessary</samp>, <samp class="error">analytics</samp>, or <samp class="error">marketing</samp>. The <samp class="error">src</samp> must be a valid http, https, or relative script URL.<br><br>Optional fields: <samp class="error">label</samp>, <samp class="error">description</samp>, <samp class="error">async</samp>, <samp class="error">defer</samp>.',
'ACP_CONSENTMANAGER_INTEGRATIONS_EXPLAIN' => 'Use this to add third-party analytics, marketing, or other scripts directly from the ACP. These integrations appear in the consent UI and are only loaded after the required consent has been granted.',
'ACP_CONSENTMANAGER_INTEGRATIONS_FORMAT' => 'Provide a JSON array of integrations. For example:',
'ACP_CONSENTMANAGER_INTEGRATIONS_REQUIRED' => 'Required properties',
'ACP_CONSENTMANAGER_INTEGRATIONS_REQUIRED_ID' => 'may only use letters, numbers, dots, underscores, colons, and hyphens.',
'ACP_CONSENTMANAGER_INTEGRATIONS_REQUIRED_CAT' => 'must be one of these values:',
'ACP_CONSENTMANAGER_INTEGRATIONS_REQUIRED_SRC' => 'must be a valid http, https, or relative script URL.',
'ACP_CONSENTMANAGER_INTEGRATIONS_OPTIONAL' => 'Optional properties',
'ACP_CONSENTMANAGER_INTEGRATIONS_EXAMPLE_LABEL' => 'Example Analytics',
'ACP_CONSENTMANAGER_INTEGRATIONS_EXAMPLE_DESC' => 'Loads a simple analytics library after consent.',
'ACP_CONSENTMANAGER_REGISTRATIONS' => 'Registered integrations',
Expand All @@ -45,7 +51,6 @@
'CONSENTMANAGER_CATEGORY_ANALYTICS' => 'Analytics',
'CONSENTMANAGER_CATEGORY_MARKETING' => 'Marketing',
'CONSENTMANAGER_CATEGORY_MEDIA' => 'Media',
'EXAMPLE' => 'Example',

// Consent logs
'ACP_CONSENTMANAGER_EXPORT_EXPLAIN' => 'Download a CSV file of stored consent log records or permanently delete matching records from the database. All fields are optional; leave them blank to work with the full log.',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{% if S_CONSENTMANAGER_ENABLED %}
<li class="rightside" data-last-responsive="true" id="consent-manager-link-item" hidden="hidden">
<a href="#" id="consent-manager-link" role="menuitem" aria-controls="consent-manager-modal">
<i class="icon fa-sliders fa-fw" aria-hidden="true"></i><span>{{ lang('CONSENTMANAGER_SETTINGS_TITLE') }}</span>
<i class="icon fa-lock fa-fw" aria-hidden="true"></i><span>{{ lang('CONSENTMANAGER_SETTINGS_TITLE') }}</span>
</a>
</li>
{% endif %}
Loading