1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,217 @@ |
1 |
+<?php |
|
2 |
+/** |
|
3 |
+ * eSales Media Analytics extension for OXID |
|
4 |
+ * |
|
5 |
+ * @author Benjamin Roth [benjamin@esales-media.de] |
|
6 |
+ * @copyright 2015 eSales Media [http://www.esales-media.de] |
|
7 |
+ */ |
|
8 |
+ |
|
9 |
+/** |
|
10 |
+ * Class es_analytics defines activation events |
|
11 |
+ */ |
|
12 |
+class es_analytics_ga4_events |
|
13 |
+{ |
|
14 |
+ // Module fields |
|
15 |
+ protected static $arrFields = array |
|
16 |
+ ( |
|
17 |
+// array('OXFIELD','VARCHAR(4) NOT NULL default \'\'','oxarticles',false), |
|
18 |
+ ); |
|
19 |
+ |
|
20 |
+ // Theme config options |
|
21 |
+ protected static $arrConfig = array |
|
22 |
+ ( |
|
23 |
+// array('sManufacturerThumbnailsize','str','200*200','theme:azure','images'), |
|
24 |
+ ); |
|
25 |
+ |
|
26 |
+ // Float theme config fields |
|
27 |
+ protected static $_aParseFloat = array(); |
|
28 |
+ |
|
29 |
+ /** |
|
30 |
+ * Is called on module activation. Checks for database fields and adds them |
|
31 |
+ */ |
|
32 |
+ public static function onActivate() |
|
33 |
+ { |
|
34 |
+ |
|
35 |
+ $iShopId = oxRegistry::getConfig()->getShopId(); |
|
36 |
+ $oConfig = oxRegistry::getConfig(); |
|
37 |
+ |
|
38 |
+ $sDb_name = $oConfig->getConfigParam('dbName'); |
|
39 |
+ |
|
40 |
+ // SQL patterns |
|
41 |
+ $sCheckSQL = "SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = '%s' AND COLUMN_NAME = '%s'"; |
|
42 |
+ $sAddSQL = "ALTER TABLE `%s` ADD `%s` %s"; |
|
43 |
+ |
|
44 |
+ |
|
45 |
+ // Check and create fields |
|
46 |
+ $blnDbAltered = false; |
|
47 |
+ foreach (self::$arrFields as $field) |
|
48 |
+ { |
|
49 |
+ if ($field[3]) |
|
50 |
+ { |
|
51 |
+ $arrFieldVariants = array('','_1','_2','_3'); |
|
52 |
+ } else { |
|
53 |
+ $arrFieldVariants = array(''); |
|
54 |
+ } |
|
55 |
+ |
|
56 |
+ foreach ($arrFieldVariants as $fieldVariant) |
|
57 |
+ { |
|
58 |
+ $rCheck = oxDb::getDb()->getArray(sprintf($sCheckSQL,$field[2],$field[0].$fieldVariant),array($sDb_name)); |
|
59 |
+ |
|
60 |
+ if (!count($rCheck)) |
|
61 |
+ { |
|
62 |
+ $blnDbAltered = true; |
|
63 |
+ oxDb::getDb()->Execute(sprintf($sAddSQL,$field[2],$field[0].$fieldVariant,$field[1])); |
|
64 |
+ } |
|
65 |
+ } |
|
66 |
+ } |
|
67 |
+ |
|
68 |
+ // Check and create config fields |
|
69 |
+ foreach (self::$arrConfig as $conf) |
|
70 |
+ { |
|
71 |
+ if (!$oConfig->getConfigParam($conf[0])) |
|
72 |
+ { |
|
73 |
+ $oConfig->saveShopConfVar($conf[1],$conf[0],self::_serializeConfVar($conf[1],$conf[0],$conf[2]),$iShopId,$conf[3]); |
|
74 |
+ |
|
75 |
+ $sOxId = oxUtilsObject::getInstance()->generateUId(); |
|
76 |
+ $iPosition = oxDb::getDb()->getOne("SELECT MAX(`OXPOS`)+1 FROM oxconfigdisplay WHERE `OXCFGMODULE` = " . oxDb::getDb()->quote($conf[3]) . " AND `OXGROUPING` = " . oxDb::getDb()->quote($conf[4])); |
|
77 |
+ $sInsertSql = "INSERT INTO `oxconfigdisplay` (`OXID`, `OXCFGMODULE`, `OXCFGVARNAME`, `OXGROUPING`, `OXPOS`) " . |
|
78 |
+ "VALUES ('{$sOxId}', " . oxDb::getDb()->quote($conf[3]) . ", " . oxDb::getDb()->quote($conf[0]) . ", " . oxDb::getDb()->quote($conf[4]) . ", " . oxDb::getDb()->quote($iPosition) . ")"; |
|
79 |
+ oxDb::getDb()->execute($sInsertSql); |
|
80 |
+ } |
|
81 |
+ } |
|
82 |
+ |
|
83 |
+ if ($blnDbAltered) |
|
84 |
+ { |
|
85 |
+ $oMetaData = oxNew('oxDbMetaDataHandler'); |
|
86 |
+ $oMetaData->updateViews(); |
|
87 |
+ } |
|
88 |
+ |
|
89 |
+ } |
|
90 |
+ |
|
91 |
+ public static function onDeactivate() |
|
92 |
+ { |
|
93 |
+ $iShopId = oxRegistry::getConfig()->getShopId(); |
|
94 |
+ $oConfig = oxRegistry::getConfig(); |
|
95 |
+ |
|
96 |
+ if ($oConfig->getConfigParam('blOxEsAnalyticsGA4Sweep')) |
|
97 |
+ { |
|
98 |
+ $sDb_name = $oConfig->getConfigParam('dbName'); |
|
99 |
+ |
|
100 |
+ // SQL patterns |
|
101 |
+ $sCheckSQL = "SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = '%s' AND COLUMN_NAME = '%s'"; |
|
102 |
+ $sDelSQL = "ALTER TABLE `%s` DROP COLUMN `%s`"; |
|
103 |
+ |
|
104 |
+ |
|
105 |
+ // Check and delete fields |
|
106 |
+ $blnDbAltered = false; |
|
107 |
+ foreach (self::$arrFields as $field) |
|
108 |
+ { |
|
109 |
+ if ($field[3]) |
|
110 |
+ { |
|
111 |
+ $arrFieldVariants = array('', '_1', '_2', '_3'); |
|
112 |
+ } else |
|
113 |
+ { |
|
114 |
+ $arrFieldVariants = array(''); |
|
115 |
+ } |
|
116 |
+ |
|
117 |
+ foreach ($arrFieldVariants as $fieldVariant) |
|
118 |
+ { |
|
119 |
+ $rCheck = oxDb::getDb()->getArray(sprintf($sCheckSQL, $field[2], $field[0] . $fieldVariant), array($sDb_name)); |
|
120 |
+ |
|
121 |
+ if (count($rCheck)) |
|
122 |
+ { |
|
123 |
+ $blnDbAltered = true; |
|
124 |
+ oxDb::getDb()->Execute(sprintf($sDelSQL, $field[2], $field[0] . $fieldVariant)); |
|
125 |
+ } |
|
126 |
+ } |
|
127 |
+ } |
|
128 |
+ |
|
129 |
+ |
|
130 |
+ |
|
131 |
+ if ($blnDbAltered) |
|
132 |
+ { |
|
133 |
+ $oMetaData = oxNew('oxDbMetaDataHandler'); |
|
134 |
+ $oMetaData->updateViews(); |
|
135 |
+ } |
|
136 |
+ |
|
137 |
+ $oConfig->saveShopConfVar('bool','blOxEsAnalyticsGA4Sweep','false',$iShopId,'module:es:analytics:ga4'); |
|
138 |
+ |
|
139 |
+ } |
|
140 |
+ // Check and delete config fields |
|
141 |
+ foreach (self::$arrConfig as $conf) |
|
142 |
+ { |
|
143 |
+ if ($oConfig->getConfigParam($conf[0])) |
|
144 |
+ { |
|
145 |
+ // SQL patterns |
|
146 |
+ $sDelConfSql = "DELETE FROM `oxconfigdisplay` WHERE OXCFGMODULE=" . oxDb::getDb()->quote($conf[3]) . " AND OXCFGVARNAME=" . oxDb::getDb()->quote($conf[0]); |
|
147 |
+ oxDb::getDb()->Execute($sDelConfSql); |
|
148 |
+ $sDelConfSql = "DELETE FROM `oxconfig` WHERE OXMODULE=" . oxDb::getDb()->quote($conf[3]) . " AND OXVARNAME=" . oxDb::getDb()->quote($conf[0]); |
|
149 |
+ oxDb::getDb()->Execute($sDelConfSql); |
|
150 |
+ } |
|
151 |
+ } |
|
152 |
+ } |
|
153 |
+ |
|
154 |
+ protected static function _serializeConfVar($sType, $sName, $mValue) |
|
155 |
+ { |
|
156 |
+ $sData = $mValue; |
|
157 |
+ |
|
158 |
+ switch ($sType) { |
|
159 |
+ case "bool": |
|
160 |
+ break; |
|
161 |
+ |
|
162 |
+ case "str": |
|
163 |
+ case "select": |
|
164 |
+ case "int": |
|
165 |
+ if (in_array($sName, self::$_aParseFloat)) { |
|
166 |
+ $sData = str_replace(',', '.', $sData); |
|
167 |
+ } |
|
168 |
+ break; |
|
169 |
+ |
|
170 |
+ case "arr": |
|
171 |
+ if (!is_array($mValue)) { |
|
172 |
+ $sData = self::_multilineToArray($mValue); |
|
173 |
+ } |
|
174 |
+ break; |
|
175 |
+ |
|
176 |
+ case "aarr": |
|
177 |
+ $sData = self::_multilineToAarray($mValue); |
|
178 |
+ break; |
|
179 |
+ } |
|
180 |
+ |
|
181 |
+ return $sData; |
|
182 |
+ } |
|
183 |
+ |
|
184 |
+ protected static function _multilineToArray($sMultiline) |
|
185 |
+ { |
|
186 |
+ $aArr = explode("\n", $sMultiline); |
|
187 |
+ if (is_array($aArr)) { |
|
188 |
+ foreach ($aArr as $sKey => $sVal) { |
|
189 |
+ $aArr[$sKey] = trim($sVal); |
|
190 |
+ if ($aArr[$sKey] == "") { |
|
191 |
+ unset($aArr[$sKey]); |
|
192 |
+ } |
|
193 |
+ } |
|
194 |
+ |
|
195 |
+ return $aArr; |
|
196 |
+ } |
|
197 |
+ } |
|
198 |
+ |
|
199 |
+ protected static function _multilineToAarray($sMultiline) |
|
200 |
+ { |
|
201 |
+ $oStr = getStr(); |
|
202 |
+ $aArr = array(); |
|
203 |
+ $aLines = explode("\n", $sMultiline); |
|
204 |
+ foreach ($aLines as $sLine) { |
|
205 |
+ $sLine = trim($sLine); |
|
206 |
+ if ($sLine != "" && $oStr->preg_match("/(.+)=>(.+)/", $sLine, $aRegs)) { |
|
207 |
+ $sKey = trim($aRegs[1]); |
|
208 |
+ $sVal = trim($aRegs[2]); |
|
209 |
+ if ($sKey != "" && $sVal != "") { |
|
210 |
+ $aArr[$sKey] = $sVal; |
|
211 |
+ } |
|
212 |
+ } |
|
213 |
+ } |
|
214 |
+ |
|
215 |
+ return $aArr; |
|
216 |
+ } |
|
217 |
+} |