From 195df22f0caa90f50deebedeff4b4ef8237dec8a Mon Sep 17 00:00:00 2001 From: Codencode Date: Tue, 17 Dec 2024 10:31:55 +0100 Subject: [PATCH 1/5] Added queue clearing JavaScript events considered: - updateCart - changedCheckoutStep - updatedProduct - updateProductList --- controllers/front/ajax.php | 14 +++++++++++ ps_googleanalytics.php | 7 ++++++ views/js/ganalytics.js | 50 ++++++++++++++++++++++++++++++++++++++ views/js/index.php | 28 +++++++++++++++++++++ 4 files changed, 99 insertions(+) create mode 100644 views/js/ganalytics.js create mode 100644 views/js/index.php diff --git a/controllers/front/ajax.php b/controllers/front/ajax.php index c77698e4..00765545 100644 --- a/controllers/front/ajax.php +++ b/controllers/front/ajax.php @@ -24,6 +24,11 @@ class ps_GoogleanalyticsAjaxModuleFrontController extends ModuleFrontController { public $ssl = true; + /** + * @var Ps_Googleanalytics + */ + public $module; + /* * @see FrontController::initContent() */ @@ -31,6 +36,15 @@ public function initContent() { parent::initContent(); + if (Tools::getValue('action') == 'flushQueue') { + $output = $this->module->getDataHandler()->readData(); + + $this->module->getDataHandler()->deleteData(); + + $this->ajaxRender(json_encode($output)); + exit; + } + $orderId = (int) Tools::getValue('orderid'); $order = new Order($orderId); diff --git a/ps_googleanalytics.php b/ps_googleanalytics.php index fa3cfee7..2ff50445 100644 --- a/ps_googleanalytics.php +++ b/ps_googleanalytics.php @@ -80,6 +80,13 @@ public function getContent() public function hookDisplayHeader($params, $back_office = false) { + if ($back_office === false) { + Media::addJsDef([ + 'psGoogleAnalyticsAjaxUrl' => $this->context->link->getModuleLink($this->name, 'ajax', [], true), + ]); + $this->context->controller->registerJavascript('modules-psgoogleanalytics', 'modules/' . $this->name . '/views/js/ganalytics.js'); + } + $hook = new PrestaShop\Module\Ps_Googleanalytics\Hooks\HookDisplayHeader($this, $this->context); $hook->setBackOffice($back_office); diff --git a/views/js/ganalytics.js b/views/js/ganalytics.js new file mode 100644 index 00000000..5082c560 --- /dev/null +++ b/views/js/ganalytics.js @@ -0,0 +1,50 @@ +/** + * 2007-2020 PrestaShop. + * + * NOTICE OF LICENSE + * + * This source file is subject to the Academic Free License 3.0 (AFL-3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * https://opensource.org/licenses/AFL-3.0 + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to license@prestashop.com so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade PrestaShop to newer + * versions in the future. If you wish to customize PrestaShop for your + * needs please refer to http://www.prestashop.com for more information. + * + * @author PrestaShop SA + * @copyright 2007-2020 PrestaShop SA + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) + * International Registered Trademark & Property of PrestaShop SA + */ + +$(document).ready(function () { + prestashop.on('updateCart', flushQueue); + prestashop.on('changedCheckoutStep', flushQueue); + prestashop.on('clickQuickView', flushQueue); + prestashop.on('updatedProduct', flushQueue); + prestashop.on('updateProductList', flushQueue); + + function flushQueue() { + $.ajax({ + type: "POST", + url: psGoogleAnalyticsAjaxUrl, + dataType: "json", + data: { + ajax: true, + action: "flushQueue", + }, + success: function (response) { + response.forEach(code => { + const fn = new Function(code); + fn(); + }); + } + }); + } +}); \ No newline at end of file diff --git a/views/js/index.php b/views/js/index.php new file mode 100644 index 00000000..098efd94 --- /dev/null +++ b/views/js/index.php @@ -0,0 +1,28 @@ + + * @copyright Since 2007 PrestaShop SA and Contributors + * @license https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0) + * International Registered Trademark & Property of PrestaShop SA + */ +header('Expires: Mon, 26 Jul 1998 05:00:00 GMT'); +header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); + +header('Cache-Control: no-store, no-cache, must-revalidate'); +header('Cache-Control: post-check=0, pre-check=0', false); +header('Pragma: no-cache'); + +header('Location: ../'); +exit; From b5f93bc32c45e2c2c656cc8fea767343d03922f1 Mon Sep 17 00:00:00 2001 From: Codencode Date: Tue, 17 Dec 2024 14:54:19 +0100 Subject: [PATCH 2/5] Update controllers/front/ajax.php MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolas Lœuillet --- controllers/front/ajax.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/controllers/front/ajax.php b/controllers/front/ajax.php index 00765545..2fa455c4 100644 --- a/controllers/front/ajax.php +++ b/controllers/front/ajax.php @@ -36,7 +36,7 @@ public function initContent() { parent::initContent(); - if (Tools::getValue('action') == 'flushQueue') { + if (Tools::getValue('action') === 'flushQueue') { $output = $this->module->getDataHandler()->readData(); $this->module->getDataHandler()->deleteData(); From f104092b3b270869d447fdaec551a49398780ce0 Mon Sep 17 00:00:00 2001 From: Codencode Date: Thu, 16 Jan 2025 11:32:04 +0100 Subject: [PATCH 3/5] Update ajax.php --- controllers/front/ajax.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/controllers/front/ajax.php b/controllers/front/ajax.php index 2fa455c4..f5b3e6ae 100644 --- a/controllers/front/ajax.php +++ b/controllers/front/ajax.php @@ -24,11 +24,6 @@ class ps_GoogleanalyticsAjaxModuleFrontController extends ModuleFrontController { public $ssl = true; - /** - * @var Ps_Googleanalytics - */ - public $module; - /* * @see FrontController::initContent() */ From 2ac4bae72a2230caad1d2e5c026ddf67296326c2 Mon Sep 17 00:00:00 2001 From: "Paolo Cunti @codencode" Date: Sun, 6 Sep 2026 08:57:23 +0200 Subject: [PATCH 4/5] Fix PHPStan type inference for module controller --- controllers/front/ajax.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/controllers/front/ajax.php b/controllers/front/ajax.php index f5b3e6ae..ea92b0b3 100644 --- a/controllers/front/ajax.php +++ b/controllers/front/ajax.php @@ -32,9 +32,11 @@ public function initContent() parent::initContent(); if (Tools::getValue('action') === 'flushQueue') { - $output = $this->module->getDataHandler()->readData(); + /** @var Ps_Googleanalytics $module */ + $module = $this->module; - $this->module->getDataHandler()->deleteData(); + $output = $module->getDataHandler()->readData(); + $module->getDataHandler()->deleteData(); $this->ajaxRender(json_encode($output)); exit; From a91b3750b69de969c4fe4687700f63e778bb89e1 Mon Sep 17 00:00:00 2001 From: "Paolo Cunti @codencode" Date: Sun, 6 Sep 2026 09:00:41 +0200 Subject: [PATCH 5/5] Avoid analytics AJAX when GA is not configured --- ps_googleanalytics.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ps_googleanalytics.php b/ps_googleanalytics.php index 2ff50445..d45d5ac9 100644 --- a/ps_googleanalytics.php +++ b/ps_googleanalytics.php @@ -80,7 +80,7 @@ public function getContent() public function hookDisplayHeader($params, $back_office = false) { - if ($back_office === false) { + if ($back_office === false && Configuration::get('GA_ACCOUNT_ID')) { Media::addJsDef([ 'psGoogleAnalyticsAjaxUrl' => $this->context->link->getModuleLink($this->name, 'ajax', [], true), ]);