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.
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 +4 -3
- app/code/community/VantageAnalytics/Analytics/Model/Cron.php +6 -6
- app/code/community/VantageAnalytics/Analytics/Model/Export/Base.php +155 -16
- app/code/community/VantageAnalytics/Analytics/Model/Export/Customer.php +7 -3
- app/code/community/VantageAnalytics/Analytics/Model/Export/ExportPage.php +20 -0
- app/code/community/VantageAnalytics/Analytics/Model/Export/Order.php +41 -2
- app/code/community/VantageAnalytics/Analytics/Model/Export/Product.php +11 -3
- app/code/community/VantageAnalytics/Analytics/Model/Export/Runner.php +4 -5
- app/code/community/VantageAnalytics/Analytics/Model/Export/Store.php +1 -1
- app/code/community/VantageAnalytics/Analytics/Model/ProductCategories.php +9 -1
- app/code/community/VantageAnalytics/Analytics/Model/Transformer/Product.php +14 -9
- app/code/community/VantageAnalytics/Analytics/Model/Transformer/SalesOrderLineItem.php +1 -3
- app/code/community/VantageAnalytics/Analytics/controllers/Adminhtml/Analytics/AnalyticsbackendController.php +6 -4
- app/code/community/VantageAnalytics/Analytics/sql/vantageanalytics_analytics_setup/mysql4-upgrade-0.2.0-1.0.7.php +7 -0
- package.xml +20 -5
@@ -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
|
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 |
/*
|
@@ -14,7 +14,7 @@ class VantageAnalytics_Analytics_Model_Cron
|
|
14 |
|
15 |
protected function jitter()
|
16 |
{
|
17 |
-
$seconds = rand(0,
|
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();
|
@@ -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 |
-
$
|
|
|
|
|
|
|
|
|
|
|
38 |
$totalPages = $collection->getLastPageNumber();
|
39 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
while ($currentPage <= $totalPages) {
|
41 |
-
|
42 |
-
$
|
43 |
-
|
44 |
-
$entity->clearInstance();
|
45 |
-
} catch (Exception $e) {
|
46 |
-
/* not a problem */
|
47 |
-
}
|
48 |
}
|
49 |
-
|
50 |
-
$
|
51 |
-
|
52 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
}
|
@@ -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 |
-
|
13 |
->addAttributeToSelect('*')
|
14 |
->addFieldToFilter('website_id', $website->getId())
|
15 |
-
->setPageSize(
|
|
|
|
|
|
|
|
|
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 |
}
|
@@ -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 |
+
|
@@ -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 |
-
|
|
|
|
|
|
|
|
|
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 |
}
|
@@ -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 |
-
|
|
|
13 |
->addWebsiteFilter($website->getId())
|
14 |
-
->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
@@ -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);
|
26 |
|
27 |
-
$entities = array('Store', '
|
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 |
-
$
|
|
|
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);
|
@@ -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 |
}
|
@@ -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 |
-
|
|
|
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 |
}
|
@@ -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 |
-
|
81 |
-
|
82 |
-
|
83 |
-
$
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
86 |
|
87 |
-
|
|
|
|
|
|
|
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'] =
|
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();
|
@@ -32,9 +32,7 @@ class VantageAnalytics_Analytics_Model_Transformer_SalesOrderLineItem extends Va
|
|
32 |
|
33 |
private function magentoProduct()
|
34 |
{
|
35 |
-
|
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()
|
@@ -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 |
-
|
61 |
}
|
62 |
|
63 |
if (curl_errno($channel)) {
|
64 |
-
|
65 |
-
|
66 |
-
|
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);
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$installer = $this;
|
4 |
+
|
5 |
+
$installer->startSetup();
|
6 |
+
$installer->resetConfig();
|
7 |
+
$installer->endSetup();
|
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>VantageAnalytics_Analytics</name>
|
4 |
-
<version>1.0.
|
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!
|
26 |

|
27 |
For store owners with multiple locations or multiple ecommerce stores, we offer a multi-store management panel to monitor each store’s performance.</description>
|
28 |
-
<notes>1.0.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
-------
|
30 |

|
31 |
Fixed memory leak in export script which could impact large data exports.
|
@@ -56,9 +71,9 @@ Improved robustness of historical data export process and report historical data
|
|
56 |

|
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-
|
60 |
-
<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="
|
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!
|
26 |

|
27 |
For store owners with multiple locations or multiple ecommerce stores, we offer a multi-store management panel to monitor each store’s performance.</description>
|
28 |
+
<notes>1.0.7
|
29 |
+
-------
|
30 |
+

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

|
33 |
+
1.0.6
|
34 |
+
-------
|
35 |
+

|
36 |
+
Set page size on product collection.
|
37 |
+

|
38 |
+
Prefetch some related attributes during product and sales order exports.
|
39 |
+

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

|
42 |
+

|
43 |
+
1.0.5
|
44 |
-------
|
45 |

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

|
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>
|