diff --git a/Application/Controller/Admin/GA4AdminUserInterface_main.php b/Application/Controller/Admin/GA4AdminUserInterface_main.php
new file mode 100644
index 0000000..b0e6a46
--- /dev/null
+++ b/Application/Controller/Admin/GA4AdminUserInterface_main.php
@@ -0,0 +1,85 @@
+addTplParam('d3ViewObject', $this);
+ $this->addTplParam('d3ViewConfObject', Registry::get(ViewConfig::class));
+ $this->addTplParam('d3ManagerTypeArray', oxNew(ManagerTypes::class)->getManagerList());
+ $this->addTplParam('d3CurrentCMP', oxNew(ManagerHandler::class)->getCurrManager());
+
+ return $return;
+ }
+
+ public function save()
+ {
+ parent::save();
+
+ $aParams = Registry::getRequest()->getRequestEscapedParameter('editval');
+
+ $aCheckBoxParams = [
+ '_blEnableGa4',
+ '_blEnableDebug',
+ '_blEnableConsentMode',
+ '_blEnableOwnCookieManager',
+ '_blEnableMeasurementCapabilities',
+ '_blEnableUsercentricsConsentModeApi',
+ ];
+
+ foreach ($aCheckBoxParams as $checkBoxName){
+ if (isset($aParams['bool'][$checkBoxName])){
+ $aParams['bool'][$checkBoxName] = true;
+ }else{
+ $aParams['bool'][$checkBoxName] = false;
+ }
+ }
+
+ $this->d3SaveShopConfigVars($aParams);
+ }
+
+ /**
+ * @param array $aParams
+ * @return void
+ */
+ protected function d3SaveShopConfigVars(array $aParams)
+ {
+ $oConfig = Registry::getConfig();
+ foreach ($aParams as $sConfigType => $aConfigParams) {
+ foreach ($aConfigParams as $sParamName => $sParamValue){
+ if($this->d3GetModuleConfigParam($sParamName) !== $sParamValue){
+ $oConfig->saveShopConfVar(
+ $sConfigType,
+ Constants::OXID_MODULE_ID.$sParamName,
+ $sParamValue,
+ $oConfig->getShopId(),
+ Constants::OXID_MODULE_ID
+ );
+ }
+ }
+ }
+ }
+
+ /**
+ * @param string $configParamName
+ * @return mixed
+ */
+ public function d3GetModuleConfigParam(string $configParamName)
+ {
+ return Registry::get(ViewConfig::class)->d3GetModuleConfigParam($configParamName);
+ }
+}
\ No newline at end of file
diff --git a/Application/Model/CMP/ConsentManagementPlatformBaseModel.php b/Application/Model/CMP/ConsentManagementPlatformBaseModel.php
new file mode 100644
index 0000000..dfb6618
--- /dev/null
+++ b/Application/Model/CMP/ConsentManagementPlatformBaseModel.php
@@ -0,0 +1,19 @@
+sCMPName;
+ }
+}
\ No newline at end of file
diff --git a/Application/Model/CMP/ConsentManagementPlatformInterface.php b/Application/Model/CMP/ConsentManagementPlatformInterface.php
new file mode 100644
index 0000000..2591738
--- /dev/null
+++ b/Application/Model/CMP/ConsentManagementPlatformInterface.php
@@ -0,0 +1,8 @@
+getManagerList();
- foreach ($aManagerList as $managerName){
- if ($oViewConfig->isModuleActive($managerName)){
- return $managerName;
+ if ($this->getModuleSettingExplicitManagerSelectValue()){
+ return $this->getExplicitManager();
+ }
+
+ foreach ($aManagerList as $shopModuleId => $publicCMPName){
+ if ($oViewConfig->isModuleActive($shopModuleId)){
+ $this->d3SaveShopConfVar($shopModuleId);
+ return $shopModuleId;
}
}
- return $this->getExplicitManager();
+ return "";
+ }
+
+ /**
+ * @param string $sParam
+ * @return void
+ */
+ public function d3SaveShopConfVar(string $sParam){
+ Registry::getConfig()->saveShopConfVar(
+ 'select',
+ Constants::OXID_MODULE_ID."_HAS_STD_MANAGER",
+ $sParam,
+ Registry::getConfig()->getShopId(),
+ Constants::OXID_MODULE_ID
+ );
}
/**
@@ -34,7 +55,7 @@ class ManagerHandler
*/
public function getModuleSettingExplicitManagerSelectValue() :string
{
- return Registry::getConfig()->getConfigParam('d3_gtm_settings_HAS_STD_MANAGER');
+ return Registry::get(ViewConfig::class)->d3GetModuleConfigParam('_HAS_STD_MANAGER')?:"";
}
/**
@@ -46,8 +67,12 @@ class ManagerHandler
/** @var ManagerTypes $oManagerTypes */
$oManagerTypes = oxNew(ManagerTypes::class);
- return $oManagerTypes->isManagerInList($sPotentialManagerName)
+ $sCMPName = $oManagerTypes->isManagerInList($sPotentialManagerName)
? $sPotentialManagerName
: "NONE";
+
+ $this->d3SaveShopConfVar($sCMPName);
+
+ return $sCMPName;
}
}
\ No newline at end of file
diff --git a/Application/Model/ManagerTypes.php b/Application/Model/ManagerTypes.php
index f12af76..5db77ff 100644
--- a/Application/Model/ManagerTypes.php
+++ b/Application/Model/ManagerTypes.php
@@ -2,41 +2,24 @@
namespace D3\GoogleAnalytics4\Application\Model;
+use D3\GoogleAnalytics4\Application\Model\CMP\Usercentrics;
+
class ManagerTypes
{
- #ToDo: make own classes for each of the manager
-
-
- const EXTERNAL_SERVICE = "externalService";
- const NET_COOKIE_MANAGER = "net_cookie_manager";
+ const EXTERNAL_SERVICE = "eigener Service";
+ const NET_COOKIE_MANAGER = "Netensio Cookie Manager";
/**
* Further information's:
* https://github.com/aggrosoft/oxid-cookie-compliance
*/
- const AGCOOKIECOMPLIANCE = "agcookiecompliance";
+ const AGCOOKIECOMPLIANCE = "Aggrosoft Cookie Compliance";
- /**
- * Used the OXID Module.
- *
- * Further information's:
- * https://docs.oxid-esales.com/modules/usercentrics/de/latest/einfuehrung.html
- *
- * Usercentrics homepage:
- * https://usercentrics.com
- */
- const USERCENTRICS_MODULE = "oxps_usercentrics";
+ const CONSENTMANAGER = "Consentmanager";
- /**
- * manually included usercentrics script
- */
- const USERCENTRICS_MANUALLY = "USERCENTRICS";
+ const COOKIEFIRST = "Cookiefirst";
- const CONSENTMANAGER = "CONSENTMANAGER";
-
- const COOKIEFIRST = "COOKIEFIRST";
-
- const COOKIEBOT = "COOKIEBOT";
+ const COOKIEBOT = "Cookiebot";
/**
* @return array
@@ -47,9 +30,9 @@ class ManagerTypes
"externalService" => self::EXTERNAL_SERVICE,
"agcookiecompliance" => self::AGCOOKIECOMPLIANCE,
"net_cookie_manager" => self::NET_COOKIE_MANAGER,
- "oxps_usercentrics" => self::USERCENTRICS_MODULE,
- "usercentrics" => self::USERCENTRICS_MANUALLY,
- "consentmanager" => self::CONSENTMANAGER,
+ Usercentrics::sModuleIncludationInternalName => Usercentrics::sModuleIncludationPublicName,
+ Usercentrics::sExternalIncludationInternalName => Usercentrics::sExternalIncludationPublicName,
+ "cmconsentmanager" => self::CONSENTMANAGER,
"cookiefirst" => self::COOKIEFIRST,
"cookiebot" => self::COOKIEBOT,
];
@@ -61,6 +44,6 @@ class ManagerTypes
*/
public function isManagerInList(string $sManager) :bool
{
- return in_array($sManager, $this->getManagerList(), true);
+ return in_array($sManager, array_keys($this->getManagerList()), true);
}
}
\ No newline at end of file
diff --git a/Application/views/admin/de/d3googleanalytics4_lang.php b/Application/views/admin/de/d3googleanalytics4_lang.php
new file mode 100644
index 0000000..7608463
--- /dev/null
+++ b/Application/views/admin/de/d3googleanalytics4_lang.php
@@ -0,0 +1,123 @@
+ 'UTF-8',
+
+ 'd3mxgoogleanalytics4' => 'Google Analytics 4',
+ 'd3mxgoogleanalytics4set' => 'Einstellungen',
+
+ // Base Translations
+ 'D3BASECONFIG' => 'Grundeinstellungen',
+ 'D3CLOSE' => 'Schließen',
+ 'D3NONE' => '- keinen -',
+ 'D3CONTAINERID' => 'Container-ID',
+ 'D3CONTAINERID_HELP' => ' Was ist die Container-ID?',
+ 'D3ACTIVATEMOD' => 'Modul aktivieren',
+ 'D3CNTRLPARAM' => 'Steuerungsparameter',
+ 'D3CNTRLPARAM_HELP' => ' Was ist der Steuerungsparameter?',
+ 'D3INACTIVATEMOD' => 'Modul ist nicht aktiv! Es werden keine Funktionen ausgespielt!',
+ // Usercentrics Dynamische Optionen
+ 'D3USRCNTRCSDYNOPT' => 'Usercentrics Dynamische Optionen',
+
+ // Use debug mode?
+ 'D3USEDEBUGMODE' => "Debug-Modus aktivieren",
+ 'D3USEDEBUGMODE_HELP' => "Der Debug Modus setzt an alle DataLayer ( also Daten Sammlungen im Frontend )
+ 'debug_mode': 'true' und ermöglicht im Google Tag Manager selbst ein detaillierteres
+ Auswerten des einfließenden Datenstroms.",
+
+ // Use Consentmode?
+ 'D3USEGOOGLECONSENTMODE' => "Google Consent Mode 'Default Values' akivieren",
+ 'D3USEGOOGLECONSENTMODE_HELP' => "Der Consent Mode 'Default Values' setzt im Frontend,
+ vor jedem Sammeln und Senden von Daten, einen Befehl der die Bearbeitung der Daten fortlaufend verändert.
+
+ Diese Veränderte Berarbeitung heißt im Detail, dass der Google Tag Manager ( GTM )
+ bzw. in erster Instanz die Consent Management Platform ( CMP ) keine Daten zur Verarbeitung an Google sendet,
+ bis ein entsprechendes Zustimmungs-Signal vom Kunden explizit erteilt wurde.
+ Die CMP ist sogar derartig restriktiv, dass diese den Datenstrom zum GTM ( Vorinstanz zu Google Analytics )
+ völlig verhindert, solange keine Zustimmung erteilt wurde.
+
+ Ein einfaches anschalten dieser Funktion regelt noch nicht die völlige Funktionsweise
+ aller beteiligten Instanzen; diese bedarf eine detailliertere Konfiguration! ",
+
+ // Use CMP?
+ 'D3CMPTABTITLE' => 'Cookie Manager Einstellungen',
+ 'D3CMPUSEQ' => 'Consent Management Platform ( CMP ) nutzen?',
+ 'D3CMPUSEQ_HELP' => '"Eine Consent Management Platform ( CMP ) ist eine Software, mit der Website-Betreiber
+ oder Anbieter von Web-Apps über ein Banner oder ein Pop-up eine datenschutzrechtliche
+ Einwilligung der Besucher einholen und speichern, bevor Nutzerdaten über
+ Website-Skripte erfasst werden (Tracking)." Wikipedia Beschreibung
+
+ Um Google Analytics 4 ( Google Analytics ) weiterhin nutzen zu können,
+ und dank fortschreitendem Datenschutz unserer personenbezogener Daten, ist das Nutzen eines konformen CMP
+ heute zwangläufig nötig.
+
+ Diese konformen CMP sind in
+ offizieller Partnerschaft mit Google ( Liste der Partner )
+ und unterliegen strengen Vorschriften, um ein ordnungsgemäßes Senden und
+ Verarbeiten der Zustimmung unterliegenden Daten sicher stellen zu können.',
+ 'D3CMP' => 'Consent Management Platform ( CMP ) wählen',
+
+ // Usercentrics Config
+ // activate Individual Default Values
+ 'D3USRCNTRCSCFG_ACT_INDIVDEFVAL' => "Usercentrics individual 'Default Values' aktiveren",
+ // standard Consent
+ 'D3USRCNTRCSCFG_STD_CNST' => "GTM Standard Consent",
+ // activate consent mode API
+ 'D3USRCNTRCSCFG_ACT_CNSTMDE_API' => "Usercentrics Consent Mode API aktivieren",
+ // consent mode api
+ 'D3USRCNTRCSCFG_CNSTMDE_API' => "Consent Mode API",
+ 'D3USRCNTRCSCFG_DOCS' => 'Nähere Infos zu den hier konfigurierbaren Einstellungen entnehmen Sie bitte der offiziellen
+ Dokumentation von Usercentrics selbst: Dokumentation',
+ 'D3USRCNTRCSCFG_WARNING' => "Bevor Sie hier Anpassungen machen, konsultieren Sie bitte einen technischen Support!
+ Anpassungen können zu Beeinträchtigungen und Ausfall von Funktionen im Frontend führen!",
+
+ // Additional Config
+ // Server-Side tagging
+ 'D3SERVERSIDETAGGING' => 'Server-Side tagging',
+ 'D3DETAILED_DESC' => 'Detailliertere Erklärung der Funktion',
+ 'D3SERVERSIDETAGGING_HINT' => 'Die Conatiner-ID wird weiterhin unter "Grundeinstellungen" eingetragen!
+ "Serverseitiges Tagging ist eine neue Möglichkeit, mit Google Tag Manager Ihre Anwendung geräteübergreifend zu verwalten.
+ Servercontainer verwenden dasselbe Tag-, Trigger- und Variablenmodell, das Sie gewohnt sind.
+ Außerdem bieten sie neue Tools, mit denen Sie Nutzeraktivitäten überall messen können."
+
+ - Quelle Developers-Google Server-Side tagging
+
+ Verändern Sie die Werte nur, wenn Sie Server-Side tagging verwenden wollen! Gegebenenfalls fragen Sie einen technischen Ansprechpartner.
+ ',
+ 'D3SERVERSIDETAGGING_TITLE_ACTIVE' => 'Ausführender code',
+ 'D3SERVERSIDETAGGING_ACTIVE' => 'Diese Domain wird im aktiven-code ausgefüht. Das heißt,
+ dass es sich hierbei um das HTML-Tag script handelt.
+ Dieses kümmert sich darum, dass die im DataLayer
+ zusammengefassten Daten an den GTM weitergeleitet werden.
+
+
Folgend eine Darstellung, was genau ausgetauscht wird
',
+ 'D3SERVERSIDETAGGING_TITLE_PASSIVE' => 'nicht Ausführneder code',
+ 'D3SERVERSIDETAGGING_PASSIVE' => 'Diese Domain wird im passiven-code ausgefüht. Das heißt,
+ dass es sich hierbei um das HTML-Tag noscript handelt.
+ Dieses wird ausgeführt, wenn aus einem bestimmten Grund
+ das Javascript nicht ausgeführt wird.
+ ( keine Cookies erlaubt, JavaScript-Unterbindung, ... )
+
+
Folgend eine Darstellung, was genau ausgetauscht wird
+ Die Conatiner-ID wird weiterhin im Punkt "Einstellung" eingetragen!
+ ',
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_serversidetagging_nojs' => 'Servercontainer NICHT Ausführender-Code
+ "Serverseitiges Tagging ist eine neue Möglichkeit, mit Google Tag Manager Ihre Anwendung geräteübergreifend zu verwalten.
+ Servercontainer verwenden dasselbe Tag-, Trigger- und Variablenmodell, das Sie gewohnt sind.
+ Außerdem bieten sie neue Tools, mit denen Sie Nutzeraktivitäten überall messen können."
+
+ - Quelle Developers-Google Server-Side tagging
+
+ Verändern Sie die Werte nur, wenn Sie Server-Side tagging verwenden wollen!
+',
+ 'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_serversidetagging_nojs' => 'Diese Domain wird im passiven-code ausgefüht. Das heißt,
+ dass es sich hierbei um das HTML-Tag noscript handelt.
+ Dieses wird ausgeführt, wenn aus einem bestimmten Grund
+ das Javascript nicht ausgeführt wird.
+ ( keine Cookies erlaubt, JavaScript-Unterbindung, ... )
+
+
Folgend eine Darstellung, was genau ausgetauscht wird
+ Die Conatiner-ID wird weiterhin im Punkt "Einstellung" eingetragen!
+ ',
// for cookie manager settings
- 'SHOP_MODULE_GROUP_d3_gtm_settings_cookiemanager' => 'Cookie Manager Einstellungen',
- 'SHOP_MODULE_d3_gtm_settings_hasOwnCookieManager' => 'Cookie Manager nutzen?',
- 'HELP_SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER' => 'Mehr Informationen zu den genannten Coookie-Manager finden Sie auf den folgenden Home-Pages
+ 'SHOP_MODULE_GROUP_'.Constants::OXID_MODULE_ID.'_cookiemanager' => 'Cookie Manager Einstellungen',
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_hasOwnCookieManager' => 'Cookie Manager nutzen?',
+ 'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER' => 'Mehr Informationen zu den genannten Coookie-Manager finden Sie auf den folgenden Home-Pages
Consentmanager Usercentrics Cookiefirst
Bei weiteren Fragen stehen wir gern zur Verfügung! Kontaktieren Sie uns einfach unter https://www.d3data.de/',
- 'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER' => 'Nutzen Sie eine der folgenden Einbindungen?
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER' => 'Nutzen Sie eine der folgenden Einbindungen?
Dann wählen Sie bitte die zutreffende aus.',
- 'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_NONE' => '---',
- 'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_CONSENTMANAGER' => 'consentmanager',
- 'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_USERCENTRICS' => 'usercentrics',
- 'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_COOKIEFIRST' => 'cookiefirst',
- 'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_COOKIEBOT' => 'Cookiebot',
- 'SHOP_MODULE_d3_gtm_settings_controlParameter' => 'Steuerungsparameter',
- 'HELP_SHOP_MODULE_d3_gtm_settings_controlParameter' => 'Nähere infos zum "Steuerungsparameter"
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_NONE' => '---',
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_CONSENTMANAGER' => 'consentmanager',
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_USERCENTRICS' => 'usercentrics',
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_COOKIEFIRST' => 'cookiefirst',
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_COOKIEBOT' => 'Cookiebot',
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_controlParameter' => 'Steuerungsparameter',
+ 'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_controlParameter' => 'Nähere infos zum "Steuerungsparameter"Beachte:
Sofern Sie die consentmanager CMP verwenden,
bitte ich Sie, gründlichst, die Hinweise der Moduldokumentation/Consentmanager zu lesen.
- '
+ ',
+ 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blActivateConsentMode' => "Google Consent Mode 'Default Values' aktivieren",
+ 'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blActivateConsentMode' => 'Diese Einstellung ist zu aktivieren, wenn Sie den Google-Consent-Mode ( Einwilligungsmodus ) verwenden wollen.
+
+ "Im Einwilligungsmodus können Sie Google über den Cookie- oder App-ID-Einwilligungsstatus Ihrer Nutzer informieren.
+ Mit Tags wird das Verhalten angepasst. Dabei werden die Einstellungen der Nutzer berücksichtigt." ~ Google Einwilligungsmodus',
];
diff --git a/Application/views/admin/tpl/d3googleanalytics4_headitem.tpl b/Application/views/admin/tpl/d3googleanalytics4_headitem.tpl
new file mode 100644
index 0000000..1cc5d7a
--- /dev/null
+++ b/Application/views/admin/tpl/d3googleanalytics4_headitem.tpl
@@ -0,0 +1,108 @@
+
+
+
+ [{$title}]
+
+ [{if isset($meta_refresh_sec,$meta_refresh_url)}]
+
+ [{/if}]
+
+
+ [{block name="admin_headitem_inccss"}]
+
+
+
+ [{/block}]
+
+ [{block name="admin_headitem_incjs"}]
+
+
+
+ [{/block}]
+
+ [{block name="admin_headitem_js"}]
+
+ [{/block}]
+
+
+
+[{include file="tooltips.tpl"}]
+
+
+