<?php /** * eSales Media Analytics extension for OXID * * @author Benjamin Roth [benjamin@esales-media.de] * @copyright 2015 eSales Media [http://www.esales-media.de] */ /** * Class es_analytics defines activation events */ class es_analytics_ga4_events { // Module fields protected static $arrFields = array ( // array('OXFIELD','VARCHAR(4) NOT NULL default \'\'','oxarticles',false), ); // Theme config options protected static $arrConfig = array ( // array('sManufacturerThumbnailsize','str','200*200','theme:azure','images'), ); // Float theme config fields protected static $_aParseFloat = array(); /** * Is called on module activation. Checks for database fields and adds them */ public static function onActivate() { $iShopId = oxRegistry::getConfig()->getShopId(); $oConfig = oxRegistry::getConfig(); $sDb_name = $oConfig->getConfigParam('dbName'); // SQL patterns $sCheckSQL = "SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = '%s' AND COLUMN_NAME = '%s'"; $sAddSQL = "ALTER TABLE `%s` ADD `%s` %s"; // Check and create fields $blnDbAltered = false; foreach (self::$arrFields as $field) { if ($field[3]) { $arrFieldVariants = array('','_1','_2','_3'); } else { $arrFieldVariants = array(''); } foreach ($arrFieldVariants as $fieldVariant) { $rCheck = oxDb::getDb()->getArray(sprintf($sCheckSQL,$field[2],$field[0].$fieldVariant),array($sDb_name)); if (!count($rCheck)) { $blnDbAltered = true; oxDb::getDb()->Execute(sprintf($sAddSQL,$field[2],$field[0].$fieldVariant,$field[1])); } } } // Check and create config fields foreach (self::$arrConfig as $conf) { if (!$oConfig->getConfigParam($conf[0])) { $oConfig->saveShopConfVar($conf[1],$conf[0],self::_serializeConfVar($conf[1],$conf[0],$conf[2]),$iShopId,$conf[3]); $sOxId = oxUtilsObject::getInstance()->generateUId(); $iPosition = oxDb::getDb()->getOne("SELECT MAX(`OXPOS`)+1 FROM oxconfigdisplay WHERE `OXCFGMODULE` = " . oxDb::getDb()->quote($conf[3]) . " AND `OXGROUPING` = " . oxDb::getDb()->quote($conf[4])); $sInsertSql = "INSERT INTO `oxconfigdisplay` (`OXID`, `OXCFGMODULE`, `OXCFGVARNAME`, `OXGROUPING`, `OXPOS`) " . "VALUES ('{$sOxId}', " . oxDb::getDb()->quote($conf[3]) . ", " . oxDb::getDb()->quote($conf[0]) . ", " . oxDb::getDb()->quote($conf[4]) . ", " . oxDb::getDb()->quote($iPosition) . ")"; oxDb::getDb()->execute($sInsertSql); } } if ($blnDbAltered) { $oMetaData = oxNew('oxDbMetaDataHandler'); $oMetaData->updateViews(); } } public static function onDeactivate() { $iShopId = oxRegistry::getConfig()->getShopId(); $oConfig = oxRegistry::getConfig(); if ($oConfig->getConfigParam('blOxEsAnalyticsGA4Sweep')) { $sDb_name = $oConfig->getConfigParam('dbName'); // SQL patterns $sCheckSQL = "SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = '%s' AND COLUMN_NAME = '%s'"; $sDelSQL = "ALTER TABLE `%s` DROP COLUMN `%s`"; // Check and delete fields $blnDbAltered = false; foreach (self::$arrFields as $field) { if ($field[3]) { $arrFieldVariants = array('', '_1', '_2', '_3'); } else { $arrFieldVariants = array(''); } foreach ($arrFieldVariants as $fieldVariant) { $rCheck = oxDb::getDb()->getArray(sprintf($sCheckSQL, $field[2], $field[0] . $fieldVariant), array($sDb_name)); if (count($rCheck)) { $blnDbAltered = true; oxDb::getDb()->Execute(sprintf($sDelSQL, $field[2], $field[0] . $fieldVariant)); } } } if ($blnDbAltered) { $oMetaData = oxNew('oxDbMetaDataHandler'); $oMetaData->updateViews(); } $oConfig->saveShopConfVar('bool','blOxEsAnalyticsGA4Sweep','false',$iShopId,'module:es:analytics:ga4'); } // Check and delete config fields foreach (self::$arrConfig as $conf) { if ($oConfig->getConfigParam($conf[0])) { // SQL patterns $sDelConfSql = "DELETE FROM `oxconfigdisplay` WHERE OXCFGMODULE=" . oxDb::getDb()->quote($conf[3]) . " AND OXCFGVARNAME=" . oxDb::getDb()->quote($conf[0]); oxDb::getDb()->Execute($sDelConfSql); $sDelConfSql = "DELETE FROM `oxconfig` WHERE OXMODULE=" . oxDb::getDb()->quote($conf[3]) . " AND OXVARNAME=" . oxDb::getDb()->quote($conf[0]); oxDb::getDb()->Execute($sDelConfSql); } } } protected static function _serializeConfVar($sType, $sName, $mValue) { $sData = $mValue; switch ($sType) { case "bool": break; case "str": case "select": case "int": if (in_array($sName, self::$_aParseFloat)) { $sData = str_replace(',', '.', $sData); } break; case "arr": if (!is_array($mValue)) { $sData = self::_multilineToArray($mValue); } break; case "aarr": $sData = self::_multilineToAarray($mValue); break; } return $sData; } protected static function _multilineToArray($sMultiline) { $aArr = explode("\n", $sMultiline); if (is_array($aArr)) { foreach ($aArr as $sKey => $sVal) { $aArr[$sKey] = trim($sVal); if ($aArr[$sKey] == "") { unset($aArr[$sKey]); } } return $aArr; } } protected static function _multilineToAarray($sMultiline) { $oStr = getStr(); $aArr = array(); $aLines = explode("\n", $sMultiline); foreach ($aLines as $sLine) { $sLine = trim($sLine); if ($sLine != "" && $oStr->preg_match("/(.+)=>(.+)/", $sLine, $aRegs)) { $sKey = trim($aRegs[1]); $sVal = trim($aRegs[2]); if ($sKey != "" && $sVal != "") { $aArr[$sKey] = $sVal; } } } return $aArr; } }