VantageAnalytics_Analytics - Version 1.2.1

Version Notes

1.2.0
-------
- New API

1.1.5
-------
- Minor phpcs code style rule fixes
- Remove embedded sign-up form, registration now begins at app.vantageanalytics.com

1.1.4
------
- Bug fix for webhook URL that could be wrong in some circumstances.

1.1.3
------
- Lower batch size for queue processing to shorten time transaction is kept open

1.1.2
------
- Fix notice error about method overridden from base class with missing default argument

1.1.1
------
- Update debug information

1.1.0
------
- Track checkouts from front-end

1.0.12
-------
- Bug fix: set store domain in product URL and images

1.0.11
-------
- Send Dynamic Product Ad events

1.0.10
--------
- Minor bug fix in export, look for PHP_BINARY correctly

1.0.9
-------
- Try to use PHP_BINARY to find the PHP binary

1.0.8
-------
- Look for PHP binaries in more places

1.0.7
-------

- Fork exec export into 2 children processes to avoid long running process with unbounded memory consumption

1.0.6
-------

Set page size on product collection.

Prefetch some related attributes during product and sales order exports.

Send data to vantage during the data gathering phase of the export process instead of after the data gathering phase is done.

1.0.5
-------

Fixed memory leak in export script which could impact large data exports.

1.0.4
-------
New feature: facebook pixel based visitor and conversion tracking.

1.0.3
-------

Minor bug fix, do not send empty array() objects to Vantage Analytics

1.0.2
-------

Stop sending empty sales quotes to Vantage Analytics.

1.0.1
-------

Improved robustness of historical data export process and report historical data export issues to Vantage Analytics.

1.0.0
-------

First stable release.

Download this release

Release Info

Developer Brandon Kane
Extension VantageAnalytics_Analytics
Version 1.2.1
Comparing to
See all releases


Code changes from version 1.1.5 to 1.2.1

app/code/community/VantageAnalytics/Analytics/Helper/Account.php CHANGED
@@ -29,11 +29,6 @@ class VantageAnalytics_Analytics_Helper_Account extends Mage_Core_Helper_Abstrac
29
  return dirname(Mage::getStoreConfig('vantageanalytics/accountoptions/vantageurl', Mage::app()->getStore())) . '/webhook';
30
  }
31
 
32
- public function registerAccountUrl()
33
- {
34
- return dirname($this->vantageUrl()) . '/register';
35
- }
36
-
37
  public function verifyAccountUrl()
38
  {
39
  return dirname($this->vantageUrl()) . '/verify';
@@ -93,12 +88,23 @@ class VantageAnalytics_Analytics_Helper_Account extends Mage_Core_Helper_Abstrac
93
  Mage::getConfig()->reinit();
94
  }
95
 
 
 
 
 
 
 
 
 
 
 
 
96
  public function getExtensionVersion()
97
  {
98
  return (string) Mage::getConfig()->getNode()->modules->VantageAnalytics_Analytics->version;
99
  }
100
 
101
- protected function collectStoreInfo()
102
  {
103
  $stores = array();
104
 
@@ -113,50 +119,31 @@ class VantageAnalytics_Analytics_Helper_Account extends Mage_Core_Helper_Abstrac
113
  return $stores;
114
  }
115
 
116
- public function registerAccount($params)
117
- {
118
- $verifyUrl = Mage::helper("analytics/account")->verifyAccountUrl();
119
- Mage::helper("analytics/log")->logInfo("The account verify URL is ${verifyUrl}");
120
 
121
- $channel = curl_init($verifyUrl);
122
-
123
- curl_setopt($channel, CURLOPT_SSL_VERIFYHOST, 2);
124
- curl_setopt($channel, CURLOPT_CUSTOMREQUEST, 'POST');
125
- curl_setopt($channel, CURLOPT_RETURNTRANSFER, true);
126
- curl_setopt($channel, CURLOPT_CONNECTTIMEOUT_MS, 12200);
127
- curl_setopt($channel, CURLOPT_TIMEOUT_MS, 15000);
128
-
129
- $account = array(
130
- 'username' => $params['username'],
131
- 'secret' => $params['secret'],
132
- 'stores' => $this->collectStoreInfo()
133
- );
134
-
135
- $body = json_encode($account);
136
- curl_setopt($channel, CURLOPT_POSTFIELDS, $body);
137
- $headers = array(
138
- 'Content-type: application/json',
139
- 'Content-length: ' . strlen($body)
140
- );
141
-
142
-
143
- curl_setopt($channel, CURLOPT_HTTPHEADER, $headers);
144
- $result = curl_exec($channel);
145
 
146
- $status = curl_getinfo($channel, CURLINFO_HTTP_CODE);
147
- if ($status >= 500) {
148
- Mage::throwException("An error occurred. Please try again later.");
149
  }
150
 
151
- if (curl_errno($channel)) {
152
- $errorDesc = curl_error($channel);
153
- curl_close($channel);
154
- Mage::throwException("An error occurred. Please try again later.");
155
  }
156
 
157
- curl_close($channel);
158
- $response = json_decode($result, true);
 
159
 
160
- return $response;
 
 
 
161
  }
162
  }
29
  return dirname(Mage::getStoreConfig('vantageanalytics/accountoptions/vantageurl', Mage::app()->getStore())) . '/webhook';
30
  }
31
 
 
 
 
 
 
32
  public function verifyAccountUrl()
33
  {
34
  return dirname($this->vantageUrl()) . '/verify';
88
  Mage::getConfig()->reinit();
89
  }
90
 
91
+ public function isCronEnabled()
92
+ {
93
+ return Mage::getStoreConfig('vantageanalytics/export/cron', Mage::app()->getStore());
94
+ }
95
+
96
+ public function setCronEnabled($enabled)
97
+ {
98
+ Mage::getConfig()->saveConfig('vantageanalytics/export/cron', $enabled);
99
+ Mage::getConfig()->reinit();
100
+ }
101
+
102
  public function getExtensionVersion()
103
  {
104
  return (string) Mage::getConfig()->getNode()->modules->VantageAnalytics_Analytics->version;
105
  }
106
 
107
+ public function collectStoreInfo()
108
  {
109
  $stores = array();
110
 
119
  return $stores;
120
  }
121
 
122
+ public function hashEquals($safe, $user) {
123
+ $safeLen = strlen($safe);
124
+ $userLen = strlen($user);
 
125
 
126
+ if ($safeLen == 0) {
127
+ return false;
128
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
 
130
+ if ($userLen != $safeLen) {
131
+ return false;
 
132
  }
133
 
134
+ $result = 0;
135
+
136
+ for ($i = 0; $i < $userLen; $i++) {
137
+ $result |= (ord($safe[$i]) ^ ord($user[$i]));
138
  }
139
 
140
+ // They are only identical strings if $result is exactly 0...
141
+ return $result === 0;
142
+ }
143
 
144
+ public function verifySecret($providedSecret)
145
+ {
146
+ $mySecret = $this->secret();
147
+ return $this->hashEquals($mySecret, $providedSecret);
148
  }
149
  }
app/code/community/VantageAnalytics/Analytics/Helper/Queue.php CHANGED
@@ -68,9 +68,26 @@ class VantageAnalytics_Analytics_Helper_Queue extends Mage_Core_Helper_Abstract
68
  }
69
  }
70
 
71
- public function isEmpty($queue)
72
  {
73
- return ($this->getQueue()->count() == 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  }
75
 
76
  public function enqueue($task)
68
  }
69
  }
70
 
71
+ public function receiveMessages($batchSize)
72
  {
73
+ $queue = $this->getQueue();
74
+ return $queue->receive($batchSize);
75
+ }
76
+
77
+ public function deleteMessage($message)
78
+ {
79
+ $queue = $this->getQueue();
80
+ $queue->deleteMessage($message);
81
+ }
82
+
83
+ public function getMessageCount()
84
+ {
85
+ return $this->getQueue()->count();
86
+ }
87
+
88
+ public function isEmpty()
89
+ {
90
+ return $this->getMessageCount() == 0;
91
  }
92
 
93
  public function enqueue($task)
app/code/community/VantageAnalytics/Analytics/Model/Api/Inline.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VantageAnalytics_Analytics_Model_Api_Inline
4
+ {
5
+ public function __construct()
6
+ {
7
+ $this->queue = array();
8
+ $this->metaData = array();
9
+ }
10
+
11
+ public function enqueue($entityMethod, $entity, $isExport=false)
12
+ {
13
+ if ($entityMethod == 'progress') {
14
+ $this->metaData = $entity;
15
+ } else {
16
+ $this->queue[] = $entity;
17
+ }
18
+ }
19
+
20
+ public function isEmpty()
21
+ {
22
+ return true;
23
+ }
24
+
25
+ public function processQueue()
26
+ {
27
+ return; // no-op
28
+ }
29
+ }
app/code/community/VantageAnalytics/Analytics/Model/Api/RequestQueue.php CHANGED
@@ -21,4 +21,16 @@ class VantageAnalytics_Analytics_Model_Api_RequestQueue
21
  'args' => array($entityMethod, $entity)
22
  ));
23
  }
 
 
 
 
 
 
 
 
 
 
 
 
24
  }
21
  'args' => array($entityMethod, $entity)
22
  ));
23
  }
24
+
25
+ public function processQueue()
26
+ {
27
+ $queue = Mage::helper('analytics/queue');
28
+ return $queue->processQueue();
29
+ }
30
+
31
+ public function isEmpty()
32
+ {
33
+ $queue = Mage::helper('analytics/queue');
34
+ return $queue->isEmpty();
35
+ }
36
  }
app/code/community/VantageAnalytics/Analytics/Model/Cron.php CHANGED
@@ -69,8 +69,17 @@ class VantageAnalytics_Analytics_Model_Cron
69
  return Mage::helper('analytics/account')->isVerified();
70
  }
71
 
 
 
 
 
 
72
  public function run()
73
  {
 
 
 
 
74
  if (!$this->accountIsVerified()) {
75
  $this->log('account verification required or failed. Not running.');
76
  return;
69
  return Mage::helper('analytics/account')->isVerified();
70
  }
71
 
72
+ protected function cronIsEnabled()
73
+ {
74
+ return Mage::helper('analytics/account')->isCronEnabled();
75
+ }
76
+
77
  public function run()
78
  {
79
+ if (!$this->cronIsEnabled()) {
80
+ return;
81
+ }
82
+
83
  if (!$this->accountIsVerified()) {
84
  $this->log('account verification required or failed. Not running.');
85
  return;
app/code/community/VantageAnalytics/Analytics/Model/Export/Base.php CHANGED
@@ -103,14 +103,14 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
103
  }
104
  }
105
 
106
- protected function exportEntity($entity, $store)
107
  {
108
  $transformer = $this->makeTransformer($entity, $store);
109
  $data = $transformer->toVantage();
110
  $this->enqueue($data);
111
  }
112
 
113
- protected function exportMetaData($websiteId, $entity, $currentPage, $totalPages, $pageSize)
114
  {
115
  $this->api->enqueue(
116
  'progress',
@@ -119,7 +119,8 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
119
  'entity_type' => $entity,
120
  'current_page' => $currentPage,
121
  'total_pages' => $totalPages,
122
- 'page_size' => $pageSize
 
123
  ),
124
  true
125
  );
@@ -134,6 +135,7 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
134
  return;
135
  }
136
  $totalPages = $collection->getLastPageNumber();
 
137
  $entityName = $this->getEntityName();
138
  $currentPage = 0;
139
  $endPage = $currentPage + $numberOfPages;
@@ -144,12 +146,13 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
144
  $maxChildren = 1;
145
 
146
  while ($currentPage <= $totalPages) {
147
- $this->exportMetaData(
148
  $website->getWebsiteId(),
149
  strtolower($entityName),
150
  $currentPage,
151
  $totalPages,
152
- $this->pageSize
 
153
  );
154
 
155
  if ($endPage >= $totalPages) {
@@ -177,6 +180,31 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
177
  }
178
  }
179
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
  public function exportPage($websiteId, $startPage, $endPage)
181
  {
182
  $websites = Mage::app()->getWebsites();
@@ -188,6 +216,18 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
188
  $currentPage = $startPage;
189
  while ($currentPage < $endPage) {
190
  $collection = $this->createCollection($website, $currentPage);
 
 
 
 
 
 
 
 
 
 
 
 
191
 
192
  foreach ($collection as $entity) {
193
  $this->exportEntity($entity, $store);
@@ -212,7 +252,6 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
212
 
213
  protected function processQueue()
214
  {
215
- $queue = Mage::helper('analytics/queue');
216
- $queue->processQueue();
217
  }
218
  }
103
  }
104
  }
105
 
106
+ public function exportEntity($entity, $store)
107
  {
108
  $transformer = $this->makeTransformer($entity, $store);
109
  $data = $transformer->toVantage();
110
  $this->enqueue($data);
111
  }
112
 
113
+ protected function _exportMetaData($websiteId, $entity, $currentPage, $totalPages, $pageSize, $totalItems)
114
  {
115
  $this->api->enqueue(
116
  'progress',
119
  'entity_type' => $entity,
120
  'current_page' => $currentPage,
121
  'total_pages' => $totalPages,
122
+ 'page_size' => $pageSize,
123
+ 'total_items' => $totalItems
124
  ),
125
  true
126
  );
135
  return;
136
  }
137
  $totalPages = $collection->getLastPageNumber();
138
+ $totalItems = $collection->getSize();
139
  $entityName = $this->getEntityName();
140
  $currentPage = 0;
141
  $endPage = $currentPage + $numberOfPages;
146
  $maxChildren = 1;
147
 
148
  while ($currentPage <= $totalPages) {
149
+ $this->_exportMetaData(
150
  $website->getWebsiteId(),
151
  strtolower($entityName),
152
  $currentPage,
153
  $totalPages,
154
+ $this->pageSize,
155
+ $totalItems
156
  );
157
 
158
  if ($endPage >= $totalPages) {
180
  }
181
  }
182
 
183
+ public function exportMetaData($websiteId)
184
+ {
185
+ $websites = Mage::app()->getWebsites();
186
+ foreach ($websites as $website) {
187
+ if ($websiteId == $website->getWebsiteId()) {
188
+ $store = $website->getDefaultGroup()->getDefaultStore();
189
+ Mage::app()->setCurrentStore($store->getStoreId());
190
+
191
+ $collection = $this->createCollection($website, 1);
192
+ $totalPages = $collection->getLastPageNumber();
193
+ $totalItems = $collection->getSize();
194
+ $entityName = $this->getEntityName();
195
+
196
+ $this->_exportMetaData(
197
+ $website->getWebsiteId(),
198
+ strtolower($entityName),
199
+ $currentPage,
200
+ $totalPages,
201
+ $this->pageSize,
202
+ $totalItems
203
+ );
204
+ }
205
+ }
206
+ }
207
+
208
  public function exportPage($websiteId, $startPage, $endPage)
209
  {
210
  $websites = Mage::app()->getWebsites();
216
  $currentPage = $startPage;
217
  while ($currentPage < $endPage) {
218
  $collection = $this->createCollection($website, $currentPage);
219
+ $totalPages = $collection->getLastPageNumber();
220
+ $totalItems = $collection->getSize();
221
+ $entityName = $this->getEntityName();
222
+
223
+ $this->_exportMetaData(
224
+ $website->getWebsiteId(),
225
+ strtolower($entityName),
226
+ $currentPage,
227
+ $totalPages,
228
+ $this->pageSize,
229
+ $totalItems
230
+ );
231
 
232
  foreach ($collection as $entity) {
233
  $this->exportEntity($entity, $store);
252
 
253
  protected function processQueue()
254
  {
255
+ $this->api->processQueue();
 
256
  }
257
  }
app/code/community/VantageAnalytics/Analytics/Model/Export/Store.php CHANGED
@@ -14,7 +14,9 @@ class VantageAnalytics_Analytics_Model_Export_Store extends VantageAnalytics_Ana
14
 
15
  public function exportWebsite($website)
16
  {
17
- $this->exportEntity($website);
 
 
18
  }
19
  }
20
 
14
 
15
  public function exportWebsite($website)
16
  {
17
+ $store = $website->getDefaultGroup()->getDefaultStore();
18
+ Mage::app()->setCurrentStore($store->getStoreId());
19
+ $this->exportEntity($website, $store);
20
  }
21
  }
22
 
app/code/community/VantageAnalytics/Analytics/Model/Heartbeat.php CHANGED
@@ -9,6 +9,10 @@ class VantageAnalytics_Analytics_Model_Heartbeat
9
 
10
  public function send()
11
  {
 
 
 
 
12
  if (Mage::helper('analytics/account')->isVerified()) {
13
  $data = VantageAnalytics_Analytics_Model_Debug::factory()->toVantage();
14
 
9
 
10
  public function send()
11
  {
12
+ if (!Mage::helper('analytics/account')->isCronEnabled()) {
13
+ return;
14
+ }
15
+
16
  if (Mage::helper('analytics/account')->isVerified()) {
17
  $data = VantageAnalytics_Analytics_Model_Debug::factory()->toVantage();
18
 
app/code/community/VantageAnalytics/Analytics/controllers/Adminhtml/Analytics/VerifyController.php DELETED
@@ -1,49 +0,0 @@
1
- <?php
2
-
3
- class VantageAnalytics_Analytics_Adminhtml_Analytics_VerifyController extends Mage_Adminhtml_Controller_Action
4
- {
5
- public function _isAllowed()
6
- {
7
- return true;
8
- }
9
-
10
- public function verifyAction()
11
- {
12
- $this->_redirectUrl(($this->_getRefererUrl()));
13
-
14
- $username = Mage::helper('analytics/account')->username();
15
- $secret = Mage::helper('analytics/account')->secret();
16
- if (empty($username) || empty($secret)) {
17
- Mage::getSingleton('adminhtml/session')
18
- ->init('core', 'adminhtml')
19
- ->addSuccess(
20
- 'Your Vantage Username or Secret is missing. ' .
21
- 'Enter them and click Save Config and Verify again.'
22
- );
23
- }
24
-
25
- try {
26
- $response = Mage::helper('analytics/account')->registerAccount(array("username" => $username, "secret" => $secret));
27
- } catch (Exception $e) {
28
- Mage::getSingleton('adminhtml/session')
29
- ->init('core', 'adminhtml')
30
- ->addError($e->getMessage());
31
- return;
32
- }
33
-
34
- if (!empty($response) && array_key_exists("success", $response)) {
35
- Mage::helper('analytics/account')->setIsVerified(1);
36
- Mage::getSingleton('adminhtml/session')
37
- ->init('core', 'adminhtml')
38
- ->addSuccess('Your Vantage Account is verified.');
39
- } else {
40
- Mage::getSingleton('adminhtml/session')
41
- ->init('core', 'adminhtml')
42
- ->addError(
43
- "Account Verfication with Vantage failed. " .
44
- "Re-enter the VantageAnalytics username and secret, " .
45
- "click Save Config and Verify again."
46
- );
47
- }
48
- }
49
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/VantageAnalytics/Analytics/controllers/ExportController.php ADDED
@@ -0,0 +1,232 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VantageAnalytics_Analytics_ExportController extends Mage_Core_Controller_Front_Action
4
+ {
5
+ protected function _verifySignature()
6
+ {
7
+ $requestSignature = $this->getRequest()->getParam('signature');
8
+
9
+ if (empty($requestSignature)) {
10
+ $this->_setResponse(
11
+ array("failure" => "Invalid request."), '401'
12
+ );
13
+ return false;
14
+ }
15
+
16
+ $params = $this->getRequest()->getParams();
17
+ ksort($params);
18
+ unset($params['signature']);
19
+ $query = http_build_query($params);
20
+
21
+ $secret = Mage::helper('analytics/account')->secret();
22
+ $mySignature = base64_encode(hash_hmac("sha256", $query, $secret, true));
23
+
24
+ if (!Mage::helper('analytics/account')->hashEquals($mySignature, $requestSignature)) {
25
+ $this->_setResponse(
26
+ array("failure" => "Invalid request."), '403'
27
+ );
28
+ return false;
29
+ }
30
+
31
+ return true;
32
+ }
33
+
34
+ public function storesAction()
35
+ {
36
+ if (!$this->_verifySignature()) {
37
+ return;
38
+ }
39
+
40
+ $websites = Mage::app()->getWebsites();
41
+
42
+ $inlineApi = new VantageAnalytics_Analytics_Model_Api_Inline();
43
+
44
+ // The first argument is pageSize and is unused here
45
+ $exporter = new VantageAnalytics_Analytics_Model_Export_Store(5000, $inlineApi);
46
+
47
+ foreach ($websites as $website) {
48
+ $exporter->exportWebsite($website);
49
+ }
50
+
51
+ $results = $inlineApi->queue;
52
+
53
+ $this->_setResponse(
54
+ array(
55
+ "model" => 'Store',
56
+ "currentPage" => 1,
57
+ "totalPages" => 1,
58
+ "pageSize" => count($websites),
59
+ "totalItems" => count($websites),
60
+ "results" => $results,
61
+ )
62
+ );
63
+ }
64
+
65
+ public function ordersAction()
66
+ {
67
+ return $this->_pageAction('Order');
68
+ }
69
+
70
+ public function productsAction()
71
+ {
72
+ return $this->_pageAction('Product');
73
+ }
74
+
75
+ public function customersAction()
76
+ {
77
+ return $this->_pageAction('Customer');
78
+ }
79
+
80
+ protected function _setResponse($data, $status='200')
81
+ {
82
+ $this->getResponse()
83
+ ->setHeader('HTTP/1.0', $status, true)
84
+ ->setHeader('Content-Type', 'application/json', true)
85
+ ->appendBody(json_encode($data));
86
+ }
87
+
88
+ protected function _pageAction($entityName)
89
+ {
90
+ if (!$this->_verifySignature()) {
91
+ return;
92
+ }
93
+
94
+ if (!in_array($entityName, array('Product', 'Customer', 'Order'))) {
95
+ $this->_setResponse(
96
+ array("failure" => "Invalid model provided"), '400'
97
+ );
98
+ return;
99
+ }
100
+
101
+ $currentPage = max((int) $this->getRequest()->getParam('page', 1), 0);
102
+ $pageSize = min((int) $this->getRequest()->getParam('page_size', 50), 250);
103
+ $websiteId = $this->getRequest()->getParam('store_id', 1);
104
+ $noResults = $this->getRequest()->getParam('no_results', 0);
105
+
106
+ $exportClass = "VantageAnalytics_Analytics_Model_Export_" . $entityName;
107
+ $inlineApi = new VantageAnalytics_Analytics_Model_Api_Inline();
108
+
109
+ $exporter = new $exportClass($pageSize, $inlineApi);
110
+
111
+ if ($noResults) {
112
+ // Only export the metadata (page size, page count, item count)
113
+ $exporter->exportMetaData($websiteId);
114
+ } else {
115
+ // Export metadata and results
116
+ $exporter->exportPage($websiteId, $currentPage, $currentPage + 1);
117
+ }
118
+
119
+ $results = $inlineApi->queue;
120
+ $metaData = $inlineApi->metaData;
121
+
122
+ $this->_setResponse(
123
+ array(
124
+ "model" => $entityName,
125
+ "currentPage" => $currentPage,
126
+ "totalPages" => $metaData['total_pages'],
127
+ "pageSize" => $pageSize,
128
+ "totalItems" => $metaData['total_items'],
129
+ "results" => $results,
130
+ ),
131
+ '200'
132
+ );
133
+ }
134
+
135
+ public function finalizeAction()
136
+ {
137
+ if (!$this->_verifySignature()) {
138
+ return;
139
+ }
140
+
141
+ Mage::helper('analytics/account')->setExportDone(1);
142
+ Mage::helper('analytics/account')->setIsVerified(1);
143
+
144
+ $this->_setResponse(
145
+ array(
146
+ 'isExportDone' => Mage::helper('analytics/account')->isExportDone(),
147
+ 'isVerified' => Mage::helper('analytics/account')->isVerified()
148
+ ),
149
+ 200
150
+ );
151
+ }
152
+
153
+ public function queueAction()
154
+ {
155
+ if (!$this->_verifySignature()) {
156
+ return;
157
+ }
158
+
159
+ $batchSize = (int) $this->getRequest()->getParam('batch_size', 20);
160
+
161
+ $messages = array();
162
+ $queue = Mage::helper('analytics/queue');
163
+ foreach ($queue->receiveMessages($batchSize) as $message) {
164
+ $msg = json_decode($message->body, true);
165
+ $messages[] = $msg;
166
+ $queue->deleteMessage($message);
167
+ }
168
+
169
+ $this->_setResponse(
170
+ array(
171
+ 'results' => $messages,
172
+ 'queueSize' => $queue->getMessageCount(),
173
+ ),
174
+ '200'
175
+ );
176
+ }
177
+
178
+ public function pixelAction()
179
+ {
180
+ if (!$this->_verifySignature()) {
181
+ return;
182
+ }
183
+
184
+ $storeId = (int) $this->getRequest()->getParam('store_id');
185
+ $url = $this->getRequest()->getParam('url');
186
+
187
+ $store = Mage::app()->getStore($storeId);
188
+ if ($store) {
189
+ $config = Mage::app()->getConfig();
190
+ $config->saveConfig('vantageanalytics/trackingpixel/url', $url, 'stores', $storeId);
191
+ $this->_setResponse(array('success' => 'store pixel url updated'), '200');
192
+ } else {
193
+ $this->_setResponse(array('failure' => 'store not found'), '400');
194
+ }
195
+ }
196
+
197
+ public function infoAction()
198
+ {
199
+ if (!$this->_verifySignature()) {
200
+ return;
201
+ }
202
+
203
+ $data = VantageAnalytics_Analytics_Model_Debug::factory()->toVantage();
204
+
205
+ $this->_setResponse($data, '200');
206
+ }
207
+
208
+ public function cronAction()
209
+ {
210
+ if (!$this->_verifySignature()) {
211
+ return;
212
+ }
213
+
214
+ $enable = $this->getRequest()->getParam('enable', 0);
215
+ $disable = $this->getRequest()->getParam('disable', 0);
216
+
217
+ if ($enable) {
218
+ Mage::helper('analytics/account')->setCronEnabled(1);
219
+ }
220
+
221
+ if ($disable) {
222
+ Mage::helper('analytics/account')->setCronEnabled(0);
223
+ }
224
+
225
+ $this->_setResponse(
226
+ array(
227
+ 'cronEnabled' => Mage::helper('analytics/account')->isCronEnabled()
228
+ ),
229
+ '200'
230
+ );
231
+ }
232
+ }
app/code/community/VantageAnalytics/Analytics/etc/config.xml CHANGED
@@ -2,9 +2,10 @@
2
  <config>
3
  <modules>
4
  <VantageAnalytics_Analytics>
5
- <version>1.1.2</version>
6
  </VantageAnalytics_Analytics>
7
  </modules>
 
8
  <phpunit>
9
  <suite>
10
  <modules>
@@ -126,6 +127,15 @@
126
  </global>
127
 
128
  <frontend>
 
 
 
 
 
 
 
 
 
129
  <events>
130
  <sales_order_place_after>
131
  <observers>
@@ -186,6 +196,7 @@
186
  </accountoptions>
187
  <export>
188
  <done>0</done>
 
189
  </export>
190
  </vantageanalytics>
191
  </default>
2
  <config>
3
  <modules>
4
  <VantageAnalytics_Analytics>
5
+ <version>1.1.5</version>
6
  </VantageAnalytics_Analytics>
7
  </modules>
8
+
9
  <phpunit>
10
  <suite>
11
  <modules>
127
  </global>
128
 
129
  <frontend>
130
+ <routers>
131
+ <analytics>
132
+ <use>standard</use>
133
+ <args>
134
+ <module>VantageAnalytics_Analytics</module>
135
+ <frontName>analytics</frontName>
136
+ </args>
137
+ </analytics>
138
+ </routers>
139
  <events>
140
  <sales_order_place_after>
141
  <observers>
196
  </accountoptions>
197
  <export>
198
  <done>0</done>
199
+ <cron>0</cron>
200
  </export>
201
  </vantageanalytics>
202
  </default>
app/code/community/VantageAnalytics/Analytics/etc/system.xml CHANGED
@@ -45,39 +45,8 @@
45
  The API Secret for your Vantage account.
46
  ]]></comment>
47
  </accountpwd>
48
- <verify translate="label">
49
- <label>Verify Account</label>
50
- <frontend_type>button</frontend_type>
51
- <frontend_model>VantageAnalytics_Analytics_Block_Adminhtml_Verify</frontend_model>
52
- <sort_order>20</sort_order>
53
- <show_in_default>1</show_in_default>
54
- <show_in_website>1</show_in_website>
55
- <show_in_store>1</show_in_store>
56
- <comment>Verify your username and secret.</comment>
57
- </verify>
58
  </fields>
59
  </accountoptions>
60
- <export translate="label">
61
- <label>Advanced</label>
62
- <sort_order>1</sort_order>
63
- <show_in_default>1</show_in_default>
64
- <show_in_website>1</show_in_website>
65
- <show_in_store>1</show_in_store>
66
- <fields>
67
- <done translate="label">
68
- <label>Export Completed?</label>
69
- <frontend_type>select</frontend_type>
70
- <source_model>adminhtml/system_config_source_yesno</source_model>
71
- <sort_order>1</sort_order>
72
- <show_in_default>1</show_in_default>
73
- <show_in_website>1</show_in_website>
74
- <show_in_store>1</show_in_store>
75
- <comment>
76
- Set to "No" to force a full historical data export.
77
- </comment>
78
- </done>
79
- </fields>
80
- </export>
81
  </groups>
82
  </vantageanalytics>
83
  </sections>
45
  The API Secret for your Vantage account.
46
  ]]></comment>
47
  </accountpwd>
 
 
 
 
 
 
 
 
 
 
48
  </fields>
49
  </accountoptions>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  </groups>
51
  </vantageanalytics>
52
  </sections>
app/design/frontend/base/default/layout/vantageanalytics_analytics.xml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+ <reference name="before_body_end">
5
+ <block type="core/template" template="vantageanalytics/analytics/visitor.phtml" />
6
+ </reference>
7
+ </default>
8
+ <checkout_onepage_success translate="label">
9
+ <reference name="after_body_start">
10
+ <block type="core/template" template="vantageanalytics/analytics/conversion.phtml" />
11
+ </reference>
12
+ </checkout_onepage_success>
13
+ <checkout_multishipping_success translate="label">
14
+ <reference name="after_body_start">
15
+ <block type="core/template" template="vantageanalytics/analytics/conversion.phtml" />
16
+ </reference>
17
+ </checkout_multishipping_success>
18
+
19
+ <catalog_product_view>
20
+ <reference name="after_body_start">
21
+ <block type="core/template" template="vantageanalytics/analytics/productview.phtml" />
22
+ </reference>
23
+ </catalog_product_view>
24
+ </layout>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>VantageAnalytics_Analytics</name>
4
- <version>1.1.5</version>
5
  <stability>stable</stability>
6
  <license uri="http://vantageanalytics.com/legal/terms-of-use/">Commercial - Vantage</license>
7
  <channel>community</channel>
@@ -25,7 +25,11 @@ Vantage also offers financial insights, such as month to date revenue, that show
25
  With the customer segmentation tools Vantage offers, you can export a list of your highest value customers to offer discounts or exclusive offers in as little as 3 clicks!&#xD;
26
  &#xD;
27
  For store owners with multiple locations or multiple ecommerce stores, we offer a multi-store management panel to monitor each store&#x2019;s performance.</description>
28
- <notes>1.1.5&#xD;
 
 
 
 
29
  -------&#xD;
30
  - Minor phpcs code style rule fixes&#xD;
31
  - Remove embedded sign-up form, registration now begins at app.vantageanalytics.com &#xD;
@@ -116,9 +120,9 @@ Improved robustness of historical data export process and report historical data
116
  &#xD;
117
  First stable release.</notes>
118
  <authors><author><name>Brandon Kane</name><user>brandon</user><email>brandon@vantageanalytics.com</email></author></authors>
119
- <date>2017-06-02</date>
120
- <time>15:55:45</time>
121
- <contents><target name="magecommunity"><dir name="VantageAnalytics"><dir name="Analytics"><dir name="Block"><dir name="Adminhtml"><file name="Analyticsbackend.php" hash="e305f2e7b0bfad28d84da570b27e7ab7"/><file name="Verify.php" hash="c3496c9d8cb37936705132a3aca6120d"/></dir></dir><dir name="Helper"><file name="Account.php" hash="fec1771530c4b4d92442e5967b9570c2"/><file name="Checkout.php" hash="a4ec19d149f0a47936a9e607f0177056"/><file name="Data.php" hash="e2368bb846dc4e8090a31c2cd9b4dd64"/><file name="DateFormatter.php" hash="6e98a6efb5263f01a9d463faa1043d6e"/><dir name="Extension"><file name="Lister.php" hash="332928b892e1d47e5fbda24ea61017a3"/><file name="Pool.php" hash="36da98e3dd9e67c6308ff0901a800e63"/></dir><file name="Log.php" hash="eeb557a144f1254d2f01970530eded32"/><file name="Pixel.php" hash="85e46cf2763f8cb73a4589f3fdb9f7f3"/><file name="Queue.php" hash="b0460de27c67477fffd3d467ea657502"/><file name="Statuses.php" hash="9527eb737121cd34530c813aea52e962"/><file name="Tracking.php" hash="27ac8e7d194cb4b18712da1a6a8cf5be"/></dir><dir name="Model"><file name="AddressRetriever.php" hash="6d6761b08aa8d50f5473ee79b5211254"/><dir name="Api"><dir name="Exceptions"><file name="BadRequest.php" hash="90e31638b100c1f160b04a06a96c75f7"/><file name="CurlError.php" hash="cf82c3b693522cf86c02f9d1f1e83217"/><file name="MaxRetries.php" hash="2f2be83f975277cca1a5c0442d1e0cb3"/><file name="ServerError.php" hash="d68761c5e4e5e9666a4aa992db74a611"/></dir><file name="Request.php" hash="e5cac61e391a2b132d7f4b0db0578ada"/><file name="RequestQueue.php" hash="ab1ec911b14c9d5bb688ea5b8cac9395"/><file name="Secret.php" hash="4668d55a9ade673da752965486225272"/><file name="Signature.php" hash="9769075f75e55e60442f6e7afe0964d6"/><file name="Username.php" hash="8e8b3b0ae689b615aa19db8608741db9"/><file name="Webhook.php" hash="e4bac72b798acfda514d96b02dc0046c"/></dir><file name="Cron.php" hash="f385aff0db8c78e5349a4162b28a4348"/><file name="Debug.php" hash="2cfcecd19bd97b87bc4fd434d3278fb5"/><dir name="Export"><file name="Base.php" hash="5f5df5d1e4b51dfbda43f0d9fd1859d4"/><file name="Customer.php" hash="2bac395f9573e99740737348e7cdc0ac"/><file name="ExportPage.php" hash="25fa6d4fa48be30c57abd751185e30a0"/><file name="Order.php" hash="6a779faee4881f5babf032b218642131"/><file name="Product.php" hash="765dfbe5e4e3bf92d22fdfb49035bd98"/><file name="Runner.php" hash="05f1362952b62272e019522e64d1072b"/><file name="Store.php" hash="1cf68e5689615dfba835bb74118151cc"/></dir><file name="Heartbeat.php" hash="110d7158f12a86e2dcc877b40c9a44d4"/><dir name="Observer"><file name="Base.php" hash="613ef7dcf1723cbf26ede5a7f50a8811"/><file name="CatalogProduct.php" hash="4c964ab1dd6850b124442e1a9f7506e7"/><file name="Customer.php" hash="0686ca80283a14d98358b8e7179c1269"/><file name="SalesOrder.php" hash="ec2c0f43df1443387e8c7f740f02cd33"/><file name="SalesQuote.php" hash="c0cc6aea5e71ec06e394883b6bf684da"/><file name="Tracking.php" hash="a8a95092168e0c917109bb4ce9c6d9a9"/></dir><file name="ParentProduct.php" hash="e773561b45bcabbfbd739c49122ccab3"/><file name="Pixel.php" hash="3ed3efdfa25231e1b57ce68cebde4c76"/><file name="ProductCategories.php" hash="d3265e984587bf8a5d5cc202bd464c12"/><file name="ProductImages.php" hash="0c3ee899e4aa884af8d3af0c52259657"/><file name="ProductOptions.php" hash="42fedb046f2ec7deb730239f8b9427d6"/><dir name="Queue"><dir name="Adapter"><file name="Db.php" hash="a1733dc68647c1f812afaf98ce3a26d9"/></dir></dir><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="a115284cf544ad06b799c552b1f8c5c1"/></dir></dir><file name="SubscriberInformation.php" hash="67816c4724238f275a73058553010e83"/><dir name="Transformer"><file name="Address.php" hash="f9f0f27abf5597d89763b55ea9946cd3"/><file name="Base.php" hash="31313c87cefc65e9299f4996ae73a97d"/><file name="BaseSales.php" hash="d5ea80caa43574a81f72e7fb54a73a88"/><file name="BaseSalesItem.php" hash="aa281fe585defda3844baffeb6dfa9f9"/><file name="Customer.php" hash="0ffa13cdea0308170ce4c0a6f7f03950"/><file name="Product.php" hash="9c29061ac16210563b8f331b962e5afc"/><file name="SalesOrder.php" hash="1b9d74e0ff1b59b0e7cc203b58f1a45e"/><file name="SalesOrderLineItem.php" hash="664fe35f03d901c75fa1796480e40135"/><file name="SalesQuote.php" hash="ffeb73588f89141367a40eb80fd07249"/><file name="SalesQuoteLineItem.php" hash="800ef2a4a2ecd00e9ed82bfb33623ceb"/><file name="Store.php" hash="80dd794795bcdef4442206a40c1d6a3e"/></dir></dir><dir name="Test"><dir name="Model"><dir name="Api"><file name="Signature.php" hash="5db3d5f9456c7948ecb636c9fe2d4850"/></dir><file name="Base.php" hash="fa7cb987301c0d1f092146447bac1d35"/><file name="Config.php" hash="84a1043ecfe94e1ff52de06b1c63254e"/><dir name="Customer"><dir name="fixtures"><file name="simpleCustomer.yaml" hash="e6b22424ddc0940226344bcccf13c745"/></dir></dir><file name="Customer.php" hash="77480c5696b5c5f9006b330b8b0d2010"/><file name="DateFormatterTest.php" hash="b7f0ff0cddfb0cce1b73c6a8de8d74dc"/><dir name="LineItem"><dir name="fixtures"><file name="simpleOrder.yaml" hash="8d6ff7b4cf8c434631305b51fca7884c"/></dir></dir><file name="LineItem.php" hash="2f2599d5d80a6726958ab9a3b2b24b96"/><dir name="Observer"><file name="SalesQuote.php" hash="1a6380469b28386dfe42ed7bd3ee39f5"/></dir><dir name="Order"><dir name="fixtures"><file name="orderStatus.yaml" hash="a2786f2eda68ce0035f9edc8beaf9fee"/><file name="orderStatusCanceled.yaml" hash="800fcb6ee04f912e3e3f27efdbdafde3"/><file name="orderStatusComplete.yaml" hash="1c912c447d255f0afd096e6f32eace1c"/><file name="paymentStatusUnpaid.yaml" hash="c0d0a55eec973ad3ee3730ebc143a3b7"/></dir><dir name="providers"><file name="orderStatus.yaml" hash="e88ed6c1b39272f3f4767810a427613c"/></dir></dir><file name="Order.php" hash="82204a6eca60382a189a1482b1f85197"/><dir name="Product"><dir name="fixtures"><file name="parentProduct.yaml" hash="931604baf487baa33cf78dc26548431c"/><file name="simpleProduct.yaml" hash="56b88f052816173a79780f43779df4ff"/></dir></dir><file name="Product.php" hash="2226535622cf67a72efbf747fc0cb87a"/><file name="Webhook.php" hash="d34e01e88599529cf79b8cc27efad550"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Analytics"><file name="VerifyController.php" hash="627cc04bbf86f238df5942da86e27d1a"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="cdfb6a37810355796f416784ce7f5584"/><file name="config.xml" hash="c1760ba1a236c25f9882631c8a1c9529"/><file name="system.xml" hash="e7824db3d5dffc23b18dcb6662dab1cc"/></dir><dir name="sql"><dir name="vantageanalytics_analytics_setup"><file name="install-0.1.0.php" hash="0e7150e283f1ece9251af3e3d2ce76aa"/><file name="mysql4-upgrade-0.1.0-0.2.0.php" hash="e61c872d2e3527d8fa9e8daf21d8fc2e"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="VantageAnalytics_Analytics.xml" hash="69ca3371e05fff3d8b1e89849e3fab32"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="vantageanalytics"><dir name="analytics"><file name="conversion.phtml" hash="a637baea0a96508e91144d749c37d4af"/><file name="visitor.phtml" hash="35ea63a52433775d4e32dc96b5cdee3f"/><file name="productview.phtml" hash="f2148d125dae6e762c09418291d40328"/></dir></dir></dir></dir></dir></dir></target></contents>
122
  <compatible/>
123
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
124
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>VantageAnalytics_Analytics</name>
4
+ <version>1.2.1</version>
5
  <stability>stable</stability>
6
  <license uri="http://vantageanalytics.com/legal/terms-of-use/">Commercial - Vantage</license>
7
  <channel>community</channel>
25
  With the customer segmentation tools Vantage offers, you can export a list of your highest value customers to offer discounts or exclusive offers in as little as 3 clicks!&#xD;
26
  &#xD;
27
  For store owners with multiple locations or multiple ecommerce stores, we offer a multi-store management panel to monitor each store&#x2019;s performance.</description>
28
+ <notes>1.2.0&#xD;
29
+ -------&#xD;
30
+ - New API&#xD;
31
+ &#xD;
32
+ 1.1.5&#xD;
33
  -------&#xD;
34
  - Minor phpcs code style rule fixes&#xD;
35
  - Remove embedded sign-up form, registration now begins at app.vantageanalytics.com &#xD;
120
  &#xD;
121
  First stable release.</notes>
122
  <authors><author><name>Brandon Kane</name><user>brandon</user><email>brandon@vantageanalytics.com</email></author></authors>
123
+ <date>2017-06-26</date>
124
+ <time>18:10:49</time>
125
+ <contents><target name="magecommunity"><dir name="VantageAnalytics"><dir name="Analytics"><dir name="Block"><dir name="Adminhtml"><file name="Analyticsbackend.php" hash="e305f2e7b0bfad28d84da570b27e7ab7"/><file name="Verify.php" hash="c3496c9d8cb37936705132a3aca6120d"/></dir></dir><dir name="Helper"><file name="Account.php" hash="55df5016610083c1da7df8a8b2d9172f"/><file name="Checkout.php" hash="a4ec19d149f0a47936a9e607f0177056"/><file name="Data.php" hash="e2368bb846dc4e8090a31c2cd9b4dd64"/><file name="DateFormatter.php" hash="6e98a6efb5263f01a9d463faa1043d6e"/><dir name="Extension"><file name="Lister.php" hash="332928b892e1d47e5fbda24ea61017a3"/><file name="Pool.php" hash="36da98e3dd9e67c6308ff0901a800e63"/></dir><file name="Log.php" hash="eeb557a144f1254d2f01970530eded32"/><file name="Pixel.php" hash="85e46cf2763f8cb73a4589f3fdb9f7f3"/><file name="Queue.php" hash="3e548ae77ab6a67d1bc279df0c17b165"/><file name="Statuses.php" hash="9527eb737121cd34530c813aea52e962"/><file name="Tracking.php" hash="27ac8e7d194cb4b18712da1a6a8cf5be"/></dir><dir name="Model"><file name="AddressRetriever.php" hash="6d6761b08aa8d50f5473ee79b5211254"/><dir name="Api"><dir name="Exceptions"><file name="BadRequest.php" hash="90e31638b100c1f160b04a06a96c75f7"/><file name="CurlError.php" hash="cf82c3b693522cf86c02f9d1f1e83217"/><file name="MaxRetries.php" hash="2f2be83f975277cca1a5c0442d1e0cb3"/><file name="ServerError.php" hash="d68761c5e4e5e9666a4aa992db74a611"/></dir><file name="Inline.php" hash="5a099b4dadab426f2e50770ff6f86a0d"/><file name="Request.php" hash="e5cac61e391a2b132d7f4b0db0578ada"/><file name="RequestQueue.php" hash="4081a0fca85e229749a6d7403b7b1939"/><file name="Secret.php" hash="4668d55a9ade673da752965486225272"/><file name="Signature.php" hash="9769075f75e55e60442f6e7afe0964d6"/><file name="Username.php" hash="8e8b3b0ae689b615aa19db8608741db9"/><file name="Webhook.php" hash="e4bac72b798acfda514d96b02dc0046c"/></dir><file name="Cron.php" hash="a07ef21d4ba8dd75a683d7a2786d482e"/><file name="Debug.php" hash="2cfcecd19bd97b87bc4fd434d3278fb5"/><dir name="Export"><file name="Base.php" hash="181726d31c30223d38df1c920a36aab6"/><file name="Customer.php" hash="2bac395f9573e99740737348e7cdc0ac"/><file name="ExportPage.php" hash="25fa6d4fa48be30c57abd751185e30a0"/><file name="Order.php" hash="6a779faee4881f5babf032b218642131"/><file name="Product.php" hash="765dfbe5e4e3bf92d22fdfb49035bd98"/><file name="Runner.php" hash="05f1362952b62272e019522e64d1072b"/><file name="Store.php" hash="a1bd7ad27d7d18b9567dbde26b4e94f7"/></dir><file name="Heartbeat.php" hash="d29f235942bc20ea16c9d687af45003e"/><dir name="Observer"><file name="Base.php" hash="613ef7dcf1723cbf26ede5a7f50a8811"/><file name="CatalogProduct.php" hash="4c964ab1dd6850b124442e1a9f7506e7"/><file name="Customer.php" hash="0686ca80283a14d98358b8e7179c1269"/><file name="SalesOrder.php" hash="ec2c0f43df1443387e8c7f740f02cd33"/><file name="SalesQuote.php" hash="c0cc6aea5e71ec06e394883b6bf684da"/><file name="Tracking.php" hash="a8a95092168e0c917109bb4ce9c6d9a9"/></dir><file name="ParentProduct.php" hash="e773561b45bcabbfbd739c49122ccab3"/><file name="Pixel.php" hash="3ed3efdfa25231e1b57ce68cebde4c76"/><file name="ProductCategories.php" hash="d3265e984587bf8a5d5cc202bd464c12"/><file name="ProductImages.php" hash="0c3ee899e4aa884af8d3af0c52259657"/><file name="ProductOptions.php" hash="42fedb046f2ec7deb730239f8b9427d6"/><dir name="Queue"><dir name="Adapter"><file name="Db.php" hash="a1733dc68647c1f812afaf98ce3a26d9"/></dir></dir><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="a115284cf544ad06b799c552b1f8c5c1"/></dir></dir><file name="SubscriberInformation.php" hash="67816c4724238f275a73058553010e83"/><dir name="Transformer"><file name="Address.php" hash="f9f0f27abf5597d89763b55ea9946cd3"/><file name="Base.php" hash="31313c87cefc65e9299f4996ae73a97d"/><file name="BaseSales.php" hash="d5ea80caa43574a81f72e7fb54a73a88"/><file name="BaseSalesItem.php" hash="aa281fe585defda3844baffeb6dfa9f9"/><file name="Customer.php" hash="0ffa13cdea0308170ce4c0a6f7f03950"/><file name="Product.php" hash="9c29061ac16210563b8f331b962e5afc"/><file name="SalesOrder.php" hash="1b9d74e0ff1b59b0e7cc203b58f1a45e"/><file name="SalesOrderLineItem.php" hash="664fe35f03d901c75fa1796480e40135"/><file name="SalesQuote.php" hash="ffeb73588f89141367a40eb80fd07249"/><file name="SalesQuoteLineItem.php" hash="800ef2a4a2ecd00e9ed82bfb33623ceb"/><file name="Store.php" hash="80dd794795bcdef4442206a40c1d6a3e"/></dir></dir><dir name="Test"><dir name="Model"><dir name="Api"><file name="Signature.php" hash="5db3d5f9456c7948ecb636c9fe2d4850"/></dir><file name="Base.php" hash="fa7cb987301c0d1f092146447bac1d35"/><file name="Config.php" hash="84a1043ecfe94e1ff52de06b1c63254e"/><dir name="Customer"><dir name="fixtures"><file name="simpleCustomer.yaml" hash="e6b22424ddc0940226344bcccf13c745"/></dir></dir><file name="Customer.php" hash="77480c5696b5c5f9006b330b8b0d2010"/><file name="DateFormatterTest.php" hash="b7f0ff0cddfb0cce1b73c6a8de8d74dc"/><dir name="LineItem"><dir name="fixtures"><file name="simpleOrder.yaml" hash="8d6ff7b4cf8c434631305b51fca7884c"/></dir></dir><file name="LineItem.php" hash="2f2599d5d80a6726958ab9a3b2b24b96"/><dir name="Observer"><file name="SalesQuote.php" hash="1a6380469b28386dfe42ed7bd3ee39f5"/></dir><dir name="Order"><dir name="fixtures"><file name="orderStatus.yaml" hash="a2786f2eda68ce0035f9edc8beaf9fee"/><file name="orderStatusCanceled.yaml" hash="800fcb6ee04f912e3e3f27efdbdafde3"/><file name="orderStatusComplete.yaml" hash="1c912c447d255f0afd096e6f32eace1c"/><file name="paymentStatusUnpaid.yaml" hash="c0d0a55eec973ad3ee3730ebc143a3b7"/></dir><dir name="providers"><file name="orderStatus.yaml" hash="e88ed6c1b39272f3f4767810a427613c"/></dir></dir><file name="Order.php" hash="82204a6eca60382a189a1482b1f85197"/><dir name="Product"><dir name="fixtures"><file name="parentProduct.yaml" hash="931604baf487baa33cf78dc26548431c"/><file name="simpleProduct.yaml" hash="56b88f052816173a79780f43779df4ff"/></dir></dir><file name="Product.php" hash="2226535622cf67a72efbf747fc0cb87a"/><file name="Webhook.php" hash="d34e01e88599529cf79b8cc27efad550"/></dir></dir><dir name="controllers"><file name="ExportController.php" hash="1935e4bab16b1b7d2be72e692850814c"/></dir><dir name="etc"><file name="adminhtml.xml" hash="cdfb6a37810355796f416784ce7f5584"/><file name="config.xml" hash="e575a51b049f68c5b80228d23fc4e870"/><file name="system.xml" hash="5085eec015c4e002ba4390af3f60fd53"/></dir><dir name="sql"><dir name="vantageanalytics_analytics_setup"><file name="install-0.1.0.php" hash="0e7150e283f1ece9251af3e3d2ce76aa"/><file name="mysql4-upgrade-0.1.0-0.2.0.php" hash="e61c872d2e3527d8fa9e8daf21d8fc2e"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="VantageAnalytics_Analytics.xml" hash="69ca3371e05fff3d8b1e89849e3fab32"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="vantageanalytics"><dir name="analytics"><file name="conversion.phtml" hash="a637baea0a96508e91144d749c37d4af"/><file name="visitor.phtml" hash="35ea63a52433775d4e32dc96b5cdee3f"/><file name="productview.phtml" hash="f2148d125dae6e762c09418291d40328"/></dir></dir></dir><dir name="layout"><file name="vantageanalytics_analytics.xml" hash="c852aff83b27479807f002adb350778f"/></dir></dir></dir></dir></target></contents>
126
  <compatible/>
127
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
128
  </package>