Consent Manager (IAB TCF 2.2)

Consent Manager (IAB TCF 2.2) 2026-03-24

No permission to download
Log retention (days) is set tot 365, but you can't save with this value. So you have to adjust it first to 360 or 390,..

And these errors when updating vendors or changing page in logs.
Code:
InvalidArgumentException: Accessed unknown getter 'tc_string' on DEB\ConsentManager:ConsentLog[2] src/XF/Mvc/Entity/Entity.php:228
Generated by: Mar 22, 2026 at 1:10 PM

Stack trace
#0 src/XF/Mvc/Entity/Entity.php(140): XF\Mvc\Entity\Entity->get('tc_string')
#1 internal_data/code_cache/templates/l18/s0/admin/deb_consent_logs.php(177): XF\Mvc\Entity\Entity->offsetGet('tc_string')
#2 src/XF/Template/Templater.php(1818): XF\Template\Templater->{closure:internal_data/code_cache/templates/l18/s0/admin/deb_consent_logs.php:4}(Object(SV\StandardLib\XF\Template\Templater), Array, NULL)
#3 src/XF/Template/Template.php(24): XF\Template\Templater->renderTemplate('deb_consent_log...', Array)
#4 src/XF/Mvc/Renderer/Html.php(50): XF\Template\Template->render()
#5 src/XF/Mvc/Dispatcher.php(471): XF\Mvc\Renderer\Html->renderView('DEB\\ConsentMana...', 'admin:deb_conse...', Array)
#6 src/XF/Mvc/Dispatcher.php(453): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#7 src/XF/Mvc/Dispatcher.php(412): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#8 src/XF/Mvc/Dispatcher.php(66): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'html')
#9 src/XF/App.php(2824): XF\Mvc\Dispatcher->run()
#10 src/XF.php(814): XF\App->run()
#11 admin.php(15): XF::runApp('XF\\Admin\\App')
#12 {main}

Request state
array(4) {
  ["url"] => string(27) "/admin.php?deb-consent/logs"
  ["referrer"] => string(52) "/admin.php?deb-consent/"
  ["_GET"] => array(1) {
    ["deb-consent/logs"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}

Code:
InvalidArgumentException: Accessed unknown getter 'source' on DEB\ConsentManager:ConsentLog[2] src/XF/Mvc/Entity/Entity.php:228
Generated by: Mar 22, 2026 at 1:10 PM

Stack trace
#0 src/XF/Mvc/Entity/Entity.php(140): XF\Mvc\Entity\Entity->get('source')
#1 internal_data/code_cache/templates/l18/s0/admin/deb_consent_logs.php(190): XF\Mvc\Entity\Entity->offsetGet('source')
#2 src/XF/Template/Templater.php(1818): XF\Template\Templater->{closure:internal_data/code_cache/templates/l18/s0/admin/deb_consent_logs.php:4}(Object(SV\StandardLib\XF\Template\Templater), Array, NULL)
#3 src/XF/Template/Template.php(24): XF\Template\Templater->renderTemplate('deb_consent_log...', Array)
#4 src/XF/Mvc/Renderer/Html.php(50): XF\Template\Template->render()
#5 src/XF/Mvc/Dispatcher.php(471): XF\Mvc\Renderer\Html->renderView('DEB\\ConsentMana...', 'admin:deb_conse...', Array)
#6 src/XF/Mvc/Dispatcher.php(453): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#7 src/XF/Mvc/Dispatcher.php(412): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#8 src/XF/Mvc/Dispatcher.php(66): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'html')
#9 src/XF/App.php(2824): XF\Mvc\Dispatcher->run()
#10 src/XF.php(814): XF\App->run()
#11 admin.php(15): XF::runApp('XF\\Admin\\App')
#12 {main}

Request state
array(4) {
  ["url"] => string(27) "/admin.php?deb-consent/logs"
  ["referrer"] => string(52) "/admin.php?deb-consent/"
  ["_GET"] => array(1) {
    ["deb-consent/logs"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}

And can't disable - Global Scope (Cross-Site)
 
Last edited:
Michaelb24179 updated Consent Manager (IAB TCF 2.2) with a new update entry:

1.0.2

Bug Fixes:
  • Fixed "unknown getter" errors on consent log page (tc_string, source)
  • Fixed log retention setting not accepting values like 365 days (changed step from 30 to 1)
  • Fixed "Global Scope (Cross-Site)" toggle not saving when disabled
  • Fixed _data/templates.xml not syncing with _output templates

Improvements:
- Improved settings save reliability with better default handling for checkboxes

Read the rest of this update entry...
 
All seems to be working except switching pages on consent logs. This results in 'The requested page could not be found.'
 
On the cookie settings/declaration page changing cookie settings doesn't seem to work.

And the purpose acceptance rates graph doesn't show anything.
 
Michaelb24179 updated Consent Manager (IAB TCF 2.2) with a new update entry:

1.0.2 Patch 2

Bug Fixes
  • Fixed purpose acceptance rates chart showing empty (per-purpose stats were not recorded during consent actions)
  • Fixed "Change Cookie Settings" button on /consent page not opening purpose selection layer
  • Fixed settings not persisting after save due to entity cache not being cleared
  • Fixed leading comma in purpose badges on logs, dashboard, vendors and consent page (XF foreach $i is 1-based)
  • Fixed purpose chart labels showing only numeric IDs instead of...

Read the rest of this update entry...
 
Change Cookie Settings button opens the selection but can't accept, save or reject.

On some mobile browers the link to the cookie settings page is not clickable.

And ads are not showing anymore.
 
Last edited:
Michaelb24179 updated Consent Manager (IAB TCF 2.2) with a new update entry:

1.0.2 Patch 3

Bug Fixes:
  • Fixed ads not showing after consent was given (Google Consent Mode remained 'denied' on page load)
  • Fixed Layer 2 Accept/Save/Reject buttons not working when reopened via "Change Cookie Settings"
  • Fixed footer cookie settings link not clickable on mobile browsers (touch target too small)
  • Fixed admin permission not auto-assigned to super admins on fresh install
  • Fixed Layer 3 (Vendor Details) showing empty list
  • Fixed Cookie Declaration link using button...

Read the rest of this update entry...
 
Error when saving something in settings. And on the cookie settings page still unable to save or close.

Code:
Server error log
ErrorException: Template error: [E_USER_WARNING] Function datetime is unknown src/XF/Template/Templater.php:1215
Generated by: Mar 23, 2026 at 8:04 PM

Stack trace
#0 [internal function]: XF\Template\Templater->handleTemplateError(512, '[E_USER_WARNING...', '/home/bodyforum...', 1215)
#1 src/XF/Template/Templater.php(1215): trigger_error('Function dateti...', 512)
#2 internal_data/code_cache/templates/l18/s0/admin/deb_consent_dashboard.php(732): XF\Template\Templater->func('datetime', Array, true)
#3 src/XF/Template/Templater.php(1818): XF\Template\Templater->{closure:internal_data/code_cache/templates/l18/s0/admin/deb_consent_dashboard.php:4}(Object(SV\StandardLib\XF\Template\Templater), Array, NULL)
#4 src/XF/Template/Template.php(24): XF\Template\Templater->renderTemplate('deb_consent_das...', Array)
#5 src/XF/Mvc/Renderer/Html.php(50): XF\Template\Template->render()
#6 src/XF/Mvc/Dispatcher.php(471): XF\Mvc\Renderer\Html->renderView('DEB\\ConsentMana...', 'admin:deb_conse...', Array)
#7 src/XF/Mvc/Dispatcher.php(453): XF\Mvc\Dispatcher->renderView(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#8 src/XF/Mvc/Dispatcher.php(412): XF\Mvc\Dispatcher->renderReply(Object(XF\Mvc\Renderer\Html), Object(XF\Mvc\Reply\View))
#9 src/XF/Mvc/Dispatcher.php(66): XF\Mvc\Dispatcher->render(Object(XF\Mvc\Reply\View), 'html')
#10 src/XF/App.php(2824): XF\Mvc\Dispatcher->run()
#11 src/XF.php(814): XF\App->run()
#12 admin.php(15): XF::runApp('XF\\Admin\\App')
#13 {main}

Request state
array(4) {
  ["url"] => string(23) "/admin.php?deb-consent/"
  ["referrer"] => string(61) "/admin.php?deb-consent-settings/"
  ["_GET"] => array(1) {
    ["deb-consent/"] => string(0) ""
  }
  ["_POST"] => array(0) {
  }
}
 
Michaelb24179 updated Consent Manager (IAB TCF 2.2) with a new update entry:

1.0.2 Patch 4

Bug Fixes:
  • Fixed "Function datetime is unknown" error on dashboard and logs (changed to date_time)
  • Fixed banner not closing after Accept/Reject/Save when CMP JavaScript throws an error

Improvements:
  • Banner buttons now hide wrapper before CMP call with try/catch error handling
  • Banner always closes reliably regardless of JavaScript errors

Read the rest of this update entry...
 
I was unable to reproduce this issue - in my testing all buttons (Accept, Reject, Save Selection) work correctly and the banner closes as expected.
If the issue persists on your end, please try the following:
Upload Patch 4 again with "Overwrite all files" enabled to make sure old JS and template files are fully replaced
Also clear your browser cache (Ctrl+Shift+Delete) or test in a private/incognito window
In most cases this is caused by cached JavaScript files or compiled templates from a previous patch that haven't been refreshed yet. In Patch 4 I've added additional error handling to prevent any JS error from blocking the banner from closing.

Let me know if it works after that!
 
Since Patch 3 contained an invalid template function (datetime instead of date_time), the banner template couldn't render properly. After overwriting all files with Patch 4 the fix is applied, but unfortunately the browser cookies were affected, so members need to accept the banner once more. All previous consent records in the database are still valid and preserved. I caught the error too late :(
 
Found it.

When 'Global Scope (Cross-Site)' is disabled ads are not shown and cookie settings doesn't work.
 
I have some basic questions about how the DEB Consent Manager works. First off: I think it's fantastic that someone is addressing the topic of XenForo and CMP. Thank you for your work @DEBTech .

To understand my understanding: Is it really sufficient to install the DEB Consent Manager add-on and add the Google code snippet for AdSense advertising in the appropriate place? If that's sufficient, is there a specific order or procedure for inserting the AdSense code snippet?

Can I implement Google consent mode using the DEB Consent Manager? If so, how do I proceed?

I've noticed that once a consent selection is made, it isn't saved. If I make a specific selection and then open the DEB Consent Manager dialog again, the selection seems to be reset. Is this intentional, or have I misunderstood something about how it works?

What is meant by the language options (8 languages)? Are these the languages for the user dialog? And finally, is there a guide or documentation regarding the use of IAB vendors? I'm not sure what use case I would need this for.

It would be great if someone could answer these questions for me. I believe a product like the DEB Consent Manager has a lot of potential.

Thank you.
 
1. AdSense Integration
Yes, basically all you need to do is install the add-on and place your AdSense code as you normally would - whether through my AdSense Manager PRO or manually via XenForo's ad system. The Consent Manager takes care of the rest in the background. It makes sure Google only serves personalized ads once your visitor has given consent. No extra configuration or specific order needed.

2. Google Consent Mode v2
Already built in and works automatically. As soon as the add-on is active, the right signals are sent to Google - "denied" before consent, "granted" after. You can tweak the mapping under the "Google Consent Mode" tab in the settings if you want, but normally the defaults are fine and you don't need to touch anything there.

3. Consent selection not being saved
I'm aware of that issue - I fixed it in Patch 4. Please update, clear your cache and ideally do a quick test in a private window. After that your selection should be properly saved via the cookie. If it still doesn't work, just let me know and I'll take a look at your setup directly.

4. Languages
Exactly, that refers to the consent dialog itself - the banner, buttons, purpose descriptions and the cookie declaration page. I've currently included English, German, Spanish, French, Italian, Dutch, Polish and Portuguese. The language is automatically selected based on your visitor's forum language setting.

5. IAB Vendors
In short: these are the advertising and technology companies that may process your visitors' data. If you use Google AdSense for example, Google is one of those vendors. Through the GVL import you can load the official IAB list and then simply activate the ones you actually use. This is important for full TCF 2.2 compliance. But if you're only running AdSense and just want to get started, you can skip that step for now - the banner works fine without it.

Found it.

When 'Global Scope (Cross-Site)' is disabled ads are not shown and cookie settings doesn't work.
Thanks for finding that! I'll look into the Global Scope issue right now and push a fix as soon as it's resolved.
 
Search in the vendors and logs list would be a good addition.

On the xenforo cookie pages these phrases are missing

cookie_consent.group_label_third_party
cookie_consent.group_description_third_party
cookie_consent.cookie_description_euconsent_v2
 
DEBTech updated Consent Manager (IAB TCF 2.2) with a new update entry:

1.0.2 Patch 5

Bug Fixes:
  • Fixed Google Consent Mode script loading AFTER AdSense/gtag.js (moved to top of <head>)
  • Fixed returning visitors seeing 'denied' consent until page fully loaded (cookie check now in <head>)
  • Fixed Global Scope toggle breaking all banner JavaScript when disabled (XF renders false as empty string)
  • Fixed missing XenForo cookie consent page phrases (third-party group and euconsent-v2 description)

New Features:
  • Search/filter field in...

Read the rest of this update entry...
 
Back
Top Bottom