Lister_CookieThemer - Version 0.0.1

Version Notes

This is the initial stable version.

Download this release

Release Info

Developer Lister Technologies (P) Ltd
Extension Lister_CookieThemer
Version 0.0.1
Comparing to
See all releases


Version 0.0.1

app/code/community/Lister/CookieThemer/Block/Adminhtml/System/Config/Form/Field/Cookieexceptions.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Lister_CookieThemer_Block_Adminhtml_System_Config_Form_Field_Cookieexceptions extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
3
+ {
4
+ public function __construct()
5
+ {
6
+ $this->addColumn('cookienv', array(
7
+ 'label' => Mage::helper('adminhtml')->__('Cookie Name Value'),
8
+ 'style' => 'width:120px',
9
+ ));
10
+ $this->addColumn('value', array(
11
+ 'label' => Mage::helper('adminhtml')->__('Theme Name'),
12
+ 'style' => 'width:120px',
13
+ ));
14
+ $this->_addAfter = false;
15
+ $this->_addButtonLabel = Mage::helper('adminhtml')->__('Add Cookie Exception');
16
+ parent::__construct();
17
+ }
18
+ }
app/code/community/Lister/CookieThemer/Helper/Data.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Lister_CookieThemer_Helper_Data extends Mage_Core_Helper_Abstract {
3
+
4
+ /**
5
+ * @param cookiename
6
+ * @return cookie value
7
+ */
8
+ public function getCookieValue($cookie_name){
9
+ $cookie_value = Mage::getModel('core/cookie')->get($cookie_name);
10
+ return $cookie_value;
11
+ }
12
+
13
+
14
+
15
+ }
16
+
17
+
18
+
19
+
20
+
app/code/community/Lister/CookieThemer/Model/Design/Package.php ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Lister_CookieThemer_Model_Design_Package extends Mage_Core_Model_Design_Package {
3
+
4
+ private static $_regexMatchCache = array();
5
+ private static $_customThemeTypeCache = array();
6
+ private static $_regpathMatchCache = array();
7
+
8
+ public function getTheme($type) {
9
+
10
+ if (empty($this->_theme[$type])) {
11
+ $this->_theme[$type] = Mage::getStoreConfig('design/theme/'.$type, $this->getStore());
12
+ if ($type !== 'default' && empty($this->_theme[$type])) {
13
+ $this->_theme[$type] = $this->getTheme('default');
14
+ if (empty($this->_theme[$type])) {
15
+ $this->_theme[$type] = self::DEFAULT_THEME;
16
+ }
17
+
18
+ // "locale", "layout", "template"
19
+ }
20
+ }
21
+
22
+ // + "default", "skin"
23
+ // set exception value for theme based on cookie, if defined in config
24
+ $instVar = "design/theme/{$type}_cookie";
25
+ $cookieThemeType = $this->_checkAgainstCookie($instVar);
26
+
27
+ $validFolder = $this->validateFolder($cookieThemeType, $type, $instVar);
28
+ if ($cookieThemeType && $validFolder) {
29
+ //validate the existence of the value /folder mentiond in config
30
+ $this->_theme[$type] = $cookieThemeType;
31
+ }
32
+
33
+ // set exception value for theme, if defined in config
34
+ $customThemeType = $this->_checkUserAgentAgainstRegexps("design/theme/{$type}_ua_regexp");
35
+ if ($customThemeType) {
36
+ $this->_theme[$type] = $customThemeType;
37
+ }
38
+
39
+ return $this->_theme[$type];
40
+ }
41
+ /**
42
+ * Return if a folder exists in the name given in the config
43
+ *
44
+ * @param $pathValue - design / skin name
45
+ * @param string $type
46
+ * @param string $instVar
47
+ * @return bool|string
48
+ */
49
+ public function validateFolder($pathValue, $type, $instVar) {
50
+ if (!$pathValue) {
51
+ return;
52
+ }
53
+ if (!empty(self::$_regpathMatchCache[$instVar][$pathValue])) {
54
+ return self::$_regpathMatchCache[$instVar][$pathValue];
55
+ }
56
+
57
+ return $this->designExists($pathValue, $instVar, $type);
58
+ }
59
+ /**
60
+ * Return if the theme / skin mentioned is a valid folder
61
+ *
62
+ * @param string $themeName
63
+ * @param string $instVar
64
+ * @param string $type
65
+ * @param string $area
66
+ * @return bool|string
67
+ */
68
+ public function designExists($themeName, $instVar, $type, $area = self::DEFAULT_AREA) {
69
+ $type = ($type == "skin")?'skin':'design';
70
+ self::$_regpathMatchCache[$instVar][$themeName] = is_dir(Mage::getBaseDir($type).DS.$area.DS.$this->getPackageName().DS.$themeName);
71
+ return is_dir(Mage::getBaseDir($type).DS.$area.DS.$this->getPackageName().DS.$themeName);
72
+ }
73
+
74
+
75
+
76
+ /**
77
+ * Get regex rules from config and check cookie against them
78
+ *
79
+ * Rules must be stored in config as a serialized array(['cookienv']=>'...', ['value'] => '...')
80
+ * Will return false or found string.
81
+ *
82
+ * @param string $cookiePath
83
+ * @return mixed
84
+ */
85
+ protected function _checkAgainstCookie($cookiePath) {
86
+
87
+ if (empty($cookiePath)) {
88
+ return false;
89
+ }
90
+ if (!empty(self::$_customThemeTypeCache[$cookiePath])) {
91
+ return self::$_customThemeTypeCache[$cookiePath];
92
+ }
93
+ $configValueSerialized = Mage::getStoreConfig($cookiePath, $this->getStore());
94
+
95
+ if (!$configValueSerialized) {
96
+ return false;
97
+ }
98
+
99
+ $cookiedetails = @unserialize($configValueSerialized);
100
+ if (empty($cookiedetails)) {
101
+ return false;
102
+ }
103
+
104
+ return self::getPackageByCookie($cookiedetails, $cookiePath);
105
+ }
106
+
107
+ /**
108
+ * Return package name based on design exception rules
109
+ *
110
+ * @param array $rules - design exception rules
111
+ * @param string $cookiePath
112
+ * @return bool|string
113
+ */
114
+ public static function getPackageByCookie(array $rules, $cookiePath) {
115
+ foreach ($rules as $rule) {
116
+ if (!empty($rule['cookienv'])) {
117
+ /* Switching mobile theme based on cookie */
118
+ if (strpos($rule['cookienv'], "|") > 0) {
119
+ $cookieNameValue = str_replace("|", "_", trim($rule['cookienv']));
120
+ if (!empty(self::$_regexMatchCache[$cookieNameValue][$cookiePath])) {
121
+ /* Switching mobile theme based on cookie */
122
+ self::$_customThemeTypeCache[$cookiePath] = $rule['value'];
123
+ return $rule['value'];
124
+ }
125
+
126
+ $cookieDetailsArray = explode("|", $rule['cookienv']);
127
+ if (is_array($cookieDetailsArray)) {
128
+ $cookieName = $cookieDetailsArray[0];
129
+ $valFromConfig = $cookieDetailsArray[1];
130
+ $cookieVal = Lister_CookieThemer_Helper_Data::getCookieValue($cookieName);
131
+ if ($cookieVal == $valFromConfig) {
132
+ self::$_regexMatchCache[$cookieNameValue][$cookiePath] = true;
133
+ self::$_customThemeTypeCache[$cookiePath] = $rule['value'];
134
+ return $rule['value'];
135
+ }
136
+ }
137
+ }
138
+ }
139
+
140
+ $regexp = str_replace("|", "_", trim($rule['cookienv']));
141
+
142
+ }
143
+ return false;
144
+ }
145
+
146
+ }
app/code/community/Lister/CookieThemer/etc/config.xml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Lister_CookieThemer>
5
+ <version>1.0.0.0</version>
6
+ </Lister_CookieThemer>
7
+ </modules>
8
+ <global>
9
+ <blocks>
10
+ <cookiethemer>
11
+ <class>Lister_CookieThemer_Block</class>
12
+ </cookiethemer>
13
+ </blocks>
14
+ <models>
15
+ <cookiethemer>
16
+ <class>Lister_CookieThemer_Model</class>
17
+ </cookiethemer>
18
+ <core>
19
+ <rewrite>
20
+ <design_package>Lister_CookieThemer_Model_Design_Package</design_package>
21
+ </rewrite>
22
+ </core>
23
+ </models>
24
+ <helpers>
25
+ <cookiethemer>
26
+ <class>Lister_CookieThemer_Helper</class>
27
+ </cookiethemer>
28
+ </helpers>
29
+ </global>
30
+ <admin>
31
+ <routers>
32
+ <adminhtml>
33
+ <args>
34
+ <modules>
35
+ <cookiethemer before="Mage_Adminhtml">Lister_CookieThemer_Adminhtml</cookiethemer>
36
+ </modules>
37
+ </args>
38
+ </adminhtml>
39
+ </routers>
40
+ </admin>
41
+ </config>
app/code/community/Lister/CookieThemer/etc/system.xml ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <sections>
4
+ <design translate="label" module="core">
5
+ <label>Design</label>
6
+ <tab>general</tab>
7
+ <frontend_type>text</frontend_type>
8
+ <sort_order>30</sort_order>
9
+ <show_in_default>1</show_in_default>
10
+ <show_in_website>1</show_in_website>
11
+ <show_in_store>1</show_in_store>
12
+ <groups>
13
+ <theme translate="label">
14
+ <label>Themes</label>
15
+ <frontend_type>text</frontend_type>
16
+ <sort_order>2</sort_order>
17
+ <show_in_default>1</show_in_default>
18
+ <show_in_website>1</show_in_website>
19
+ <show_in_store>1</show_in_store>
20
+ <fields>
21
+ <template_cookie translate="comment">
22
+ <label></label>
23
+ <frontend_model>cookiethemer/adminhtml_system_config_form_field_cookieexceptions</frontend_model>
24
+ <backend_model>adminhtml/system_config_backend_design_exception</backend_model>
25
+ <sort_order>26</sort_order>
26
+ <show_in_default>1</show_in_default>
27
+ <show_in_website>1</show_in_website>
28
+ <show_in_store>1</show_in_store>
29
+ <comment>Enter cookiename|cookievalue.Change theme based on the Cookie Match .Match expressions in the same order as displayed in the configuration.</comment>
30
+ </template_cookie>
31
+ <skin_cookie translate="comment">
32
+ <label></label>
33
+ <frontend_model>cookiethemer/adminhtml_system_config_form_field_cookieexceptions</frontend_model>
34
+ <backend_model>adminhtml/system_config_backend_design_exception</backend_model>
35
+ <sort_order>36</sort_order>
36
+ <show_in_default>1</show_in_default>
37
+ <show_in_website>1</show_in_website>
38
+ <show_in_store>1</show_in_store>
39
+ <comment>Enter cookiename|cookievalue.Change skin based on the Cookie Match .Match expressions in the same order as displayed in the configuration.</comment>
40
+ </skin_cookie>
41
+ <layout_cookie translate="comment">
42
+ <label></label>
43
+ <frontend_model>cookiethemer/adminhtml_system_config_form_field_cookieexceptions</frontend_model>
44
+ <backend_model>adminhtml/system_config_backend_design_exception</backend_model>
45
+ <sort_order>56</sort_order>
46
+ <show_in_default>1</show_in_default>
47
+ <show_in_website>1</show_in_website>
48
+ <show_in_store>1</show_in_store>
49
+ <comment>Enter cookiename|cookievalue.Change layout based on the Cookie Match .Match expressions in the same order as displayed in the configuration.</comment>
50
+ </layout_cookie>
51
+ </fields>
52
+ </theme>
53
+ </groups>
54
+ </design>
55
+ </sections>
56
+ </config>
app/etc/modules/Lister_CookieThemer.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <config>
2
+ <modules>
3
+ <Lister_CookieThemer>
4
+ <active>true</active>
5
+ <codePool>community</codePool>
6
+ </Lister_CookieThemer>
7
+ </modules>
8
+ </config>
package.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Lister_CookieThemer</name>
4
+ <version>0.0.1</version>
5
+ <stability>stable</stability>
6
+ <license>Open Software License (OSL)</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>CookieThemer - Module allows us to switch multiple themes for a website based on the cookie set in the page</summary>
10
+ <description>Magento Installations by default allows only one theme to be associated for a website . If you want to test the response for a new design for the same website , by showing only the new design to a certain percent of people and the old design to other people based on geo-location ,we have no inbuilt support.&#xD;
11
+ &#xD;
12
+ This module helps to reduce the pain by allowing us to set multiple themes for a website ( like we write exceptions for mobile site based on the useragent) . The logic is decided by the cookie name and cookie value set from Test and Target or from external sites which decides which users gets to see the redesigned / old cart .</description>
13
+ <notes>This is the initial stable version.</notes>
14
+ <authors><author><name>Lister Technologies (P) Ltd</name><user>Lister</user><email>senthil.muppidathi@listertechnologies.com</email></author></authors>
15
+ <date>2016-04-13</date>
16
+ <time>06:14:22</time>
17
+ <contents><target name="magecommunity"><dir name="Lister"><dir name="CookieThemer"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Cookieexceptions.php" hash="1d56cd8b8d7d6031f7585b05a8c84843"/></dir></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="c269e71e6392be2928d16e777df27502"/></dir><dir name="Model"><dir name="Design"><file name="Package.php" hash="a6d881d311d4b42bab735ea2dd7a67d9"/></dir></dir><dir name="etc"><file name="config.xml" hash="52ada04b767a4a3befd5c15a443a5935"/><file name="system.xml" hash="c786b6940f42bdefc2dbbde172ebd525"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Lister_CookieThemer.xml" hash="afcf81d3137642a5bd2d16efdac01c94"/></dir></target></contents>
18
+ <compatible/>
19
+ <dependencies><required><php><min>5.1.0</min><max>5.6.9</max></php></required></dependencies>
20
+ </package>