cartsguru - Version 1.3.4

Version Notes

- Improve redirect to cart on recover

Download this release

Release Info

Developer Maxime Pruvost
Extension cartsguru
Version 1.3.4
Comparing to
See all releases


Code changes from version 1.3.3 to 1.3.4

Files changed (39) hide show
  1. app/code/local/Cartsguru/Block/Pixel.php +48 -48
  2. app/code/local/Cartsguru/Helper/Data.php +11 -14
  3. app/code/local/Cartsguru/Helper/Tools.php +5 -3
  4. app/code/local/Cartsguru/Model/Catalog.php +204 -192
  5. app/code/local/Cartsguru/Model/Observer.php +11 -8
  6. app/code/local/Cartsguru/Model/Webservice.php +44 -39
  7. app/code/local/Cartsguru/controllers/AdminController.php +47 -46
  8. app/code/local/Cartsguru/controllers/CatalogController.php +24 -24
  9. app/code/local/Cartsguru/controllers/IndexController.php +4 -3
  10. app/code/local/Cartsguru/controllers/RecovercartController.php +29 -11
  11. app/code/local/Cartsguru/controllers/SaveaccountController.php +36 -35
  12. app/code/local/Cartsguru/etc/config.xml +1 -1
  13. app/code/local/Cartsguru/sql/cartsguru_setup/install-1.0.0.php +1 -1
  14. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.0.0-1.0.1.php +1 -1
  15. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.0.1-1.0.2.php +1 -1
  16. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.0.2-1.1.0.php +1 -1
  17. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.0-1.1.1.php +1 -1
  18. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.1-1.1.2.php +1 -1
  19. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.2-1.1.3.php +1 -1
  20. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.3-1.1.4 .php +1 -1
  21. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.4-1.1.5.php +1 -1
  22. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.5-1.2.0.php +1 -1
  23. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.0-1.2.1.php +1 -1
  24. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.1-1.2.2.php +1 -1
  25. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.14-1.2.15.php +6 -6
  26. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.15-1.2.16.php +6 -6
  27. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.16-1.3.0.php +6 -6
  28. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.2-1.2.3.php +1 -1
  29. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.3-1.2.4.php +1 -1
  30. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.4-1.2.5.php +1 -1
  31. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.5-1.2.6.php +1 -1
  32. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.6-1.2.7.php +1 -1
  33. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.7-1.2.8.php +1 -1
  34. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.8-1.2.9.php +1 -1
  35. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.3.0-1.3.1.php +6 -6
  36. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.3.1-1.3.2.php +6 -6
  37. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.3.2-1.3.3.php +6 -6
  38. app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.3.3-1.3.4.php +6 -0
  39. package.xml +5 -7
app/code/local/Cartsguru/Block/Pixel.php CHANGED
@@ -1,48 +1,48 @@
1
- <?php
2
-
3
- class Cartsguru_Block_Pixel extends Mage_Core_Block_Template
4
- {
5
- /**
6
- * Check if Facebook is enabled
7
- */
8
- protected function isFacebookEnabled()
9
- {
10
- return Mage::helper('cartsguru')->getStoreConfig("feature_facebook");
11
- }
12
-
13
- /**
14
- * Get FB pixel from config
15
- */
16
- protected function getPixel()
17
- {
18
- return Mage::helper('cartsguru')->getStoreConfig("facebook_pixel");
19
- }
20
-
21
- /**
22
- * Get CatalogId from config
23
- */
24
- protected function getCatalogId()
25
- {
26
- return Mage::helper('cartsguru')->getStoreConfig("facebook_catalogId");
27
- }
28
-
29
- /**
30
- * Get the product added to cart that we saved in session
31
- */
32
- protected function getAddToCartProduct()
33
- {
34
- $productData = Mage::getSingleton('core/session')->getCartsGuruAddToCart();
35
- if ($productData) {
36
- Mage::getSingleton('core/session')->unsCartsGuruAddToCart();
37
- return $productData;
38
- }
39
- return false;
40
- }
41
- /**
42
- * Get the tracking URL
43
- */
44
- protected function getTrackingURL()
45
- {
46
- return $this->getUrl('cartsguru/saveaccount');
47
- }
48
- }
1
+ <?php
2
+
3
+ class Cartsguru_Block_Pixel extends Mage_Core_Block_Template
4
+ {
5
+ /**
6
+ * Check if Facebook is enabled
7
+ */
8
+ protected function isFacebookEnabled()
9
+ {
10
+ return Mage::helper('cartsguru')->getStoreConfig("feature_facebook");
11
+ }
12
+
13
+ /**
14
+ * Get FB pixel from config
15
+ */
16
+ protected function getPixel()
17
+ {
18
+ return Mage::helper('cartsguru')->getStoreConfig("facebook_pixel");
19
+ }
20
+
21
+ /**
22
+ * Get CatalogId from config
23
+ */
24
+ protected function getCatalogId()
25
+ {
26
+ return Mage::helper('cartsguru')->getStoreConfig("facebook_catalogId");
27
+ }
28
+
29
+ /**
30
+ * Get the product added to cart that we saved in session
31
+ */
32
+ protected function getAddToCartProduct()
33
+ {
34
+ $productData = Mage::getSingleton('core/session')->getCartsGuruAddToCart();
35
+ if ($productData) {
36
+ Mage::getSingleton('core/session')->unsCartsGuruAddToCart();
37
+ return $productData;
38
+ }
39
+ return false;
40
+ }
41
+ /**
42
+ * Get the tracking URL
43
+ */
44
+ protected function getTrackingURL()
45
+ {
46
+ return $this->getUrl('cartsguru/saveaccount');
47
+ }
48
+ }
app/code/local/Cartsguru/Helper/Data.php CHANGED
@@ -61,26 +61,22 @@ class Cartsguru_Helper_Data extends Mage_Core_Helper_Abstract
61
}
62
63
// Get store from admin
64
- public function getStoreFromAdmin(){
65
$store_id = null;
66
- if (strlen($code = Mage::getSingleton('adminhtml/config_data')->getStore())) // store level
67
- {
68
$store_id = Mage::getModel('core/store')->load($code)->getId();
69
- }
70
- elseif (strlen($code = Mage::getSingleton('adminhtml/config_data')->getWebsite())) // website level
71
- {
72
$website_id = Mage::getModel('core/website')->load($code)->getId();
73
$store_id = Mage::app()->getWebsite($website_id)->getDefaultStore()->getId();
74
- }
75
- elseif (strlen($code = Mage::app()->getRequest()->getParam('website'))) {
76
$website_id = Mage::getModel('core/website')->load($code)->getId();
77
$store_id = Mage::app()->getWebsite($website_id)->getDefaultStore()->getId();
78
}
79
80
- if ($store_id){
81
return Mage::app()->getStore($store_id);
82
- }
83
- else {
84
return Mage::app()->getStore();
85
}
86
}
@@ -88,15 +84,16 @@ class Cartsguru_Helper_Data extends Mage_Core_Helper_Abstract
88
// Save config in store
89
public function setStoreConfig($key, $value, $store = null)
90
{
91
- if (!$store){
92
$store = Mage::app()->getStore();
93
}
94
95
Mage::getConfig()->saveConfig($this->configBasePath . $key, $value, 'stores', $store->getStoreId());
96
}
97
// Get store config
98
- public function getStoreConfig($key, $store = null){
99
- if (!$store){
100
$store = Mage::app()->getStore();
101
}
102
61
}
62
63
// Get store from admin
64
+ public function getStoreFromAdmin()
65
+ {
66
$store_id = null;
67
+ if (strlen($code = Mage::getSingleton('adminhtml/config_data')->getStore())) { // store level
68
$store_id = Mage::getModel('core/store')->load($code)->getId();
69
+ } elseif (strlen($code = Mage::getSingleton('adminhtml/config_data')->getWebsite())) { // website level
70
$website_id = Mage::getModel('core/website')->load($code)->getId();
71
$store_id = Mage::app()->getWebsite($website_id)->getDefaultStore()->getId();
72
+ } elseif (strlen($code = Mage::app()->getRequest()->getParam('website'))) {
73
$website_id = Mage::getModel('core/website')->load($code)->getId();
74
$store_id = Mage::app()->getWebsite($website_id)->getDefaultStore()->getId();
75
}
76
77
+ if ($store_id) {
78
return Mage::app()->getStore($store_id);
79
+ } else {
80
return Mage::app()->getStore();
81
}
82
}
84
// Save config in store
85
public function setStoreConfig($key, $value, $store = null)
86
{
87
+ if (!$store) {
88
$store = Mage::app()->getStore();
89
}
90
91
Mage::getConfig()->saveConfig($this->configBasePath . $key, $value, 'stores', $store->getStoreId());
92
}
93
// Get store config
94
+ public function getStoreConfig($key, $store = null)
95
+ {
96
+ if (!$store) {
97
$store = Mage::app()->getStore();
98
}
99
app/code/local/Cartsguru/Helper/Tools.php CHANGED
@@ -3,14 +3,16 @@
3
/**
4
* Class Cartsguru_Helper_Tools
5
*/
6
- class Cartsguru_Helper_Tools {
7
8
/**
9
* This method generate a random uuid v4
10
* @param $customer
11
*/
12
- public static function generateUUID() {
13
- return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
14
15
// 32 bits for "time_low"
16
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
3
/**
4
* Class Cartsguru_Helper_Tools
5
*/
6
+ class Cartsguru_Helper_Tools
7
+ {
8
9
/**
10
* This method generate a random uuid v4
11
* @param $customer
12
*/
13
+ public static function generateUUID()
14
+ {
15
+ return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
16
17
// 32 bits for "time_low"
18
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
app/code/local/Cartsguru/Model/Catalog.php CHANGED
@@ -1,192 +1,204 @@
1
- <?php
2
-
3
- /**
4
- * This class generates catalog feed for Facebook
5
- * Class Cartsguru_Model_Catalog
6
- */
7
- class Cartsguru_Model_Catalog {
8
-
9
- /**
10
- * The fields to be put into the feed.
11
- * @var array
12
- */
13
- protected $_requiredFields = array(
14
- array(
15
- 'magento' => 'id',
16
- 'feed' => 'id',
17
- 'type' => 'id',
18
- ),
19
- array(
20
- 'magento' => 'availability_google',
21
- 'feed' => 'availability',
22
- 'type' => 'computed',
23
- ),
24
- // condition here
25
- array(
26
- 'magento' => 'description',
27
- 'feed' => 'description',
28
- 'type' => 'product_attribute',
29
- ),
30
- array(
31
- 'magento' => 'image_url',
32
- 'feed' => 'image_link',
33
- 'type' => 'computed',
34
- ),
35
- array(
36
- 'magento' => 'product_link',
37
- 'feed' => 'link',
38
- 'type' => 'computed',
39
- ),
40
- array(
41
- 'magento' => 'name',
42
- 'feed' => 'title',
43
- 'type' => 'product_attribute',
44
- ),
45
- array(
46
- 'magento' => 'manufacturer',
47
- 'feed' => 'brand',
48
- 'type' => 'product_attribute',
49
- ),
50
- array(
51
- 'magento' => 'price',
52
- 'feed' => 'price',
53
- 'type' => 'computed',
54
- )
55
- );
56
-
57
- /*
58
- * Generate XML product feed
59
- */
60
- public function generateFeed($store, $offset, $limit)
61
- {
62
- // setup attribute mapping
63
- $this->_attributes = array();
64
-
65
- foreach ($this->_requiredFields as $requiredField) {
66
- $this->_attributes[$requiredField['feed']] = $requiredField;
67
- }
68
-
69
- $result = array(
70
- 'url' => $store->getBaseUrl(),
71
- 'store_name' => $store->getFrontendName(),
72
- 'total' => Mage::getModel('catalog/product')->getCollection()->addStoreFilter()->addFieldToFilter('status', '1')->getSize()
73
- );
74
-
75
- $productCollection = Mage::getResourceModel('catalog/product_collection');
76
- $productCollection->addStoreFilter();
77
- $productCollection->addFieldToFilter('status', '1');
78
-
79
- $this->_products = array();
80
- Mage::getSingleton('core/resource_iterator')->walk($productCollection->getSelect()->limit($limit, $offset), array(array($this, 'processProduct')));
81
- $result['products'] = $this->_products;
82
-
83
- return $result;
84
- }
85
-
86
- /*
87
- * Process each product in a loop
88
- */
89
- public function processProduct($args)
90
- {
91
- $product = Mage::getModel('catalog/product')->load($args['row']['entity_id']);
92
-
93
- $product_data = array();
94
- $attributes = $this->_attributes;
95
- // store
96
- $store = Mage::getModel('core/store')->load($product->getStoreId());
97
- // Prepare attributes
98
- foreach ($attributes as $attribute) {
99
- if ($attribute['type'] == 'id') {
100
- $value = $product->getId();
101
- } elseif ($attribute['type'] == 'product_attribute') {
102
- // if this is a normal product attribute, retrieve it's frontend representation
103
- if ($product->getData($attribute['magento']) === null) {
104
- $value = '';
105
- } else {
106
- /** @var $attributeObj Mage_Catalog_Model_Resource_Eav_Attribute */
107
- $attributeObj = $product->getResource()->getAttribute($attribute['magento']);
108
- $value = $attributeObj->getFrontend()->getValue($product);
109
- }
110
- } elseif ($attribute['type'] == 'computed') {
111
- // if this is a computed attribute, handle it depending on its code
112
- switch ($attribute['magento']) {
113
- case 'price':
114
- $price = Mage::helper('tax')->getPrice($product, $product->getFinalPrice(), true);
115
- $value = sprintf('%.2f', (float)($store->convertPrice($price, false, false)));
116
- $value .= ' '.Mage::getStoreConfig('currency/options/default', $product->getStoreId());
117
- break;
118
-
119
- case 'product_link':
120
- $value = $product->getProductUrl();
121
- break;
122
-
123
- case 'image_url':
124
- $value = (string)Mage::helper('catalog/image')->init($product, 'image');
125
- break;
126
-
127
- case 'availability_google':
128
- $value = $product->isSaleable() ? 'in stock' : 'out of stock';
129
- break;
130
-
131
- default:
132
- $value = '';
133
- }
134
- }
135
- $product_data[$attribute['feed']] = $value;
136
- }
137
-
138
- $price = floatval($product_data['price']);
139
- // Price is required
140
- if (empty($price)) {
141
- return;
142
- }
143
-
144
- // If manufacturer not set use mpn === sku
145
- if ($product_data['brand'] === '') {
146
- unset($product_data['brand']);
147
- $product_data['mpn'] = $product_data['id'];
148
- }
149
-
150
- // All products are new
151
- $product_data['condition'] = 'new';
152
-
153
- foreach ($product_data as $feedTag => $value) {
154
- $safeString = null;
155
- switch ($feedTag) {
156
- case 'link':
157
- $safeString = $value;
158
- break;
159
-
160
- case 'price':
161
- $safeString = sprintf('%.2f', $store->convertPrice($value, false, false)).' '.Mage::getStoreConfig('currency/options/default', $store->getStoreId());
162
- break;
163
-
164
- case 'sale_price':
165
- if($value && $value != ''){
166
- $safeString = sprintf('%.2f', $store->convertPrice($value, false, false)).' '.Mage::getStoreConfig('currency/options/default', $store->getStoreId());
167
- }
168
- break;
169
-
170
- case 'image_link':
171
- if ($value == 'no_selection') {
172
- $safeString = '';
173
- } else {
174
- $safeString = $value;
175
- // Check if the link is a full URL
176
- if (substr($value, 0, 5) != 'http:' && substr($value, 0, 6) != 'https:') {
177
- $safeString = $store->getBaseUrl('media') . 'catalog/product' . $value;
178
- }
179
- }
180
- break;
181
-
182
- default:
183
- $safeString = $value;
184
- break;
185
- }
186
- if ($safeString !== null) {
187
- $product_data[$feedTag] = $safeString;
188
- }
189
- }
190
- $this->_products[] = $product_data;
191
- }
192
- }
1
+ <?php
2
+
3
+ /**
4
+ * This class generates catalog feed for Facebook
5
+ * Class Cartsguru_Model_Catalog
6
+ */
7
+ class Cartsguru_Model_Catalog
8
+ {
9
+
10
+ /**
11
+ * The fields to be put into the feed.
12
+ * @var array
13
+ */
14
+ protected $_requiredFields = array(
15
+ array(
16
+ 'magento' => 'id',
17
+ 'feed' => 'id',
18
+ 'type' => 'id',
19
+ ),
20
+ array(
21
+ 'magento' => 'availability_google',
22
+ 'feed' => 'availability',
23
+ 'type' => 'computed',
24
+ ),
25
+ // condition here
26
+ array(
27
+ 'magento' => 'description',
28
+ 'feed' => 'description',
29
+ 'type' => 'product_attribute',
30
+ ),
31
+ array(
32
+ 'magento' => 'image_url',
33
+ 'feed' => 'image_link',
34
+ 'type' => 'computed',
35
+ ),
36
+ array(
37
+ 'magento' => 'product_link',
38
+ 'feed' => 'link',
39
+ 'type' => 'computed',
40
+ ),
41
+ array(
42
+ 'magento' => 'name',
43
+ 'feed' => 'title',
44
+ 'type' => 'product_attribute',
45
+ ),
46
+ array(
47
+ 'magento' => 'manufacturer',
48
+ 'feed' => 'brand',
49
+ 'type' => 'product_attribute',
50
+ ),
51
+ array(
52
+ 'magento' => 'price',
53
+ 'feed' => 'price',
54
+ 'type' => 'computed',
55
+ )
56
+ );
57
+
58
+ /*
59
+ * Generate XML product feed
60
+ */
61
+ public function generateFeed($store, $offset, $limit)
62
+ {
63
+ // setup attribute mapping
64
+ $this->_attributes = array();
65
+
66
+ foreach ($this->_requiredFields as $requiredField) {
67
+ $this->_attributes[$requiredField['feed']] = $requiredField;
68
+ }
69
+
70
+ $result = array(
71
+ 'url' => $store->getBaseUrl(),
72
+ 'store_name' => $store->getFrontendName(),
73
+ 'total' => Mage::getModel('catalog/product')->getCollection()->addStoreFilter()->addFieldToFilter('status', '1')->getSize()
74
+ );
75
+
76
+ $productCollection = Mage::getResourceModel('catalog/product_collection');
77
+ $productCollection->addStoreFilter();
78
+ $productCollection->addFieldToFilter('status', '1');
79
+
80
+ $this->_products = array();
81
+ Mage::getSingleton('core/resource_iterator')->walk($productCollection->getSelect()->limit($limit, $offset), array(array($this, 'processProduct')));
82
+ $result['products'] = $this->_products;
83
+
84
+ return $result;
85
+ }
86
+
87
+ /*
88
+ * Process each product in a loop
89
+ */
90
+ public function processProduct($args)
91
+ {
92
+ $product = Mage::getModel('catalog/product')->load($args['row']['entity_id']);
93
+ // check if configurable product and has issues with attributes
94
+ if ($product->isConfigurable()) {
95
+ $product->getTypeInstance(true)->setStoreFilter($product->getStore(), $product);
96
+ $attributes = $product->getTypeInstance(true)->getConfigurableAttributes($product);
97
+ foreach ($attributes as $attribute) {
98
+ $attribute = $attribute->getProductAttribute();
99
+ if (empty($attribute)) {
100
+ return;
101
+ }
102
+ }
103
+ }
104
+
105
+ $product_data = array();
106
+ $attributes = $this->_attributes;
107
+ // store
108
+ $store = Mage::getModel('core/store')->load($product->getStoreId());
109
+ // Prepare attributes
110
+ foreach ($attributes as $attribute) {
111
+ if ($attribute['type'] == 'id') {
112
+ $value = $product->getId();
113
+ } elseif ($attribute['type'] == 'product_attribute') {
114
+ // if this is a normal product attribute, retrieve it's frontend representation
115
+ if ($product->getData($attribute['magento']) === null) {
116
+ $value = '';
117
+ } else {
118
+ /** @var $attributeObj Mage_Catalog_Model_Resource_Eav_Attribute */
119
+ $attributeObj = $product->getResource()->getAttribute($attribute['magento']);
120
+ $value = $attributeObj->getFrontend()->getValue($product);
121
+ }
122
+ } elseif ($attribute['type'] == 'computed') {
123
+ // if this is a computed attribute, handle it depending on its code
124
+ switch ($attribute['magento']) {
125
+ case 'price':
126
+ $price = Mage::helper('tax')->getPrice($product, $product->getFinalPrice(), true);
127
+ $value = sprintf('%.2f', (float)($store->convertPrice($price, false, false)));
128
+ $value .= ' '.Mage::getStoreConfig('currency/options/default', $product->getStoreId());
129
+ break;
130
+
131
+ case 'product_link':
132
+ $value = $product->getProductUrl();
133
+ break;
134
+
135
+ case 'image_url':
136
+ $value = (string)Mage::helper('catalog/image')->init($product, 'image');
137
+ break;
138
+
139
+ case 'availability_google':
140
+ $value = $product->isSaleable() ? 'in stock' : 'out of stock';
141
+ break;
142
+
143
+ default:
144
+ $value = '';
145
+ }
146
+ }
147
+ $product_data[$attribute['feed']] = $value;
148
+ }
149
+
150
+ $price = floatval($product_data['price']);
151
+ // Price is required
152
+ if (empty($price)) {
153
+ return;
154
+ }
155
+
156
+ // If manufacturer not set use mpn === sku
157
+ if ($product_data['brand'] === '') {
158
+ unset($product_data['brand']);
159
+ $product_data['mpn'] = $product_data['id'];
160
+ }
161
+
162
+ // All products are new
163
+ $product_data['condition'] = 'new';
164
+
165
+ foreach ($product_data as $feedTag => $value) {
166
+ $safeString = null;
167
+ switch ($feedTag) {
168
+ case 'link':
169
+ $safeString = $value;
170
+ break;
171
+
172
+ case 'price':
173
+ $safeString = sprintf('%.2f', $store->convertPrice($value, false, false)).' '.Mage::getStoreConfig('currency/options/default', $store->getStoreId());
174
+ break;
175
+
176
+ case 'sale_price':
177
+ if ($value && $value != '') {
178
+ $safeString = sprintf('%.2f', $store->convertPrice($value, false, false)).' '.Mage::getStoreConfig('currency/options/default', $store->getStoreId());
179
+ }
180
+ break;
181
+
182
+ case 'image_link':
183
+ if ($value == 'no_selection') {
184
+ $safeString = '';
185
+ } else {
186
+ $safeString = $value;
187
+ // Check if the link is a full URL
188
+ if (substr($value, 0, 5) != 'http:' && substr($value, 0, 6) != 'https:') {
189
+ $safeString = $store->getBaseUrl('media') . 'catalog/product' . $value;
190
+ }
191
+ }
192
+ break;
193
+
194
+ default:
195
+ $safeString = $value;
196
+ break;
197
+ }
198
+ if ($safeString !== null) {
199
+ $product_data[$feedTag] = $safeString;
200
+ }
201
+ }
202
+ $this->_products[] = $product_data;
203
+ }
204
+ }
app/code/local/Cartsguru/Model/Observer.php CHANGED
@@ -21,13 +21,13 @@ class Cartsguru_Model_Observer
21
22
$result = $webservice->checkAddress();
23
24
- if ($result == false){
25
return $session->addError('Error check connection');
26
}
27
28
$session->addSuccess('Connection checked');
29
30
- if ($result->isNew){
31
$webservice->sendHistory();
32
}
33
@@ -58,9 +58,9 @@ class Cartsguru_Model_Observer
58
59
Mage::log('Observer: Start handle quoteSaveBefore for ' . $quote->getId(), null, Cartsguru_Model_Observer::LOG_FILE);
60
61
- if (!$quote->getData('cartsguru_token')){
62
$tools = Mage::helper('cartsguru/tools');
63
- $quote->setData('cartsguru_token',$tools::generateUUID());
64
}
65
66
Mage::log('Observer: End handle quoteSaveBefore for ' . $quote->getId(), null, Cartsguru_Model_Observer::LOG_FILE);
@@ -85,7 +85,8 @@ class Cartsguru_Model_Observer
85
* Handle order updated, and push it to carts guru
86
* @param $observer
87
*/
88
- public function orderSaveAfter($observer) {
89
/* @var Mage_Sales_Model_Order $order */
90
$order = $observer->getOrder();
91
@@ -97,14 +98,15 @@ class Cartsguru_Model_Observer
97
Mage::getModel('cartsguru/webservice')->sendOrder($order);
98
}
99
100
- Mage::log('Observer: End handle orderSaveAfter for ' . $order->getIncrementId(), null, Cartsguru_Model_Observer::LOG_FILE);
101
}
102
103
/**
104
* Saves added product data to fire FB pixel
105
* @param $observer
106
*/
107
- public function checkoutCartAdd($observer) {
108
$helper = Mage::helper('cartsguru');
109
$facebook_enabled = $helper->getStoreConfig("feature_facebook");
110
if ($facebook_enabled) {
@@ -133,7 +135,8 @@ class Cartsguru_Model_Observer
133
* Check if we have source query param ans set the cookie
134
* @param $observer
135
*/
136
- public function checkSource($observer) {
137
$utm_source = Mage::app()->getRequest()->getParam('utm_source');
138
$utm_campaign = Mage::app()->getRequest()->getParam('utm_campaign');
139
if ($utm_source && $utm_campaign) {
21
22
$result = $webservice->checkAddress();
23
24
+ if ($result == false) {
25
return $session->addError('Error check connection');
26
}
27
28
$session->addSuccess('Connection checked');
29
30
+ if ($result->isNew) {
31
$webservice->sendHistory();
32
}
33
58
59
Mage::log('Observer: Start handle quoteSaveBefore for ' . $quote->getId(), null, Cartsguru_Model_Observer::LOG_FILE);
60
61
+ if (!$quote->getData('cartsguru_token')) {
62
$tools = Mage::helper('cartsguru/tools');
63
+ $quote->setData('cartsguru_token', $tools::generateUUID());
64
}
65
66
Mage::log('Observer: End handle quoteSaveBefore for ' . $quote->getId(), null, Cartsguru_Model_Observer::LOG_FILE);
85
* Handle order updated, and push it to carts guru
86
* @param $observer
87
*/
88
+ public function orderSaveAfter($observer)
89
+ {
90
/* @var Mage_Sales_Model_Order $order */
91
$order = $observer->getOrder();
92
98
Mage::getModel('cartsguru/webservice')->sendOrder($order);
99
}
100
101
+ Mage::log('Observer: End handle orderSaveAfter for ' . $order->getIncrementId(), null, Cartsguru_Model_Observer::LOG_FILE);
102
}
103
104
/**
105
* Saves added product data to fire FB pixel
106
* @param $observer
107
*/
108
+ public function checkoutCartAdd($observer)
109
+ {
110
$helper = Mage::helper('cartsguru');
111
$facebook_enabled = $helper->getStoreConfig("feature_facebook");
112
if ($facebook_enabled) {
135
* Check if we have source query param ans set the cookie
136
* @param $observer
137
*/
138
+ public function checkSource($observer)
139
+ {
140
$utm_source = Mage::app()->getRequest()->getParam('utm_source');
141
$utm_campaign = Mage::app()->getRequest()->getParam('utm_campaign');
142
if ($utm_source && $utm_campaign) {
app/code/local/Cartsguru/Model/Webservice.php CHANGED
@@ -16,10 +16,11 @@ class Cartsguru_Model_Webservice
16
const QUOTES_CACHE_TAG = 'cartsguru_carts';
17
const QUOTES_CACHE_TTL = 1800; // 30min in seconds
18
19
- const _CARTSGURU_VERSION_ = '1.3.3';
20
21
- public function isStoreConfigured($store = null){
22
- if (!$store){
23
$store = Mage::app()->getStore();
24
}
25
$helper = Mage::helper('cartsguru');
@@ -79,7 +80,8 @@ class Cartsguru_Model_Webservice
79
* @param $obj order or quote
80
* @return float
81
*/
82
- public function getTotalATI($items){
83
$totalATI = (float)0;
84
85
foreach ($items as $item) {
@@ -89,20 +91,20 @@ class Cartsguru_Model_Webservice
89
return $totalATI;
90
}
91
92
- protected function getProudctImageUrl($product){
93
- if ($product->getImage() == 'no_selection' || !$product->getImage()){
94
return $imageUrl = $this->notEmpty(null);
95
}
96
97
$image = null;
98
99
//Handle 1.9.0 feature
100
- if (version_compare(Mage::getVersion(), '1.9.0', '>=')){
101
//Check if need resize or not
102
- if (Mage::getStoreConfig(Mage_Catalog_Helper_Image::XML_NODE_PRODUCT_SMALL_IMAGE_WIDTH) < 120){
103
- $image = Mage::helper('catalog/image')->init($product, 'image')->resize(120,120);
104
- }
105
- else {
106
$image = Mage::helper('catalog/image')->init($product, 'small_image');
107
}
108
} else {
@@ -113,7 +115,7 @@ class Cartsguru_Model_Webservice
113
$image = (string)$image;
114
115
//Work with the normal image if no small image available
116
- if (empty($image)){
117
$image = Mage::helper('catalog/image')->init($product, 'image');
118
$image = (string)$image;
119
}
@@ -126,7 +128,8 @@ class Cartsguru_Model_Webservice
126
* @param $obj order or quote
127
* @return array
128
*/
129
- public function getItemsData($obj){
130
$cache = Mage::app()->getCache();
131
$items = array();
132
foreach ($obj->getAllVisibleItems() as $item) {
@@ -148,8 +151,7 @@ class Cartsguru_Model_Webservice
148
149
$tags = array(Cartsguru_Model_Webservice::CACHE_TAG, Cartsguru_Model_Webservice::PRODUCT_CACHE_TAG);
150
$cache->save(json_encode($productData), $cacheId, $tags, Cartsguru_Model_Webservice::PRODUCT_CACHE_TTL);
151
- }
152
- else {
153
$productData = json_decode($productData, true);
154
}
155
@@ -179,7 +181,7 @@ class Cartsguru_Model_Webservice
179
{
180
$helper = Mage::helper('cartsguru');
181
//Order must have a status
182
- if (!$order->getStatus()){
183
return null;
184
}
185
@@ -234,7 +236,7 @@ class Cartsguru_Model_Webservice
234
$store = Mage::app()->getStore($order->getStoreId());
235
236
//Check is well configured
237
- if (!$this->isStoreConfigured($store)){
238
return;
239
}
240
@@ -260,8 +262,9 @@ class Cartsguru_Model_Webservice
260
* @param $gender
261
* @return string
262
*/
263
- public function genderMapping($gender){
264
- switch((int)$gender){
265
case 1:
266
return 'mister';
267
case 2:
@@ -304,10 +307,10 @@ class Cartsguru_Model_Webservice
304
}
305
306
if ($address) {
307
- if (!$phone){
308
$phone = $address->getTelephone();
309
}
310
- if (!$country){
311
$country = $address->getCountryId();
312
}
313
}
@@ -315,10 +318,10 @@ class Cartsguru_Model_Webservice
315
if ($customer) {
316
$customerAddress = $customer->getDefaultBillingAddress();
317
318
- if ($customerAddress && !$phone){
319
$phone = $customerAddress->getTelephone();
320
}
321
- if ($customerAddress && !$country){
322
$country = $customerAddress->getCountryId();
323
}
324
}
@@ -373,13 +376,13 @@ class Cartsguru_Model_Webservice
373
$store = Mage::app()->getStore($quote->getStoreId());
374
375
//Check is well configured
376
- if (!$this->isStoreConfigured($store)){
377
return;
378
}
379
380
//Get data and continue only if exist
381
$cartData = $this->getAbadonnedCartData($quote, $store);
382
- if (!$cartData){
383
return;
384
}
385
@@ -469,7 +472,7 @@ class Cartsguru_Model_Webservice
469
public function sendAccount($customer)
470
{
471
//Check is well configured
472
- if (!$this->isStoreConfigured()){
473
return;
474
}
475
@@ -495,7 +498,7 @@ class Cartsguru_Model_Webservice
495
496
$response = $this->doPostRequest($requestUrl, $fields, $store, true);
497
498
- if (!$response || $response->getStatus() != 200){
499
return false;
500
}
501
@@ -514,12 +517,13 @@ class Cartsguru_Model_Webservice
514
$store = Mage::app()->getWebsite(true)->getDefaultGroup()->getDefaultStore();
515
516
$lastOrder = $this->sendLastOrders($store);
517
- if ($lastOrder){
518
$this->sendLastQuotes($store, $lastOrder->getCreatedAt());
519
}
520
}
521
522
- private function sendLastOrders($store){
523
$orders = array();
524
$last = null;
525
$items = Mage::getModel('sales/order')
@@ -528,7 +532,7 @@ class Cartsguru_Model_Webservice
528
->setPageSize($this->historySize)
529
->addFieldToFilter('store_id', $store->getStoreId());
530
531
- foreach($items as $item){
532
$order = Mage::getModel("sales/order")->load($item->getId());
533
$last = $order;
534
@@ -536,20 +540,21 @@ class Cartsguru_Model_Webservice
536
$orderData = $this->getOrderData($order, $store);
537
538
//Append only if we get it
539
- if (!empty($orderData)){
540
$orders[] = $orderData;
541
}
542
}
543
544
//Push orders to api
545
- if (!empty($orders)){
546
$this->doPostRequest('/import/orders', $orders, $store);
547
}
548
549
return $last;
550
}
551
552
- private function sendLastQuotes($store, $since){
553
$quotes = array();
554
$last = null;
555
$items = Mage::getModel('sales/quote')
@@ -558,23 +563,23 @@ class Cartsguru_Model_Webservice
558
->addFieldToFilter('store_id', $store->getStoreId())
559
->addFieldToFilter('created_at', array('gt' => $since));
560
561
- foreach($items as $item){
562
$quote = Mage::getModel("sales/quote")->loadByIdWithoutStore($item->getId());
563
$last = $quote;
564
565
- if ($quote){
566
//Get quote data
567
$quoteData = $this->getAbadonnedCartData($quote, $store);
568
569
//Append only if we get it
570
- if ($quoteData){
571
$quotes[] = $quoteData;
572
}
573
}
574
}
575
576
//Push quotes to api
577
- if (!empty($quotes)){
578
$this->doPostRequest('/import/carts', $quotes, $store);
579
}
580
@@ -605,9 +610,9 @@ class Cartsguru_Model_Webservice
605
$client->setUri($url);
606
$client->setRawData(json_encode($fields), 'application/json');
607
$response = $client->request(Zend_Http_Client::POST);
608
- } catch (Exception $e) {}
609
610
return $response;
611
}
612
-
613
}
16
const QUOTES_CACHE_TAG = 'cartsguru_carts';
17
const QUOTES_CACHE_TTL = 1800; // 30min in seconds
18
19
+ const _CARTSGURU_VERSION_ = '1.3.4';
20
21
+ public function isStoreConfigured($store = null)
22
+ {
23
+ if (!$store) {
24
$store = Mage::app()->getStore();
25
}
26
$helper = Mage::helper('cartsguru');
80
* @param $obj order or quote
81
* @return float
82
*/
83
+ public function getTotalATI($items)
84
+ {
85
$totalATI = (float)0;
86
87
foreach ($items as $item) {
91
return $totalATI;
92
}
93
94
+ protected function getProudctImageUrl($product)
95
+ {
96
+ if ($product->getImage() == 'no_selection' || !$product->getImage()) {
97
return $imageUrl = $this->notEmpty(null);
98
}
99
100
$image = null;
101
102
//Handle 1.9.0 feature
103
+ if (version_compare(Mage::getVersion(), '1.9.0', '>=')) {
104
//Check if need resize or not
105
+ if (Mage::getStoreConfig(Mage_Catalog_Helper_Image::XML_NODE_PRODUCT_SMALL_IMAGE_WIDTH) < 120) {
106
+ $image = Mage::helper('catalog/image')->init($product, 'image')->resize(120, 120);
107
+ } else {
108
$image = Mage::helper('catalog/image')->init($product, 'small_image');
109
}
110
} else {
115
$image = (string)$image;
116
117
//Work with the normal image if no small image available
118
+ if (empty($image)) {
119
$image = Mage::helper('catalog/image')->init($product, 'image');
120
$image = (string)$image;
121
}
128
* @param $obj order or quote
129
* @return array
130
*/
131
+ public function getItemsData($obj)
132
+ {
133
$cache = Mage::app()->getCache();
134
$items = array();
135
foreach ($obj->getAllVisibleItems() as $item) {
151
152
$tags = array(Cartsguru_Model_Webservice::CACHE_TAG, Cartsguru_Model_Webservice::PRODUCT_CACHE_TAG);
153
$cache->save(json_encode($productData), $cacheId, $tags, Cartsguru_Model_Webservice::PRODUCT_CACHE_TTL);
154
+ } else {
155
$productData = json_decode($productData, true);
156
}
157
181
{
182
$helper = Mage::helper('cartsguru');
183
//Order must have a status
184
+ if (!$order->getStatus()) {
185
return null;
186
}
187
236
$store = Mage::app()->getStore($order->getStoreId());
237
238
//Check is well configured
239
+ if (!$this->isStoreConfigured($store)) {
240
return;
241
}
242
262
* @param $gender
263
* @return string
264
*/
265
+ public function genderMapping($gender)
266
+ {
267
+ switch ((int)$gender) {
268
case 1:
269
return 'mister';
270
case 2:
307
}
308
309
if ($address) {
310
+ if (!$phone) {
311
$phone = $address->getTelephone();
312
}
313
+ if (!$country) {
314
$country = $address->getCountryId();
315
}
316
}
318
if ($customer) {
319
$customerAddress = $customer->getDefaultBillingAddress();
320
321
+ if ($customerAddress && !$phone) {
322
$phone = $customerAddress->getTelephone();
323
}
324
+ if ($customerAddress && !$country) {
325
$country = $customerAddress->getCountryId();
326
}
327
}
376
$store = Mage::app()->getStore($quote->getStoreId());
377
378
//Check is well configured
379
+ if (!$this->isStoreConfigured($store)) {
380
return;
381
}
382
383
//Get data and continue only if exist
384
$cartData = $this->getAbadonnedCartData($quote, $store);
385
+ if (!$cartData) {
386
return;
387
}
388
472
public function sendAccount($customer)
473
{
474
//Check is well configured
475
+ if (!$this->isStoreConfigured()) {
476
return;
477
}
478
498
499
$response = $this->doPostRequest($requestUrl, $fields, $store, true);
500
501
+ if (!$response || $response->getStatus() != 200) {
502
return false;
503
}
504
517
$store = Mage::app()->getWebsite(true)->getDefaultGroup()->getDefaultStore();
518
519
$lastOrder = $this->sendLastOrders($store);
520
+ if ($lastOrder) {
521
$this->sendLastQuotes($store, $lastOrder->getCreatedAt());
522
}
523
}
524
525
+ private function sendLastOrders($store)
526
+ {
527
$orders = array();
528
$last = null;
529
$items = Mage::getModel('sales/order')
532
->setPageSize($this->historySize)
533
->addFieldToFilter('store_id', $store->getStoreId());
534
535
+ foreach ($items as $item) {
536
$order = Mage::getModel("sales/order")->load($item->getId());
537
$last = $order;
538
540
$orderData = $this->getOrderData($order, $store);
541
542
//Append only if we get it
543
+ if (!empty($orderData)) {
544
$orders[] = $orderData;
545
}
546
}
547
548
//Push orders to api
549
+ if (!empty($orders)) {
550
$this->doPostRequest('/import/orders', $orders, $store);
551
}
552
553
return $last;
554
}
555
556
+ private function sendLastQuotes($store, $since)
557
+ {
558
$quotes = array();
559
$last = null;
560
$items = Mage::getModel('sales/quote')
563
->addFieldToFilter('store_id', $store->getStoreId())
564
->addFieldToFilter('created_at', array('gt' => $since));
565
566
+ foreach ($items as $item) {
567
$quote = Mage::getModel("sales/quote")->loadByIdWithoutStore($item->getId());
568
$last = $quote;
569
570
+ if ($quote) {
571
//Get quote data
572
$quoteData = $this->getAbadonnedCartData($quote, $store);
573
574
//Append only if we get it
575
+ if ($quoteData) {
576
$quotes[] = $quoteData;
577
}
578
}
579
}
580
581
//Push quotes to api
582
+ if (!empty($quotes)) {
583
$this->doPostRequest('/import/carts', $quotes, $store);
584
}
585
610
$client->setUri($url);
611
$client->setRawData(json_encode($fields), 'application/json');
612
$response = $client->request(Zend_Http_Client::POST);
613
+ } catch (Exception $e) {
614
+ }
615
616
return $response;
617
}
618
}
app/code/local/Cartsguru/controllers/AdminController.php CHANGED
@@ -1,46 +1,47 @@
1
- <?php
2
-
3
- class Cartsguru_AdminController extends Mage_Core_Controller_Front_Action {
4
-
5
- public function indexAction() {
6
- $helper = Mage::helper('cartsguru');
7
- $params = $this->getRequest()->getParams();
8
- $auth_key = $helper->getStoreConfig('auth');
9
- // Stop if no enoguth params
10
- if (!isset($params['cartsguru_admin_action']) || !isset($params['cartsguru_auth_key']) || $auth_key !== $params['cartsguru_auth_key']){
11
- die;
12
- }
13
- // Toggle features action
14
- if ($params['cartsguru_admin_action'] === 'toggleFeatures' && isset($params['cartsguru_admin_data'])) {
15
- $data = json_decode($params['cartsguru_admin_data'], true);
16
- if (is_array($data)) {
17
- // Enable facebook
18
- if ($data['facebook'] && $data['catalogId'] && $data['pixel']) {
19
- // Save facebook pixel
20
- $helper->setStoreConfig('feature_facebook', true);
21
- $helper->setStoreConfig('facebook_pixel', $data['pixel']);
22
- $helper->setStoreConfig('facebook_catalogId', $data['catalogId']);
23
- // return catalogUrl
24
- header('Content-Type: application/json; charset=utf-8');
25
- echo json_encode(array(
26
- 'catalogUrl' => Mage::app()->getStore($store)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'cartsguru/catalog'
27
- ));
28
- } elseif ($data['facebook'] == false) {
29
- $helper->setStoreConfig('feature_facebook', false);
30
- }
31
- }
32
- }
33
- // Get config
34
- if ($params['cartsguru_admin_action'] === 'displayConfig') {
35
- header('Content-Type: application/json; charset=utf-8');
36
- echo json_encode(array(
37
- 'CARTSG_SITE_ID' => $helper->getStoreConfig('siteid'),
38
- 'CARTSG_FEATURE_FB' => $helper->getStoreConfig('feature_facebook'),
39
- 'CARTSG_FB_PIXEL' => $helper->getStoreConfig('facebook_pixel'),
40
- 'CARTSG_FB_CATALOGID' => $helper->getStoreConfig('facebook_catalogId'),
41
- 'PLUGIN_VERSION'=> (string) Mage::getConfig()->getNode()->modules->Cartsguru->version
42
- ));
43
- }
44
- die;
45
- }
46
- }
1
+ <?php
2
+
3
+ class Cartsguru_AdminController extends Mage_Core_Controller_Front_Action
4
+ {
5
+ public function indexAction()
6
+ {
7
+ $helper = Mage::helper('cartsguru');
8
+ $params = $this->getRequest()->getParams();
9
+ $auth_key = $helper->getStoreConfig('auth');
10
+ // Stop if no enoguth params
11
+ if (!isset($params['cartsguru_admin_action']) || !isset($params['cartsguru_auth_key']) || $auth_key !== $params['cartsguru_auth_key']) {
12
+ die;
13
+ }
14
+ // Toggle features action
15
+ if ($params['cartsguru_admin_action'] === 'toggleFeatures' && isset($params['cartsguru_admin_data'])) {
16
+ $data = json_decode($params['cartsguru_admin_data'], true);
17
+ if (is_array($data)) {
18
+ // Enable facebook
19
+ if ($data['facebook'] && $data['catalogId'] && $data['pixel']) {
20
+ // Save facebook pixel
21
+ $helper->setStoreConfig('feature_facebook', true);
22
+ $helper->setStoreConfig('facebook_pixel', $data['pixel']);
23
+ $helper->setStoreConfig('facebook_catalogId', $data['catalogId']);
24
+ // return catalogUrl
25
+ header('Content-Type: application/json; charset=utf-8');
26
+ echo json_encode(array(
27
+ 'catalogUrl' => Mage::app()->getStore($store)->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK) . 'cartsguru/catalog'
28
+ ));
29
+ } elseif ($data['facebook'] == false) {
30
+ $helper->setStoreConfig('feature_facebook', false);
31
+ }
32
+ }
33
+ }
34
+ // Get config
35
+ if ($params['cartsguru_admin_action'] === 'displayConfig') {
36
+ header('Content-Type: application/json; charset=utf-8');
37
+ echo json_encode(array(
38
+ 'CARTSG_SITE_ID' => $helper->getStoreConfig('siteid'),
39
+ 'CARTSG_FEATURE_FB' => $helper->getStoreConfig('feature_facebook'),
40
+ 'CARTSG_FB_PIXEL' => $helper->getStoreConfig('facebook_pixel'),
41
+ 'CARTSG_FB_CATALOGID' => $helper->getStoreConfig('facebook_catalogId'),
42
+ 'PLUGIN_VERSION'=> (string) Mage::getConfig()->getNode()->modules->Cartsguru->version
43
+ ));
44
+ }
45
+ die;
46
+ }
47
+ }
app/code/local/Cartsguru/controllers/CatalogController.php CHANGED
@@ -1,24 +1,24 @@
1
- <?php
2
-
3
- class Cartsguru_CatalogController extends Mage_Core_Controller_Front_Action {
4
-
5
- public function indexAction()
6
- {
7
- $helper = Mage::helper('cartsguru');
8
- $params = $this->getRequest()->getParams();
9
- $auth_key = $helper->getStoreConfig('auth');
10
- // Stop if not authenticated
11
- if (!isset($params['cartsguru_auth_key']) || $auth_key !== $params['cartsguru_auth_key']) {
12
- die;
13
- }
14
- // Get input values
15
- $offset = isset($params['cartsguru_catalog_offset']) ? $params['cartsguru_catalog_offset'] : 0;
16
- $limit = isset($params['cartsguru_catalog_limit']) ? $params['cartsguru_catalog_limit'] : 50;
17
-
18
- $store = Mage::app()->getStore();
19
- $catalog = Mage::getModel('cartsguru/catalog');
20
-
21
- $this->getResponse()->setHeader('Content-type', 'application/json');
22
- $this->getResponse()->setBody(json_encode($catalog->generateFeed($store, $offset, $limit)));
23
- }
24
- }
1
+ <?php
2
+
3
+ class Cartsguru_CatalogController extends Mage_Core_Controller_Front_Action
4
+ {
5
+ public function indexAction()
6
+ {
7
+ $helper = Mage::helper('cartsguru');
8
+ $params = $this->getRequest()->getParams();
9
+ $auth_key = $helper->getStoreConfig('auth');
10
+ // Stop if not authenticated
11
+ if (!isset($params['cartsguru_auth_key']) || $auth_key !== $params['cartsguru_auth_key']) {
12
+ die;
13
+ }
14
+ // Get input values
15
+ $offset = isset($params['cartsguru_catalog_offset']) ? $params['cartsguru_catalog_offset'] : 0;
16
+ $limit = isset($params['cartsguru_catalog_limit']) ? $params['cartsguru_catalog_limit'] : 50;
17
+
18
+ $store = Mage::app()->getStore();
19
+ $catalog = Mage::getModel('cartsguru/catalog');
20
+
21
+ $this->getResponse()->setHeader('Content-type', 'application/json');
22
+ $this->getResponse()->setBody(json_encode($catalog->generateFeed($store, $offset, $limit)));
23
+ }
24
+ }
app/code/local/Cartsguru/controllers/IndexController.php CHANGED
@@ -1,8 +1,9 @@
1
<?php
2
3
- class Cartsguru_IndexController extends Mage_Core_Controller_Front_Action {
4
-
5
- public function indexAction(){
6
echo 'Visit https://carts.guru';
7
}
8
}
1
<?php
2
3
+ class Cartsguru_IndexController extends Mage_Core_Controller_Front_Action
4
+ {
5
+ public function indexAction()
6
+ {
7
echo 'Visit https://carts.guru';
8
}
9
}
app/code/local/Cartsguru/controllers/RecovercartController.php CHANGED
@@ -1,18 +1,37 @@
1
<?php
2
3
- class Cartsguru_RecovercartController extends Mage_Core_Controller_Front_Action {
4
-
5
- private function redirectToCart() {
6
$url = Mage::helper('checkout/cart')->getCartUrl();
7
$this->getResponse()->setRedirect($url)->sendResponse();
8
}
9
10
- public function indexAction(){
11
// Get request params
12
$params = $this->getRequest()->getParams();
13
14
// Stop if no enoguth params
15
- if (!isset($params['cart_id']) || !isset($params['cart_token'])){
16
return $this->redirectToCart();
17
}
18
@@ -20,24 +39,23 @@ class Cartsguru_RecovercartController extends Mage_Core_Controller_Front_Action
20
$quote = Mage::getModel('sales/quote')->load($params['cart_id']);
21
22
// Stop if quote does not exist
23
- if (!$quote->getId()){
24
return $this->redirectToCart();
25
}
26
27
// Check quote token
28
$token = $quote->getData('cartsguru_token');
29
- if (!$token || $token != $params['cart_token']){
30
return $this->redirectToCart();
31
}
32
33
// Auto log customer if we can
34
- if ($quote->getCustomerId()){
35
//Gest customer
36
$customer = Mage::getModel('customer/customer')->load($quote->getCustomerId());
37
38
Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
39
- }
40
- else {
41
// Get current cart
42
$cart = Mage::getSingleton('checkout/cart');
43
@@ -46,7 +64,7 @@ class Cartsguru_RecovercartController extends Mage_Core_Controller_Front_Action
46
$found = false;
47
foreach ($quote->getAllItems() as $quoteItem) {
48
if ($quoteItem->compare($item)) {
49
- // $quoteItem->setQty($item->getQty());
50
$found = true;
51
break;
52
}
1
<?php
2
3
+ class Cartsguru_RecovercartController extends Mage_Core_Controller_Front_Action
4
+ {
5
+ private function redirectToCart()
6
+ {
7
$url = Mage::helper('checkout/cart')->getCartUrl();
8
+
9
+ //Keep params except cart_id & cart_token
10
+ $queryParams = array();
11
+ $params = $this->getRequest()->getParams();
12
+ foreach ($params as $key => $value) {
13
+ if ($key === 'cart_token' || $key === 'cart_id') {
14
+ continue;
15
+ }
16
+ $queryParams[] = $key . '=' . $value;
17
+ }
18
+
19
+ //Concats query
20
+ if (!empty($queryParams)) {
21
+ $url .= strpos($url, '?') !== false ? '&' : '?';
22
+ $url .= implode('&', $queryParams);
23
+ }
24
+
25
$this->getResponse()->setRedirect($url)->sendResponse();
26
}
27
28
+ public function indexAction()
29
+ {
30
// Get request params
31
$params = $this->getRequest()->getParams();
32
33
// Stop if no enoguth params
34
+ if (!isset($params['cart_id']) || !isset($params['cart_token'])) {
35
return $this->redirectToCart();
36
}
37
39
$quote = Mage::getModel('sales/quote')->load($params['cart_id']);
40
41
// Stop if quote does not exist
42
+ if (!$quote->getId()) {
43
return $this->redirectToCart();
44
}
45
46
// Check quote token
47
$token = $quote->getData('cartsguru_token');
48
+ if (!$token || $token != $params['cart_token']) {
49
return $this->redirectToCart();
50
}
51
52
// Auto log customer if we can
53
+ if ($quote->getCustomerId()) {
54
//Gest customer
55
$customer = Mage::getModel('customer/customer')->load($quote->getCustomerId());
56
57
Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
58
+ } else {
59
// Get current cart
60
$cart = Mage::getSingleton('checkout/cart');
61
64
$found = false;
65
foreach ($quote->getAllItems() as $quoteItem) {
66
if ($quoteItem->compare($item)) {
67
+ // $quoteItem->setQty($item->getQty());
68
$found = true;
69
break;
70
}
app/code/local/Cartsguru/controllers/SaveaccountController.php CHANGED
@@ -1,35 +1,36 @@
1
- <?php
2
-
3
- class Cartsguru_SaveaccountController extends Mage_Core_Controller_Front_Action {
4
-
5
- public function indexAction() {
6
- // Get request params
7
- $params = $this->getRequest()->getParams();
8
-
9
- // Stop if no email
10
- if (!isset($params['email'])){
11
- return;
12
- }
13
- // Post the data
14
- $quote = Mage::getModel('checkout/cart')->getQuote();
15
- $quote->setCustomerEmail($params['email']);
16
- if (isset($params['firstname'])){
17
- $quote->setCustomerFirstname($params['firstname']);
18
- }
19
- if (isset($params['lastname'])){
20
- $quote->setCustomerLastname($params['lastname']);
21
- }
22
- $address = $quote->getBillingAddress();
23
- if ($address) {
24
- if (isset($params['telephone'])) {
25
- $address->setTelephone($params['telephone']);
26
- }
27
- if (isset($params['country'])) {
28
- $address->setCountryId($params['country']);
29
- }
30
- $quote->setBillingAddress($address);
31
- }
32
- $webservice = Mage::getModel('cartsguru/webservice');
33
- $webservice->sendAbadonnedCart($quote);
34
- }
35
- }
1
+ <?php
2
+
3
+ class Cartsguru_SaveaccountController extends Mage_Core_Controller_Front_Action
4
+ {
5
+ public function indexAction()
6
+ {
7
+ // Get request params
8
+ $params = $this->getRequest()->getParams();
9
+
10
+ // Stop if no email
11
+ if (!isset($params['email'])) {
12
+ return;
13
+ }
14
+ // Post the data
15
+ $quote = Mage::getModel('checkout/cart')->getQuote();
16
+ $quote->setCustomerEmail($params['email']);
17
+ if (isset($params['firstname'])) {
18
+ $quote->setCustomerFirstname($params['firstname']);
19
+ }
20
+ if (isset($params['lastname'])) {
21
+ $quote->setCustomerLastname($params['lastname']);
22
+ }
23
+ $address = $quote->getBillingAddress();
24
+ if ($address) {
25
+ if (isset($params['telephone'])) {
26
+ $address->setTelephone($params['telephone']);
27
+ }
28
+ if (isset($params['country'])) {
29
+ $address->setCountryId($params['country']);
30
+ }
31
+ $quote->setBillingAddress($address);
32
+ }
33
+ $webservice = Mage::getModel('cartsguru/webservice');
34
+ $webservice->sendAbadonnedCart($quote);
35
+ }
36
+ }
app/code/local/Cartsguru/etc/config.xml CHANGED
@@ -3,7 +3,7 @@
3
<!-- plugin name -->
4
<modules>
5
<Cartsguru>
6
- <version>1.3.3</version>
7
</Cartsguru>
8
</modules>
9
<global>
3
<!-- plugin name -->
4
<modules>
5
<Cartsguru>
6
+ <version>1.3.4</version>
7
</Cartsguru>
8
</modules>
9
<global>
app/code/local/Cartsguru/sql/cartsguru_setup/install-1.0.0.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.0.0-1.0.1.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.0.1-1.0.2.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.0.2-1.1.0.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.0-1.1.1.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.1-1.1.2.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.2-1.1.3.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.3-1.1.4 .php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.4-1.1.5.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.1.5-1.2.0.php CHANGED
@@ -8,4 +8,4 @@ $installer->startSetup();
8
$connection = $installer->getConnection();
9
$connection->addColumn($this->getTable('sales/quote'), 'cartsguru_token', 'varchar(255) NOT NULL');
10
11
- $installer->endSetup();
8
$connection = $installer->getConnection();
9
$connection->addColumn($this->getTable('sales/quote'), 'cartsguru_token', 'varchar(255) NOT NULL');
10
11
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.0-1.2.1.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.1-1.2.2.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.14-1.2.15.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
- /* @var $installer Mage_Core_Model_Resource_Setup */
3
- $installer = $this;
4
-
5
- $installer->startSetup();
6
- $installer->endSetup();
1
+ <?php
2
+ /* @var $installer Mage_Core_Model_Resource_Setup */
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.15-1.2.16.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
- /* @var $installer Mage_Core_Model_Resource_Setup */
3
- $installer = $this;
4
-
5
- $installer->startSetup();
6
- $installer->endSetup();
1
+ <?php
2
+ /* @var $installer Mage_Core_Model_Resource_Setup */
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.16-1.3.0.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
- /* @var $installer Mage_Core_Model_Resource_Setup */
3
- $installer = $this;
4
-
5
- $installer->startSetup();
6
- $installer->endSetup();
1
+ <?php
2
+ /* @var $installer Mage_Core_Model_Resource_Setup */
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.2-1.2.3.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.3-1.2.4.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.4-1.2.5.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.5-1.2.6.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.6-1.2.7.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.7-1.2.8.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.2.8-1.2.9.php CHANGED
@@ -3,4 +3,4 @@
3
$installer = $this;
4
5
$installer->startSetup();
6
- $installer->endSetup();
3
$installer = $this;
4
5
$installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.3.0-1.3.1.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
- /* @var $installer Mage_Core_Model_Resource_Setup */
3
- $installer = $this;
4
-
5
- $installer->startSetup();
6
- $installer->endSetup();
1
+ <?php
2
+ /* @var $installer Mage_Core_Model_Resource_Setup */
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.3.1-1.3.2.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
- /* @var $installer Mage_Core_Model_Resource_Setup */
3
- $installer = $this;
4
-
5
- $installer->startSetup();
6
- $installer->endSetup();
1
+ <?php
2
+ /* @var $installer Mage_Core_Model_Resource_Setup */
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.3.2-1.3.3.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
- /* @var $installer Mage_Core_Model_Resource_Setup */
3
- $installer = $this;
4
-
5
- $installer->startSetup();
6
- $installer->endSetup();
1
+ <?php
2
+ /* @var $installer Mage_Core_Model_Resource_Setup */
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->endSetup();
app/code/local/Cartsguru/sql/cartsguru_setup/upgrade-1.3.3-1.3.4.php ADDED
@@ -0,0 +1,6 @@
1
+ <?php
2
+ /* @var $installer Mage_Core_Model_Resource_Setup */
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->endSetup();
package.xml CHANGED
@@ -1,7 +1,7 @@
1
<?xml version="1.0"?>
2
<package>
3
<name>cartsguru</name>
4
- <version>1.3.3</version>
5
<stability>stable</stability>
6
<license uri="http://opensource.org/licenses/gpl-license.php">GPL</license>
7
<channel>community</channel>
@@ -16,13 +16,11 @@ Effortlessly reduce the number of abandoned shopping carts by automating telepho
16
&#xD;
17
- SMS Callback &amp; Push SMS&#xD;
18
Send to your prospective customers having abandoned a cart, an SMS suggesting a free call back from your customer relations service, a straightforward SMS reminder or an SMS offering a personalized discount</description>
19
- <notes>- New catalog query&#xD;
20
- - Fix multistore issues&#xD;
21
- - Correct customer group when not logged in</notes>
22
<authors><author><name>Maxime Pruvost</name><user>cgmaximepruvost</user><email>maxime@carts.guru</email></author></authors>
23
- <date>2017-01-27</date>
24
- <time>16:39:37</time>
25
- <contents><target name="magelocal"><dir name="Cartsguru"><dir name="Block"><file name="Pixel.php" hash="563040d205bc6df655eab430e11520e1"/></dir><dir name="Helper"><file name="Data.php" hash="c825db75bd11a56fedfde22902f4b460"/><file name="Tools.php" hash="e2f56c3387eb0b0650aa5f49f8207618"/></dir><dir name="Model"><file name="Catalog.php" hash="56e89f13ea6c6100aea153012a49a4ae"/><file name="Observer.php" hash="9415fc8971636a4ca7c01ee9d9b2445d"/><file name="Webservice.php" hash="e1155455f7e1ee141e2c8caf95ff8027"/></dir><dir name="controllers"><file name="AdminController.php" hash="0de2c651976d77601e020c3d14a119a3"/><file name="CatalogController.php" hash="97066bb7b960b548e45941875f2a477c"/><file name="IndexController.php" hash="21147a5de4f498b13e9f402100a868e9"/><file name="RecovercartController.php" hash="4b0d7b3c0d18f5c451932caee9daac5b"/><file name="SaveaccountController.php" hash="6b490eca17f516a4f95bba9d4c45d30b"/></dir><dir name="etc"><file name="config.xml" hash="da7e37d118c609baaea24f1140bf3db8"/><file name="system.xml" hash="cb0fbf86d2be47dbd719739ee79c4cba"/></dir><dir name="sql"><dir name="cartsguru_setup"><file name="install-1.0.0.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.0.0-1.0.1.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.0.1-1.0.2.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.0.2-1.1.0.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.1.0-1.1.1.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.1.1-1.1.2.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.1.2-1.1.3.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.1.3-1.1.4 .php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.1.4-1.1.5.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.1.5-1.2.0.php" hash="066c5cfb9870c04737cba2d2edb30a40"/><file name="upgrade-1.2.0-1.2.1.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.1-1.2.2.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.10-1.2.11.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.11-1.2.12.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.12-1.2.13.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.13-1.2.14.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.14-1.2.15.php" hash="c96e44a4737e1d8b0f4915c55a67c048"/><file name="upgrade-1.2.15-1.2.16.php" hash="c96e44a4737e1d8b0f4915c55a67c048"/><file name="upgrade-1.2.16-1.3.0.php" hash="c96e44a4737e1d8b0f4915c55a67c048"/><file name="upgrade-1.2.2-1.2.3.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.3-1.2.4.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.4-1.2.5.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.5-1.2.6.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.6-1.2.7.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.7-1.2.8.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.8-1.2.9.php" hash="381716ae5001678f8bcc6680bad68015"/><file name="upgrade-1.2.9-1.2.10.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.3.0-1.3.1.php" hash="c96e44a4737e1d8b0f4915c55a67c048"/><file name="upgrade-1.3.1-1.3.2.php" hash="c96e44a4737e1d8b0f4915c55a67c048"/><file name="upgrade-1.3.2-1.3.3.php" hash="c96e44a4737e1d8b0f4915c55a67c048"/></dir></dir></dir></target><target name="magelocale"><dir name="fr_FR"><file name="CartsGuru.csv" hash="b6d51893c33ddef1d53372d3a23b036c"/></dir><dir name="en_US"><file name="CartsGuru.csv" hash="921cb4133db47471456759443bb269f5"/></dir></target><target name="mageetc"><dir name="modules"><file name="Cartsguru.xml" hash="32bfa7d63b1a5b6b8f7977bf31af4e28"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="cartsguru.xml" hash="a886b0c3b06fdc08d1602c3f1fa0eff0"/></dir><dir name="template"><dir name="cartsguru"><dir name="checkout"><file name="purchase.phtml" hash="1035c7fed71153aa4c9f5e2d765deb7a"/></dir><file name="pixel.phtml" hash="58cbe4af75828b12325251cb4cf1d594"/><dir name="product"><file name="view.phtml" hash="9ab2487a583615c61e85a96ee0795ad3"/></dir></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="cartsguru"><file name="checkout.js" hash="f80f26b465eac6f702e87e05687c4bdd"/></dir></dir></target></contents>
26
<compatible/>
27
<dependencies><required><php><min>5.3.0</min><max>7.1.0</max></php></required></dependencies>
28
</package>
1
<?xml version="1.0"?>
2
<package>
3
<name>cartsguru</name>
4
+ <version>1.3.4</version>
5
<stability>stable</stability>
6
<license uri="http://opensource.org/licenses/gpl-license.php">GPL</license>
7
<channel>community</channel>
16
&#xD;
17
- SMS Callback &amp; Push SMS&#xD;
18
Send to your prospective customers having abandoned a cart, an SMS suggesting a free call back from your customer relations service, a straightforward SMS reminder or an SMS offering a personalized discount</description>
19
+ <notes>- Improve redirect to cart on recover</notes>
20
<authors><author><name>Maxime Pruvost</name><user>cgmaximepruvost</user><email>maxime@carts.guru</email></author></authors>
21
+ <date>2017-04-28</date>
22
+ <time>09:33:27</time>
23
+ <contents><target name="magelocal"><dir name="Cartsguru"><dir name="Block"><file name="Pixel.php" hash="8ea68eb970f1ed7f91060980e74422ee"/></dir><dir name="Helper"><file name="Data.php" hash="373fe1f83d1cfa5b18a3b2f36bd1d10b"/><file name="Tools.php" hash="27ebd500bc026f43fab3088242e68eb8"/></dir><dir name="Model"><file name="Catalog.php" hash="c20f73f2d595e6047d0649cc26b4c152"/><file name="Observer.php" hash="24b02ee36824d72c3b4d48a98053bfe0"/><file name="Webservice.php" hash="69b6cd6620faa792b26d07073f4a7fd3"/></dir><dir name="controllers"><file name="AdminController.php" hash="be9ac89db2a881bcfcc16b8a459cbcea"/><file name="CatalogController.php" hash="2d051f18a991124ea6334782e339b89c"/><file name="IndexController.php" hash="98cdc6eeca4d9162d4f447b5c3523f1e"/><file name="RecovercartController.php" hash="b247e0a3b828d6e1af39a0d8e213e2bf"/><file name="SaveaccountController.php" hash="a4afe20c0d1fbe33589da80f54dc3748"/></dir><dir name="etc"><file name="config.xml" hash="73b7b4d3f74bed77583fbdb9d45226ef"/><file name="system.xml" hash="cb0fbf86d2be47dbd719739ee79c4cba"/></dir><dir name="sql"><dir name="cartsguru_setup"><file name="install-1.0.0.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.0.0-1.0.1.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.0.1-1.0.2.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.0.2-1.1.0.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.1.0-1.1.1.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.1.1-1.1.2.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.1.2-1.1.3.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.1.3-1.1.4 .php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.1.4-1.1.5.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.1.5-1.2.0.php" hash="45dbf71b12ca70bd4d994296ba0624d6"/><file name="upgrade-1.2.0-1.2.1.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.1-1.2.2.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.10-1.2.11.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.11-1.2.12.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.12-1.2.13.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.13-1.2.14.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.14-1.2.15.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.15-1.2.16.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.16-1.3.0.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.2-1.2.3.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.3-1.2.4.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.4-1.2.5.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.5-1.2.6.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.6-1.2.7.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.7-1.2.8.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.8-1.2.9.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.2.9-1.2.10.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.3.0-1.3.1.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.3.1-1.3.2.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.3.2-1.3.3.php" hash="84cb92331d31afda4f06aca50dbd597e"/><file name="upgrade-1.3.3-1.3.4.php" hash="84cb92331d31afda4f06aca50dbd597e"/></dir></dir></dir></target><target name="magelocale"><dir name="fr_FR"><file name="CartsGuru.csv" hash="b6d51893c33ddef1d53372d3a23b036c"/></dir><dir name="en_US"><file name="CartsGuru.csv" hash="921cb4133db47471456759443bb269f5"/></dir></target><target name="mageetc"><dir name="modules"><file name="Cartsguru.xml" hash="32bfa7d63b1a5b6b8f7977bf31af4e28"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="cartsguru.xml" hash="a886b0c3b06fdc08d1602c3f1fa0eff0"/></dir><dir name="template"><dir name="cartsguru"><dir name="checkout"><file name="purchase.phtml" hash="1035c7fed71153aa4c9f5e2d765deb7a"/></dir><file name="pixel.phtml" hash="58cbe4af75828b12325251cb4cf1d594"/><dir name="product"><file name="view.phtml" hash="9ab2487a583615c61e85a96ee0795ad3"/></dir></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="cartsguru"><file name="checkout.js" hash="f80f26b465eac6f702e87e05687c4bdd"/></dir></dir></target></contents>
24
<compatible/>
25
<dependencies><required><php><min>5.3.0</min><max>7.1.0</max></php></required></dependencies>
26
</package>