Version Notes
v.1.2.0
Allow to set custom attribute for gross profit calculation
v1.1.6
Bugfix
v1.1.5
cleanup
v1.1.4
Little refactoring of order update
v1.1.3
Big refactoring.
Split testing functionality
v1.0.7
Minor Refactoring
v1.0.6
New hooks for custom checkouts that do not use Magento's default hooks.
If the sku needs to be added at the beginn of the checkout, some payment providers like Klarna require that the following hook need need to be triggered
* maxicycle_add_product_to_quote
If the sales_order_place_after hook is not triggered the following hook needs to be triggered
* maxicycle_add_product_to_order
v1.0.5
Added compatibility with Klarna
v1.0.4
Fixed bug in PHP 5.4
v1.0.3
Refresh caching
Fix bug when having a multi store setup for SKU check
v1.0.2
Bug fix release
v1.0.1
Stability improvements
Logging into separate logfile
v.1.0.0
* Initial official release
Release Info
Developer | Maxicycle Software GmbH |
Extension | MaxicycleCom_Connector |
Version | 1.2.0 |
Comparing to | |
See all releases |
Code changes from version 1.1.3 to 1.2.0
- app/code/community/Maxicycle/Connector/Block/Adminhtml/Campaigns/Grid.php +0 -15
- app/code/community/Maxicycle/Connector/Model/Insert.php +6 -5
- app/code/community/Maxicycle/Connector/Model/Observer.php +10 -9
- app/code/community/Maxicycle/Connector/etc/config.xml +1 -1
- app/design/adminhtml/default/default/template/maxicycle/connector/installation/step1.phtml +36 -15
- package.xml +17 -5
@@ -71,21 +71,6 @@ class Maxicycle_Connector_Block_Adminhtml_Campaigns_Grid extends Mage_Adminhtml_
|
|
71 |
'options' => $stores,
|
72 |
));
|
73 |
|
74 |
-
$this->addColumn('action', array(
|
75 |
-
'header' => Mage::helper('maxicycle')->__('Action'),
|
76 |
-
'width' => '200',
|
77 |
-
'type' => 'action',
|
78 |
-
'getter' => 'getCampaignId',
|
79 |
-
'actions' => array(
|
80 |
-
array(
|
81 |
-
'caption' => Mage::helper('maxicycle')->__('Regenerate results'),
|
82 |
-
'url' => array('base' => '*/*/regenerate'),
|
83 |
-
'field' => 'campaign_id',
|
84 |
-
'onclick' => "if(!confirm('Do you realy want to re-generate results?')) return false;"
|
85 |
-
)
|
86 |
-
)
|
87 |
-
));
|
88 |
-
|
89 |
return parent::_prepareColumns();
|
90 |
}
|
91 |
|
71 |
'options' => $stores,
|
72 |
));
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
return parent::_prepareColumns();
|
75 |
}
|
76 |
|
@@ -66,7 +66,8 @@ class Maxicycle_Connector_Model_Insert extends Mage_Core_Model_Abstract {
|
|
66 |
$this->_setCustomerIdToOrder();
|
67 |
// Process condition - ADD PRODUCT - only if campaign is still in CP and not already in RT
|
68 |
if (!$this->_inResponsePeriod($campaign)) {
|
69 |
-
$this->_addProduct();
|
|
|
70 |
} else {
|
71 |
Mage::log('Not adding product, campaign in response period', null, 'maxicycle.log');
|
72 |
}
|
@@ -185,7 +186,7 @@ class Maxicycle_Connector_Model_Insert extends Mage_Core_Model_Abstract {
|
|
185 |
->setBaseRowTotal($rowTotal)
|
186 |
->setOrder($order);
|
187 |
$order_item->save();
|
188 |
-
Mage::log('Product successfully added to
|
189 |
} catch (Exception $e) {
|
190 |
Mage::log('Adding product to order failed: ' .$e->getMessage(), null, 'maxicycle.log');
|
191 |
throw $e;
|
@@ -359,9 +360,9 @@ class Maxicycle_Connector_Model_Insert extends Mage_Core_Model_Abstract {
|
|
359 |
return (rand(0, 100) <= $treatment_group_size ? true : false);
|
360 |
}
|
361 |
|
362 |
-
|
363 |
private function _isOrder() {
|
364 |
-
return
|
365 |
}
|
366 |
-
|
367 |
}
|
66 |
$this->_setCustomerIdToOrder();
|
67 |
// Process condition - ADD PRODUCT - only if campaign is still in CP and not already in RT
|
68 |
if (!$this->_inResponsePeriod($campaign)) {
|
69 |
+
$this->_addProduct();
|
70 |
+
$this->_quote_or_order->save();
|
71 |
} else {
|
72 |
Mage::log('Not adding product, campaign in response period', null, 'maxicycle.log');
|
73 |
}
|
186 |
->setBaseRowTotal($rowTotal)
|
187 |
->setOrder($order);
|
188 |
$order_item->save();
|
189 |
+
Mage::log('Product successfully added to order', null, 'maxicycle.log');
|
190 |
} catch (Exception $e) {
|
191 |
Mage::log('Adding product to order failed: ' .$e->getMessage(), null, 'maxicycle.log');
|
192 |
throw $e;
|
360 |
return (rand(0, 100) <= $treatment_group_size ? true : false);
|
361 |
}
|
362 |
|
363 |
+
// Check if we insert for Order or Quote
|
364 |
private function _isOrder() {
|
365 |
+
return ($this->_quote_or_order instanceof Mage_Sales_Model_Order);
|
366 |
}
|
367 |
+
|
368 |
}
|
@@ -199,33 +199,34 @@ class Maxicycle_Connector_Model_Observer{
|
|
199 |
$avg_order_costs = floatval($this->_config['order_costs']);
|
200 |
$grand_total = $order->getGrandTotal();
|
201 |
$item_costs = 0.00;
|
202 |
-
|
|
|
203 |
// Loop over all order items
|
204 |
foreach ($order_items as $item) {
|
205 |
$item_price = floatval($item->getBasePrice());
|
206 |
$item_quantity = floatval($item->getQtyOrdered());
|
207 |
// Load product
|
208 |
-
$product = Mage::getModel('catalog/product')->
|
209 |
|
210 |
// get product price from attribute
|
211 |
-
if ($product_costs_type == '1') {
|
212 |
// get product price from specified attribute
|
213 |
$bp = floatval($product->getData($product_costs_attribute));
|
214 |
-
// Mage::log('EXPORT: Gross profit: attribute', null, 'maxicycle.log');
|
215 |
if ($bp != 0) {
|
216 |
-
|
217 |
$item_costs += ($item_quantity * $bp);
|
218 |
} else {
|
219 |
-
|
220 |
$item_costs += ($item_quantity * $item_price);
|
221 |
}
|
|
|
222 |
} else {
|
223 |
-
|
224 |
if (floatval($product_costs_fixed) != 0) {
|
225 |
// deduct percentage
|
226 |
$fixed_percentage = floatval($product_costs_fixed) / 100.00;
|
227 |
$item_costs += ($item_quantity * $item_price * $fixed_percentage);
|
228 |
-
|
229 |
} else {
|
230 |
$item_costs += ($item_quantity * $item_price);
|
231 |
}
|
@@ -234,7 +235,7 @@ class Maxicycle_Connector_Model_Observer{
|
|
234 |
|
235 |
// deduct specified average order costs
|
236 |
$gross_profit = ($grand_total - floatval($avg_order_costs));
|
237 |
-
|
238 |
// deduct tax
|
239 |
if ($use_tax) {
|
240 |
Mage::log('EXPORT: Gross profit, deducting tax', null, 'maxicycle.log');
|
199 |
$avg_order_costs = floatval($this->_config['order_costs']);
|
200 |
$grand_total = $order->getGrandTotal();
|
201 |
$item_costs = 0.00;
|
202 |
+
Mage::log('EXPORT: PRODUCT cost attribute: ' . $product_costs_attribute, null, 'maxicycle.log');
|
203 |
+
|
204 |
// Loop over all order items
|
205 |
foreach ($order_items as $item) {
|
206 |
$item_price = floatval($item->getBasePrice());
|
207 |
$item_quantity = floatval($item->getQtyOrdered());
|
208 |
// Load product
|
209 |
+
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $item->getSku());
|
210 |
|
211 |
// get product price from attribute
|
212 |
+
if ($product_costs_type == '1' || $product_costs_type == '3') {
|
213 |
// get product price from specified attribute
|
214 |
$bp = floatval($product->getData($product_costs_attribute));
|
|
|
215 |
if ($bp != 0) {
|
216 |
+
Mage::log('EXPORT: Gross profit: attribute value: ' . $bp, null, 'maxicycle.log');
|
217 |
$item_costs += ($item_quantity * $bp);
|
218 |
} else {
|
219 |
+
Mage::log('EXPORT: Gross profit: attribute value empty ' . $bp, null, 'maxicycle.log');
|
220 |
$item_costs += ($item_quantity * $item_price);
|
221 |
}
|
222 |
+
Mage::log('EXPORT: Gross profit: item costs ' . $item_costs, null, 'maxicycle.log');
|
223 |
} else {
|
224 |
+
Mage::log('EXPORT: Gross profit: fixed product price - percentage', null, 'maxicycle.log');
|
225 |
if (floatval($product_costs_fixed) != 0) {
|
226 |
// deduct percentage
|
227 |
$fixed_percentage = floatval($product_costs_fixed) / 100.00;
|
228 |
$item_costs += ($item_quantity * $item_price * $fixed_percentage);
|
229 |
+
Mage::log('EXPORT: Gross profit: item costs ' . $item_costs, null, 'maxicycle.log');
|
230 |
} else {
|
231 |
$item_costs += ($item_quantity * $item_price);
|
232 |
}
|
235 |
|
236 |
// deduct specified average order costs
|
237 |
$gross_profit = ($grand_total - floatval($avg_order_costs));
|
238 |
+
Mage::log('EXPORT: Gross profit: Grand total - avg order costs: ' . $gross_profit, null, 'maxicycle.log');
|
239 |
// deduct tax
|
240 |
if ($use_tax) {
|
241 |
Mage::log('EXPORT: Gross profit, deducting tax', null, 'maxicycle.log');
|
@@ -12,7 +12,7 @@
|
|
12 |
<config>
|
13 |
<modules>
|
14 |
<Maxicycle_Connector>
|
15 |
-
<version>1.
|
16 |
</Maxicycle_Connector>
|
17 |
</modules>
|
18 |
|
12 |
<config>
|
13 |
<modules>
|
14 |
<Maxicycle_Connector>
|
15 |
+
<version>1.2.0</version>
|
16 |
</Maxicycle_Connector>
|
17 |
</modules>
|
18 |
|
@@ -210,11 +210,12 @@
|
|
210 |
</td>
|
211 |
<td class="value">
|
212 |
<select name="product_costs_type" class="select" onchange="return showProductCostsAttribute(this);" id="product_cost_type">
|
213 |
-
<option value="1"<?php echo ((intval($config['product_costs_type']) == 1) ? ' selected="selected"' : ''); ?>><?php echo $this->__('Attribute'); ?></option>
|
|
|
214 |
<option value="2"<?php echo ((intval($config['product_costs_type']) == 2) ? ' selected="selected"' : ''); ?>><?php echo $this->__('Fixed value'); ?></option>
|
215 |
</select>
|
216 |
<p class="note">
|
217 |
-
<span><?php echo $this->__('Select "Attribute" if you have stored the buying price of your products in a product attribute. If not, please select "Fixed value" and enter your average costs of goods sold (in percent).'); ?></span>
|
218 |
</p>
|
219 |
</td>
|
220 |
</tr>
|
@@ -226,12 +227,9 @@
|
|
226 |
<span><?php echo $this->__('Average costs of goods sold in percent of your product selling price without taxes. (Ask your controller!)'); ?></span>
|
227 |
</p>
|
228 |
</td>
|
229 |
-
</tr>
|
230 |
-
<tr>
|
231 |
-
<td></td>
|
232 |
<td class="value"<?php echo (($config['product_costs_type'] == '1') ? '' : ' style="display:none;"'); ?> id="product_costs_attribute">
|
233 |
<?php $attributes = Mage::getResourceModel('catalog/product_attribute_collection')->getItems(); ?>
|
234 |
-
<select name="product_costs_attribute" class="select">
|
235 |
<?php foreach ($attributes as $attribute): ?>
|
236 |
<?php if ($attribute->getFrontendLabel() == '' || $attribute->getBackendType() != 'decimal') continue; ?>
|
237 |
<?php $attribute_selected = ($config['product_costs_attribute'] == '' ? 'cost' : $config['product_costs_attribute']) ?>
|
@@ -242,6 +240,16 @@
|
|
242 |
<span><?php echo $this->__('This product attribute contains your product buying price.'); ?></span>
|
243 |
</p>
|
244 |
</td>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
</tr>
|
246 |
<tr>
|
247 |
<td class="label">
|
@@ -280,14 +288,29 @@
|
|
280 |
<script type="text/javascript">
|
281 |
//< ![CDATA[
|
282 |
function showProductCostsAttribute(e) {
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
289 |
}
|
290 |
}
|
|
|
291 |
function switchStore(obj) {
|
292 |
var storeParam = obj.value ? 'store/' + obj.value + '/' : '';
|
293 |
if (obj.switchParams) {
|
@@ -308,12 +331,10 @@
|
|
308 |
|
309 |
|
310 |
document.edit_form.onsubmit = function(){
|
311 |
-
alert('handled');
|
312 |
validateForm();
|
313 |
-
}
|
314 |
|
315 |
function submitIfValid() {
|
316 |
-
console.log('validateForm');
|
317 |
var e = document.getElementById("valid-status");
|
318 |
if (!e.options[e.selectedIndex]) {
|
319 |
alert("Select at least one order status.");
|
210 |
</td>
|
211 |
<td class="value">
|
212 |
<select name="product_costs_type" class="select" onchange="return showProductCostsAttribute(this);" id="product_cost_type">
|
213 |
+
<option value="1"<?php echo ((intval($config['product_costs_type']) == 1) ? ' selected="selected"' : ''); ?>><?php echo $this->__('Attribute - select from list'); ?></option>
|
214 |
+
<option value="3"<?php echo ((intval($config['product_costs_type']) == 3) ? ' selected="selected"' : ''); ?>><?php echo $this->__('Attribute - enter manually'); ?></option>
|
215 |
<option value="2"<?php echo ((intval($config['product_costs_type']) == 2) ? ' selected="selected"' : ''); ?>><?php echo $this->__('Fixed value'); ?></option>
|
216 |
</select>
|
217 |
<p class="note">
|
218 |
+
<span><?php echo $this->__('Select "Attribute" if you have stored the buying price of your products in a product attribute. If not, please select "Fixed value" and enter your average costs of goods sold (in percent of your sales without VAT).'); ?></span>
|
219 |
</p>
|
220 |
</td>
|
221 |
</tr>
|
227 |
<span><?php echo $this->__('Average costs of goods sold in percent of your product selling price without taxes. (Ask your controller!)'); ?></span>
|
228 |
</p>
|
229 |
</td>
|
|
|
|
|
|
|
230 |
<td class="value"<?php echo (($config['product_costs_type'] == '1') ? '' : ' style="display:none;"'); ?> id="product_costs_attribute">
|
231 |
<?php $attributes = Mage::getResourceModel('catalog/product_attribute_collection')->getItems(); ?>
|
232 |
+
<select name="product_costs_attribute" class="select" id="product_costs_attribute_select">
|
233 |
<?php foreach ($attributes as $attribute): ?>
|
234 |
<?php if ($attribute->getFrontendLabel() == '' || $attribute->getBackendType() != 'decimal') continue; ?>
|
235 |
<?php $attribute_selected = ($config['product_costs_attribute'] == '' ? 'cost' : $config['product_costs_attribute']) ?>
|
240 |
<span><?php echo $this->__('This product attribute contains your product buying price.'); ?></span>
|
241 |
</p>
|
242 |
</td>
|
243 |
+
<!-- Custom attribute code -->
|
244 |
+
<td class="value"<?php echo (($config['product_costs_type'] == '3') ? '' : ' style="display:none;"'); ?> id="product_costs_attribute_custom">
|
245 |
+
<div id="product_attribute_text_field">
|
246 |
+
<input type="text" class="input-text" name="product_costs_attribute" value="<?php echo ($config['product_costs_type'] == '3') ? $config['product_costs_attribute'] : '' ?>" placeholder="Attribute code" id="product_costs_attribute_custom_input"/>
|
247 |
+
</div>
|
248 |
+
|
249 |
+
<p class="note">
|
250 |
+
<span><?php echo $this->__('This product attribute contains your product buying price. You can find the attribute code in Catalog > Attributes > Manage Attributes > ... > Properties > Attribute code. Attribute values must be formatted as "1234.56"'); ?></span>
|
251 |
+
</p>
|
252 |
+
</td>
|
253 |
</tr>
|
254 |
<tr>
|
255 |
<td class="label">
|
288 |
<script type="text/javascript">
|
289 |
//< ![CDATA[
|
290 |
function showProductCostsAttribute(e) {
|
291 |
+
switch($(e).value) {
|
292 |
+
case '1':
|
293 |
+
$('product_costs_fixed').hide();
|
294 |
+
$('product_costs_attribute_custom').hide();
|
295 |
+
$('product_costs_attribute_custom_input').disabled = true;
|
296 |
+
$('product_costs_attribute_select').disabled = false;
|
297 |
+
$('product_costs_attribute').show();
|
298 |
+
break;
|
299 |
+
case '2':
|
300 |
+
$('product_costs_fixed').show();
|
301 |
+
$('product_costs_attribute_custom').hide();
|
302 |
+
$('product_costs_attribute').hide();
|
303 |
+
break;
|
304 |
+
case '3':
|
305 |
+
$('product_costs_fixed').hide();
|
306 |
+
$('product_costs_attribute_custom').show();
|
307 |
+
$('product_costs_attribute_select').disabled = true;
|
308 |
+
$('product_costs_attribute_custom_input').disabled = false;
|
309 |
+
$('product_costs_attribute').hide();
|
310 |
+
break;
|
311 |
}
|
312 |
}
|
313 |
+
|
314 |
function switchStore(obj) {
|
315 |
var storeParam = obj.value ? 'store/' + obj.value + '/' : '';
|
316 |
if (obj.switchParams) {
|
331 |
|
332 |
|
333 |
document.edit_form.onsubmit = function(){
|
|
|
334 |
validateForm();
|
335 |
+
};
|
336 |
|
337 |
function submitIfValid() {
|
|
|
338 |
var e = document.getElementById("valid-status");
|
339 |
if (!e.options[e.selectedIndex]) {
|
340 |
alert("Select at least one order status.");
|
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>MaxicycleCom_Connector</name>
|
4 |
-
<version>1.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://www.maxicycle/license">Copyright Maxicycle Software GmbH 2015</license>
|
7 |
<channel>community</channel>
|
@@ -11,7 +11,19 @@
|
|
11 |

|
12 |
Did you know that enclosing package inserts (coupons, catalogs, freebies, product samples, etc.) are extremely effective in driving follow-up orders from your existing customer base? Maxicycle is the solution that turns your packages into a real performance-based retention marketing channel with an amazing ROI: Create, manage, measure and optimise package inserts in a similar way than you are used from your AdWords or Facebook ads.
|
13 |
</description>
|
14 |
-
<notes>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
Big refactoring.
|
16 |
Split testing functionality
|
17 |

|
@@ -46,9 +58,9 @@ Logging into separate logfile
|
|
46 |
v.1.0.0
|
47 |
* Initial official release</notes>
|
48 |
<authors><author><name>Maxicycle Software GmbH</name><user>maxicycle</user><email>support@maxicycle.com</email></author></authors>
|
49 |
-
<date>2016-
|
50 |
-
<time>
|
51 |
-
<contents><target name="mageetc"><dir name="modules"><file name="Maxicycle_Connector.xml" hash="0d64b2d2ad66099e225460c349125557"/></dir></target><target name="magecommunity"><dir name="Maxicycle"><dir name="Connector"><dir name="Block"><dir name="Adminhtml"><dir name="Campaigns"><file name="Grid.php" hash="
|
52 |
<compatible/>
|
53 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
54 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>MaxicycleCom_Connector</name>
|
4 |
+
<version>1.2.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://www.maxicycle/license">Copyright Maxicycle Software GmbH 2015</license>
|
7 |
<channel>community</channel>
|
11 |

|
12 |
Did you know that enclosing package inserts (coupons, catalogs, freebies, product samples, etc.) are extremely effective in driving follow-up orders from your existing customer base? Maxicycle is the solution that turns your packages into a real performance-based retention marketing channel with an amazing ROI: Create, manage, measure and optimise package inserts in a similar way than you are used from your AdWords or Facebook ads.
|
13 |
</description>
|
14 |
+
<notes>v.1.2.0
|
15 |
+
Allow to set custom attribute for gross profit calculation
|
16 |
+

|
17 |
+
v1.1.6
|
18 |
+
Bugfix 
|
19 |
+

|
20 |
+
v1.1.5
|
21 |
+
cleanup 
|
22 |
+

|
23 |
+
v1.1.4
|
24 |
+
Little refactoring of order update
|
25 |
+

|
26 |
+
v1.1.3
|
27 |
Big refactoring.
|
28 |
Split testing functionality
|
29 |

|
58 |
v.1.0.0
|
59 |
* Initial official release</notes>
|
60 |
<authors><author><name>Maxicycle Software GmbH</name><user>maxicycle</user><email>support@maxicycle.com</email></author></authors>
|
61 |
+
<date>2016-04-03</date>
|
62 |
+
<time>20:12:18</time>
|
63 |
+
<contents><target name="mageetc"><dir name="modules"><file name="Maxicycle_Connector.xml" hash="0d64b2d2ad66099e225460c349125557"/></dir></target><target name="magecommunity"><dir name="Maxicycle"><dir name="Connector"><dir name="Block"><dir name="Adminhtml"><dir name="Campaigns"><file name="Grid.php" hash="2630f7165cd3c37c22108002517b1092"/></dir><file name="Campaigns.php" hash="b09c985fc4215ecd937024e0364f319b"/><dir name="Cronlog"><file name="Grid.php" hash="256284d0455dbb136baf8e00d2a71a89"/></dir><file name="Cronlog.php" hash="577f5e50a80fbac7b83cf8d5727bbb5f"/><dir name="Results"><file name="Grid.php" hash="ba4b97a5137098ae21826f3ff4ed7a09"/><dir name="Renderer"><file name="Campaign.php" hash="ef4d3f0cd6c3558367f82e07853414e6"/><file name="Flag2.php" hash="d8779254a77e19da81c91e81452a7e43"/><file name="Order.php" hash="aecdc4cb460c558773660778060cde0f"/></dir></dir><file name="Results.php" hash="4d32a5f15b1f3a18434e3b2754030659"/></dir></dir><dir name="Helper"><file name="Data.php" hash="a7df4cd21dc681b1887b21276e099c53"/></dir><dir name="Model"><dir name="Api"><file name="Abstract.php" hash="71be3bc47c32463bc8f6f84e901719ef"/><file name="Rest.php" hash="1a3c5413761e27c88e6c3cbe940d2be0"/></dir><file name="Campaigns.php" hash="4e60821d8a19ea5391921e5b358257dc"/><file name="Cronlog.php" hash="dc5eec5445c6c703429992b749c8ef2c"/><file name="Insert.php" hash="638cbc218081573410a951511028dab1"/><dir name="Mysql4"><dir name="Campaigns"><file name="Collection.php" hash="880cbcd1ab65efb9096965c267ad35cc"/></dir><file name="Campaigns.php" hash="98143aae26423260cccb496aac9d28f2"/><dir name="Cronlog"><file name="Collection.php" hash="44d321c218f66619fbbf14271fca361f"/></dir><file name="Cronlog.php" hash="299749238a435407cce37b5dc524c466"/><dir name="Results"><file name="Collection.php" hash="8b046e56516f2f1893b6f3d1e6e2b228"/><dir name="Renderer"><file name="Actions.php" hash="da76e0352436e0570c8e6506a121d031"/><file name="Status.php" hash="37878ac8231edee56041b714077f7aec"/></dir></dir><file name="Results.php" hash="8898f253c8dce9ebe3a6b289e26945a6"/></dir><file name="Observer.php" hash="dc43939eb4ec67953a7bf0e760cc7177"/><dir name="Resource"><dir name="Mysql4"><file name="Setup.php" hash="ccae8f6fc1d48cb5ef6b761211e75bd9"/></dir></dir><file name="Results.php" hash="246fff1018a0b03f521ba96ec61b8a8e"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="CampaignsController.php" hash="420557976cfeda32353ce0b5f435a252"/><file name="CronlogController.php" hash="eb58983412dec2890d22138adecb95a7"/><file name="InstallationController.php" hash="8f338320862fc72b7f2eaaf5a918e293"/><file name="ResultsController.php" hash="78633bbdd767350c56deef829c7b4a62"/></dir><file name="TestConnectionController.php" hash="ddb67e441e3478d45632905b78e5c362"/><file name="V1Controller.php" hash="8cf992ec3ab988d3b11f8428ea98d501"/></dir><dir name="data"><file name="data_sample.sql" hash="c02ad04dc9c1b43814ac7877970ab1ae"/></dir><dir name="etc"><file name="adminhtml.xml" hash="363126b0e935810dd07d42426ce9f766"/><file name="config.xml" hash="495c4fc897c5d8e79b017d517d6837be"/></dir><dir name="sql"><dir name="maxicycle_setup"><file name="mysql4-install-1.0.0.php" hash="ac322e77f8b08beb2d326426f2c23121"/><file name="upgrade-1.0.0-1.0.1.php" hash="dba0e0a874a87c101b379de988646b1f"/><file name="upgrade-1.0.3-1.0.4.php" hash="dba0e0a874a87c101b379de988646b1f"/><file name="upgrade-1.0.4-1.0.5.php" hash="5ab6b381bfe60a5d2d2b0b8476fa687c"/><file name="upgrade-1.0.7-1.1.1.php" hash="71ac5eb71b7401d3cbd976b413f88860"/><file name="upgrade-1.1.1-1.1.2.php" hash="025f1aea7c6432175c27c6d898ea8d09"/><file name="upgrade-1.1.2-1.1.3.php" hash="dac70cbef34f2c9a892cdce3a2c568cf"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="maxicycle"><dir name="connector"><dir name="installation"><file name="step1.phtml" hash="bf6ee437f77eea396d81e80abc1faffd"/></dir></dir></dir></dir><dir name="layout"><dir name="maxicycle"><dir name="connector"><file name="layout.xml" hash="b4c388d059df42d365c945f972e8cfca"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="maxicycle"><dir name="connector"><dir name="css"><file name="css.css" hash="6cb4c9ca0ce1288f028ea80284d368ae"/></dir></dir></dir></dir></dir></dir></target></contents>
|
64 |
<compatible/>
|
65 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php></required></dependencies>
|
66 |
</package>
|