Browse code

Initial commit

Benjamin Roth authored on31/08/2015 14:53:33
Showing1 changed files
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_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('blOxEsAnalyticsSweep'))
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','blOxEsAnalyticsSweep','false',$iShopId,'module:es:analytics');
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
+}