[TikiWiki-commits] [Git][tikiwiki/tiki][master] [FIX] Cookie Consent: Fix cookie consent categories handling
Benoit Grégoire (@benoitg) via TikiWiki-cvs <[email protected]>
| Newsgroups | gmane.comp.cms.tiki.cvs |
|---|---|
| Message-ID | <6893a5c5435e4_2cd5930505b1@gitlab-sidekiq-low-urgency-cpu-bound-v2-7bfdd5997b-rtc92.mail> |
Benoit Grégoire pushed to branch master at Tiki Wiki CMS Groupware / Tiki
Commits:
90c59b52 by Ushindi Gedeon at 2025-08-06T18:49:53+00:00
[FIX] Cookie Consent: Fix cookie consent categories handling
---
* [FIX] tiki-cookie-handler.js: replace hardcoded essential category string with constant for improved maintainability
* [FIX] tiki-cookie-handler.js: improve code readability by using constant name exposed from php class CookieConsentLib to js
* [FIX] tiki-cookie-handler: update cookie consent handling to use constants from the CookieConsentLib
* [FIX] Correctly set essential category in cookie consent handling
* [FIX] Update cookie consent handling to dynamically set categories based on user selection
* [FIX] Cookie Consent: Fix cookie consent categories handling
See merge request tikiwiki/tiki!7953
- - - - -
3 changed files:
- lib/setup/javascript.php
- src/js/jquery-tiki/tiki-cookie-handler.js
- templates/cookie_consent.tpl
Changes:
=====================================
lib/setup/javascript.php
=====================================
@@ -235,6 +235,7 @@ $jqueryTiki['cookie_consent_expires'] = $prefs['cookie_consent_expires'];
$jqueryTiki['cookie_consent_name'] = CookieConsentLib::COOKIE_CONSENT_NAME;
$jqueryTiki['cookie_consent_categories'] = json_encode(array_keys(CookieConsentLib::getCookieCategories()));
$jqueryTiki['cookie_consent_value'] = json_encode(CookieConsentLib::getConsentPreferences(), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
+$jqueryTiki['BUILTIN_COOKIE_CATEGORY_ESSENTIAL'] = json_encode(CookieConsentLib::BUILTIN_COOKIE_CATEGORY_ESSENTIAL);
//set at 4 hours if empty
$jqueryTiki['securityTimeout'] = ! empty($prefs['site_security_timeout']) ? $prefs['site_security_timeout']
@@ -340,7 +341,7 @@ $(document).on("tiki.modal.redraw", function(event) {
if (!$modalContent.is(".modal-content")) {
$modalContent = $modalContent.find(".modal-content")
}
-
+
const modalBody = $modalContent.find(".modal-body")[0];
const initialWidth = parseFloat(getComputedStyle($modalContent[0]).width.slice(0, -2));
=====================================
src/js/jquery-tiki/tiki-cookie-handler.js
=====================================
@@ -1,17 +1,16 @@
window.CookieHandler = (() => {
+ const BUILTIN_COOKIE_CATEGORY_ESSENTIAL = JSON.parse(jqueryTiki.BUILTIN_COOKIE_CATEGORY_ESSENTIAL);
+
function setConsentCookies(actionType = "customized") {
const COOKIE_CONSENT_NAME = jqueryTiki.cookie_consent_name;
const COOKIE_CATEGORIES = JSON.parse(jqueryTiki.cookie_consent_categories);
- let getcookie_consent_value = JSON.parse(jqueryTiki.cookie_consent_value);
-
- if (getcookie_consent_value === null || getcookie_consent_value.length === 0) {
- getcookie_consent_value = {
- action: "customized",
- categories: {},
- consentGiven: false,
- };
- }
+ const getcookie_consent_value = {
+ action: "customized",
+ categories: {},
+ consentGiven: false,
+ };
+ const ACTION_TYPES = { CUSTOMIZED: "customized", ACCEPT_ALL: "acceptAll", DECLINE_UNNECESSARY: "declineUnnecessary" };
const COOKIE_CONSENT_VALUE = getcookie_consent_value;
const exp = new Date();
exp.setTime(exp.getTime() + 24 * 60 * 60 * 1000 * jqueryTiki.cookie_consent_expires);
@@ -38,12 +37,30 @@ window.CookieHandler = (() => {
}
});
- if (allChecked) {
- COOKIE_CONSENT_VALUE.action = "acceptAll";
- } else if (noneChecked) {
- COOKIE_CONSENT_VALUE.action = "declineUnnecessary";
- } else {
- COOKIE_CONSENT_VALUE.action = "customized";
+ $("#customConsentSectionBanner input[type='checkbox']").each(function () {
+ if (!$(this).prop("disabled")) {
+ if ($(this).is(":checked")) {
+ noneChecked = false;
+ } else {
+ allChecked = false;
+ }
+ }
+ });
+
+ if (actionType === ACTION_TYPES.ACCEPT_ALL) {
+ COOKIE_CONSENT_VALUE.action = ACTION_TYPES.ACCEPT_ALL;
+ COOKIE_CONSENT_VALUE.categories = {};
+ COOKIE_CATEGORIES.forEach((category) => {
+ COOKIE_CONSENT_VALUE.categories[category] = true;
+ });
+ } else if (actionType === ACTION_TYPES.CUSTOMIZED) {
+ COOKIE_CONSENT_VALUE.action = ACTION_TYPES.CUSTOMIZED;
+ } else if (actionType === ACTION_TYPES.DECLINE_UNNECESSARY) {
+ COOKIE_CONSENT_VALUE.action = ACTION_TYPES.DECLINE_UNNECESSARY;
+ COOKIE_CONSENT_VALUE.categories = {};
+ COOKIE_CATEGORIES.forEach((category) => {
+ COOKIE_CONSENT_VALUE.categories[category] = category === BUILTIN_COOKIE_CATEGORY_ESSENTIAL; // Only essential category is true
+ });
}
COOKIE_CONSENT_VALUE.consentGiven = true;
@@ -69,7 +86,17 @@ window.CookieHandler = (() => {
let allNonEssentialUnchecked = true;
$("#customConsentSection input[type='checkbox']").each(function () {
- if ($(this).prop("disabled") || $(this).attr("name").includes("cookie_consent_essential")) {
+ if ($(this).prop("disabled") || $(this).attr("name").includes(BUILTIN_COOKIE_CATEGORY_ESSENTIAL)) {
+ return;
+ }
+ if ($(this).is(":checked")) {
+ allNonEssentialUnchecked = false;
+ } else {
+ allNonEssentialChecked = false;
+ }
+ });
+ $("#customConsentSectionBanner input[type='checkbox']").each(function () {
+ if ($(this).prop("disabled") || $(this).attr("name").includes(BUILTIN_COOKIE_CATEGORY_ESSENTIAL)) {
return;
}
if ($(this).is(":checked")) {
@@ -106,6 +133,9 @@ $(document).ready(() => {
$("#customConsentSection input[type='checkbox']").on("change", function () {
CookieHandler.updateTopLevelAction();
});
+ $("#customConsentSectionBanner input[type='checkbox']").on("change", function () {
+ CookieHandler.updateTopLevelAction();
+ });
$("#cookie_consent_preference").on("click", () => {
CookieHandler.setConsentCookies("acceptAll");
@@ -152,6 +182,11 @@ $(document).ready(() => {
$(this).prop("checked", true);
}
});
+ $('#customConsentSectionBanner input[type="checkbox"]').each(function () {
+ if (!$(this).prop("disabled")) {
+ $(this).prop("checked", true);
+ }
+ });
}
CookieHandler.updateTopLevelAction();
});
@@ -164,6 +199,11 @@ $(document).ready(() => {
$(this).prop("checked", false);
}
});
+ $('#customConsentSectionBanner input[type="checkbox"]').each(function () {
+ if (!$(this).prop("disabled")) {
+ $(this).prop("checked", false);
+ }
+ });
}
CookieHandler.updateTopLevelAction();
});
=====================================
templates/cookie_consent.tpl
=====================================
@@ -26,14 +26,14 @@
</div>
</div>
- <div class="row mb-4">
+ <div id="customConsentSectionBanner" class="row mb-4">
<div class="col-12 d-flex flex-wrap gap-3 gap-md-4">
{foreach from=$cookie_categories key=category item=data}
<div class="form-check form-switch d-flex align-items-center flex-shrink-0">
- <input class="form-check-input me-2" type="checkbox" id="cookie_{$category}"
+ <input class="form-check-input me-2" type="checkbox" id="toggle{$category|capitalize}"
name="cookie_consent_{$category}"
{if $category == 'essential'}checked disabled aria-disabled="true"{/if}>
- <label class="form-check-label me-2 fw-semibold" for="cookie_{$category}">
+ <label class="form-check-label me-2 fw-semibold" for="toggle{$category|capitalize}">
{tr}{$data.name}{/tr}
</label>
<button type="button" class="btn btn-link p-0 text-decoration-none text-dark"
@@ -49,12 +49,12 @@
<div class="row">
<div class="col-12 d-flex flex-wrap gap-2 justify-content-center justify-content-md-end">
{if $prefs.cookie_consent_disable eq 'n'}
- <button type="button" class="btn btn-outline-danger"
+ <button type="submit" class="btn btn-outline-danger"
id="cookie_decline_unnecessary_button">
{tr}Refuse unnecessary{/tr}
</button>
{/if}
- <button type="button" class="btn btn-secondary"
+ <button type="submit" class="btn btn-secondary"
id="cookie_save_button">
{tr}Save preferences{/tr}
</button>
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/90c59b527346cf7faf3dd2f5ced72dc308cfb2d6
--
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/90c59b527346cf7faf3dd2f5ced72dc308cfb2d6
You're receiving this email because of your account on gitlab.com.
_______________________________________________
TikiWiki-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs