shoppingfeeder - Version 1.5.3

Version Notes

Fix to use inventory levels from variant/simple products

Download this release

Release Info

Developer ShoppingFeeder
Extension shoppingfeeder
Version 1.5.3
Comparing to
See all releases


Code changes from version 1.5.2 to 1.5.3

app/code/community/ShoppingFeeder/Fbtrack/Model/Observer.php CHANGED
@@ -1,183 +1,183 @@
1
- <?php
2
- class ShoppingFeeder_Fbtrack_Model_Observer extends Varien_Object
3
- {
4
- public function salesOrderPlaceAfter($observer)
5
- {
6
- try{
7
- $fbTracking = Mage::getStoreConfig('shoppingfeeder_fbtrack/fb_track_config/fb_track');
8
- if (!is_null($fbTracking) && $fbTracking)
9
- {
10
- /* @var Mage_Sales_Model_Order $order */
11
- $order = $observer->getEvent()->getOrder();
12
-
13
- //set the order for JS tracking code
14
- $orderItems = array();
15
- foreach ($order->getAllItems() as $item)
16
- {
17
- $orderItems[] = '\''.$item->getProductId().'\'';
18
- }
19
- $orderInfo = array(
20
- 'items' => $orderItems,
21
- 'value' => $order->getGrandTotal()
22
- );
23
- Mage::getModel('core/session')->setOrderForJsTrackingShoppingFeederFbtrack($orderInfo);
24
- }
25
- }
26
- catch (Exception $e)
27
- {
28
- Mage::log('_notifyShoppingFeeder Order ID: '.$order->getRealOrderId().' FAILED! Message: '.$e->getMessage());
29
- }
30
- }
31
-
32
- /**
33
- * @param Varien_Event_Observer $observer
34
- */
35
- public function generateBlocksAfter($observer)
36
- {
37
- try{
38
- $fbTracking = Mage::getStoreConfig('shoppingfeeder_fbtrack/fb_track_config/fb_track');
39
- if (!is_null($fbTracking) && $fbTracking)
40
- {
41
- $actionName = $observer->getEvent()->getAction()->getFullActionName();
42
- // var_dump($actionName);
43
- // exit();
44
- $block = Mage::app()->getFrontController()->getAction()->getLayout()->getBlock('shoppingfeeder_fbtrack_tracking_fb');
45
-
46
- if ($actionName == 'catalog_product_view' || $actionName == 'checkout_cart_index')
47
- {
48
- $product = Mage::registry('current_product');
49
- if (is_null($product))
50
- {
51
- $productId = Mage::getSingleton('core/session')->getProductToShoppingCartShoppingFeederFbtrack();
52
- $product = Mage::getModel('catalog/product')->load($productId);
53
- }
54
-
55
- //if we still don't have a product, don't do anything
56
- if (is_null($product))
57
- {
58
- return;
59
- }
60
-
61
- $pathToUse = '';
62
-
63
- $category = Mage::registry('current_category');
64
- $currentCategoryPath = null;
65
- if (!is_null($category))
66
- {
67
- $currentCategoryPath = $category->getPath();
68
- }
69
-
70
- $startTime = microtime(true);
71
-
72
- $storeRootCategoryId = Mage::app()->getStore()->getRootCategoryId();
73
- $storeRootCategoryName = Mage::getModel('catalog/category')->load($storeRootCategoryId)->getName();
74
- if (is_null($currentCategoryPath))
75
- {
76
- if (!is_null($product) && is_object($product))
77
- {
78
- /** @var Mage_Catalog_Model_Resource_Category_Collection $categoryCollection */
79
- $categoryCollection = $product->getCategoryCollection()->addAttributeToSelect('name');
80
-
81
- $depth = 0;
82
- foreach($categoryCollection as $cat1){
83
- $pathIds = explode('/', $cat1->getPath());
84
- unset($pathIds[0]);
85
-
86
- $collection = Mage::getModel('catalog/category')->getCollection()
87
- ->setStoreId(Mage::app()->getStore()->getId())
88
- ->addAttributeToSelect('name')
89
- ->addAttributeToSelect('is_active')
90
- ->addFieldToFilter('entity_id', array('in' => $pathIds));
91
-
92
- $pathByName = array();
93
- /** @var Mage_Catalog_Model_Category $cat */
94
- foreach($collection as $cat){
95
- if ($cat->getName() != $storeRootCategoryName)
96
- {
97
- $pathByName[] = $cat->getName();
98
- }
99
- }
100
-
101
- //take the longest (generally more detailed) path
102
- $thisDepth = count($pathByName);
103
- if ($thisDepth > $depth)
104
- {
105
- $depth = $thisDepth;
106
- $pathToUse = implode(' > ', $pathByName);
107
- }
108
- }
109
- }
110
- }
111
- else
112
- {
113
- $pathIds = explode('/', $currentCategoryPath);
114
- unset($pathIds[0]);
115
-
116
- $collection = Mage::getModel('catalog/category')->getCollection()
117
- ->setStoreId(Mage::app()->getStore()->getId())
118
- ->addAttributeToSelect('name')
119
- ->addAttributeToSelect('is_active')
120
- ->addFieldToFilter('entity_id', array('in' => $pathIds));
121
-
122
- $pathByName = array();
123
- /** @var Mage_Catalog_Model_Category $cat */
124
- foreach($collection as $cat){
125
- if ($cat->getName() != $storeRootCategoryName)
126
- {
127
- $pathByName[] = $cat->getName();
128
- }
129
- }
130
- $pathToUse = implode(' > ', $pathByName);
131
- }
132
-
133
- if ($product)
134
- {
135
- $block->setData('product', $product);
136
- $block->setData('category', $pathToUse);
137
-
138
- if ($actionName == 'catalog_product_view')
139
- {
140
- $block->setData('action_type', 'ViewContent');
141
- }
142
- elseif ($actionName == 'checkout_cart_index')
143
- {
144
- $block->setData('action_type', 'AddToCart');
145
- //reset the cart product
146
- Mage::getModel('core/session')->unsProductToShoppingCartShoppingFeederFbtrack();
147
- }
148
- }
149
- }
150
-
151
-
152
- elseif ($actionName == 'checkout_onepage_success' || $actionName == 'checkout_multishipping_success')
153
- {
154
- Mage::log('After template action: '.$actionName);
155
- $orderInfo = Mage::getModel('core/session')->getOrderForJsTrackingShoppingFeederFbtrack();
156
- if (!is_null($orderInfo) && $block)
157
- {
158
- $block->setData('order', $orderInfo);
159
- $block->setData('action_type', 'Purchase');
160
- Mage::getModel('core/session')->unsOrderForJsTrackingShoppingFeederFbtrack();
161
- }
162
- }
163
- }
164
- }
165
- catch (Exception $e)
166
- {
167
-
168
- }
169
- }
170
-
171
- /**
172
- * @param Varien_Event_Observer $observer
173
- */
174
- public function setAddToCartProduct($observer)
175
- {
176
- try{
177
- Mage::getModel('core/session')->setProductToShoppingCartShoppingFeederFbtrack(Mage::app()->getRequest()->getParam('product', 0));
178
- }
179
- catch (Exception $e) {
180
-
181
- }
182
- }
183
}
1
+ <?php
2
+ class ShoppingFeeder_Fbtrack_Model_Observer extends Varien_Object
3
+ {
4
+ public function salesOrderPlaceAfter($observer)
5
+ {
6
+ try{
7
+ $fbTracking = Mage::getStoreConfig('shoppingfeeder_fbtrack/fb_track_config/fb_track');
8
+ if (!is_null($fbTracking) && $fbTracking)
9
+ {
10
+ /* @var Mage_Sales_Model_Order $order */
11
+ $order = $observer->getEvent()->getOrder();
12
+
13
+ //set the order for JS tracking code
14
+ $orderItems = array();
15
+ foreach ($order->getAllItems() as $item)
16
+ {
17
+ $orderItems[] = '\''.$item->getProductId().'\'';
18
+ }
19
+ $orderInfo = array(
20
+ 'items' => $orderItems,
21
+ 'value' => $order->getGrandTotal()
22
+ );
23
+ Mage::getModel('core/session')->setOrderForJsTrackingShoppingFeederFbtrack($orderInfo);
24
+ }
25
+ }
26
+ catch (Exception $e)
27
+ {
28
+ Mage::log('_notifyShoppingFeeder Order ID: '.$order->getRealOrderId().' FAILED! Message: '.$e->getMessage());
29
+ }
30
+ }
31
+
32
+ /**
33
+ * @param Varien_Event_Observer $observer
34
+ */
35
+ public function generateBlocksAfter($observer)
36
+ {
37
+ try{
38
+ $fbTracking = Mage::getStoreConfig('shoppingfeeder_fbtrack/fb_track_config/fb_track');
39
+ if (!is_null($fbTracking) && $fbTracking)
40
+ {
41
+ $actionName = $observer->getEvent()->getAction()->getFullActionName();
42
+ // var_dump($actionName);
43
+ // exit();
44
+ $block = Mage::app()->getFrontController()->getAction()->getLayout()->getBlock('shoppingfeeder_fbtrack_tracking_fb');
45
+
46
+ if ($actionName == 'catalog_product_view' || $actionName == 'checkout_cart_index')
47
+ {
48
+ $product = Mage::registry('current_product');
49
+ if (is_null($product))
50
+ {
51
+ $productId = Mage::getSingleton('core/session')->getProductToShoppingCartShoppingFeederFbtrack();
52
+ $product = Mage::getModel('catalog/product')->load($productId);
53
+ }
54
+
55
+ //if we still don't have a product, don't do anything
56
+ if (is_null($product))
57
+ {
58
+ return;
59
+ }
60
+
61
+ $pathToUse = '';
62
+
63
+ $category = Mage::registry('current_category');
64
+ $currentCategoryPath = null;
65
+ if (!is_null($category))
66
+ {
67
+ $currentCategoryPath = $category->getPath();
68
+ }
69
+
70
+ $startTime = microtime(true);
71
+
72
+ $storeRootCategoryId = Mage::app()->getStore()->getRootCategoryId();
73
+ $storeRootCategoryName = Mage::getModel('catalog/category')->load($storeRootCategoryId)->getName();
74
+ if (is_null($currentCategoryPath))
75
+ {
76
+ if (!is_null($product) && is_object($product))
77
+ {
78
+ /** @var Mage_Catalog_Model_Resource_Category_Collection $categoryCollection */
79
+ $categoryCollection = $product->getCategoryCollection()->addAttributeToSelect('name');
80
+
81
+ $depth = 0;
82
+ foreach($categoryCollection as $cat1){
83
+ $pathIds = explode('/', $cat1->getPath());
84
+ unset($pathIds[0]);
85
+
86
+ $collection = Mage::getModel('catalog/category')->getCollection()
87
+ ->setStoreId(Mage::app()->getStore()->getId())
88
+ ->addAttributeToSelect('name')
89
+ ->addAttributeToSelect('is_active')
90
+ ->addFieldToFilter('entity_id', array('in' => $pathIds));
91
+
92
+ $pathByName = array();
93
+ /** @var Mage_Catalog_Model_Category $cat */
94
+ foreach($collection as $cat){
95
+ if ($cat->getName() != $storeRootCategoryName)
96
+ {
97
+ $pathByName[] = $cat->getName();
98
+ }
99
+ }
100
+
101
+ //take the longest (generally more detailed) path
102
+ $thisDepth = count($pathByName);
103
+ if ($thisDepth > $depth)
104
+ {
105
+ $depth = $thisDepth;
106
+ $pathToUse = implode(' > ', $pathByName);
107
+ }
108
+ }
109
+ }
110
+ }
111
+ else
112
+ {
113
+ $pathIds = explode('/', $currentCategoryPath);
114
+ unset($pathIds[0]);
115
+
116
+ $collection = Mage::getModel('catalog/category')->getCollection()
117
+ ->setStoreId(Mage::app()->getStore()->getId())
118
+ ->addAttributeToSelect('name')
119
+ ->addAttributeToSelect('is_active')
120
+ ->addFieldToFilter('entity_id', array('in' => $pathIds));
121
+
122
+ $pathByName = array();
123
+ /** @var Mage_Catalog_Model_Category $cat */
124
+ foreach($collection as $cat){
125
+ if ($cat->getName() != $storeRootCategoryName)
126
+ {
127
+ $pathByName[] = $cat->getName();
128
+ }
129
+ }
130
+ $pathToUse = implode(' > ', $pathByName);
131
+ }
132
+
133
+ if ($product)
134
+ {
135
+ $block->setData('product', $product);
136
+ $block->setData('category', $pathToUse);
137
+
138
+ if ($actionName == 'catalog_product_view')
139
+ {
140
+ $block->setData('action_type', 'ViewContent');
141
+ }
142
+ elseif ($actionName == 'checkout_cart_index')
143
+ {
144
+ $block->setData('action_type', 'AddToCart');
145
+ //reset the cart product
146
+ Mage::getModel('core/session')->unsProductToShoppingCartShoppingFeederFbtrack();
147
+ }
148
+ }
149
+ }
150
+
151
+
152
+ elseif ($actionName == 'checkout_onepage_success' || $actionName == 'checkout_multishipping_success')
153
+ {
154
+ Mage::log('After template action: '.$actionName);
155
+ $orderInfo = Mage::getModel('core/session')->getOrderForJsTrackingShoppingFeederFbtrack();
156
+ if (!is_null($orderInfo) && $block)
157
+ {
158
+ $block->setData('order', $orderInfo);
159
+ $block->setData('action_type', 'Purchase');
160
+ Mage::getModel('core/session')->unsOrderForJsTrackingShoppingFeederFbtrack();
161
+ }
162
+ }
163
+ }
164
+ }
165
+ catch (Exception $e)
166
+ {
167
+
168
+ }
169
+ }
170
+
171
+ /**
172
+ * @param Varien_Event_Observer $observer
173
+ */
174
+ public function setAddToCartProduct($observer)
175
+ {
176
+ try{
177
+ Mage::getModel('core/session')->setProductToShoppingCartShoppingFeederFbtrack(Mage::app()->getRequest()->getParam('product', 0));
178
+ }
179
+ catch (Exception $e) {
180
+
181
+ }
182
+ }
183
}
app/code/community/ShoppingFeeder/Service/Controller/FrontAuth.php CHANGED
@@ -1,75 +1,75 @@
1
- <?php
2
-
3
- class ShoppingFeeder_Service_Controller_FrontAuth extends Mage_Core_Controller_Front_Action
4
- {
5
- public function preDispatch()
6
- {
7
- parent::preDispatch();
8
-
9
- //DEBUG
10
- // return $this;
11
-
12
- /**
13
- * For per-store system
14
- */
15
- $store = $this->getRequest()->getParam('store', null);
16
- if (!is_null($store))
17
- {
18
- Mage::app()->setCurrentStore($store);
19
- }
20
- else
21
- {
22
- $defaultStoreCode = Mage::app()
23
- ->getWebsite(true)
24
- ->getDefaultGroup()
25
- ->getDefaultStore()
26
- ->getCode();
27
-
28
- Mage::app()->setCurrentStore($defaultStoreCode);
29
- }
30
-
31
- //check Auth
32
- if (!function_exists('getallheaders'))
33
- {
34
- function getallheaders()
35
- {
36
- $headers = '';
37
- foreach ($_SERVER as $name => $value)
38
- {
39
- if (substr($name, 0, 5) == 'HTTP_')
40
- {
41
- $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
42
- }
43
- }
44
- return $headers;
45
- }
46
- }
47
-
48
- $headers = getallheaders();
49
-
50
- /** @var ShoppingFeeder_Service_Model_Auth $authModel */
51
- $authModel = Mage::getModel('shoppingfeeder_service/auth');
52
-
53
- $authResult = $authModel->auth(
54
- $headers,
55
- $this->getRequest()->getScheme(),
56
- $this->getRequest()->getMethod()
57
- );
58
-
59
- if ($authResult !== true)
60
- {
61
- $responseData = array(
62
- 'status' => 'fail',
63
- 'data' => array (
64
- 'message' => $authResult
65
- )
66
- );
67
-
68
- header('Content-type: application/json; charset=UTF-8');
69
- echo json_encode($responseData);
70
- exit();
71
- }
72
-
73
- return $this;
74
- }
75
}
1
+ <?php
2
+
3
+ class ShoppingFeeder_Service_Controller_FrontAuth extends Mage_Core_Controller_Front_Action
4
+ {
5
+ public function preDispatch()
6
+ {
7
+ parent::preDispatch();
8
+
9
+ //DEBUG
10
+ // return $this;
11
+
12
+ /**
13
+ * For per-store system
14
+ */
15
+ $store = $this->getRequest()->getParam('store', null);
16
+ if (!is_null($store))
17
+ {
18
+ Mage::app()->setCurrentStore($store);
19
+ }
20
+ else
21
+ {
22
+ $defaultStoreCode = Mage::app()
23
+ ->getWebsite(true)
24
+ ->getDefaultGroup()
25
+ ->getDefaultStore()
26
+ ->getCode();
27
+
28
+ Mage::app()->setCurrentStore($defaultStoreCode);
29
+ }
30
+
31
+ //check Auth
32
+ if (!function_exists('getallheaders'))
33
+ {
34
+ function getallheaders()
35
+ {
36
+ $headers = '';
37
+ foreach ($_SERVER as $name => $value)
38
+ {
39
+ if (substr($name, 0, 5) == 'HTTP_')
40
+ {
41
+ $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
42
+ }
43
+ }
44
+ return $headers;
45
+ }
46
+ }
47
+
48
+ $headers = getallheaders();
49
+
50
+ /** @var ShoppingFeeder_Service_Model_Auth $authModel */
51
+ $authModel = Mage::getModel('shoppingfeeder_service/auth');
52
+
53
+ $authResult = $authModel->auth(
54
+ $headers,
55
+ $this->getRequest()->getScheme(),
56
+ $this->getRequest()->getMethod()
57
+ );
58
+
59
+ if ($authResult !== true)
60
+ {
61
+ $responseData = array(
62
+ 'status' => 'fail',
63
+ 'data' => array (
64
+ 'message' => $authResult
65
+ )
66
+ );
67
+
68
+ header('Content-type: application/json; charset=UTF-8');
69
+ echo json_encode($responseData);
70
+ exit();
71
+ }
72
+
73
+ return $this;
74
+ }
75
}
app/code/community/ShoppingFeeder/Service/Model/Auth.php CHANGED
@@ -1,103 +1,103 @@
1
- <?php
2
-
3
- class ShoppingFeeder_Service_Model_Auth extends Mage_Core_Model_Abstract
4
- {
5
- const RANDOM_STRING = 'The mice all ate cheese together.';
6
- const MAX_TIMEOUT = 300; //5 minutes
7
-
8
- public function __construct()
9
- {
10
- $this->_init('shoppingfeeder_service/auth');
11
- }
12
-
13
- public static function auth(array $headers, $incomingScheme, $incomingMethod)
14
- {
15
- //check the API key
16
- $incomingApiKey = '';
17
- $incomingAuthTimestamp = strtotime('1970-00-00');
18
- $incomingSignature = '';
19
- foreach ($headers as $key => $value)
20
- {
21
- if (strtolower('X-SFApiKey') == strtolower($key))
22
- {
23
- $incomingApiKey = $value;
24
- }
25
- if (strtolower('X-SFTimestamp') == strtolower($key))
26
- {
27
- $incomingAuthTimestamp = $value;
28
- }
29
- if (strtolower('X-SFSignature') == strtolower($key))
30
- {
31
- $incomingSignature = $value;
32
- }
33
- }
34
-
35
- //$sslInFront = Mage::getStoreConfig('web/secure/use_in_frontend');
36
- //$useSsl = ($sslInFront == null) ? false : boolval($sslInFront);
37
- $useSsl = false;
38
-
39
- $apiKeys = self::getApiKeys();
40
-
41
- if (!$useSsl || ($useSsl && $incomingScheme == 'https'))
42
- {
43
- //check the timestamp
44
- if (time() - $incomingAuthTimestamp <= self::MAX_TIMEOUT)
45
- {
46
- $localApiKey = $apiKeys['api_key'];
47
- if ($localApiKey == $incomingApiKey)
48
- {
49
- $localApiSecret = $apiKeys['api_secret'];
50
-
51
- $stringToSign = $incomingMethod . "\n" .
52
- $incomingAuthTimestamp . "\n" .
53
- self::RANDOM_STRING;
54
-
55
- if (function_exists('hash_hmac'))
56
- {
57
- $signature = hash_hmac('sha256', $stringToSign, $localApiSecret);
58
- }
59
- elseif (function_exists('mhash'))
60
- {
61
- $signature = bin2hex(mhash(MHASH_SHA256, $stringToSign, $localApiSecret));
62
- }
63
- else
64
- {
65
- return 'Authentication failed: Appropriate hashing function does not exist.';
66
- }
67
-
68
- if ($incomingSignature == $signature)
69
- {
70
- return true;
71
- }
72
- else
73
- {
74
- return 'Authentication failed: invalid credentials.';
75
- }
76
- }
77
- else
78
- {
79
- return 'Authentication failed: invalid API key.';
80
- }
81
- }
82
- else
83
- {
84
- return 'Authentication failed: timeout exceeded.';
85
- }
86
- }
87
- else
88
- {
89
- return 'Authentication failed: non-secure connection';
90
- }
91
- }
92
-
93
- public static function getApiKeys()
94
- {
95
- $localApiKey = Mage::getStoreConfig('shoppingfeeder/service/apikey');
96
- $localApiSecret = Mage::getStoreConfig('shoppingfeeder/service/apisecret');
97
-
98
- return array(
99
- 'api_key' => $localApiKey,
100
- 'api_secret' => $localApiSecret
101
- );
102
- }
103
}
1
+ <?php
2
+
3
+ class ShoppingFeeder_Service_Model_Auth extends Mage_Core_Model_Abstract
4
+ {
5
+ const RANDOM_STRING = 'The mice all ate cheese together.';
6
+ const MAX_TIMEOUT = 300; //5 minutes
7
+
8
+ public function __construct()
9
+ {
10
+ $this->_init('shoppingfeeder_service/auth');
11
+ }
12
+
13
+ public static function auth(array $headers, $incomingScheme, $incomingMethod)
14
+ {
15
+ //check the API key
16
+ $incomingApiKey = '';
17
+ $incomingAuthTimestamp = strtotime('1970-00-00');
18
+ $incomingSignature = '';
19
+ foreach ($headers as $key => $value)
20
+ {
21
+ if (strtolower('X-SFApiKey') == strtolower($key))
22
+ {
23
+ $incomingApiKey = $value;
24
+ }
25
+ if (strtolower('X-SFTimestamp') == strtolower($key))
26
+ {
27
+ $incomingAuthTimestamp = $value;
28
+ }
29
+ if (strtolower('X-SFSignature') == strtolower($key))
30
+ {
31
+ $incomingSignature = $value;
32
+ }
33
+ }
34
+
35
+ //$sslInFront = Mage::getStoreConfig('web/secure/use_in_frontend');
36
+ //$useSsl = ($sslInFront == null) ? false : boolval($sslInFront);
37
+ $useSsl = false;
38
+
39
+ $apiKeys = self::getApiKeys();
40
+
41
+ if (!$useSsl || ($useSsl && $incomingScheme == 'https'))
42
+ {
43
+ //check the timestamp
44
+ if (time() - $incomingAuthTimestamp <= self::MAX_TIMEOUT)
45
+ {
46
+ $localApiKey = $apiKeys['api_key'];
47
+ if ($localApiKey == $incomingApiKey)
48
+ {
49
+ $localApiSecret = $apiKeys['api_secret'];
50
+
51
+ $stringToSign = $incomingMethod . "\n" .
52
+ $incomingAuthTimestamp . "\n" .
53
+ self::RANDOM_STRING;
54
+
55
+ if (function_exists('hash_hmac'))
56
+ {
57
+ $signature = hash_hmac('sha256', $stringToSign, $localApiSecret);
58
+ }
59
+ elseif (function_exists('mhash'))
60
+ {
61
+ $signature = bin2hex(mhash(MHASH_SHA256, $stringToSign, $localApiSecret));
62
+ }
63
+ else
64
+ {
65
+ return 'Authentication failed: Appropriate hashing function does not exist.';
66
+ }
67
+
68
+ if ($incomingSignature == $signature)
69
+ {
70
+ return true;
71
+ }
72
+ else
73
+ {
74
+ return 'Authentication failed: invalid credentials.';
75
+ }
76
+ }
77
+ else
78
+ {
79
+ return 'Authentication failed: invalid API key.';
80
+ }
81
+ }
82
+ else
83
+ {
84
+ return 'Authentication failed: timeout exceeded.';
85
+ }
86
+ }
87
+ else
88
+ {
89
+ return 'Authentication failed: non-secure connection';
90
+ }
91
+ }
92
+
93
+ public static function getApiKeys()
94
+ {
95
+ $localApiKey = Mage::getStoreConfig('shoppingfeeder/service/apikey');
96
+ $localApiSecret = Mage::getStoreConfig('shoppingfeeder/service/apisecret');
97
+
98
+ return array(
99
+ 'api_key' => $localApiKey,
100
+ 'api_secret' => $localApiSecret
101
+ );
102
+ }
103
}
app/code/community/ShoppingFeeder/Service/Model/Observer.php CHANGED
@@ -1,241 +1,241 @@
1
- <?php
2
- class ShoppingFeeder_Service_Model_Observer extends Varien_Object
3
- {
4
- const SF_URL = 'https://www.shoppingfeeder.com/webhook/magento-orders/';
5
- //const SF_URL = 'http://dev.shoppingfeeder.com/webhook/magento-orders/';
6
-
7
- public function salesOrderPlaceAfter($observer)
8
- {
9
- try{
10
- //if order tracking is set
11
- //$sfEnabled = Mage::getStoreConfig('shoppingfeeder/service/enable');
12
- $sfEnabled = true;
13
- $sfTracking = Mage::getStoreConfig('shoppingfeeder/service/tracking');
14
- $fbTracking = Mage::getStoreConfig('shoppingfeeder/fb_track_config/fb_track');
15
- if (($sfEnabled && $sfTracking) || (!is_null($fbTracking) && $fbTracking))
16
- {
17
- /* @var Mage_Sales_Model_Order $order */
18
- $order = $observer->getEvent()->getOrder();
19
-
20
- //Mage::log('salesOrderPlaceAfter Order ID: '.$order->getRealOrderId());
21
-
22
- //set the order for JS tracking code
23
- $orderItems = array();
24
- foreach ($order->getAllItems() as $item)
25
- {
26
- $orderItems[] = '\''.$item->getProductId().'\'';
27
- }
28
- $orderInfo = array(
29
- 'items' => $orderItems,
30
- 'value' => $order->getGrandTotal()
31
- );
32
- Mage::getSingleton('core/session')->setSfdrOrderForJsTracking($orderInfo);
33
-
34
- //only notify ShoppingFeeder if required
35
- if ($sfEnabled && $sfTracking)
36
- {
37
- $this->_notifyShoppingFeeder($order);
38
- }
39
- }
40
- }
41
- catch (Exception $e)
42
- {
43
- Mage::log('_notifyShoppingFeeder Order ID: '.$order->getRealOrderId().' FAILED! Message: '.$e->getMessage());
44
- }
45
- }
46
-
47
- public function productView($observer)
48
- {
49
- try{
50
- //here we're going to create the referral cookie for the visitor if they came from ShoppingFeeder
51
- if (isset($_GET['SFDRREF']))
52
- {
53
- setcookie('SFDRREF', $_GET['SFDRREF'], time() + (60*60*24*30), '/');
54
- $_COOKIE['SFDRREF']= $_GET['SFDRREF'];
55
- }
56
- }
57
- catch (Exception $e)
58
- {
59
-
60
- }
61
- }
62
-
63
- /**
64
- * @param Varien_Event_Observer $observer
65
- */
66
- public function generateBlocksAfter($observer)
67
- {
68
- try{
69
- $fbTracking = Mage::getStoreConfig('shoppingfeeder/fb_track_config/fb_track');
70
- if (!is_null($fbTracking) && $fbTracking)
71
- {
72
- $actionName = $observer->getEvent()->getAction()->getFullActionName();
73
- // var_dump($actionName);
74
- // exit();
75
- $block = Mage::app()->getFrontController()->getAction()->getLayout()->getBlock('shoppingfeeder_service_tracking_fb');
76
-
77
- if ($actionName == 'catalog_product_view' || $actionName == 'checkout_cart_index')
78
- {
79
- $product = Mage::registry('current_product');
80
- if (is_null($product))
81
- {
82
- $productId = Mage::getSingleton('core/session')->getSfdrProductToShoppingCart();
83
- $product = Mage::getModel('catalog/product')->load($productId);
84
- }
85
-
86
- //if we still don't have a product, don't do anything
87
- if (is_null($product))
88
- {
89
- return;
90
- }
91
-
92
- $pathToUse = '';
93
-
94
- $category = Mage::registry('current_category');
95
- $currentCategoryPath = null;
96
- if (!is_null($category))
97
- {
98
- $currentCategoryPath = $category->getPath();
99
- }
100
-
101
- $startTime = microtime(true);
102
-
103
- $storeRootCategoryId = Mage::app()->getStore()->getRootCategoryId();
104
- $storeRootCategoryName = Mage::getModel('catalog/category')->load($storeRootCategoryId)->getName();
105
- if (is_null($currentCategoryPath))
106
- {
107
- if (!is_null($product) && is_object($product))
108
- {
109
- /** @var Mage_Catalog_Model_Resource_Category_Collection $categoryCollection */
110
- $categoryCollection = $product->getCategoryCollection()->addAttributeToSelect('name');
111
-
112
- $depth = 0;
113
- foreach($categoryCollection as $cat1){
114
- $pathIds = explode('/', $cat1->getPath());
115
- unset($pathIds[0]);
116
-
117
- $collection = Mage::getModel('catalog/category')->getCollection()
118
- ->setStoreId(Mage::app()->getStore()->getId())
119
- ->addAttributeToSelect('name')
120
- ->addAttributeToSelect('is_active')
121
- ->addFieldToFilter('entity_id', array('in' => $pathIds));
122
-
123
- $pathByName = array();
124
- /** @var Mage_Catalog_Model_Category $cat */
125
- foreach($collection as $cat){
126
- if ($cat->getName() != $storeRootCategoryName)
127
- {
128
- $pathByName[] = $cat->getName();
129
- }
130
- }
131
-
132
- //take the longest (generally more detailed) path
133
- $thisDepth = count($pathByName);
134
- if ($thisDepth > $depth)
135
- {
136
- $depth = $thisDepth;
137
- $pathToUse = implode(' > ', $pathByName);
138
- }
139
- }
140
- }
141
- }
142
- else
143
- {
144
- $pathIds = explode('/', $currentCategoryPath);
145
- unset($pathIds[0]);
146
-
147
- $collection = Mage::getModel('catalog/category')->getCollection()
148
- ->setStoreId(Mage::app()->getStore()->getId())
149
- ->addAttributeToSelect('name')
150
- ->addAttributeToSelect('is_active')
151
- ->addFieldToFilter('entity_id', array('in' => $pathIds));
152
-
153
- $pathByName = array();
154
- /** @var Mage_Catalog_Model_Category $cat */
155
- foreach($collection as $cat){
156
- if ($cat->getName() != $storeRootCategoryName)
157
- {
158
- $pathByName[] = $cat->getName();
159
- }
160
- }
161
- $pathToUse = implode(' > ', $pathByName);
162
- }
163
-
164
- if ($product)
165
- {
166
- $block->setData('product', $product);
167
- $block->setData('category', $pathToUse);
168
-
169
- if ($actionName == 'catalog_product_view')
170
- {
171
- $block->setData('action_type', 'ViewContent');
172
- }
173
- elseif ($actionName == 'checkout_cart_index')
174
- {
175
- $block->setData('action_type', 'AddToCart');
176
- //reset the cart product
177
- Mage::getSingleton('core/session')->unsSfdrProductToShoppingCart();
178
- }
179
- }
180
- }
181
-
182
-
183
- elseif ($actionName == 'checkout_onepage_success' || $actionName == 'checkout_multishipping_success')
184
- {
185
- $orderInfo = Mage::getSingleton('core/session')->getSfdrOrderForJsTracking();
186
- if (!is_null($orderInfo) && $block)
187
- {
188
- $block->setData('order', $orderInfo);
189
- $block->setData('action_type', 'Purchase');
190
- Mage::getSingleton('core/session')->unsSfdrOrderForJsTracking();
191
- }
192
- }
193
- }
194
- }
195
- catch (Exception $e)
196
- {
197
-
198
- }
199
- }
200
-
201
- /**
202
- * @param Varien_Event_Observer $observer
203
- */
204
- public function setAddToCartProduct($observer)
205
- {
206
- try{
207
-
208
- //add the cart product to the session
209
- // $product = Mage::getModel('catalog/product')
210
- // ->load(Mage::app()->getRequest()->getParam('product', 0));
211
-
212
- Mage::getSingleton('core/session')->setSfdrProductToShoppingCart(Mage::app()->getRequest()->getParam('product', 0));
213
- }
214
- catch (Exception $e)
215
- {
216
-
217
- }
218
- }
219
-
220
- protected function _notifyShoppingFeeder(Mage_Sales_Model_Order $order)
221
- {
222
- Mage::log('_notifyShoppingFeeder Order ID: '.$order->getRealOrderId());
223
-
224
- //get API key value from admin settings
225
- $apiKey = $sfTracking = Mage::getStoreConfig('shoppingfeeder/service/apikey');
226
-
227
- $http = new Zend_Http_Client(self::SF_URL);
228
-
229
- $http->setHeaders('X-SFApiKey', $apiKey);
230
-
231
- $data = $order->toArray();
232
- foreach ($order->getAllItems() as $lineItem)
233
- {
234
- $data['line_items'][] = $lineItem->toArray();
235
- }
236
- $data['landing_site_ref'] = isset($_COOKIE['SFDRREF']) ? $_COOKIE['SFDRREF'] : '';
237
-
238
- $http->setRawData(Mage::helper('core')->jsonEncode($data));
239
- $http->request(Zend_Http_Client::POST);
240
- }
241
}
1
+ <?php
2
+ class ShoppingFeeder_Service_Model_Observer extends Varien_Object
3
+ {
4
+ const SF_URL = 'https://www.shoppingfeeder.com/webhook/magento-orders/';
5
+ //const SF_URL = 'http://dev.shoppingfeeder.com/webhook/magento-orders/';
6
+
7
+ public function salesOrderPlaceAfter($observer)
8
+ {
9
+ try{
10
+ //if order tracking is set
11
+ //$sfEnabled = Mage::getStoreConfig('shoppingfeeder/service/enable');
12
+ $sfEnabled = true;
13
+ $sfTracking = Mage::getStoreConfig('shoppingfeeder/service/tracking');
14
+ $fbTracking = Mage::getStoreConfig('shoppingfeeder/fb_track_config/fb_track');
15
+ if (($sfEnabled && $sfTracking) || (!is_null($fbTracking) && $fbTracking))
16
+ {
17
+ /* @var Mage_Sales_Model_Order $order */
18
+ $order = $observer->getEvent()->getOrder();
19
+
20
+ //Mage::log('salesOrderPlaceAfter Order ID: '.$order->getRealOrderId());
21
+
22
+ //set the order for JS tracking code
23
+ $orderItems = array();
24
+ foreach ($order->getAllItems() as $item)
25
+ {
26
+ $orderItems[] = '\''.$item->getProductId().'\'';
27
+ }
28
+ $orderInfo = array(
29
+ 'items' => $orderItems,
30
+ 'value' => $order->getGrandTotal()
31
+ );
32
+ Mage::getSingleton('core/session')->setSfdrOrderForJsTracking($orderInfo);
33
+
34
+ //only notify ShoppingFeeder if required
35
+ if ($sfEnabled && $sfTracking)
36
+ {
37
+ $this->_notifyShoppingFeeder($order);
38
+ }
39
+ }
40
+ }
41
+ catch (Exception $e)
42
+ {
43
+ Mage::log('_notifyShoppingFeeder Order ID: '.$order->getRealOrderId().' FAILED! Message: '.$e->getMessage());
44
+ }
45
+ }
46
+
47
+ public function productView($observer)
48
+ {
49
+ try{
50
+ //here we're going to create the referral cookie for the visitor if they came from ShoppingFeeder
51
+ if (isset($_GET['SFDRREF']))
52
+ {
53
+ setcookie('SFDRREF', $_GET['SFDRREF'], time() + (60*60*24*30), '/');
54
+ $_COOKIE['SFDRREF']= $_GET['SFDRREF'];
55
+ }
56
+ }
57
+ catch (Exception $e)
58
+ {
59
+
60
+ }
61
+ }
62
+
63
+ /**
64
+ * @param Varien_Event_Observer $observer
65
+ */
66
+ public function generateBlocksAfter($observer)
67
+ {
68
+ try{
69
+ $fbTracking = Mage::getStoreConfig('shoppingfeeder/fb_track_config/fb_track');
70
+ if (!is_null($fbTracking) && $fbTracking)
71
+ {
72
+ $actionName = $observer->getEvent()->getAction()->getFullActionName();
73
+ // var_dump($actionName);
74
+ // exit();
75
+ $block = Mage::app()->getFrontController()->getAction()->getLayout()->getBlock('shoppingfeeder_service_tracking_fb');
76
+
77
+ if ($actionName == 'catalog_product_view' || $actionName == 'checkout_cart_index')
78
+ {
79
+ $product = Mage::registry('current_product');
80
+ if (is_null($product))
81
+ {
82
+ $productId = Mage::getSingleton('core/session')->getSfdrProductToShoppingCart();
83
+ $product = Mage::getModel('catalog/product')->load($productId);
84
+ }
85
+
86
+ //if we still don't have a product, don't do anything
87
+ if (is_null($product))
88
+ {
89
+ return;
90
+ }
91
+
92
+ $pathToUse = '';
93
+
94
+ $category = Mage::registry('current_category');
95
+ $currentCategoryPath = null;
96
+ if (!is_null($category))
97
+ {
98
+ $currentCategoryPath = $category->getPath();
99
+ }
100
+
101
+ $startTime = microtime(true);
102
+
103
+ $storeRootCategoryId = Mage::app()->getStore()->getRootCategoryId();
104
+ $storeRootCategoryName = Mage::getModel('catalog/category')->load($storeRootCategoryId)->getName();
105
+ if (is_null($currentCategoryPath))
106
+ {
107
+ if (!is_null($product) && is_object($product))
108
+ {
109
+ /** @var Mage_Catalog_Model_Resource_Category_Collection $categoryCollection */
110
+ $categoryCollection = $product->getCategoryCollection()->addAttributeToSelect('name');
111
+
112
+ $depth = 0;
113
+ foreach($categoryCollection as $cat1){
114
+ $pathIds = explode('/', $cat1->getPath());
115
+ unset($pathIds[0]);
116
+
117
+ $collection = Mage::getModel('catalog/category')->getCollection()
118
+ ->setStoreId(Mage::app()->getStore()->getId())
119
+ ->addAttributeToSelect('name')
120
+ ->addAttributeToSelect('is_active')
121
+ ->addFieldToFilter('entity_id', array('in' => $pathIds));
122
+
123
+ $pathByName = array();
124
+ /** @var Mage_Catalog_Model_Category $cat */
125
+ foreach($collection as $cat){
126
+ if ($cat->getName() != $storeRootCategoryName)
127
+ {
128
+ $pathByName[] = $cat->getName();
129
+ }
130
+ }
131
+
132
+ //take the longest (generally more detailed) path
133
+ $thisDepth = count($pathByName);
134
+ if ($thisDepth > $depth)
135
+ {
136
+ $depth = $thisDepth;
137
+ $pathToUse = implode(' > ', $pathByName);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ else
143
+ {
144
+ $pathIds = explode('/', $currentCategoryPath);
145
+ unset($pathIds[0]);
146
+
147
+ $collection = Mage::getModel('catalog/category')->getCollection()
148
+ ->setStoreId(Mage::app()->getStore()->getId())
149
+ ->addAttributeToSelect('name')
150
+ ->addAttributeToSelect('is_active')
151
+ ->addFieldToFilter('entity_id', array('in' => $pathIds));
152
+
153
+ $pathByName = array();
154
+ /** @var Mage_Catalog_Model_Category $cat */
155
+ foreach($collection as $cat){
156
+ if ($cat->getName() != $storeRootCategoryName)
157
+ {
158
+ $pathByName[] = $cat->getName();
159
+ }
160
+ }
161
+ $pathToUse = implode(' > ', $pathByName);
162
+ }
163
+
164
+ if ($product)
165
+ {
166
+ $block->setData('product', $product);
167
+ $block->setData('category', $pathToUse);
168
+
169
+ if ($actionName == 'catalog_product_view')
170
+ {
171
+ $block->setData('action_type', 'ViewContent');
172
+ }
173
+ elseif ($actionName == 'checkout_cart_index')
174
+ {
175
+ $block->setData('action_type', 'AddToCart');
176
+ //reset the cart product
177
+ Mage::getSingleton('core/session')->unsSfdrProductToShoppingCart();
178
+ }
179
+ }
180
+ }
181
+
182
+
183
+ elseif ($actionName == 'checkout_onepage_success' || $actionName == 'checkout_multishipping_success')
184
+ {
185
+ $orderInfo = Mage::getSingleton('core/session')->getSfdrOrderForJsTracking();
186
+ if (!is_null($orderInfo) && $block)
187
+ {
188
+ $block->setData('order', $orderInfo);
189
+ $block->setData('action_type', 'Purchase');
190
+ Mage::getSingleton('core/session')->unsSfdrOrderForJsTracking();
191
+ }
192
+ }
193
+ }
194
+ }
195
+ catch (Exception $e)
196
+ {
197
+
198
+ }
199
+ }
200
+
201
+ /**
202
+ * @param Varien_Event_Observer $observer
203
+ */
204
+ public function setAddToCartProduct($observer)
205
+ {
206
+ try{
207
+
208
+ //add the cart product to the session
209
+ // $product = Mage::getModel('catalog/product')
210
+ // ->load(Mage::app()->getRequest()->getParam('product', 0));
211
+
212
+ Mage::getSingleton('core/session')->setSfdrProductToShoppingCart(Mage::app()->getRequest()->getParam('product', 0));
213
+ }
214
+ catch (Exception $e)
215
+ {
216
+
217
+ }
218
+ }
219
+
220
+ protected function _notifyShoppingFeeder(Mage_Sales_Model_Order $order)
221
+ {
222
+ Mage::log('_notifyShoppingFeeder Order ID: '.$order->getRealOrderId());
223
+
224
+ //get API key value from admin settings
225
+ $apiKey = $sfTracking = Mage::getStoreConfig('shoppingfeeder/service/apikey');
226
+
227
+ $http = new Zend_Http_Client(self::SF_URL);
228
+
229
+ $http->setHeaders('X-SFApiKey', $apiKey);
230
+
231
+ $data = $order->toArray();
232
+ foreach ($order->getAllItems() as $lineItem)
233
+ {
234
+ $data['line_items'][] = $lineItem->toArray();
235
+ }
236
+ $data['landing_site_ref'] = isset($_COOKIE['SFDRREF']) ? $_COOKIE['SFDRREF'] : '';
237
+
238
+ $http->setRawData(Mage::helper('core')->jsonEncode($data));
239
+ $http->request(Zend_Http_Client::POST);
240
+ }
241
}
app/code/community/ShoppingFeeder/Service/Model/Offers.php CHANGED
@@ -1,520 +1,595 @@
1
- <?php
2
-
3
- class ShoppingFeeder_Service_Model_Offers extends Mage_Core_Model_Abstract
4
- {
5
- public function __construct()
6
- {
7
- $this->_init('shoppingfeeder_service/offers');
8
- }
9
-
10
- private function hasParent($product)
11
- {
12
- $parents = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId());
13
- return !empty($parents);
14
- }
15
-
16
- private function getProductInfo(Mage_Catalog_Model_Product $product, Mage_Catalog_Model_Product $parent = null, $variantOptions = null, $lastUpdate = null, $priceCurrency, $priceCurrencyRate)
17
- {
18
- /** @var Mage_Catalog_Model_Product_Type_Configurable $configModel */
19
- $configModel = Mage::getModel('catalog/product_type_configurable');
20
-
21
- $p = array();
22
-
23
- $isVariant = !is_null($parent);
24
-
25
- /**
26
- * We only want to pull variants (children of configurable products) that are children, not as standalone products
27
- */
28
- //if this product's parent is visible in catalog and search, Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
29
- //we will find this product when we fetch all the children of this parent through a normal iteration, so return nothing
30
- if (!$isVariant && $this->hasParent($product))
31
- {
32
- return array();
33
- }
34
-
35
- if ($isVariant)
36
- {
37
- $variant = $product;
38
- $product = $parent;
39
- }
40
-
41
- $data = $product->getData();
42
-
43
- /* @var Mage_CatalogInventory_Model_Stock_Item $stockItem */
44
- $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product);
45
-
46
- $attributes = $product->getAttributes();
47
-
48
- $manufacturer = '';
49
- $brand = '';
50
-
51
- $usefulAttributes = array();
52
-
53
- /**
54
- * @var Mage_Eav_Model_Entity_Attribute_Abstract $attribute
55
- */
56
- // var_dump("");
57
- // var_dump("");
58
- // var_dump("");
59
- foreach ($attributes as $attribute)
60
- {
61
- $attributeCode = $attribute->getAttributeCode();
62
- $attributeLabel = $attribute->getData('frontend_label');
63
-
64
- if ($isVariant)
65
- {
66
- $value = $attribute->getFrontend()->getValue($variant);
67
- }
68
- else
69
- {
70
- $value = $attribute->getFrontend()->getValue($product);
71
- }
72
-
73
- // var_dump($attributeCode. ' : '.print_r($value, true));
74
- // var_dump($attributeLabel. ' : '.print_r($value, true));
75
-
76
- if (preg_match('/^manufacturer#x2F;i', $attributeCode) || preg_match('/^manufacturer#x2F;i', $attributeLabel))
77
- {
78
- $manufacturer = $value;
79
- }
80
-
81
- if (preg_match('/^brand#x2F;i', $attributeCode) || preg_match('/^brand#x2F;i', $attributeLabel))
82
- {
83
- $brand = $value;
84
- }
85
-
86
- /*
87
- if (preg_match('/age/i', $attributeCode) || preg_match('/age/i', $attributeLabel))
88
- {
89
- $usefulAttributes['age'] = $value;
90
- }
91
- if (preg_match('/color|colour/i', $attributeCode) || preg_match('/color|colour/i', $attributeLabel))
92
- {
93
- $usefulAttributes['colour'] = $value;
94
- }
95
- if (preg_match('/size/i', $attributeCode) || preg_match('/size/i', $attributeLabel))
96
- {
97
- $usefulAttributes['size'] = $value;
98
- }
99
- if (preg_match('/gender|sex/i', $attributeCode) || preg_match('/gender|sex/i', $attributeLabel))
100
- {
101
- $usefulAttributes['gender'] = $value;
102
- }
103
- if (preg_match('/material/i', $attributeCode) || preg_match('/material/i', $attributeLabel))
104
- {
105
- $usefulAttributes['material'] = $value;
106
- }
107
- if (preg_match('/pattern/i', $attributeCode) || preg_match('/pattern/i', $attributeLabel))
108
- {
109
- $usefulAttributes['pattern'] = $value;
110
- }
111
- */
112
-
113
- $attributeValue = $attribute->getFrontend()->getValue($product);
114
- //don't deal with arrays
115
- if (!is_array($attributeValue))
116
- {
117
- if (!is_null($product->getData($attributeCode)) && ((string)$attributeValue != ''))
118
- {
119
- $usefulAttributes[$attributeCode] = $value;
120
- }
121
- }
122
- }
123
- // exit();
124
-
125
- //category path
126
- $categories = $product->getCategoryIds();
127
-
128
- $categoryPathsToEvaluate = array();
129
- $maxDepth = 0;
130
- $categoryPathToUse = '';
131
-
132
- $storeRootCategoryId = Mage::app()->getStore()->getRootCategoryId();
133
- $storeRootCategoryName = Mage::getModel('catalog/category')->load($storeRootCategoryId)->getName();
134
-
135
- $lastCatUrl = null;
136
- if (!empty($categories))
137
- {
138
- /** @var Mage_Catalog_Model_Resource_Category_Collection $categoryCollection */
139
- $categoryCollection = $product->getCategoryCollection()->addAttributeToSelect('name');
140
-
141
- $depth = 0;
142
- foreach($categoryCollection as $cat1){
143
- $pathIds = explode('/', $cat1->getPath());
144
- unset($pathIds[0]);
145
-
146
- $collection = Mage::getModel('catalog/category')->getCollection()
147
- ->setStoreId(Mage::app()->getStore()->getId())
148
- ->addAttributeToSelect('name')
149
- ->addAttributeToSelect('is_active')
150
- ->addFieldToFilter('entity_id', array('in' => $pathIds))
151
- ->addUrlRewriteToResult();
152
-
153
- $pathByName = array();
154
- /** @var Mage_Catalog_Model_Category $cat */
155
- foreach($collection as $cat){
156
- if ($cat->getName() != $storeRootCategoryName)
157
- {
158
- $pathByName[] = $cat->getName();
159
-
160
- //try get the category URL
161
- try {
162
- $lastCatUrl = $cat->getUrl();
163
- }
164
- catch (Exception $e) {
165
-
166
- }
167
- }
168
- }
169
-
170
- //take the longest (generally more detailed) path
171
- $thisDepth = count($pathByName);
172
- if ($thisDepth > $depth)
173
- {
174
- $depth = $thisDepth;
175
- $categoryPathToUse = implode(' > ', $pathByName);
176
- }
177
- }
178
-
179
- // //we will get all the category paths and then use the most refined, deepest one
180
- // foreach ($categories as $rootCategoryId)
181
- // {
182
- // $depth = 0;
183
- // $category_path = '';
184
- //
185
- // $mageCategoryPath = Mage::getModel('catalog/category')->load($rootCategoryId)->getPath();
186
- // $allCategoryIds = explode('/', $mageCategoryPath);
187
- // unset($allCategoryIds[0]);
188
- //
189
- // $categoryPath = '';
190
- // /**
191
- // * @var Mage_Catalog_Model_Category $category
192
- // */
193
- // foreach ($allCategoryIds as $categoryId)
194
- // {
195
- // $depth++;
196
- // $category = Mage::getModel('catalog/category')->load($categoryId);
197
- // $category_name = $category->getName();
198
- // if ($category_name != $storeRootCategoryName)
199
- // {
200
- // if (!empty($categoryPath))
201
- // {
202
- // $categoryPath.= ' > ';
203
- // }
204
- // $categoryPath.= $category_name;
205
- // }
206
- // }
207
- //
208
- // $categoryPathsToEvaluate[$rootCategoryId]['path'] = $categoryPath;
209
- // $categoryPathsToEvaluate[$rootCategoryId]['depth'] = $depth;
210
- //
211
- // if ($maxDepth < $depth)
212
- // {
213
- // $maxDepth = $depth;
214
- // $categoryPathToUse = $categoryPath;
215
- // }
216
- // }
217
- }
218
-
219
- if ($isVariant && isset($variant))
220
- {
221
- // var_dump($usefulAttributes);
222
- $p['internal_variant_id'] = $variant->getId();
223
-
224
- $variantOptionsTitle = array();
225
- $variantPrice = $variantOptions['basePrice'];
226
-
227
- $urlHashParts = array();
228
-
229
- // Collect options applicable to the configurable product
230
- if (isset($variantOptions['refactoredOptions'][$variant->getId()]))
231
- {
232
- foreach ($variantOptions['refactoredOptions'][$variant->getId()] as $attributeCode => $option) {
233
- $variantOptionsTitle[] = $option['value'];
234
-
235
- //add these configured attributes to the set of parent's attributes
236
- $usefulAttributes[$attributeCode] = $option['value'];
237
-
238
- if (is_null($option['price']))
239
- {
240
- $variantPrice = $variant->getPrice();
241
- }
242
- else
243
- {
244
- $variantPrice += $option['price'];
245
- }
246
-
247
- $urlHashParts[] = $option['attributeId'].'='.$option['valueId'];
248
- }
249
- }
250
-
251
- $variantOptionsTitle = implode(' / ', $variantOptionsTitle);
252
- $title = $data['name'] . ' - ' . $variantOptionsTitle;
253
- $sku = $variant->getData('sku');
254
- $price = $variantPrice;
255
- $salePrice = $variant->getSpecialPrice();
256
- $variantImage = $variant->getImage();
257
-
258
- if (!is_null($variantImage) && !empty($variantImage) && $variantImage!='no_selection')
259
- {
260
- $imageFile = $variant->getImage();
261
- // $imageUrl = $p['image_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).
262
- // 'catalog/product/'.preg_replace('/^\//', '', $imageFile);
263
- $imageUrl = $p['image_url'] = $variant->getMediaConfig()->getMediaUrl($imageFile);
264
- $imageLocalPath = $variant->getMediaConfig()->getMediaPath($imageFile);
265
- }
266
- else
267
- {
268
- $imageFile = $product->getImage();
269
- // $imageUrl = $p['image_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).
270
- // 'catalog/product/'.preg_replace('/^\//', '', $imageFile);
271
- $imageUrl = $p['image_url'] = $product->getMediaConfig()->getMediaUrl($imageFile);
272
- $imageLocalPath = $product->getMediaConfig()->getMediaPath($imageFile);
273
- }
274
- $productUrl = $product->getProductUrl().'#'.implode('&', $urlHashParts);
275
- }
276
- else
277
- {
278
- $p['internal_variant_id'] = '';
279
- $title = $data['name'];
280
- $sku = $data['sku'];
281
-
282
-
283
- if ($product->getTypeId() == 'bundle')
284
- {
285
- /**
286
- * @var $priceModel Mage_Bundle_Model_Product_Price
287
- */
288
- $priceModel = $product->getPriceModel();
289
-
290
- list($price, $_maximalPriceTax) = $priceModel->getTotalPrices($product, null, null, false);
291
- list($priceInclTax, $_maximalPriceInclTax) = $priceModel->getTotalPrices($product, null, true, false);
292
- }
293
- else
294
- {
295
- $price = $product->getPrice();
296
- }
297
-
298
- $salePrice = $product->getSpecialPrice();
299
-
300
- $imageFile = $product->getImage();
301
- // $imageUrl = $p['image_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).
302
- // 'catalog/product/'.preg_replace('/^\//', '', $imageFile);
303
- $imageUrl = $p['image_url'] = $product->getMediaConfig()->getMediaUrl($imageFile);
304
- $imageLocalPath = $product->getMediaConfig()->getMediaPath($imageFile);
305
- $productUrl = $product->getProductUrl();
306
- }
307
-
308
- //if we have previously captured this product and it hasn't changed, don't send through full payload
309
- $wasPreviouslyCaptured = !is_null($lastUpdate) && isset($usefulAttributes['updated_at']) && strtotime($usefulAttributes['updated_at']) < $lastUpdate;
310
- if ($wasPreviouslyCaptured)
311
- {
312
- $p['internal_id'] = $product->getId();
313
- $p['internal_update_time'] = date("c", strtotime($usefulAttributes['updated_at']));
314
- }
315
- else
316
- {
317
- $p['category'] = $categoryPathToUse;
318
- $p['category_url'] = $lastCatUrl;
319
- $p['title'] = $title;
320
- $p['brand'] = ($brand=='No') ? (($manufacturer == 'No') ? '' : $manufacturer) : $brand;
321
- $p['manufacturer'] = ($manufacturer=='No') ? $brand : $manufacturer;
322
- $p['mpn'] = isset($data['model']) ? $data['model'] : $data['sku'];
323
- $p['internal_id'] = $product->getId();
324
- $p['description'] = $data['description'];
325
- $p['short_description'] = $data['short_description'];
326
- $p['weight'] = isset($data['weight']) ? $data['weight'] : 0.00;
327
- $p['sku'] = $sku;
328
- $p['gtin'] = '';
329
-
330
- //$priceModel = $product->getPriceModel();
331
-
332
- //do a currency conversion. if the currency is in base currency, it will be 1.0
333
- $price = $price * $priceCurrencyRate;
334
- $salePrice = $salePrice * $priceCurrencyRate;
335
-
336
- $p['currency'] = $priceCurrency;
337
- $p['price'] = $price;// Mage::helper('checkout')->convertPrice($priceModel->getPrice($product), false);
338
- $p['sale_price'] = '';
339
- $p['sale_price_effective_date'] = '';
340
- if ($salePrice != $p['price'])
341
- {
342
- $p['sale_price'] = $salePrice;
343
- if ($product->getSpecialFromDate()!=null && $product->getSpecialToDate()!=null)
344
- {
345
- $p['sale_price_effective_date'] = date("c", strtotime(date("Y-m-d 00:00:00", strtotime($product->getSpecialFromDate())))).'/'.date("c", strtotime(date("Y-m-d 23:59:59", strtotime($product->getSpecialToDate()))));
346
- }
347
- }
348
-
349
- $p['delivery_cost'] = 0.00;
350
- $p['tax'] = 0.00;
351
- $p['url'] = $productUrl;
352
- $p['internal_update_time'] = isset($usefulAttributes['updated_at']) ? date("c", strtotime($usefulAttributes['updated_at'])) : '';
353
-
354
- $p['image_url'] = $imageUrl;
355
- if (file_exists($imageLocalPath))
356
- {
357
- $p['image_modified_time'] = date("c", filemtime($imageLocalPath));
358
- }
359
- $p['availability'] = ($stockItem->getIsInStock())?'in stock':'out of stock';
360
- $p['quantity'] = $stockItem->getQty();
361
- $p['condition'] = '';
362
- $p['availability_date'] = '';
363
- $p['attributes'] = $usefulAttributes;
364
- $imageGallery = array();
365
- foreach ($product->getMediaGalleryImages() as $image)
366
- {
367
- $galleryImage = array();
368
- $galleryImage['url'] = $image['url'];
369
- if (file_exists($image['path']))
370
- {
371
- $galleryImage['image_modified_time'] = date("c", filemtime($image['path']));
372
- }
373
- $imageGallery[] = $galleryImage;
374
- }
375
- $p['extra_images'] = $imageGallery;
376
- }
377
-
378
- return $p;
379
- }
380
-
381
- public function getItems($page = null, $numPerPage = 1000, $lastUpdate = null, $store = null, $priceCurrency = null, $priceCurrencyRate = null, $allowVariants = true)
382
- {
383
- /* @var Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $collection */
384
- $collection = Mage::getModel('catalog/product')->getCollection()
385
- ->addAttributeToSelect('*')
386
- ->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
387
- ->addAttributeToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
388
-
389
- /**
390
- * For per-store system
391
- */
392
- if (!is_null($store))
393
- {
394
- $collection->addStoreFilter(Mage::app()->getStore($store)->getId());
395
- }
396
-
397
- if (!is_null($page))
398
- {
399
- $offset = ($page * $numPerPage) - $numPerPage;
400
- $productIds = $collection->getAllIds($numPerPage, $offset);
401
- }
402
- else
403
- {
404
- $productIds = $collection->getAllIds();
405
- }
406
-
407
- $products = array();
408
- foreach ($productIds as $productId)
409
- {
410
- Mage::getModel('catalog/product')->reset();
411
- /** @var Mage_Catalog_Model_Product $product */
412
- $product = Mage::getModel('catalog/product')->load($productId);
413
-
414
- /**
415
- * Get variants, if there are any
416
- * If there are variants that are visible in the catalog, we will skip them when we iterate normally
417
- */
418
-
419
- //if we have a configurable product, capture the variants
420
- if ($product->getTypeId() == 'configurable' && $allowVariants)
421
- {
422
- /** @var Mage_Catalog_Model_Product_Type_Configurable $configModel */
423
- $configModel = Mage::getModel('catalog/product_type_configurable');
424
-
425
- // $timeStart = microtime(true);
426
- // $children = $configModel->getChildrenIds($product->getId());
427
- // $children = array_pop($children);
428
- // var_dump("Time for GetIDs: ".(microtime(true) - $timeStart));
429
-
430
- $timeStart = microtime(true);
431
- $children = Mage::getResourceSingleton('catalog/product_type_configurable')
432
- ->getChildrenIds($product->getId());
433
- // var_dump("Time for GetIDs 2: ".(microtime(true) - $timeStart));
434
- $children = array_pop($children);
435
- // var_dump($children);
436
-
437
- // $timeStart = microtime(true);
438
- // $children = $configModel->getUsedProducts(null,$product);
439
- // var_dump("Time for GetUsed: ".(microtime(true) - $timeStart));
440
- // exit();
441
-
442
- if (count($children) > 0)
443
- {
444
- $parent = $product;
445
-
446
- //get variant options
447
- $layout = Mage::getSingleton('core/layout');
448
- $block = $layout->createBlock('catalog/product_view_type_configurable');
449
- $block->setProduct($parent);
450
- $variantOptions = Mage::helper('core')->jsonDecode($block->getJsonConfig());
451
-
452
- $variantAttributes = array();
453
- foreach ($variantOptions['attributes'] as $attributeId => $options)
454
- {
455
- $code = $options['code'];
456
- foreach ($options['options'] as $option)
457
- {
458
- $value = $option['label'];
459
- $price = @$option['price'];
460
- $valueId = $option['id'];
461
- foreach ($option['products'] as $productId)
462
- {
463
- //$children[] = $productId;
464
- $variantAttributes[$productId][$code]['value'] = $value;
465
- $variantAttributes[$productId][$code]['price'] = $price;
466
- $variantAttributes[$productId][$code]['valueId'] = $valueId;
467
- $variantAttributes[$productId][$code]['attributeId'] = $attributeId;
468
- }
469
- }
470
- }
471
- $variantOptions['refactoredOptions'] = $variantAttributes;
472
-
473
-
474
- foreach ($children as $variantId)
475
- {
476
- /** @var Mage_Catalog_Model_Product $variant */
477
- $variant = Mage::getModel('catalog/product')->load($variantId);
478
-
479
- $productData = $this->getProductInfo($variant, $parent, $variantOptions, $lastUpdate, $priceCurrency, $priceCurrencyRate);
480
- if (!empty($productData))
481
- {
482
- $products[] = $productData;
483
- }
484
- }
485
- }
486
- }
487
- else
488
- {
489
- $productData = $this->getProductInfo($product, null, null, $lastUpdate, $priceCurrency, $priceCurrencyRate);
490
- if (!empty($productData))
491
- {
492
- $products[] = $productData;
493
- }
494
- }
495
- }
496
-
497
- return $products;
498
- }
499
-
500
- public function getItem($itemId, $store = null, $priceCurrency = null, $priceCurrencyRate = null)
501
- {
502
- $products = array();
503
-
504
- $product = Mage::getModel('catalog/product')->load($itemId);
505
-
506
- $products[] = $this->getProductInfo($product, null, null, null, $priceCurrency, $priceCurrencyRate);
507
-
508
- return $products;
509
- }
510
-
511
- public function getStockQuantity($itemId, $store = null)
512
- {
513
- $product = Mage::getModel('catalog/product')->load($itemId);
514
-
515
- /* @var Mage_CatalogInventory_Model_Stock_Item $stockItem */
516
- $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product);
517
-
518
- return $stockItem->getQty();
519
- }
520
}
1
+ <?php
2
+
3
+ class ShoppingFeeder_Service_Model_Offers extends Mage_Core_Model_Abstract
4
+ {
5
+ public function __construct()
6
+ {
7
+ $this->_init('shoppingfeeder_service/offers');
8
+ }
9
+
10
+ private function hasParent($product)
11
+ {
12
+ $parents = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId());
13
+ return !empty($parents);
14
+ }
15
+
16
+ private function getProductInfo(Mage_Catalog_Model_Product $product, Mage_Catalog_Model_Product $parent = null, $variantOptions = null, $lastUpdate = null, $priceCurrency, $priceCurrencyRate)
17
+ {
18
+ /** @var Mage_Catalog_Model_Product_Type_Configurable $configModel */
19
+ $configModel = Mage::getModel('catalog/product_type_configurable');
20
+
21
+ $p = array();
22
+
23
+ $isVariant = !is_null($parent);
24
+
25
+ /**
26
+ * We only want to pull variants (children of configurable products) that are children, not as standalone products
27
+ */
28
+ //if this product's parent is visible in catalog and search, Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
29
+ //we will find this product when we fetch all the children of this parent through a normal iteration, so return nothing
30
+ if (!$isVariant && $this->hasParent($product))
31
+ {
32
+ return array();
33
+ }
34
+
35
+ if ($isVariant)
36
+ {
37
+ $variant = $product;
38
+ $product = $parent;
39
+ /* @var Mage_CatalogInventory_Model_Stock_Item $stockItem */
40
+ $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($variant);
41
+ }
42
+ else
43
+ {
44
+ /* @var Mage_CatalogInventory_Model_Stock_Item $stockItem */
45
+ $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product);
46
+ }
47
+
48
+ $data = $product->getData();
49
+
50
+ $attributes = $product->getAttributes();
51
+
52
+ $manufacturer = '';
53
+ $brand = '';
54
+
55
+ $usefulAttributes = array();
56
+
57
+ /**
58
+ * @var Mage_Eav_Model_Entity_Attribute_Abstract $attribute
59
+ */
60
+ // var_dump("");
61
+ // var_dump("");
62
+ // var_dump("");
63
+ foreach ($attributes as $attribute)
64
+ {
65
+ $attributeCode = $attribute->getAttributeCode();
66
+ $attributeLabel = $attribute->getData('frontend_label');
67
+
68
+ if ($isVariant)
69
+ {
70
+ $value = $attribute->getFrontend()->getValue($variant);
71
+ }
72
+ else
73
+ {
74
+ $value = $attribute->getFrontend()->getValue($product);
75
+ }
76
+
77
+ // var_dump($attributeCode. ' : '.print_r($value, true));
78
+ // var_dump($attributeLabel. ' : '.print_r($value, true));
79
+
80
+ if (preg_match('/^manufacturer#x2F;i', $attributeCode) || preg_match('/^manufacturer#x2F;i', $attributeLabel))
81
+ {
82
+ $manufacturer = $value;
83
+ }
84
+
85
+ if (preg_match('/^brand#x2F;i', $attributeCode) || preg_match('/^brand#x2F;i', $attributeLabel))
86
+ {
87
+ $brand = $value;
88
+ }
89
+
90
+ /*
91
+ if (preg_match('/age/i', $attributeCode) || preg_match('/age/i', $attributeLabel))
92
+ {
93
+ $usefulAttributes['age'] = $value;
94
+ }
95
+ if (preg_match('/color|colour/i', $attributeCode) || preg_match('/color|colour/i', $attributeLabel))
96
+ {
97
+ $usefulAttributes['colour'] = $value;
98
+ }
99
+ if (preg_match('/size/i', $attributeCode) || preg_match('/size/i', $attributeLabel))
100
+ {
101
+ $usefulAttributes['size'] = $value;
102
+ }
103
+ if (preg_match('/gender|sex/i', $attributeCode) || preg_match('/gender|sex/i', $attributeLabel))
104
+ {
105
+ $usefulAttributes['gender'] = $value;
106
+ }
107
+ if (preg_match('/material/i', $attributeCode) || preg_match('/material/i', $attributeLabel))
108
+ {
109
+ $usefulAttributes['material'] = $value;
110
+ }
111
+ if (preg_match('/pattern/i', $attributeCode) || preg_match('/pattern/i', $attributeLabel))
112
+ {
113
+ $usefulAttributes['pattern'] = $value;
114
+ }
115
+ */
116
+
117
+ $attributeValue = $attribute->getFrontend()->getValue($product);
118
+ //don't deal with arrays
119
+ if (!is_array($attributeValue))
120
+ {
121
+ if (!is_null($product->getData($attributeCode)) && ((string)$attributeValue != ''))
122
+ {
123
+ $usefulAttributes[$attributeCode] = $value;
124
+ }
125
+ }
126
+ }
127
+ // exit();
128
+
129
+ //category path
130
+ $categories = $product->getCategoryIds();
131
+
132
+ $categoryPathsToEvaluate = array();
133
+ $maxDepth = 0;
134
+ $categoryPathToUse = '';
135
+
136
+ $storeRootCategoryId = Mage::app()->getStore()->getRootCategoryId();
137
+ $storeRootCategoryName = Mage::getModel('catalog/category')->load($storeRootCategoryId)->getName();
138
+
139
+ $lastCatUrl = null;
140
+ if (!empty($categories))
141
+ {
142
+ /** @var Mage_Catalog_Model_Resource_Category_Collection $categoryCollection */
143
+ $categoryCollection = $product->getCategoryCollection()->addAttributeToSelect('name');
144
+
145
+ $depth = 0;
146
+ foreach($categoryCollection as $cat1){
147
+ $pathIds = explode('/', $cat1->getPath());
148
+ unset($pathIds[0]);
149
+
150
+ $collection = Mage::getModel('catalog/category')->getCollection()
151
+ ->setStoreId(Mage::app()->getStore()->getId())
152
+ ->addAttributeToSelect('name')
153
+ ->addAttributeToSelect('is_active')
154
+ ->addFieldToFilter('entity_id', array('in' => $pathIds))
155
+ ->addUrlRewriteToResult();
156
+
157
+ $pathByName = array();
158
+ /** @var Mage_Catalog_Model_Category $cat */
159
+ foreach($collection as $cat){
160
+ if ($cat->getName() != $storeRootCategoryName)
161
+ {
162
+ $pathByName[] = $cat->getName();
163
+
164
+ //try get the category URL
165
+ try {
166
+ $lastCatUrl = $cat->getUrl();
167
+ }
168
+ catch (Exception $e) {
169
+
170
+ }
171
+ }
172
+ }
173
+
174
+ //take the longest (generally more detailed) path
175
+ $thisDepth = count($pathByName);
176
+ if ($thisDepth > $depth)
177
+ {
178
+ $depth = $thisDepth;
179
+ $categoryPathToUse = implode(' > ', $pathByName);
180
+ }
181
+ }
182
+
183
+ // //we will get all the category paths and then use the most refined, deepest one
184
+ // foreach ($categories as $rootCategoryId)
185
+ // {
186
+ // $depth = 0;
187
+ // $category_path = '';
188
+ //
189
+ // $mageCategoryPath = Mage::getModel('catalog/category')->load($rootCategoryId)->getPath();
190
+ // $allCategoryIds = explode('/', $mageCategoryPath);
191
+ // unset($allCategoryIds[0]);
192
+ //
193
+ // $categoryPath = '';
194
+ // /**
195
+ // * @var Mage_Catalog_Model_Category $category
196
+ // */
197
+ // foreach ($allCategoryIds as $categoryId)
198
+ // {
199
+ // $depth++;
200
+ // $category = Mage::getModel('catalog/category')->load($categoryId);
201
+ // $category_name = $category->getName();
202
+ // if ($category_name != $storeRootCategoryName)
203
+ // {
204
+ // if (!empty($categoryPath))
205
+ // {
206
+ // $categoryPath.= ' > ';
207
+ // }
208
+ // $categoryPath.= $category_name;
209
+ // }
210
+ // }
211
+ //
212
+ // $categoryPathsToEvaluate[$rootCategoryId]['path'] = $categoryPath;
213
+ // $categoryPathsToEvaluate[$rootCategoryId]['depth'] = $depth;
214
+ //
215
+ // if ($maxDepth < $depth)
216
+ // {
217
+ // $maxDepth = $depth;
218
+ // $categoryPathToUse = $categoryPath;
219
+ // }
220
+ // }
221
+ }
222
+
223
+ if ($isVariant && isset($variant))
224
+ {
225
+ // var_dump($usefulAttributes);
226
+ $p['internal_variant_id'] = $variant->getId();
227
+
228
+ $variantOptionsTitle = array();
229
+ $variantPrice = $variantOptions['basePrice'];
230
+
231
+ $urlHashParts = array();
232
+
233
+ // Collect options applicable to the configurable product
234
+ if (isset($variantOptions['refactoredOptions'][$variant->getId()]))
235
+ {
236
+ foreach ($variantOptions['refactoredOptions'][$variant->getId()] as $attributeCode => $option) {
237
+ $variantOptionsTitle[] = $option['value'];
238
+
239
+ //add these configured attributes to the set of parent's attributes
240
+ $usefulAttributes[$attributeCode] = $option['value'];
241
+
242
+ if (is_null($option['price']))
243
+ {
244
+ $variantPrice = $variant->getPrice();
245
+ }
246
+ else
247
+ {
248
+ $variantPrice += $option['price'];
249
+ }
250
+
251
+ $urlHashParts[] = $option['attributeId'].'='.$option['valueId'];
252
+ }
253
+ }
254
+
255
+ $variantOptionsTitle = implode(' / ', $variantOptionsTitle);
256
+ $title = $data['name'] . ' - ' . $variantOptionsTitle;
257
+ $sku = $variant->getData('sku');
258
+ $price = $variantPrice;
259
+ $salePrice = $variant->getSpecialPrice();
260
+ $variantImage = $variant->getImage();
261
+
262
+ if (!is_null($variantImage) && !empty($variantImage) && $variantImage!='no_selection')
263
+ {
264
+ $imageFile = $variant->getImage();
265
+ // $imageUrl = $p['image_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).
266
+ // 'catalog/product/'.preg_replace('/^\//', '', $imageFile);
267
+ $imageUrl = $p['image_url'] = $variant->getMediaConfig()->getMediaUrl($imageFile);
268
+ $imageLocalPath = $variant->getMediaConfig()->getMediaPath($imageFile);
269
+ }
270
+ else
271
+ {
272
+ $imageFile = $product->getImage();
273
+ // $imageUrl = $p['image_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).
274
+ // 'catalog/product/'.preg_replace('/^\//', '', $imageFile);
275
+ $imageUrl = $p['image_url'] = $product->getMediaConfig()->getMediaUrl($imageFile);
276
+ $imageLocalPath = $product->getMediaConfig()->getMediaPath($imageFile);
277
+ }
278
+ $productUrl = $product->getProductUrl().'#'.implode('&', $urlHashParts);
279
+ }
280
+ else
281
+ {
282
+ $p['internal_variant_id'] = '';
283
+ $title = $data['name'];
284
+ $sku = $data['sku'];
285
+
286
+
287
+ if ($product->getTypeId() == 'bundle')
288
+ {
289
+ /**
290
+ * @var $priceModel Mage_Bundle_Model_Product_Price
291
+ */
292
+ $priceModel = $product->getPriceModel();
293
+
294
+ list($price, $_maximalPriceTax) = $priceModel->getTotalPrices($product, null, null, false);
295
+ list($priceInclTax, $_maximalPriceInclTax) = $priceModel->getTotalPrices($product, null, true, false);
296
+ }
297
+ else
298
+ {
299
+ $price = $product->getPrice();
300
+ }
301
+
302
+ $salePrice = $product->getSpecialPrice();
303
+
304
+ $imageFile = $product->getImage();
305
+ // $imageUrl = $p['image_url'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).
306
+ // 'catalog/product/'.preg_replace('/^\//', '', $imageFile);
307
+ $imageUrl = $p['image_url'] = $product->getMediaConfig()->getMediaUrl($imageFile);
308
+ $imageLocalPath = $product->getMediaConfig()->getMediaPath($imageFile);
309
+ $productUrl = $product->getProductUrl();
310
+ }
311
+
312
+ //if we have previously captured this product and it hasn't changed, don't send through full payload
313
+ $wasPreviouslyCaptured = !is_null($lastUpdate) && isset($usefulAttributes['updated_at']) && strtotime($usefulAttributes['updated_at']) < $lastUpdate;
314
+ if ($wasPreviouslyCaptured)
315
+ {
316
+ $p['internal_id'] = $product->getId();
317
+ $p['internal_update_time'] = date("c", strtotime($usefulAttributes['updated_at']));
318
+ }
319
+ else
320
+ {
321
+ $p['category'] = $categoryPathToUse;
322
+ $p['category_url'] = $lastCatUrl;
323
+ $p['title'] = $title;
324
+ $p['brand'] = ($brand=='No') ? (($manufacturer == 'No') ? '' : $manufacturer) : $brand;
325
+ $p['manufacturer'] = ($manufacturer=='No') ? $brand : $manufacturer;
326
+ $p['mpn'] = isset($data['model']) ? $data['model'] : $data['sku'];
327
+ $p['internal_id'] = $product->getId();
328
+ $p['description'] = $data['description'];
329
+ $p['short_description'] = $data['short_description'];
330
+ $p['weight'] = isset($data['weight']) ? $data['weight'] : 0.00;
331
+ $p['sku'] = $sku;
332
+ $p['gtin'] = '';
333
+
334
+ //$priceModel = $product->getPriceModel();
335
+
336
+ //do a currency conversion. if the currency is in base currency, it will be 1.0
337
+ $price = $price * $priceCurrencyRate;
338
+ $salePrice = $salePrice * $priceCurrencyRate;
339
+
340
+ $p['currency'] = $priceCurrency;
341
+ $p['price'] = $price;// Mage::helper('checkout')->convertPrice($priceModel->getPrice($product), false);
342
+ $p['sale_price'] = '';
343
+ $p['sale_price_effective_date'] = '';
344
+ if ($salePrice != $p['price'])
345
+ {
346
+ $p['sale_price'] = $salePrice;
347
+ if ($product->getSpecialFromDate()!=null && $product->getSpecialToDate()!=null)
348
+ {
349
+ $p['sale_price_effective_date'] = date("c", strtotime(date("Y-m-d 00:00:00", strtotime($product->getSpecialFromDate())))).'/'.date("c", strtotime(date("Y-m-d 23:59:59", strtotime($product->getSpecialToDate()))));
350
+ }
351
+ }
352
+
353
+ $p['delivery_cost'] = 0.00;
354
+ $p['tax'] = 0.00;
355
+ $p['url'] = $productUrl;
356
+ $p['internal_update_time'] = isset($usefulAttributes['updated_at']) ? date("c", strtotime($usefulAttributes['updated_at'])) : '';
357
+
358
+ $p['image_url'] = $imageUrl;
359
+ if (file_exists($imageLocalPath))
360
+ {
361
+ $p['image_modified_time'] = date("c", filemtime($imageLocalPath));
362
+ }
363
+ $p['availability'] = ($stockItem->getIsInStock())?'in stock':'out of stock';
364
+ $p['quantity'] = $stockItem->getQty();
365
+ $p['condition'] = '';
366
+ $p['availability_date'] = '';
367
+ $p['attributes'] = $usefulAttributes;
368
+ $imageGallery = array();
369
+ foreach ($product->getMediaGalleryImages() as $image)
370
+ {
371
+ $galleryImage = array();
372
+ $galleryImage['url'] = $image['url'];
373
+ if (file_exists($image['path']))
374
+ {
375
+ $galleryImage['image_modified_time'] = date("c", filemtime($image['path']));
376
+ }
377
+ $imageGallery[] = $galleryImage;
378
+ }
379
+ $p['extra_images'] = $imageGallery;
380
+ }
381
+
382
+ return $p;
383
+ }
384
+
385
+ public function getItems($page = null, $numPerPage = 1000, $lastUpdate = null, $store = null, $priceCurrency = null, $priceCurrencyRate = null, $allowVariants = true)
386
+ {
387
+ /* @var Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $collection */
388
+ $collection = Mage::getModel('catalog/product')->getCollection()
389
+ ->addAttributeToSelect('*')
390
+ ->addAttributeToFilter('status', Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
391
+ ->addAttributeToFilter('visibility', Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
392
+
393
+ /**
394
+ * For per-store system
395
+ */
396
+ if (!is_null($store))
397
+ {
398
+ $collection->addStoreFilter(Mage::app()->getStore($store)->getId());
399
+ }
400
+
401
+ if (!is_null($page))
402
+ {
403
+ $offset = ($page * $numPerPage) - $numPerPage;
404
+ $productIds = $collection->getAllIds($numPerPage, $offset);
405
+ }
406
+ else
407
+ {
408
+ $productIds = $collection->getAllIds();
409
+ }
410
+
411
+ $products = array();
412
+ foreach ($productIds as $productId)
413
+ {
414
+ Mage::getModel('catalog/product')->reset();
415
+ /** @var Mage_Catalog_Model_Product $product */
416
+ $product = Mage::getModel('catalog/product')->load($productId);
417
+
418
+ /**
419
+ * Get variants, if there are any
420
+ * If there are variants that are visible in the catalog, we will skip them when we iterate normally
421
+ */
422
+
423
+ //if we have a configurable product, capture the variants
424
+ if ($product->getTypeId() == 'configurable' && $allowVariants)
425
+ {
426
+ /** @var Mage_Catalog_Model_Product_Type_Configurable $configModel */
427
+ $configModel = Mage::getModel('catalog/product_type_configurable');
428
+
429
+ // $timeStart = microtime(true);
430
+ // $children = $configModel->getChildrenIds($product->getId());
431
+ // $children = array_pop($children);
432
+ // var_dump("Time for GetIDs: ".(microtime(true) - $timeStart));
433
+
434
+ $timeStart = microtime(true);
435
+ $children = Mage::getResourceSingleton('catalog/product_type_configurable')
436
+ ->getChildrenIds($product->getId());
437
+ // var_dump("Time for GetIDs 2: ".(microtime(true) - $timeStart));
438
+ $children = array_pop($children);
439
+ // var_dump($children);
440
+
441
+ // $timeStart = microtime(true);
442
+ // $children = $configModel->getUsedProducts(null,$product);
443
+ // var_dump("Time for GetUsed: ".(microtime(true) - $timeStart));
444
+ // exit();
445
+
446
+ if (count($children) > 0)
447
+ {
448
+ $parent = $product;
449
+
450
+ //get variant options
451
+ $layout = Mage::getSingleton('core/layout');
452
+ $block = $layout->createBlock('catalog/product_view_type_configurable');
453
+ $block->setProduct($parent);
454
+ $variantOptions = Mage::helper('core')->jsonDecode($block->getJsonConfig());
455
+
456
+ $variantAttributes = array();
457
+ foreach ($variantOptions['attributes'] as $attributeId => $options)
458
+ {
459
+ $code = $options['code'];
460
+ foreach ($options['options'] as $option)
461
+ {
462
+ $value = $option['label'];
463
+ $price = @$option['price'];
464
+ $valueId = $option['id'];
465
+ foreach ($option['products'] as $productId)
466
+ {
467
+ //$children[] = $productId;
468
+ $variantAttributes[$productId][$code]['value'] = $value;
469
+ $variantAttributes[$productId][$code]['price'] = $price;
470
+ $variantAttributes[$productId][$code]['valueId'] = $valueId;
471
+ $variantAttributes[$productId][$code]['attributeId'] = $attributeId;
472
+ }
473
+ }
474
+ }
475
+ $variantOptions['refactoredOptions'] = $variantAttributes;
476
+
477
+
478
+ foreach ($children as $variantId)
479
+ {
480
+ /** @var Mage_Catalog_Model_Product $variant */
481
+ $variant = Mage::getModel('catalog/product')->load($variantId);
482
+
483
+ $productData = $this->getProductInfo($variant, $parent, $variantOptions, $lastUpdate, $priceCurrency, $priceCurrencyRate);
484
+ if (!empty($productData))
485
+ {
486
+ $products[] = $productData;
487
+ }
488
+ }
489
+ }
490
+ }
491
+ else
492
+ {
493
+ $productData = $this->getProductInfo($product, null, null, $lastUpdate, $priceCurrency, $priceCurrencyRate);
494
+ if (!empty($productData))
495
+ {
496
+ $products[] = $productData;
497
+ }
498
+ }
499
+ }
500
+
501
+ return $products;
502
+ }
503
+
504
+ public function getItem($itemId, $store = null, $priceCurrency = null, $priceCurrencyRate = null, $allowVariants = true)
505
+ {
506
+ $lastUpdate = null;
507
+ $products = array();
508
+
509
+ $product = Mage::getModel('catalog/product')->load($itemId);
510
+
511
+ if ($product->getTypeId() == 'configurable' && $allowVariants)
512
+ {
513
+ /** @var Mage_Catalog_Model_Product_Type_Configurable $configModel */
514
+ $configModel = Mage::getModel('catalog/product_type_configurable');
515
+
516
+ // $timeStart = microtime(true);
517
+ // $children = $configModel->getChildrenIds($product->getId());
518
+ // $children = array_pop($children);
519
+ // var_dump("Time for GetIDs: ".(microtime(true) - $timeStart));
520
+
521
+ $timeStart = microtime(true);
522
+ $children = Mage::getResourceSingleton('catalog/product_type_configurable')
523
+ ->getChildrenIds($product->getId());
524
+ // var_dump("Time for GetIDs 2: ".(microtime(true) - $timeStart));
525
+ $children = array_pop($children);
526
+ // var_dump($children);
527
+
528
+ // $timeStart = microtime(true);
529
+ // $children = $configModel->getUsedProducts(null,$product);
530
+ // var_dump("Time for GetUsed: ".(microtime(true) - $timeStart));
531
+ // exit();
532
+
533
+ if (count($children) > 0)
534
+ {
535
+ $parent = $product;
536
+
537
+ //get variant options
538
+ $layout = Mage::getSingleton('core/layout');
539
+ $block = $layout->createBlock('catalog/product_view_type_configurable');
540
+ $block->setProduct($parent);
541
+ $variantOptions = Mage::helper('core')->jsonDecode($block->getJsonConfig());
542
+
543
+ $variantAttributes = array();
544
+ foreach ($variantOptions['attributes'] as $attributeId => $options)
545
+ {
546
+ $code = $options['code'];
547
+ foreach ($options['options'] as $option)
548
+ {
549
+ $value = $option['label'];
550
+ $price = @$option['price'];
551
+ $valueId = $option['id'];
552
+ foreach ($option['products'] as $productId)
553
+ {
554
+ //$children[] = $productId;
555
+ $variantAttributes[$productId][$code]['value'] = $value;
556
+ $variantAttributes[$productId][$code]['price'] = $price;
557
+ $variantAttributes[$productId][$code]['valueId'] = $valueId;
558
+ $variantAttributes[$productId][$code]['attributeId'] = $attributeId;
559
+ }
560
+ }
561
+ }
562
+ $variantOptions['refactoredOptions'] = $variantAttributes;
563
+
564
+
565
+ foreach ($children as $variantId)
566
+ {
567
+ /** @var Mage_Catalog_Model_Product $variant */
568
+ $variant = Mage::getModel('catalog/product')->load($variantId);
569
+
570
+ $productData = $this->getProductInfo($variant, $parent, $variantOptions, $lastUpdate, $priceCurrency, $priceCurrencyRate);
571
+ if (!empty($productData))
572
+ {
573
+ $products[] = $productData;
574
+ }
575
+ }
576
+ }
577
+ }
578
+ else
579
+ {
580
+ $products[] = $this->getProductInfo($product, null, null, null, $priceCurrency, $priceCurrencyRate);
581
+ }
582
+
583
+ return $products;
584
+ }
585
+
586
+ public function getStockQuantity($itemId, $store = null)
587
+ {
588
+ $product = Mage::getModel('catalog/product')->load($itemId);
589
+
590
+ /* @var Mage_CatalogInventory_Model_Stock_Item $stockItem */
591
+ $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product);
592
+
593
+ return $stockItem->getQty();
594
+ }
595
}
app/code/community/ShoppingFeeder/Service/Model/Orders.php CHANGED
@@ -1,83 +1,83 @@
1
- <?php
2
-
3
- class ShoppingFeeder_Service_Model_Orders extends Mage_Core_Model_Abstract
4
- {
5
- public function __construct()
6
- {
7
- $this->_init('shoppingfeeder_service/orders');
8
- }
9
-
10
- private function getOrderInfo(Mage_Sales_Model_Order $order)
11
- {
12
- $data = array();
13
-
14
- $orderData = $order->getData();
15
-
16
- //normalise order data for ShoppingFeeder
17
- $data['order_id'] = $orderData['entity_id'];
18
- $data['order_date'] = $orderData['created_at'];
19
- $data['store_order_number'] = $orderData['increment_id'];
20
- $data['store_order_user_id'] = $orderData['customer_id'];
21
- $data['store_order_currency'] = $orderData['order_currency_code'];
22
- $data['store_total_price'] = $orderData['grand_total'];
23
- $data['store_total_line_items_price'] = $orderData['subtotal_incl_tax'];
24
- $data['store_total_tax'] = $orderData['tax_amount'];
25
- $data['store_order_total_discount'] = $orderData['discount_amount'];
26
- $data['store_shipping_price'] = $orderData['shipping_incl_tax'];
27
-
28
- $lineItems = array();
29
- foreach($order->getAllItems() as $item)
30
- {
31
- $lineItems[] = $item->toArray();
32
- }
33
- $data['line_items'] = $lineItems;
34
-
35
- return $data;
36
- }
37
-
38
- public function getItems($page = null, $numPerPage = 1000, $store = null)
39
- {
40
- /* @var Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $collection */
41
- $collection = Mage::getModel('sales/order')->getCollection()
42
- ->addAttributeToSelect('*')
43
- ->addAttributeToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE);
44
-
45
- /**
46
- * For per-store system
47
- */
48
- if (!is_null($store))
49
- {
50
- $collection->addAttributeToFilter('store_id', Mage::app()->getStore($store)->getId());
51
- }
52
-
53
- if (!is_null($page))
54
- {
55
- $offset = ($page * $numPerPage) - $numPerPage;
56
- $orderIds = $collection->getAllIds($numPerPage, $offset);
57
- }
58
- else
59
- {
60
- $orderIds = $collection->getAllIds();
61
- }
62
-
63
- $orders = array();
64
- /* @var Mage_Sales_Model_Order $order */
65
- foreach ($orderIds as $orderId)
66
- {
67
- $order = Mage::getModel('sales/order')->load($orderId);
68
-
69
- $orders[$order->getId()] = $this->getOrderInfo($order);
70
- }
71
- return $orders;
72
- }
73
-
74
- public function getItem($itemId, $store = null)
75
- {
76
- $orders = array();
77
-
78
- $order = Mage::getModel('sales/order')->load($itemId);
79
- $orders[$order->getId()] = $this->getOrderInfo($order);
80
-
81
- return $orders;
82
- }
83
}
1
+ <?php
2
+
3
+ class ShoppingFeeder_Service_Model_Orders extends Mage_Core_Model_Abstract
4
+ {
5
+ public function __construct()
6
+ {
7
+ $this->_init('shoppingfeeder_service/orders');
8
+ }
9
+
10
+ private function getOrderInfo(Mage_Sales_Model_Order $order)
11
+ {
12
+ $data = array();
13
+
14
+ $orderData = $order->getData();
15
+
16
+ //normalise order data for ShoppingFeeder
17
+ $data['order_id'] = $orderData['entity_id'];
18
+ $data['order_date'] = $orderData['created_at'];
19
+ $data['store_order_number'] = $orderData['increment_id'];
20
+ $data['store_order_user_id'] = $orderData['customer_id'];
21
+ $data['store_order_currency'] = $orderData['order_currency_code'];
22
+ $data['store_total_price'] = $orderData['grand_total'];
23
+ $data['store_total_line_items_price'] = $orderData['subtotal_incl_tax'];
24
+ $data['store_total_tax'] = $orderData['tax_amount'];
25
+ $data['store_order_total_discount'] = $orderData['discount_amount'];
26
+ $data['store_shipping_price'] = $orderData['shipping_incl_tax'];
27
+
28
+ $lineItems = array();
29
+ foreach($order->getAllItems() as $item)
30
+ {
31
+ $lineItems[] = $item->toArray();
32
+ }
33
+ $data['line_items'] = $lineItems;
34
+
35
+ return $data;
36
+ }
37
+
38
+ public function getItems($page = null, $numPerPage = 1000, $store = null)
39
+ {
40
+ /* @var Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection $collection */
41
+ $collection = Mage::getModel('sales/order')->getCollection()
42
+ ->addAttributeToSelect('*')
43
+ ->addAttributeToFilter('status', Mage_Sales_Model_Order::STATE_COMPLETE);
44
+
45
+ /**
46
+ * For per-store system
47
+ */
48
+ if (!is_null($store))
49
+ {
50
+ $collection->addAttributeToFilter('store_id', Mage::app()->getStore($store)->getId());
51
+ }
52
+
53
+ if (!is_null($page))
54
+ {
55
+ $offset = ($page * $numPerPage) - $numPerPage;
56
+ $orderIds = $collection->getAllIds($numPerPage, $offset);
57
+ }
58
+ else
59
+ {
60
+ $orderIds = $collection->getAllIds();
61
+ }
62
+
63
+ $orders = array();
64
+ /* @var Mage_Sales_Model_Order $order */
65
+ foreach ($orderIds as $orderId)
66
+ {
67
+ $order = Mage::getModel('sales/order')->load($orderId);
68
+
69
+ $orders[$order->getId()] = $this->getOrderInfo($order);
70
+ }
71
+ return $orders;
72
+ }
73
+
74
+ public function getItem($itemId, $store = null)
75
+ {
76
+ $orders = array();
77
+
78
+ $order = Mage::getModel('sales/order')->load($itemId);
79
+ $orders[$order->getId()] = $this->getOrderInfo($order);
80
+
81
+ return $orders;
82
+ }
83
}
app/code/community/ShoppingFeeder/Service/controllers/AttributesController.php CHANGED
@@ -1,52 +1,52 @@
1
- <?php
2
-
3
- //IMPORTANT - "Controller" directory is not autoloaded
4
- require_once(Mage::getModuleDir('Controller','ShoppingFeeder_Service').DS.'Controller'.DS.'FrontAuth.php');
5
-
6
- class ShoppingFeeder_Service_AttributesController extends ShoppingFeeder_Service_Controller_FrontAuth
7
- {
8
- public function indexAction()
9
- {
10
- set_time_limit(0);
11
-
12
- $store = $this->getRequest()->getParam('store', null);
13
-
14
- /**
15
- * For per-store system
16
- */
17
- if (!is_null($store))
18
- {
19
- Mage::app()->setCurrentStore($store);
20
- }
21
- else
22
- {
23
- $defaultStoreCode = Mage::app()
24
- ->getWebsite(true)
25
- ->getDefaultGroup()
26
- ->getDefaultStore()
27
- ->getCode();
28
-
29
- Mage::app()->setCurrentStore($defaultStoreCode);
30
- }
31
-
32
- $internalAttributes = Mage::getResourceModel('catalog/product_attribute_collection')
33
- ->getItems();
34
-
35
- $attributes = array();
36
- foreach ($internalAttributes as $attribute){
37
- $attributes[$attribute->getAttributecode()] = $attribute->getFrontendLabel();
38
- }
39
-
40
- $responseData = array(
41
- 'status' => 'success',
42
- 'data' => array(
43
- 'attributes' => $attributes,
44
- 'store' => $store
45
- )
46
- );
47
-
48
- header('Content-type: application/json; charset=UTF-8');
49
- echo json_encode($responseData);
50
- exit();
51
- }
52
}
1
+ <?php
2
+
3
+ //IMPORTANT - "Controller" directory is not autoloaded
4
+ require_once(Mage::getModuleDir('Controller','ShoppingFeeder_Service').DS.'Controller'.DS.'FrontAuth.php');
5
+
6
+ class ShoppingFeeder_Service_AttributesController extends ShoppingFeeder_Service_Controller_FrontAuth
7
+ {
8
+ public function indexAction()
9
+ {
10
+ set_time_limit(0);
11
+
12
+ $store = $this->getRequest()->getParam('store', null);
13
+
14
+ /**
15
+ * For per-store system
16
+ */
17
+ if (!is_null($store))
18
+ {
19
+ Mage::app()->setCurrentStore($store);
20
+ }
21
+ else
22
+ {
23
+ $defaultStoreCode = Mage::app()
24
+ ->getWebsite(true)
25
+ ->getDefaultGroup()
26
+ ->getDefaultStore()
27
+ ->getCode();
28
+
29
+ Mage::app()->setCurrentStore($defaultStoreCode);
30
+ }
31
+
32
+ $internalAttributes = Mage::getResourceModel('catalog/product_attribute_collection')
33
+ ->getItems();
34
+
35
+ $attributes = array();
36
+ foreach ($internalAttributes as $attribute){
37
+ $attributes[$attribute->getAttributecode()] = $attribute->getFrontendLabel();
38
+ }
39
+
40
+ $responseData = array(
41
+ 'status' => 'success',
42
+ 'data' => array(
43
+ 'attributes' => $attributes,
44
+ 'store' => $store
45
+ )
46
+ );
47
+
48
+ header('Content-type: application/json; charset=UTF-8');
49
+ echo json_encode($responseData);
50
+ exit();
51
+ }
52
}
app/code/community/ShoppingFeeder/Service/controllers/FeedController.php CHANGED
@@ -1,127 +1,127 @@
1
- <?php
2
-
3
- //IMPORTANT - "Controller" directory is not autoloaded
4
- require_once(Mage::getModuleDir('Controller','ShoppingFeeder_Service').DS.'Controller'.DS.'FrontAuth.php');
5
-
6
- class ShoppingFeeder_Service_FeedController extends ShoppingFeeder_Service_Controller_FrontAuth
7
- {
8
- public function indexAction()
9
- {
10
- set_time_limit(0);
11
-
12
- /** @var ShoppingFeeder_Service_Model_Offers $offersModel */
13
- $offersModel = Mage::getSingleton('shoppingfeeder_service/offers');
14
-
15
- $page = $this->getRequest()->getParam('page', null);
16
- $numPerPage = $this->getRequest()->getParam('num_per_page', 1000);
17
- $offerId = $this->getRequest()->getParam('offer_id', null);
18
- $lastUpdate = $this->getRequest()->getParam('last_update', null);
19
- $store = $this->getRequest()->getParam('store', null);
20
- $currency = $this->getRequest()->getParam('currency', null);
21
- $allowVariants = (intval($this->getRequest()->getParam('allow_variants', 1)) == 1) ? true : false;
22
-
23
- /**
24
- * For per-store system
25
- */
26
- if (!is_null($store))
27
- {
28
- Mage::app()->setCurrentStore($store);
29
- }
30
- else
31
- {
32
- $defaultStoreCode = Mage::app()
33
- ->getWebsite(true)
34
- ->getDefaultGroup()
35
- ->getDefaultStore()
36
- ->getCode();
37
-
38
- Mage::app()->setCurrentStore($defaultStoreCode);
39
- }
40
-
41
- $baseCurrency = Mage::app()->getStore()->getBaseCurrencyCode();
42
- $priceCurrency = (is_null($currency)) ? Mage::app()->getStore()->getDefaultCurrencyCode() : $currency;
43
- $priceCurrencyRate = Mage::helper('directory')->currencyConvert(1, $baseCurrency, $priceCurrency);
44
-
45
- if (is_null($offerId))
46
- {
47
- $offers = $offersModel->getItems($page, $numPerPage, $lastUpdate, $store, $priceCurrency, $priceCurrencyRate, $allowVariants);
48
- }
49
- else
50
- {
51
- $offers = $offersModel->getItem($offerId, $store, $priceCurrency, $priceCurrencyRate);
52
- }
53
-
54
- $responseData = array(
55
- 'status' => 'success',
56
- 'data' => array(
57
- 'page' => $page,
58
- 'num_per_page' => $numPerPage,
59
- 'offers' => $offers,
60
- 'store' => $store,
61
- 'base_currency' => $baseCurrency,
62
- 'price_currency' => $priceCurrency,
63
- 'exchange_Rate' => $priceCurrencyRate
64
- )
65
- );
66
-
67
- header('Content-type: application/json; charset=UTF-8');
68
- echo json_encode($responseData);
69
- exit();
70
- }
71
-
72
- /** Old XML version */
73
- /*
74
- public function indexAction()
75
- {
76
- set_time_limit(0);
77
-
78
- $offersModel = Mage::getSingleton('shoppingfeeder_service/offers');
79
-
80
- $page = $this->getRequest()->getParam('page', null);
81
- $numPerPage = $this->getRequest()->getParam('num_per_page', 1000);
82
-
83
- $offers = $offersModel->getItems($page, $numPerPage);
84
- header('Content-type: text/xml; charset=UTF-8');
85
- echo '<?xml version="1.0" encoding="UTF-8"?>';
86
- echo "\n".'<offers>';
87
- foreach ($offers as $offer) {
88
- echo "\n".'<offer>';
89
- echo "\n".'<category><![CDATA['.$offer['category'].']]></category>';
90
- echo "\n".'<title><![CDATA['.$offer['title'].']]></title>';
91
- echo "\n".'<brand><![CDATA['.$offer['manufacturer'].']]></brand>';
92
- echo "\n".'<manufacturer><![CDATA['.$offer['manufacturer'].']]></manufacturer>';
93
- echo "\n".'<mpn><![CDATA['.$offer['mpn'].']]></mpn>';
94
- echo "\n".'<sku><![CDATA['.$offer['sku'].']]></sku>';
95
- echo "\n".'<gtin>'.$offer['gtin'].'</gtin>';
96
- echo "\n".'<weight>'.$offer['weight'].'</weight>';
97
- echo "\n".'<internal_id><![CDATA['.$offer['internal_id'].']]></internal_id>';
98
- echo "\n".'<internal_variant_id><![CDATA['.$offer['internal_variant_id'].']]></internal_variant_id>';
99
- echo "\n".'<description><![CDATA['.$offer['description'].']]></description>';
100
- echo "\n".'<price>'.$offer['price'].'</price>';
101
- echo "\n".'<sale_price>'.$offer['sale_price'].'</sale_price>';
102
- echo "\n".'<sale_price_effective_date>'.$offer['sale_price_effective_date'].'</sale_price_effective_date>';
103
- echo "\n".'<delivery_cost>'.$offer['delivery_cost'].'</delivery_cost>';
104
- echo "\n".'<tax>'.$offer['tax'].'</tax>';
105
- echo "\n".'<url><![CDATA['.$offer['url'].']]></url>';
106
- echo "\n".'<image_url><![CDATA['.$offer['image_url'].']]></image_url>';
107
- echo "\n".'<quantity>'.$offer['quantity'].'</quantity>';
108
- echo "\n".'<condition>'.$offer['condition'].'</condition>';
109
- echo "\n".'<availability>'.$offer['availability'].'</availability>';
110
- echo "\n".'<availability_date>'.$offer['availability_date'].'</availability_date>';
111
- foreach ($offer['attributes'] as $attributeName => $attributeValue) {
112
- echo "\n".' <attribute name="'.htmlspecialchars($attributeName).'"><![CDATA['.$attributeValue.']]></attribute>';
113
- }
114
- foreach ($offer['extra_images'] as $imageUrl){
115
- echo "\n".' <additional_image_link><![CDATA['.$imageUrl.']]></additional_image_link>';
116
- }
117
- echo "\n".'</offer>';
118
-
119
- flush();
120
- ob_flush();
121
- }
122
- echo "\n".'</offers>';
123
-
124
- exit();
125
- }
126
- */
127
}
1
+ <?php
2
+
3
+ //IMPORTANT - "Controller" directory is not autoloaded
4
+ require_once(Mage::getModuleDir('Controller','ShoppingFeeder_Service').DS.'Controller'.DS.'FrontAuth.php');
5
+
6
+ class ShoppingFeeder_Service_FeedController extends ShoppingFeeder_Service_Controller_FrontAuth
7
+ {
8
+ public function indexAction()
9
+ {
10
+ set_time_limit(0);
11
+
12
+ /** @var ShoppingFeeder_Service_Model_Offers $offersModel */
13
+ $offersModel = Mage::getSingleton('shoppingfeeder_service/offers');
14
+
15
+ $page = $this->getRequest()->getParam('page', null);
16
+ $numPerPage = $this->getRequest()->getParam('num_per_page', 1000);
17
+ $offerId = $this->getRequest()->getParam('offer_id', null);
18
+ $lastUpdate = $this->getRequest()->getParam('last_update', null);
19
+ $store = $this->getRequest()->getParam('store', null);
20
+ $currency = $this->getRequest()->getParam('currency', null);
21
+ $allowVariants = (intval($this->getRequest()->getParam('allow_variants', 1)) == 1) ? true : false;
22
+
23
+ /**
24
+ * For per-store system
25
+ */
26
+ if (!is_null($store))
27
+ {
28
+ Mage::app()->setCurrentStore($store);
29
+ }
30
+ else
31
+ {
32
+ $defaultStoreCode = Mage::app()
33
+ ->getWebsite(true)
34
+ ->getDefaultGroup()
35
+ ->getDefaultStore()
36
+ ->getCode();
37
+
38
+ Mage::app()->setCurrentStore($defaultStoreCode);
39
+ }
40
+
41
+ $baseCurrency = Mage::app()->getStore()->getBaseCurrencyCode();
42
+ $priceCurrency = (is_null($currency)) ? Mage::app()->getStore()->getDefaultCurrencyCode() : $currency;
43
+ $priceCurrencyRate = Mage::helper('directory')->currencyConvert(1, $baseCurrency, $priceCurrency);
44
+
45
+ if (is_null($offerId))
46
+ {
47
+ $offers = $offersModel->getItems($page, $numPerPage, $lastUpdate, $store, $priceCurrency, $priceCurrencyRate, $allowVariants);
48
+ }
49
+ else
50
+ {
51
+ $offers = $offersModel->getItem($offerId, $store, $priceCurrency, $priceCurrencyRate);
52
+ }
53
+
54
+ $responseData = array(
55
+ 'status' => 'success',
56
+ 'data' => array(
57
+ 'page' => $page,
58
+ 'num_per_page' => $numPerPage,
59
+ 'offers' => $offers,
60
+ 'store' => $store,
61
+ 'base_currency' => $baseCurrency,
62
+ 'price_currency' => $priceCurrency,
63
+ 'exchange_Rate' => $priceCurrencyRate
64
+ )
65
+ );
66
+
67
+ header('Content-type: application/json; charset=UTF-8');
68
+ echo json_encode($responseData);
69
+ exit();
70
+ }
71
+
72
+ /** Old XML version */
73
+ /*
74
+ public function indexAction()
75
+ {
76
+ set_time_limit(0);
77
+
78
+ $offersModel = Mage::getSingleton('shoppingfeeder_service/offers');
79
+
80
+ $page = $this->getRequest()->getParam('page', null);
81
+ $numPerPage = $this->getRequest()->getParam('num_per_page', 1000);
82
+
83
+ $offers = $offersModel->getItems($page, $numPerPage);
84
+ header('Content-type: text/xml; charset=UTF-8');
85
+ echo '<?xml version="1.0" encoding="UTF-8"?>';
86
+ echo "\n".'<offers>';
87
+ foreach ($offers as $offer) {
88
+ echo "\n".'<offer>';
89
+ echo "\n".'<category><![CDATA['.$offer['category'].']]></category>';
90
+ echo "\n".'<title><![CDATA['.$offer['title'].']]></title>';
91
+ echo "\n".'<brand><![CDATA['.$offer['manufacturer'].']]></brand>';
92
+ echo "\n".'<manufacturer><![CDATA['.$offer['manufacturer'].']]></manufacturer>';
93
+ echo "\n".'<mpn><![CDATA['.$offer['mpn'].']]></mpn>';
94
+ echo "\n".'<sku><![CDATA['.$offer['sku'].']]></sku>';
95
+ echo "\n".'<gtin>'.$offer['gtin'].'</gtin>';
96
+ echo "\n".'<weight>'.$offer['weight'].'</weight>';
97
+ echo "\n".'<internal_id><![CDATA['.$offer['internal_id'].']]></internal_id>';
98
+ echo "\n".'<internal_variant_id><![CDATA['.$offer['internal_variant_id'].']]></internal_variant_id>';
99
+ echo "\n".'<description><![CDATA['.$offer['description'].']]></description>';
100
+ echo "\n".'<price>'.$offer['price'].'</price>';
101
+ echo "\n".'<sale_price>'.$offer['sale_price'].'</sale_price>';
102
+ echo "\n".'<sale_price_effective_date>'.$offer['sale_price_effective_date'].'</sale_price_effective_date>';
103
+ echo "\n".'<delivery_cost>'.$offer['delivery_cost'].'</delivery_cost>';
104
+ echo "\n".'<tax>'.$offer['tax'].'</tax>';
105
+ echo "\n".'<url><![CDATA['.$offer['url'].']]></url>';
106
+ echo "\n".'<image_url><![CDATA['.$offer['image_url'].']]></image_url>';
107
+ echo "\n".'<quantity>'.$offer['quantity'].'</quantity>';
108
+ echo "\n".'<condition>'.$offer['condition'].'</condition>';
109
+ echo "\n".'<availability>'.$offer['availability'].'</availability>';
110
+ echo "\n".'<availability_date>'.$offer['availability_date'].'</availability_date>';
111
+ foreach ($offer['attributes'] as $attributeName => $attributeValue) {
112
+ echo "\n".' <attribute name="'.htmlspecialchars($attributeName).'"><![CDATA['.$attributeValue.']]></attribute>';
113
+ }
114
+ foreach ($offer['extra_images'] as $imageUrl){
115
+ echo "\n".' <additional_image_link><![CDATA['.$imageUrl.']]></additional_image_link>';
116
+ }
117
+ echo "\n".'</offer>';
118
+
119
+ flush();
120
+ ob_flush();
121
+ }
122
+ echo "\n".'</offers>';
123
+
124
+ exit();
125
+ }
126
+ */
127
}
app/code/community/ShoppingFeeder/Service/controllers/OrdersController.php CHANGED
@@ -1,94 +1,94 @@
1
- <?php
2
-
3
- //IMPORTANT - "Controller" directory is not autoloaded
4
- require_once(Mage::getModuleDir('Controller','ShoppingFeeder_Service').DS.'Controller'.DS.'FrontAuth.php');
5
-
6
- class ShoppingFeeder_Service_OrdersController extends ShoppingFeeder_Service_Controller_FrontAuth
7
- {
8
- public function indexAction()
9
- {
10
- set_time_limit(0);
11
-
12
- /** @var ShoppingFeeder_Service_Model_Orders $ordersModel */
13
- $ordersModel = Mage::getSingleton('shoppingfeeder_service/orders');
14
-
15
- $page = $this->getRequest()->getParam('page', null);
16
- $numPerPage = $this->getRequest()->getParam('num_per_page', 1000);
17
- $orderId = $this->getRequest()->getParam('order_id', null);
18
- $store = $this->getRequest()->getParam('store', null);
19
-
20
- /**
21
- * For per-store system
22
- */
23
- if (!is_null($store))
24
- {
25
- Mage::app()->setCurrentStore($store);
26
- }
27
- else
28
- {
29
- $defaultStoreCode = Mage::app()
30
- ->getWebsite(true)
31
- ->getDefaultGroup()
32
- ->getDefaultStore()
33
- ->getCode();
34
-
35
- Mage::app()->setCurrentStore($defaultStoreCode);
36
- }
37
-
38
- if (is_null($orderId))
39
- {
40
- $orders = $ordersModel->getItems($page, $numPerPage, $store);
41
- }
42
- else
43
- {
44
- $orders = $ordersModel->getItem($orderId, $store);
45
- }
46
-
47
- $responseData = array(
48
- 'status' => 'success',
49
- 'data' => array(
50
- 'page' => $page,
51
- 'num_per_page' => $numPerPage,
52
- 'orders' => $orders,
53
- 'store' => $store
54
- )
55
- );
56
-
57
- header('Content-type: application/json; charset=UTF-8');
58
- echo json_encode($responseData);
59
- exit();
60
- }
61
-
62
- // public function createAction()
63
- // {
64
- // /** @var ShoppingFeeder_Service_Model_Orders $ordersModel */
65
- // $ordersModel = Mage::getSingleton('shoppingfeeder_service/orders');
66
- //
67
- // if ($this->getRequest()->getMethod() == Zend_Http_Client::POST)
68
- // {
69
- // //create the order
70
- // $order = $ordersModel->create();
71
- //
72
- //
73
- // $responseData = array(
74
- // 'status' => 'success',
75
- // 'data' => array(
76
- // 'order' => $order
77
- // )
78
- // );
79
- // }
80
- // else
81
- // {
82
- // $responseData = array(
83
- // 'status' => 'fail',
84
- // 'data' => array(
85
- // 'message' => 'HTTP method incorrect, must be POST'
86
- // )
87
- // );
88
- // }
89
- //
90
- // header('Content-type: application/json; charset=UTF-8');
91
- // echo json_encode($responseData);
92
- // exit();
93
- // }
94
}
1
+ <?php
2
+
3
+ //IMPORTANT - "Controller" directory is not autoloaded
4
+ require_once(Mage::getModuleDir('Controller','ShoppingFeeder_Service').DS.'Controller'.DS.'FrontAuth.php');
5
+
6
+ class ShoppingFeeder_Service_OrdersController extends ShoppingFeeder_Service_Controller_FrontAuth
7
+ {
8
+ public function indexAction()
9
+ {
10
+ set_time_limit(0);
11
+
12
+ /** @var ShoppingFeeder_Service_Model_Orders $ordersModel */
13
+ $ordersModel = Mage::getSingleton('shoppingfeeder_service/orders');
14
+
15
+ $page = $this->getRequest()->getParam('page', null);
16
+ $numPerPage = $this->getRequest()->getParam('num_per_page', 1000);
17
+ $orderId = $this->getRequest()->getParam('order_id', null);
18
+ $store = $this->getRequest()->getParam('store', null);
19
+
20
+ /**
21
+ * For per-store system
22
+ */
23
+ if (!is_null($store))
24
+ {
25
+ Mage::app()->setCurrentStore($store);
26
+ }
27
+ else
28
+ {
29
+ $defaultStoreCode = Mage::app()
30
+ ->getWebsite(true)
31
+ ->getDefaultGroup()
32
+ ->getDefaultStore()
33
+ ->getCode();
34
+
35
+ Mage::app()->setCurrentStore($defaultStoreCode);
36
+ }
37
+
38
+ if (is_null($orderId))
39
+ {
40
+ $orders = $ordersModel->getItems($page, $numPerPage, $store);
41
+ }
42
+ else
43
+ {
44
+ $orders = $ordersModel->getItem($orderId, $store);
45
+ }
46
+
47
+ $responseData = array(
48
+ 'status' => 'success',
49
+