VantageAnalytics_Analytics - Version 1.0.7

Version Notes

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.0.7
Comparing to
See all releases


Code changes from version 1.0.5 to 1.0.7

app/code/community/VantageAnalytics/Analytics/Model/Api/Request.php CHANGED
@@ -78,6 +78,7 @@ class VantageAnalytics_Analytics_Model_Api_Request
78
 
79
  protected function execCurl($method, $entity)
80
  {
 
81
  $attempts = 0;
82
  $success = false;
83
  while ($attempts < 5 && !$success) {
@@ -105,10 +106,10 @@ class VantageAnalytics_Analytics_Model_Api_Request
105
  return $response;
106
  }
107
 
108
- protected function _send($entityMethod, $entity, $isExport=false)
109
  {
110
  $webhookFactory = VantageAnalytics_Analytics_Model_Api_Webhook::factory(
111
- $entity, $entityMethod
112
  );
113
  $postData = $webhookFactory->getPostData();
114
  $this->execCurl("POST", $postData);
@@ -119,7 +120,7 @@ class VantageAnalytics_Analytics_Model_Api_Request
119
  */
120
  public function send($entityMethod, $entity)
121
  {
122
- $this->_send($entityMethod, $entity);
123
  }
124
 
125
  /*
78
 
79
  protected function execCurl($method, $entity)
80
  {
81
+ $reponse = null;
82
  $attempts = 0;
83
  $success = false;
84
  while ($attempts < 5 && !$success) {
106
  return $response;
107
  }
108
 
109
+ protected function _send($entityMethod, $entity, $isExport)
110
  {
111
  $webhookFactory = VantageAnalytics_Analytics_Model_Api_Webhook::factory(
112
+ $entity, $entityMethod, $isExport
113
  );
114
  $postData = $webhookFactory->getPostData();
115
  $this->execCurl("POST", $postData);
120
  */
121
  public function send($entityMethod, $entity)
122
  {
123
+ $this->_send($entityMethod, $entity, false);
124
  }
125
 
126
  /*
app/code/community/VantageAnalytics/Analytics/Model/Cron.php CHANGED
@@ -14,7 +14,7 @@ class VantageAnalytics_Analytics_Model_Cron
14
 
15
  protected function jitter()
16
  {
17
- $seconds = rand(0, 30);
18
  $this->log("Sleeping for {$seconds} seconds");
19
  sleep($seconds);
20
  }
@@ -72,8 +72,13 @@ class VantageAnalytics_Analytics_Model_Cron
72
  public function run()
73
  {
74
  if (!$this->accountIsVerified()) {
 
75
  return;
76
  }
 
 
 
 
77
  $this->jitter();
78
 
79
  if (!$this->acquireCronLock()) {
@@ -85,11 +90,6 @@ class VantageAnalytics_Analytics_Model_Cron
85
 
86
  $this->runHistoricalExport();
87
 
88
- if (!$this->accountIsVerified()) {
89
- $this->log('account verification required or failed. Not running.');
90
- return;
91
- }
92
-
93
  $this->log('processing the queue');
94
  $queue = Mage::helper('analytics/queue');
95
  $queue->processQueue();
14
 
15
  protected function jitter()
16
  {
17
+ $seconds = rand(0, 5);
18
  $this->log("Sleeping for {$seconds} seconds");
19
  sleep($seconds);
20
  }
72
  public function run()
73
  {
74
  if (!$this->accountIsVerified()) {
75
+ $this->log('account verification required or failed. Not running.');
76
  return;
77
  }
78
+
79
+ set_time_limit(0);
80
+ proc_nice(19); // lower priority - try not to hog CPU
81
+
82
  $this->jitter();
83
 
84
  if (!$this->acquireCronLock()) {
90
 
91
  $this->runHistoricalExport();
92
 
 
 
 
 
 
93
  $this->log('processing the queue');
94
  $queue = Mage::helper('analytics/queue');
95
  $queue->processQueue();
app/code/community/VantageAnalytics/Analytics/Model/Export/Base.php CHANGED
@@ -3,9 +3,56 @@
3
  abstract class VantageAnalytics_Analytics_Model_Export_Base
4
  {
5
  const PAGE_SIZE = 500;
6
- const GC_COLLECT_EVERY_N_PAGES = 10;
7
 
8
- abstract protected function createCollection($website);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  public function __construct($pageSize = null, $api=null, $transformer='')
11
  {
@@ -22,7 +69,16 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
22
 
23
  protected function enqueue($data)
24
  {
25
- $this->api->enqueue('create', $data);
 
 
 
 
 
 
 
 
 
26
  }
27
 
28
  protected function exportEntity($entity)
@@ -32,25 +88,72 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
32
  $this->enqueue($data);
33
  }
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  protected function exportWebsite($website)
36
  {
37
- $collection = $this->createCollection($website);
 
 
 
 
 
38
  $totalPages = $collection->getLastPageNumber();
39
- $currentPage = 1;
 
 
 
 
 
 
 
 
40
  while ($currentPage <= $totalPages) {
41
- foreach ($collection as $entity) {
42
- $this->exportEntity($entity);
43
- try {
44
- $entity->clearInstance();
45
- } catch (Exception $e) {
46
- /* not a problem */
47
- }
48
  }
49
- $currentPage++;
50
- $collection->clear();
51
- if ($currentPage % self::GC_COLLECT_EVERY_N_PAGES === 0) {
52
- gc_collect_cycles();
 
 
 
 
 
 
 
53
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  }
55
  }
56
 
@@ -61,4 +164,40 @@ abstract class VantageAnalytics_Analytics_Model_Export_Base
61
  $this->exportWebsite($website);
62
  }
63
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  }
3
  abstract class VantageAnalytics_Analytics_Model_Export_Base
4
  {
5
  const PAGE_SIZE = 500;
 
6
 
7
+ abstract protected function createCollection($website, $pageNumber);
8
+
9
+ protected function getPathToPHP()
10
+ {
11
+ if (isset($PHP_BINARY) && file_exists($PHP_BINARY)) {
12
+ return $PHP_BINARY;
13
+ }
14
+
15
+ // mage> echo " " . getmypid() . " " . posix_getpid() . " " . exec('echo $PPID');
16
+ // 31728 31728 31728
17
+ if (function_exists('posix_getpid')) {
18
+ $pid = posix_getpid();
19
+ } else if (function_exists('getmypid')) {
20
+ $pid = getmypid();
21
+ } else {
22
+ $pid = exec('echo $PPID');
23
+ }
24
+
25
+ $exe = exec("readlink -f /proc/$pid/exe");
26
+ if ($exe && file_exists($exe)) {
27
+ return $exe;
28
+ }
29
+
30
+ if (file_exists("/usr/bin/php5")) {
31
+ return "/usr/bin/php5";
32
+ }
33
+
34
+ if (file_exists("/usr/local/bin/php5")) {
35
+ return "/usr/local/bin/php5";
36
+ }
37
+
38
+ $exe = exec("which php5");
39
+ if ($exe) {
40
+ return $exe;
41
+ }
42
+
43
+ if (file_exists("/usr/bin/php")) {
44
+ return "/usr/bin/php";
45
+ }
46
+
47
+ if (file_exists("/usr/local/bin/php")) {
48
+ return "/usr/local/bin/php";
49
+ }
50
+
51
+ $exe = exec("which php");
52
+ if ($exe) {
53
+ return $exe;
54
+ }
55
+ }
56
 
57
  public function __construct($pageSize = null, $api=null, $transformer='')
58
  {
69
 
70
  protected function enqueue($data)
71
  {
72
+ $this->api->enqueue('create', $data, true);
73
+ }
74
+
75
+ protected function getEntityName()
76
+ {
77
+ if ($this->transformer == 'SalesOrder') {
78
+ return 'Order';
79
+ } else {
80
+ return $this->transformer;
81
+ }
82
  }
83
 
84
  protected function exportEntity($entity)
88
  $this->enqueue($data);
89
  }
90
 
91
+ protected function exportMetaData($websiteId, $entity, $currentPage, $totalPages, $pageSize)
92
+ {
93
+ $this->api->enqueue(
94
+ 'progress',
95
+ array(
96
+ 'store_ids' => array($websiteId),
97
+ 'entity_type' => $entity,
98
+ 'current_page' => $currentPage,
99
+ 'total_pages' => $totalPages,
100
+ 'page_size' => $pageSize
101
+ ),
102
+ true
103
+ );
104
+ }
105
+
106
  protected function exportWebsite($website)
107
  {
108
+ $numberOfPages = 5;
109
+ $websiteId = $website->getWebsiteId();
110
+ $collection = $this->createCollection($website, null);
111
+ if (is_null($collection)) {
112
+ return;
113
+ }
114
  $totalPages = $collection->getLastPageNumber();
115
+ $entityName = $this->getEntityName();
116
+ $currentPage = 0;
117
+ $endPage = $currentPage + $numberOfPages;
118
+ $where = Mage::getBaseDir('code') . '/community/VantageAnalytics/Analytics/Model/Export';
119
+ $phpbin = $this->getPathToPHP();
120
+
121
+ $pids = array();
122
+ $maxChildren = 1;
123
+
124
  while ($currentPage <= $totalPages) {
125
+ if (count($pids) >= $maxChildren) {
126
+ $pid = pcntl_waitpid(-1, $status);
127
+ unset($pids[$pid]);
 
 
 
 
128
  }
129
+
130
+ $this->exportMetaData(
131
+ $website->getWebsiteId(),
132
+ strtolower($entityName),
133
+ $currentPage,
134
+ $totalPages,
135
+ $this->pageSize
136
+ );
137
+
138
+ if ($endPage >= $totalPages) {
139
+ $endPage = $totalPages + 1; // The page ranges are inclusive-exclusive so pick up the last page
140
  }
141
+ $args = array("{$where}/ExportPage.php", $entityName, "{$websiteId}", "{$currentPage}", "{$endPage}");
142
+ $pid = pcntl_fork();
143
+ if ($pid == -1) {
144
+ Mage::helper('analytics/log')->logError('Could not fork');
145
+ die('could not fork');
146
+ } else if ($pid) {
147
+ // in the parent
148
+ $pids[$pid] = $pid;
149
+
150
+ $endPage = $endPage + $numberOfPages;
151
+ $currentPage = $currentPage + $numberOfPages;
152
+ } else {
153
+ // in the child
154
+ pcntl_exec($phpbin, $args);
155
+ }
156
+
157
  }
158
  }
159
 
164
  $this->exportWebsite($website);
165
  }
166
  }
167
+
168
+ public function exportPage($websiteId, $startPage, $endPage)
169
+ {
170
+ $websites = Mage::app()->getWebsites();
171
+ foreach ($websites as $website) {
172
+ if ($websiteId == $website->getWebsiteId()) {
173
+ $currentPage = $startPage;
174
+ while ($currentPage < $endPage) {
175
+ $collection = $this->createCollection($website, $currentPage);
176
+
177
+ foreach ($collection as $entity) {
178
+ $this->exportEntity($entity);
179
+ try {
180
+ $entity->clearInstance();
181
+ } catch (Exception $e) {
182
+ Mage::helper('analytics/log')->logException($e);
183
+ }
184
+ }
185
+
186
+ Mage::helper('analytics/log')->logInfo("Completed page ${currentPage}");
187
+
188
+ $this->processQueue();
189
+
190
+ $currentPage++;
191
+
192
+ $collection->clear();
193
+ }
194
+ }
195
+ }
196
+ }
197
+
198
+ protected function processQueue()
199
+ {
200
+ $queue = Mage::helper('analytics/queue');
201
+ $queue->processQueue();
202
+ }
203
  }
app/code/community/VantageAnalytics/Analytics/Model/Export/Customer.php CHANGED
@@ -7,11 +7,15 @@ class VantageAnalytics_Analytics_Model_Export_Customer extends VantageAnalytics_
7
  parent::__construct($pageSize, $api, 'Customer');
8
  }
9
 
10
- protected function createCollection($website)
11
  {
12
- return Mage::getModel('customer/customer')->getCollection()
13
  ->addAttributeToSelect('*')
14
  ->addFieldToFilter('website_id', $website->getId())
15
- ->setPageSize(self::PAGE_SIZE);
 
 
 
 
16
  }
17
  }
7
  parent::__construct($pageSize, $api, 'Customer');
8
  }
9
 
10
+ protected function createCollection($website, $pageNumber)
11
  {
12
+ $collection = Mage::getModel('customer/customer')->getCollection()
13
  ->addAttributeToSelect('*')
14
  ->addFieldToFilter('website_id', $website->getId())
15
+ ->setPageSize($this->pageSize);
16
+ if (!is_null($pageNumber)) {
17
+ $collection->setPage($pageNumber, $this->pageSize);
18
+ }
19
+ return $collection;
20
  }
21
  }
app/code/community/VantageAnalytics/Analytics/Model/Export/ExportPage.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ set_time_limit(0);
4
+ ini_set('memory_limit', -1);
5
+
6
+ require_once('app/Mage.php');
7
+
8
+ Mage::app();
9
+
10
+ $entityName = $argv[1];
11
+ $websiteId = $argv[2];
12
+ $startPage = (int)$argv[3];
13
+ $endPage = (int)$argv[4];
14
+
15
+ $exportClass = "VantageAnalytics_Analytics_Model_Export_" . $entityName;
16
+ $exporter = new $exportClass;
17
+ $exporter->exportPage($websiteId, $startPage, $endPage);
18
+
19
+ ?>
20
+
app/code/community/VantageAnalytics/Analytics/Model/Export/Order.php CHANGED
@@ -7,15 +7,54 @@ class VantageAnalytics_Analytics_Model_Export_Order extends VantageAnalytics_Ana
7
  parent::__construct($pageSize, $api, 'SalesOrder');
8
  }
9
 
10
- protected function createCollection($website)
11
  {
12
  $filter = array();
13
  foreach ($website->getStoreIds() as $storeId) {
14
  $filter[] = array('eq', $storeId);
15
  }
16
- return Mage::getModel('sales/order')->getCollection()
 
 
 
 
17
  ->addAttributeToSelect('*')
18
  ->addFieldToFilter('store_id', $filter)
19
  ->setPageSize($this->pageSize);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  }
21
  }
7
  parent::__construct($pageSize, $api, 'SalesOrder');
8
  }
9
 
10
+ protected function createCollection($website, $pageNumber)
11
  {
12
  $filter = array();
13
  foreach ($website->getStoreIds() as $storeId) {
14
  $filter[] = array('eq', $storeId);
15
  }
16
+ if (count($filter) <= 0) {
17
+ return null;
18
+ }
19
+
20
+ $orderCollection = Mage::getModel('sales/order')->getCollection()
21
  ->addAttributeToSelect('*')
22
  ->addFieldToFilter('store_id', $filter)
23
  ->setPageSize($this->pageSize);
24
+
25
+ if (!is_null($pageNumber)) {
26
+ $orderCollection->setPage($pageNumber, $this->pageSize);
27
+ $orderIds = $orderCollection->getAllIds($this->pageSize, $pageNumber * $this->pageSize);
28
+ if (count($orderIds) > 0) {
29
+
30
+ $lineItemCollection = Mage::getResourceModel('sales/order_item_collection')
31
+ ->setOrderFilter($orderIds);
32
+
33
+ $productIds = array();
34
+ foreach ($lineItemCollection as $lineItem) {
35
+ if (!$lineItem->isDeleted() && !$lineItem->getParentItemId()) {
36
+ $order = $orderCollection->getItemById($lineItem->getOrderId());
37
+ if ($order) {
38
+ $lineItem->setOrder($order);
39
+ }
40
+ $productIds[] = $lineItem->getProductId();
41
+ }
42
+ }
43
+
44
+ $productCollection = Mage::getModel('catalog/product')->getCollection()
45
+ ->addIdFilter($productIds);
46
+
47
+ foreach ($lineItemCollection as $lineItem) {
48
+ $product = $productCollection->getItemById($lineItem->getProductId());
49
+ if ($product) {
50
+ $lineItem->setProduct($product);
51
+ $lineItem->setName($product->getName());
52
+ $lineItem->setPrice($product->getPrice());
53
+ }
54
+ }
55
+ }
56
+ }
57
+
58
+ return $orderCollection;
59
  }
60
  }
app/code/community/VantageAnalytics/Analytics/Model/Export/Product.php CHANGED
@@ -7,11 +7,19 @@ class VantageAnalytics_Analytics_Model_Export_Product extends VantageAnalytics_A
7
  parent::__construct($pageSize, $api, 'Product');
8
  }
9
 
10
- protected function createCollection($website)
11
  {
12
- return Mage::getModel('catalog/product')->getCollection()
 
13
  ->addWebsiteFilter($website->getId())
14
- ->addAttributeToSelect('*');
 
 
 
 
 
 
 
15
  }
16
  }
17
 
7
  parent::__construct($pageSize, $api, 'Product');
8
  }
9
 
10
+ protected function createCollection($website, $pageNumber)
11
  {
12
+ $storeId = $website->getDefaultGroup()->getDefaultStoreId();
13
+ $collection = Mage::getModel('catalog/product')->getCollection()
14
  ->addWebsiteFilter($website->getId())
15
+ ->setStoreId($storeId)
16
+ ->addAttributeToSelect('*')
17
+ ->addUrlRewrite()
18
+ ->setPageSize($this->pageSize);
19
+ if (!is_null($pageNumber)) {
20
+ $collection->setPage($pageNumber, $this->pageSize);
21
+ }
22
+ return $collection;
23
  }
24
  }
25
 
app/code/community/VantageAnalytics/Analytics/Model/Export/Runner.php CHANGED
@@ -2,8 +2,6 @@
2
 
3
  class VantageAnalytics_Analytics_Model_Export_Runner
4
  {
5
-
6
-
7
  protected function enqueue($method, $entity)
8
  {
9
  $api = new VantageAnalytics_Analytics_Model_Api_RequestQueue();
@@ -22,14 +20,15 @@ class VantageAnalytics_Analytics_Model_Export_Runner
22
  }
23
 
24
  $this->notifyExportStart();
25
- $this->setExportDone(1); // Hope for the best
26
 
27
- $entities = array('Store', 'Customer', 'Product', 'Order');
28
  Mage::helper('analytics/log')->logInfo("Start exporting all entities");
29
  foreach ($entities as $entity) {
30
  try {
31
  Mage::helper('analytics/log')->logInfo("Exporting ". $entity);
32
- $exporter = Mage::getModel('analytics/Export_' . $entity);
 
33
  $exporter->run();
34
  } catch (Exception $e) {
35
  Mage::helper('analytics/log')->logError("Failed to export ". $entity);
2
 
3
  class VantageAnalytics_Analytics_Model_Export_Runner
4
  {
 
 
5
  protected function enqueue($method, $entity)
6
  {
7
  $api = new VantageAnalytics_Analytics_Model_Api_RequestQueue();
20
  }
21
 
22
  $this->notifyExportStart();
23
+ $this->setExportDone(1);
24
 
25
+ $entities = array('Store', 'Order', 'Customer', 'Product');
26
  Mage::helper('analytics/log')->logInfo("Start exporting all entities");
27
  foreach ($entities as $entity) {
28
  try {
29
  Mage::helper('analytics/log')->logInfo("Exporting ". $entity);
30
+ $exportClass = "VantageAnalytics_Analytics_Model_Export_" . $entity;
31
+ $exporter = new $exportClass;
32
  $exporter->run();
33
  } catch (Exception $e) {
34
  Mage::helper('analytics/log')->logError("Failed to export ". $entity);
app/code/community/VantageAnalytics/Analytics/Model/Export/Store.php CHANGED
@@ -7,7 +7,7 @@ class VantageAnalytics_Analytics_Model_Export_Store extends VantageAnalytics_Ana
7
  parent::__construct($pageSize, $api, 'Store');
8
  }
9
 
10
- protected function createCollection($website)
11
  {
12
  // stub out abstract function from base class
13
  }
7
  parent::__construct($pageSize, $api, 'Store');
8
  }
9
 
10
+ protected function createCollection($website, $pageNumber)
11
  {
12
  // stub out abstract function from base class
13
  }
app/code/community/VantageAnalytics/Analytics/Model/ProductCategories.php CHANGED
@@ -1,6 +1,9 @@
1
  <?php
 
2
  class VantageAnalytics_Analytics_Model_ProductCategories
3
  {
 
 
4
  public static function factory($product)
5
  {
6
  return new self($product);
@@ -29,9 +32,14 @@ class VantageAnalytics_Analytics_Model_ProductCategories
29
 
30
  private function _getCategoryName($categoryId)
31
  {
 
 
 
 
32
  $category = Mage::getModel('catalog/category')->load($categoryId);
33
 
34
- return $category->getName();
 
35
  }
36
 
37
  }
1
  <?php
2
+
3
  class VantageAnalytics_Analytics_Model_ProductCategories
4
  {
5
+ private static $_product_cache = array();
6
+
7
  public static function factory($product)
8
  {
9
  return new self($product);
32
 
33
  private function _getCategoryName($categoryId)
34
  {
35
+ if (array_key_exists($categoryId, self::$_product_cache)) {
36
+ return self::$_product_cache[$categoryId];
37
+ }
38
+
39
  $category = Mage::getModel('catalog/category')->load($categoryId);
40
 
41
+ self::$_product_cache[$categoryId] = $category->getName();
42
+ return self::$_product_cache[$categoryId];
43
  }
44
 
45
  }
app/code/community/VantageAnalytics/Analytics/Model/Transformer/Product.php CHANGED
@@ -54,7 +54,6 @@ class VantageAnalytics_Analytics_Model_Transformer_Product extends VantageAnalyt
54
 
55
  public function price()
56
  {
57
- // XXX: Final price vs. price
58
  return $this->entity->getPrice();
59
  }
60
 
@@ -77,14 +76,20 @@ class VantageAnalytics_Analytics_Model_Transformer_Product extends VantageAnalyt
77
 
78
  public function productUrl()
79
  {
80
- // Reload the product in the context of the store
81
- // to get the correct url for the product
82
- $product = Mage::helper('catalog/product')->getProduct(
83
- $this->externalIdentifier(),
84
- Mage::app()->getStore()->getId()
85
- );
 
 
 
86
 
87
- return empty($product) ? NULL: $product->getProductUrl();
 
 
 
88
  }
89
 
90
  public function imageUrls()
@@ -117,7 +122,7 @@ class VantageAnalytics_Analytics_Model_Transformer_Product extends VantageAnalyt
117
  $product['weight'] = $this->weight();
118
  $product['requires_shipping'] = $this->shippingRequired();
119
  $product['quantity'] = $this->quantity();
120
- $product['entity_type'] = $this->entityType();
121
  $product['images'] = $this->imageUrls();
122
  $product['categories'] = $this->categories();
123
  $product['url'] = $this->productUrl();
54
 
55
  public function price()
56
  {
 
57
  return $this->entity->getPrice();
58
  }
59
 
76
 
77
  public function productUrl()
78
  {
79
+ if (Mage::app()->getStore()->isAdmin()) {
80
+ // Reload the product in the context of the store
81
+ // to get the correct url for the product
82
+ $websites = Mage::app()->getWebsites();
83
+ $storeId = $websites[1]->getDefaultStore()->getId();
84
+ $product = Mage::helper('catalog/product')->getProduct(
85
+ $this->externalIdentifier(),
86
+ $storeId
87
+ );
88
 
89
+ return empty($product) ? NULL: $product->getProductUrl();
90
+ }
91
+
92
+ return $this->entity->getProductUrl();
93
  }
94
 
95
  public function imageUrls()
122
  $product['weight'] = $this->weight();
123
  $product['requires_shipping'] = $this->shippingRequired();
124
  $product['quantity'] = $this->quantity();
125
+ $product['entity_type'] = "product";
126
  $product['images'] = $this->imageUrls();
127
  $product['categories'] = $this->categories();
128
  $product['url'] = $this->productUrl();
app/code/community/VantageAnalytics/Analytics/Model/Transformer/SalesOrderLineItem.php CHANGED
@@ -32,9 +32,7 @@ class VantageAnalytics_Analytics_Model_Transformer_SalesOrderLineItem extends Va
32
 
33
  private function magentoProduct()
34
  {
35
- $id = $this->externalProductId();
36
-
37
- return Mage::getModel('catalog/product')->load($id);
38
  }
39
 
40
  public function productName()
32
 
33
  private function magentoProduct()
34
  {
35
+ return $this->entity->getProduct();
 
 
36
  }
37
 
38
  public function productName()
app/code/community/VantageAnalytics/Analytics/controllers/Adminhtml/Analytics/AnalyticsbackendController.php CHANGED
@@ -29,6 +29,8 @@ class VantageAnalytics_Analytics_Adminhtml_Analytics_AnalyticsbackendController
29
  protected function registerAccount($params)
30
  {
31
  $registerUrl = Mage::helper("analytics/account")->registerAccountUrl();
 
 
32
  $channel = curl_init($registerUrl);
33
 
34
  curl_setopt($channel, CURLOPT_SSL_VERIFYHOST, 2);
@@ -57,13 +59,13 @@ class VantageAnalytics_Analytics_Adminhtml_Analytics_AnalyticsbackendController
57
 
58
  $status = curl_getinfo($channel, CURLINFO_HTTP_CODE);
59
  if ($status >= 500) {
60
- Mage::throwException("An error occurred. Please try again later.");
61
  }
62
 
63
  if (curl_errno($channel)) {
64
- $errorDesc = curl_error($channel);
65
- curl_close($channel);
66
- Mage::throwException("An error occurred. Please try again later.");
67
  }
68
 
69
  curl_close($channel);
29
  protected function registerAccount($params)
30
  {
31
  $registerUrl = Mage::helper("analytics/account")->registerAccountUrl();
32
+ Mage::helper("analytics/log")->logInfo("The account register URL is ${registerUrl}");
33
+
34
  $channel = curl_init($registerUrl);
35
 
36
  curl_setopt($channel, CURLOPT_SSL_VERIFYHOST, 2);
59
 
60
  $status = curl_getinfo($channel, CURLINFO_HTTP_CODE);
61
  if ($status >= 500) {
62
+ Mage::throwException("An error occurred. Please try again later.");
63
  }
64
 
65
  if (curl_errno($channel)) {
66
+ $errorDesc = curl_error($channel);
67
+ curl_close($channel);
68
+ Mage::throwException("An error occurred. Please try again later.");
69
  }
70
 
71
  curl_close($channel);
app/code/community/VantageAnalytics/Analytics/sql/vantageanalytics_analytics_setup/mysql4-upgrade-0.2.0-1.0.7.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $installer->resetConfig();
7
+ $installer->endSetup();
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>VantageAnalytics_Analytics</name>
4
- <version>1.0.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,22 @@ 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.0.5&#xD;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  -------&#xD;
30
  &#xD;
31
  Fixed memory leak in export script which could impact large data exports.&#xD;
@@ -56,9 +71,9 @@ Improved robustness of historical data export process and report historical data
56
  &#xD;
57
  First stable release.</notes>
58
  <authors><author><name>Brandon Kane</name><user>brandon</user><email>brandon@vantageanalytics.com</email></author></authors>
59
- <date>2016-05-24</date>
60
- <time>21:10:55</time>
61
- <contents><target name="magecommunity"><dir name="VantageAnalytics"><dir name="Analytics"><dir name="Block"><dir name="Adminhtml"><file name="Analyticsbackend.php" hash="e305f2e7b0bfad28d84da570b27e7ab7"/><file name="Reset.php" hash="532930f826f191a37c21a9556936c3ce"/></dir></dir><dir name="Helper"><file name="Account.php" hash="270976db69e227162d35d1eb9a424d6b"/><file name="Data.php" hash="e2368bb846dc4e8090a31c2cd9b4dd64"/><file name="DateFormatter.php" hash="6e98a6efb5263f01a9d463faa1043d6e"/><dir name="Extension"><file name="Lister.php" hash="bcd42cde1226011937276f35b84043b0"/><file name="Pool.php" hash="198c0585d60c9c3cd0d161de43eed4cc"/></dir><file name="Log.php" hash="eeb557a144f1254d2f01970530eded32"/><file name="Pixel.php" hash="85e46cf2763f8cb73a4589f3fdb9f7f3"/><file name="Queue.php" hash="2d9b23e9b7d6f9847a444c2837ca1f2e"/><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="3f4cec01c8cb5e058f3d67fb63a3b5dd"/><file name="RequestQueue.php" hash="ab1ec911b14c9d5bb688ea5b8cac9395"/><file name="Secret.php" hash="7056e3d3ae2d54dda82191d9e51832f2"/><file name="Signature.php" hash="9769075f75e55e60442f6e7afe0964d6"/><file name="Username.php" hash="8e8b3b0ae689b615aa19db8608741db9"/><file name="Webhook.php" hash="e4bac72b798acfda514d96b02dc0046c"/></dir><file name="Cron.php" hash="c006c3b4858fcc4a79eeb7cd2a44c749"/><file name="Debug.php" hash="c24900a7e9ecbfeb8c0d9509f3f8e44d"/><dir name="Export"><file name="Base.php" hash="bd7f4f4d32367a32edbb4701578ee479"/><file name="Customer.php" hash="8b06c4fb062e0a7ef0dceea299a632f8"/><file name="Order.php" hash="b019beb39d722ddb66055100a52d8e80"/><file name="Product.php" hash="26a5c6ca05b0eebce9bfc42c089f0b49"/><file name="Runner.php" hash="4979e549288da7fde402c609b817468d"/><file name="Store.php" hash="d48abe7899dde0026c27a04317984d7e"/></dir><file name="Heartbeat.php" hash="110d7158f12a86e2dcc877b40c9a44d4"/><dir name="Observer"><file name="Base.php" hash="060b2bc4ae4a6d0cee00d1cf21556d83"/><file name="CatalogProduct.php" hash="c6e553ed6feb5173f0405e771a1203d3"/><file name="Customer.php" hash="0686ca80283a14d98358b8e7179c1269"/><file name="SalesOrder.php" hash="e406749cf6b8e74e341968f2707af82f"/><file name="SalesQuote.php" hash="0bae57dbbdf65f10b8dbb59314861cc9"/><file name="Tracking.php" hash="a8a95092168e0c917109bb4ce9c6d9a9"/></dir><file name="ParentProduct.php" hash="e15d56807edb680a7c880f88d3cc654c"/><file name="Pixel.php" hash="3ed3efdfa25231e1b57ce68cebde4c76"/><file name="ProductCategories.php" hash="b53d842897083c2ae4b4c4970c3d4c16"/><file name="ProductImages.php" hash="608c0444218733661dc94c214887cadd"/><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="8f766b0d85187de732db44b26a210773"/><file name="BaseSales.php" hash="7e248d70f07b24e50a92999696833101"/><file name="BaseSalesItem.php" hash="aa281fe585defda3844baffeb6dfa9f9"/><file name="Customer.php" hash="481e0972f572340c96a59da8f582dba9"/><file name="Product.php" hash="37d2546adf4af53598c7876f23fae86b"/><file name="SalesOrder.php" hash="9fb3aa63042873fa0f2f6dedc108e4f1"/><file name="SalesOrderLineItem.php" hash="b9ffe0e6278a700a851ee2256e24965b"/><file name="SalesQuote.php" hash="c1712d7eb2b440b4d9c77d9dab96717d"/><file name="SalesQuoteLineItem.php" hash="27687eba35dab7fdadad438aeb63bf03"/><file name="Store.php" hash="cde2395de468981b3b964184dd214afb"/></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="722d0096e8211b4b57485b24efced031"/><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="e35411c7d970af0b5913807830ffe45e"/><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="24cefdde2b5bf68452f5c6301c1d5efc"/><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="9f22904ec0015355f6fbf2f287d5574d"/><file name="Webhook.php" hash="d34e01e88599529cf79b8cc27efad550"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Analytics"><file name="AnalyticsbackendController.php" hash="f7cc8f4030bad20d5108225ac84c77c9"/><file name="ResetController.php" hash="c45b58f6aaba218d7d271288add8780a"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="cdfb6a37810355796f416784ce7f5584"/><file name="config.xml" hash="534207999bd00fe15b1f56fe50dedd67"/><file name="system.xml" hash="96810a47632dbee35df743615ced3c41"/></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="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="analytics.xml" hash="3f5da1f21784db4d01111aa208914d27"/></dir><dir name="template"><dir name="analytics"><file name="analyticsbackend.phtml" hash="2eb2bc2ba45a071c17ad376553b46c9b"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="vantageanalytics_analytics.xml" hash="474402cfcca713298e88f50ff4fafe2c"/></dir><dir name="template"><dir name="vantageanalytics"><dir name="analytics"><file name="conversion.phtml" hash="c7442d4077cf1d3719b05f16ceda1c89"/><file name="visitor.phtml" hash="82c64d032b8b9dadff0c847c4538f6d9"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><file name="register.css" hash="704cc1e177a9353715d065cb0b8841d4"/></dir></dir></dir><dir name="base"><dir name="default"><dir name="images"><file name="vantage-for-magento.png" hash="36604b9b28ca5d8a7ff0ead39323eae9"/></dir></dir></dir></dir></target></contents>
62
  <compatible/>
63
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
64
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>VantageAnalytics_Analytics</name>
4
+ <version>1.0.7</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.0.7&#xD;
29
+ -------&#xD;
30
+ &#xD;
31
+ - Fork exec export into 2 children processes to avoid long running process with unbounded memory consumption&#xD;
32
+ &#xD;
33
+ 1.0.6&#xD;
34
+ -------&#xD;
35
+ &#xD;
36
+ Set page size on product collection.&#xD;
37
+ &#xD;
38
+ Prefetch some related attributes during product and sales order exports.&#xD;
39
+ &#xD;
40
+ Send data to vantage during the data gathering phase of the export process instead of after the data gathering phase is done.&#xD;
41
+ &#xD;
42
+ &#xD;
43
+ 1.0.5&#xD;
44
  -------&#xD;
45
  &#xD;
46
  Fixed memory leak in export script which could impact large data exports.&#xD;
71
  &#xD;
72
  First stable release.</notes>
73
  <authors><author><name>Brandon Kane</name><user>brandon</user><email>brandon@vantageanalytics.com</email></author></authors>
74
+ <date>2016-05-27</date>
75
+ <time>10:42:39</time>
76
+ <contents><target name="magecommunity"><dir name="VantageAnalytics"><dir name="Analytics"><dir name="Block"><dir name="Adminhtml"><file name="Analyticsbackend.php" hash="e305f2e7b0bfad28d84da570b27e7ab7"/><file name="Reset.php" hash="532930f826f191a37c21a9556936c3ce"/></dir></dir><dir name="Helper"><file name="Account.php" hash="270976db69e227162d35d1eb9a424d6b"/><file name="Data.php" hash="e2368bb846dc4e8090a31c2cd9b4dd64"/><file name="DateFormatter.php" hash="6e98a6efb5263f01a9d463faa1043d6e"/><dir name="Extension"><file name="Lister.php" hash="bcd42cde1226011937276f35b84043b0"/><file name="Pool.php" hash="198c0585d60c9c3cd0d161de43eed4cc"/></dir><file name="Log.php" hash="eeb557a144f1254d2f01970530eded32"/><file name="Pixel.php" hash="85e46cf2763f8cb73a4589f3fdb9f7f3"/><file name="Queue.php" hash="2d9b23e9b7d6f9847a444c2837ca1f2e"/><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="b03ee6b624587155b6a21e832d756e94"/><file name="RequestQueue.php" hash="ab1ec911b14c9d5bb688ea5b8cac9395"/><file name="Secret.php" hash="7056e3d3ae2d54dda82191d9e51832f2"/><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="c24900a7e9ecbfeb8c0d9509f3f8e44d"/><dir name="Export"><file name="Base.php" hash="d933e81ae44856cca325e5b0e777256a"/><file name="Customer.php" hash="2bac395f9573e99740737348e7cdc0ac"/><file name="ExportPage.php" hash="fa2b012e861c1149630452816ae724a7"/><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="060b2bc4ae4a6d0cee00d1cf21556d83"/><file name="CatalogProduct.php" hash="c6e553ed6feb5173f0405e771a1203d3"/><file name="Customer.php" hash="0686ca80283a14d98358b8e7179c1269"/><file name="SalesOrder.php" hash="e406749cf6b8e74e341968f2707af82f"/><file name="SalesQuote.php" hash="0bae57dbbdf65f10b8dbb59314861cc9"/><file name="Tracking.php" hash="a8a95092168e0c917109bb4ce9c6d9a9"/></dir><file name="ParentProduct.php" hash="e15d56807edb680a7c880f88d3cc654c"/><file name="Pixel.php" hash="3ed3efdfa25231e1b57ce68cebde4c76"/><file name="ProductCategories.php" hash="d3265e984587bf8a5d5cc202bd464c12"/><file name="ProductImages.php" hash="608c0444218733661dc94c214887cadd"/><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="8f766b0d85187de732db44b26a210773"/><file name="BaseSales.php" hash="7e248d70f07b24e50a92999696833101"/><file name="BaseSalesItem.php" hash="aa281fe585defda3844baffeb6dfa9f9"/><file name="Customer.php" hash="481e0972f572340c96a59da8f582dba9"/><file name="Product.php" hash="1f1951f3be2bf6880a2bd708c97ea71d"/><file name="SalesOrder.php" hash="9fb3aa63042873fa0f2f6dedc108e4f1"/><file name="SalesOrderLineItem.php" hash="34a919367236cdd9351454ed47cb78b2"/><file name="SalesQuote.php" hash="c1712d7eb2b440b4d9c77d9dab96717d"/><file name="SalesQuoteLineItem.php" hash="27687eba35dab7fdadad438aeb63bf03"/><file name="Store.php" hash="cde2395de468981b3b964184dd214afb"/></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="722d0096e8211b4b57485b24efced031"/><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="e35411c7d970af0b5913807830ffe45e"/><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="24cefdde2b5bf68452f5c6301c1d5efc"/><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="9f22904ec0015355f6fbf2f287d5574d"/><file name="Webhook.php" hash="d34e01e88599529cf79b8cc27efad550"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Analytics"><file name="AnalyticsbackendController.php" hash="6d82eb561da08535ae761f84ae27179e"/><file name="ResetController.php" hash="c45b58f6aaba218d7d271288add8780a"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="cdfb6a37810355796f416784ce7f5584"/><file name="config.xml" hash="534207999bd00fe15b1f56fe50dedd67"/><file name="system.xml" hash="96810a47632dbee35df743615ced3c41"/></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"/><file name="mysql4-upgrade-0.2.0-1.0.7.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="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="analytics.xml" hash="3f5da1f21784db4d01111aa208914d27"/></dir><dir name="template"><dir name="analytics"><file name="analyticsbackend.phtml" hash="2eb2bc2ba45a071c17ad376553b46c9b"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="vantageanalytics_analytics.xml" hash="474402cfcca713298e88f50ff4fafe2c"/></dir><dir name="template"><dir name="vantageanalytics"><dir name="analytics"><file name="conversion.phtml" hash="c7442d4077cf1d3719b05f16ceda1c89"/><file name="visitor.phtml" hash="82c64d032b8b9dadff0c847c4538f6d9"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><file name="register.css" hash="704cc1e177a9353715d065cb0b8841d4"/></dir></dir></dir><dir name="base"><dir name="default"><dir name="images"><file name="vantage-for-magento.png" hash="36604b9b28ca5d8a7ff0ead39323eae9"/></dir></dir></dir></dir></target></contents>
77
  <compatible/>
78
  <dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
79
  </package>