Browse code

Initial commit

Benjamin Roth authored on31/08/2015 14:53:33
Showing7 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
+}
0 218
new file mode 100644
... ...
@@ -0,0 +1,10 @@
1
+<?xml version="1.0" encoding="ISO-8859-15"?>
2
+<OX>
3
+	<OXMENU id="NAVIGATION_ESHOPADMIN">
4
+		<MAINMENU id="mxmanageprod">
5
+			<SUBMENU id="mxarticles" cl="article" list="article_list">
6
+				<TAB id="tbcles_article_nutritionfacts" cl="es_article_nutritionfacts" />
7
+			</SUBMENU>
8
+		</MAINMENU>
9
+	</OXMENU>
10
+</OX>
0 11
new file mode 100644
... ...
@@ -0,0 +1,66 @@
1
+<?php
2
+/**
3
+ * This file is part of OXID eSales PayPal module.
4
+ *
5
+ * OXID eSales PayPal module is free software: you can redistribute it and/or modify
6
+ * it under the terms of the GNU General Public License as published by
7
+ * the Free Software Foundation, either version 3 of the License, or
8
+ * (at your option) any later version.
9
+ *
10
+ * OXID eSales PayPal module is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+ * GNU General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU General Public License
16
+ * along with OXID eSales PayPal module.  If not, see <http://www.gnu.org/licenses/>.
17
+ *
18
+ * @link      http://www.oxid-esales.com
19
+ * @copyright (C) OXID eSales AG 2003-2015
20
+ */
21
+
22
+/**
23
+ * Metadata version
24
+ */
25
+$sMetadataVersion = '1.2';
26
+
27
+/**
28
+ * Module information
29
+ */
30
+$aModule = array(
31
+    'id'           => 'es_analytics',
32
+    'title'        => array(
33
+		'de' => '<span style="color: #495058; display:inline-block; font-weight: 700;"><span style="-webkit-border-radius: 50%;-moz-border-radius: 50%;border-radius: 50%; background-color: #52aa00; display: inline-block; line-height: 1.2; width: 1.1em; height: 1.2em; padding-right: 0.1em; text-align: right; color: #fff; margin-right: 0.1em;">e</span>Sales <span style="color: #52aa00;">Media</span></span> Google Analytics',
34
+		'en' => '<span style="color: #495058; display:inline-block; font-weight: 700;"><span style="-webkit-border-radius: 50%;-moz-border-radius: 50%;border-radius: 50%; background-color: #52aa00; display: inline-block; line-height: 1.2; width: 1.1em; height: 1.2em; padding-right: 0.1em; text-align: right; color: #fff; margin-right: 0.1em;">e</span>Sales <span style="color: #52aa00;">Media</span></span> Google Analytics',
35
+	),
36
+    'description'  => array(
37
+        'de' => 'Fügt Google Analytics zum Shop hinzu, inkl. E-Commerce Tracking',
38
+        'en' => 'Adds Google Analytics to the shop incl. eCommerce Tracking',
39
+    ),
40
+    'thumbnail'    => 'picture.png',
41
+    'version'      => '1.0.0',
42
+    'author'       => 'eSales Media',
43
+    'url'          => 'http://www.esales-media.de',
44
+    'email'        => 'info@esales-media.de',
45
+	'extend'      => array(
46
+//		'oxarticle' => 'esales/es_analytics/models/es_analytics_oxarticle',
47
+	),
48
+	'files'       => array(
49
+//		'es_article_nutritionfacts' => 'esales/es_analytics/controllers/admin/es_article_nutritionfacts.php',
50
+		'es_analytics_events'  => 'esales/es_analytics/core/es_analytics_events.php',
51
+	),
52
+	'templates'   => array(
53
+//		'es_article_nutritionfacts.tpl'    => 'esales/es_analytics/views/admin/tpl/es_article_nutritionfacts.tpl',
54
+	),
55
+    'blocks' => array(
56
+        array('template' => 'layout/base.tpl', 'block' => 'head_css', 'file' => 'views/blocks/es_analytics_code_head_css.tpl'),
57
+    ),
58
+    'events'       => array(
59
+        'onActivate'   => 'es_analytics_events::onActivate',
60
+        'onDeactivate'   => 'es_analytics_events::onDeactivate'
61
+    ),
62
+    'settings'    => array(
63
+        array('group' => 'main', 'name' => 'sOxEsAnalyticsId', 'type' => 'str', 'value' => ''),
64
+        array('group' => 'esUninstall', 'name' => 'blOxEsAnalyticsSweep', 'type' => 'bool', 'value' => 'false'),
65
+    )
66
+);
0 67
new file mode 100644
1 68
Binary files /dev/null and b/picture.png differ
2 69
new file mode 100644
... ...
@@ -0,0 +1,17 @@
1
+<?php
2
+/**
3
+ * eSales Media Ingredients 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
+// RESOURCE IDENTIFIER = STRING
11
+// -------------------------------
12
+$sLangName = 'Deutsch';
13
+$aLang = array(
14
+    'charset'                                    => 'UTF-8',
15
+	'NUTRITIONFACTS'                             => 'Nährwertangaben'
16
+
17
+);
0 18
new file mode 100644
... ...
@@ -0,0 +1,19 @@
1
+<?php
2
+/**
3
+ * eSales Media Nutrition Facts 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
+// RESOURCE IDENTIFIER = STRING
11
+// -------------------------------
12
+$sLangName = 'Deutsch';
13
+$aLang = array(
14
+    'charset'                                    => 'UTF-8',
15
+    'SHOP_MODULE_GROUP_esUninstall'              => 'Deinstallieren',
16
+    'SHOP_MODULE_sOxEsAnalyticsId'               => 'Google Analytics ID (UA-XXXXX-X)',
17
+    'SHOP_MODULE_blOxEsAnalyticsSweep'           => 'Alle zum Modul gehörenden Datenbankfelder löschen<p class="info">ACHTUNG: Bereits eingetragene Daten gehen verloren.</p>',
18
+
19
+);
0 20
new file mode 100644
... ...
@@ -0,0 +1,61 @@
1
+[{$smarty.block.parent}]
2
+
3
+[{assign var="oConfig" value=$oViewConf->getConfig()}]
4
+[{assign var=googleTrackingId value=$oConfig->getConfigParam('sOxEsAnalyticsId')}]
5
+[{if $googleTrackingId}]
6
+<script>
7
+  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
8
+    (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
9
+    m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
10
+  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
11
+
12
+  ga('create', '[{$googleTrackingId}]', 'auto');
13
+  ga('set', 'anonymizeIp', true);
14
+  ga('send', 'pageview');
15
+
16
+
17
+  [{if $oViewConf->getActiveClassName() == 'thankyou'}][{strip}]
18
+  [{assign var="order" value=$oView->getOrder()}]
19
+
20
+  ga('require', 'ecommerce');
21
+
22
+  [{assign var="currate" value=$order->oxorder__oxcurrate->value}]
23
+  [{if $oConfig->getConfigParam('blEnterNetPrice')}]
24
+  [{math equation="sum / rate" sum=$order->getOrderNetSum() rate=$currate format="%.2f" assign="sTotal"}]
25
+  [{else}]
26
+  [{math equation="sum / rate" sum=$order->getTotalOrderSum() rate=$currate format="%.2f" assign="sTotal"}]
27
+  [{/if}]
28
+  [{math equation="sum - net" sum=$order->getTotalOrderSum() net=$order->getOrderNetSum() format="%.2f" assign="sTax"}]
29
+  [{math equation="sum / rate" sum=$order->oxorder__oxdelcost->value rate=$currate format="%.2f" assign="sShipping"}]
30
+
31
+  ga('ecommerce:addTransaction', {
32
+    'id':           '[{$order->oxorder__oxordernr->value}]',        [{* Transaction ID *}]
33
+    'affiliation':  '[{$oxcmp_shop->oxshops__oxname->value|escape:"quotes"}]',      [{* Store name *}]
34
+    'revenue':      '[{$sTotal}]',                                  [{* Grand Total *}]
35
+    'shipping':     '[{$sShipping}]',                               [{* Shipping *}]
36
+    'tax':          '[{$sTax}]'                                     [{* Tax *}]
37
+  });
38
+
39
+  [{foreach from=$order->getOrderArticles() item=oOrderArticle}]
40
+
41
+  [{if $oConfig->getConfigParam('blEnterNetPrice')}]
42
+  [{assign var="oPrice" value=$oOrderArticle->getPrice()}]
43
+  [{math equation="sum / rate" sum=$oPrice->getNettoPrice() rate=$currate format="%.2f" assign="sPrice"}]
44
+  [{else}]
45
+  [{assign var="sPrice" value=$oOrderArticle->oxorderarticles__oxprice->value}]
46
+  [{/if}]
47
+
48
+
49
+  ga('ecommerce:addItem', {
50
+    'id': '[{$order->oxorder__oxordernr->value}]',                          [{* Transaction ID *}]
51
+    'name': '[{$oOrderArticle->oxorderarticles__oxtitle->value|escape:"quotes"}][{if $oOrderArticle->oxorderarticles__oxselvariant->value}] [{$oOrderArticle->oxorderarticles__oxselvariant->value}][{/if}]',          [{* Product name *}]
52
+    'sku': '[{$oOrderArticle->oxorderarticles__oxartnum->value|escape:"quotes"}]',          [{* SKU *}]
53
+    'price': '[{$sPrice}]',                                                 [{* Preis pro Einheit *}]
54
+    'quantity': '[{$oOrderArticle->oxorderarticles__oxamount->value}]'      [{* Menge *}]
55
+  });
56
+  [{/foreach}]
57
+
58
+  ga('ecommerce:send');
59
+  [{/strip}][{/if}]
60
+</script>
61
+[{/if}]
0 62
\ No newline at end of file