Version Notes
- Fix a bug where an error would be logged in case the product image does not exist.
Download this release
Release Info
Developer | Digital Pianism |
Extension | DigitalPianism_Abandonedcarts |
Version | 0.3.6 |
Comparing to | |
See all releases |
Code changes from version 0.3.5 to 0.3.6
app/code/community/DigitalPianism/Abandonedcarts/Model/Observer.php
CHANGED
@@ -37,34 +37,34 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
37 |
$this->_today = $today->toString("Y-MM-dd HH:mm:ss");
|
38 |
}
|
39 |
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
{
|
45 |
return $this->_today;
|
46 |
}
|
47 |
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
{
|
53 |
return $this->_recipients;
|
54 |
}
|
55 |
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
{
|
61 |
return $this->_saleRecipients;
|
62 |
}
|
63 |
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
{
|
69 |
// Customer group check
|
70 |
if (array_key_exists('customer_group',$args['row']) && !in_array($args['row']['customer_group'],$this->_customerGroups))
|
@@ -95,8 +95,15 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
95 |
// Limit the collection to get the specific product
|
96 |
$_productCollection->setPageSize(1);
|
97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
// Add product image
|
99 |
-
$emailTemplateVariables['productimage'] =
|
100 |
|
101 |
$emailTemplateVariables['extraproductcount'] = 0;
|
102 |
}
|
@@ -112,10 +119,10 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
112 |
$this->_recipients[$args['row']['customer_email']]['store_id'] = $this->_currentStoreId;
|
113 |
}
|
114 |
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
{
|
120 |
// Customer group check
|
121 |
if (array_key_exists('customer_group',$args['row']) && !in_array($args['row']['customer_group'],$this->_customerGroups))
|
@@ -172,8 +179,15 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
172 |
// Limit the collection to get the specific product
|
173 |
$_productCollection->setPageSize(1);
|
174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
// Add product image
|
176 |
-
$emailTemplateVariables['productimage'] =
|
177 |
}
|
178 |
else
|
179 |
{
|
@@ -210,11 +224,11 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
210 |
}
|
211 |
}
|
212 |
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
{
|
219 |
try
|
220 |
{
|
@@ -242,13 +256,13 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
242 |
Mage::helper('abandonedcarts')->log(__METHOD__ . "sendAbandonedCartsSaleEmail test: " . $email);
|
243 |
// Send the test email
|
244 |
Mage::getModel('core/email_template')
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
}
|
253 |
}
|
254 |
else
|
@@ -257,13 +271,13 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
257 |
|
258 |
// Send the email
|
259 |
Mage::getModel('core/email_template')
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
}
|
268 |
|
269 |
// Load the quote
|
@@ -275,7 +289,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
275 |
// Save only if dryrun is false or if the test email is set and found
|
276 |
if (!$dryrun || (isset($testemail) && $email == $testemail))
|
277 |
{
|
278 |
-
|
279 |
}
|
280 |
}
|
281 |
}
|
@@ -285,11 +299,11 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
285 |
}
|
286 |
}
|
287 |
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
{
|
294 |
try
|
295 |
{
|
@@ -317,13 +331,13 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
317 |
Mage::helper('abandonedcarts')->log(__METHOD__ . "sendAbandonedCartsEmail test: " . $email);
|
318 |
// Send the test email
|
319 |
Mage::getModel('core/email_template')
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
}
|
328 |
}
|
329 |
else
|
@@ -332,13 +346,13 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
332 |
|
333 |
// Send the email
|
334 |
Mage::getModel('core/email_template')
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
}
|
343 |
|
344 |
// Load the quote
|
@@ -350,7 +364,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
350 |
// Save only if dryrun is false or if the test email is set and found
|
351 |
if (!$dryrun || (isset($testemail) && $email == $testemail))
|
352 |
{
|
353 |
-
|
354 |
}
|
355 |
}
|
356 |
}
|
@@ -419,22 +433,22 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
419 |
$collection->getSelect()
|
420 |
->reset(Zend_Db_Select::COLUMNS)
|
421 |
->columns(array('e.entity_id AS product_id',
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
->joinInner(
|
439 |
array('quote_items' => Mage::getSingleton("core/resource")->getTableName('sales_flat_quote_item')),
|
440 |
'quote_items.product_id = e.entity_id AND quote_items.price > 0.00',
|
@@ -464,22 +478,22 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
464 |
$collection->getSelect()
|
465 |
->reset(Zend_Db_Select::COLUMNS)
|
466 |
->columns(array('e.entity_id AS product_id',
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
// Name
|
484 |
->joinInner(
|
485 |
array('catalog_name' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_varchar')),
|
@@ -550,12 +564,12 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
550 |
}
|
551 |
}
|
552 |
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
public function sendAbandonedCartsEmail($nodate = false, $dryrun = false, $testemail = null)
|
560 |
{
|
561 |
if (Mage::helper('abandonedcarts')->getDryRun()) $dryrun = true;
|
@@ -618,18 +632,18 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
618 |
$collection->getSelect()
|
619 |
->reset(Zend_Db_Select::COLUMNS)
|
620 |
->columns(array('e.entity_id AS product_id',
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
->joinInner(
|
634 |
array('quote_items' => Mage::getSingleton("core/resource")->getTableName('sales_flat_quote_item')),
|
635 |
'quote_items.product_id = e.entity_id AND quote_items.price > 0.00',
|
@@ -659,18 +673,18 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
|
|
659 |
$collection->getSelect()
|
660 |
->reset(Zend_Db_Select::COLUMNS)
|
661 |
->columns(array('e.entity_id AS product_id',
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
// Name
|
675 |
->joinInner(
|
676 |
array('catalog_name' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_varchar')),
|
37 |
$this->_today = $today->toString("Y-MM-dd HH:mm:ss");
|
38 |
}
|
39 |
|
40 |
+
/**
|
41 |
+
* @return string
|
42 |
+
*/
|
43 |
+
protected function _getToday()
|
44 |
{
|
45 |
return $this->_today;
|
46 |
}
|
47 |
|
48 |
+
/**
|
49 |
+
* @return array
|
50 |
+
*/
|
51 |
+
protected function _getRecipients()
|
52 |
{
|
53 |
return $this->_recipients;
|
54 |
}
|
55 |
|
56 |
+
/**
|
57 |
+
* @return array
|
58 |
+
*/
|
59 |
+
protected function _getSaleRecipients()
|
60 |
{
|
61 |
return $this->_saleRecipients;
|
62 |
}
|
63 |
|
64 |
+
/**
|
65 |
+
* @param $args
|
66 |
+
*/
|
67 |
+
public function generateRecipients($args)
|
68 |
{
|
69 |
// Customer group check
|
70 |
if (array_key_exists('customer_group',$args['row']) && !in_array($args['row']['customer_group'],$this->_customerGroups))
|
95 |
// Limit the collection to get the specific product
|
96 |
$_productCollection->setPageSize(1);
|
97 |
|
98 |
+
try {
|
99 |
+
$productImg = (string)Mage::helper('catalog/image')->init($_productCollection->getFirstItem(), 'image');
|
100 |
+
}
|
101 |
+
catch (Exception $e) {
|
102 |
+
$productImg = false;
|
103 |
+
}
|
104 |
+
|
105 |
// Add product image
|
106 |
+
$emailTemplateVariables['productimage'] = $productImg;
|
107 |
|
108 |
$emailTemplateVariables['extraproductcount'] = 0;
|
109 |
}
|
119 |
$this->_recipients[$args['row']['customer_email']]['store_id'] = $this->_currentStoreId;
|
120 |
}
|
121 |
|
122 |
+
/**
|
123 |
+
* @param $args
|
124 |
+
*/
|
125 |
+
public function generateSaleRecipients($args)
|
126 |
{
|
127 |
// Customer group check
|
128 |
if (array_key_exists('customer_group',$args['row']) && !in_array($args['row']['customer_group'],$this->_customerGroups))
|
179 |
// Limit the collection to get the specific product
|
180 |
$_productCollection->setPageSize(1);
|
181 |
|
182 |
+
try {
|
183 |
+
$productImg = (string)Mage::helper('catalog/image')->init($_productCollection->getFirstItem(), 'image');
|
184 |
+
}
|
185 |
+
catch (Exception $e) {
|
186 |
+
$productImg = false;
|
187 |
+
}
|
188 |
+
|
189 |
// Add product image
|
190 |
+
$emailTemplateVariables['productimage'] = $productImg;
|
191 |
}
|
192 |
else
|
193 |
{
|
224 |
}
|
225 |
}
|
226 |
|
227 |
+
/**
|
228 |
+
* @param $dryrun
|
229 |
+
* @param $testemail
|
230 |
+
*/
|
231 |
+
protected function _sendSaleEmails($dryrun,$testemail)
|
232 |
{
|
233 |
try
|
234 |
{
|
256 |
Mage::helper('abandonedcarts')->log(__METHOD__ . "sendAbandonedCartsSaleEmail test: " . $email);
|
257 |
// Send the test email
|
258 |
Mage::getModel('core/email_template')
|
259 |
+
->sendTransactional(
|
260 |
+
$templateId,
|
261 |
+
$sender,
|
262 |
+
$email,
|
263 |
+
$recipient['emailTemplateVariables']['fullname'] ,
|
264 |
+
$recipient['emailTemplateVariables'],
|
265 |
+
null);
|
266 |
}
|
267 |
}
|
268 |
else
|
271 |
|
272 |
// Send the email
|
273 |
Mage::getModel('core/email_template')
|
274 |
+
->sendTransactional(
|
275 |
+
$templateId,
|
276 |
+
$sender,
|
277 |
+
$email,
|
278 |
+
$recipient['emailTemplateVariables']['fullname'] ,
|
279 |
+
$recipient['emailTemplateVariables'],
|
280 |
+
null);
|
281 |
}
|
282 |
|
283 |
// Load the quote
|
289 |
// Save only if dryrun is false or if the test email is set and found
|
290 |
if (!$dryrun || (isset($testemail) && $email == $testemail))
|
291 |
{
|
292 |
+
$quote->getResource()->saveAttribute($quote,array('abandoned_sale_notified'));
|
293 |
}
|
294 |
}
|
295 |
}
|
299 |
}
|
300 |
}
|
301 |
|
302 |
+
/**
|
303 |
+
* @param $dryrun
|
304 |
+
* @param $testemail
|
305 |
+
*/
|
306 |
+
protected function _sendEmails($dryrun,$testemail)
|
307 |
{
|
308 |
try
|
309 |
{
|
331 |
Mage::helper('abandonedcarts')->log(__METHOD__ . "sendAbandonedCartsEmail test: " . $email);
|
332 |
// Send the test email
|
333 |
Mage::getModel('core/email_template')
|
334 |
+
->sendTransactional(
|
335 |
+
$templateId,
|
336 |
+
$sender,
|
337 |
+
$email,
|
338 |
+
$recipient['emailTemplateVariables']['fullname'] ,
|
339 |
+
$recipient['emailTemplateVariables'],
|
340 |
+
null);
|
341 |
}
|
342 |
}
|
343 |
else
|
346 |
|
347 |
// Send the email
|
348 |
Mage::getModel('core/email_template')
|
349 |
+
->sendTransactional(
|
350 |
+
$templateId,
|
351 |
+
$sender,
|
352 |
+
$email,
|
353 |
+
$recipient['emailTemplateVariables']['fullname'] ,
|
354 |
+
$recipient['emailTemplateVariables'],
|
355 |
+
null);
|
356 |
}
|
357 |
|
358 |
// Load the quote
|
364 |
// Save only if dryrun is false or if the test email is set and found
|
365 |
if (!$dryrun || (isset($testemail) && $email == $testemail))
|
366 |
{
|
367 |
+
$quote->getResource()->saveAttribute($quote,array('abandoned_notified'));
|
368 |
}
|
369 |
}
|
370 |
}
|
433 |
$collection->getSelect()
|
434 |
->reset(Zend_Db_Select::COLUMNS)
|
435 |
->columns(array('e.entity_id AS product_id',
|
436 |
+
'e.sku',
|
437 |
+
'catalog_flat.name as product_name',
|
438 |
+
'catalog_flat.price as product_price',
|
439 |
+
'catalog_flat.special_price as product_special_price',
|
440 |
+
'catalog_flat.special_from_date as product_special_from_date',
|
441 |
+
'catalog_flat.special_to_date as product_special_to_date',
|
442 |
+
'quote_table.entity_id as cart_id',
|
443 |
+
'quote_table.updated_at as cart_updated_at',
|
444 |
+
'quote_table.abandoned_sale_notified as has_been_notified',
|
445 |
+
'quote_items.price as product_price_in_cart',
|
446 |
+
'quote_table.customer_email as customer_email',
|
447 |
+
'quote_table.customer_firstname as customer_firstname',
|
448 |
+
'quote_table.customer_lastname as customer_lastname',
|
449 |
+
'quote_table.customer_group_id as customer_group'
|
450 |
+
)
|
451 |
+
)
|
452 |
->joinInner(
|
453 |
array('quote_items' => Mage::getSingleton("core/resource")->getTableName('sales_flat_quote_item')),
|
454 |
'quote_items.product_id = e.entity_id AND quote_items.price > 0.00',
|
478 |
$collection->getSelect()
|
479 |
->reset(Zend_Db_Select::COLUMNS)
|
480 |
->columns(array('e.entity_id AS product_id',
|
481 |
+
'e.sku',
|
482 |
+
'catalog_name.value as product_name',
|
483 |
+
'catalog_price.value as product_price',
|
484 |
+
'catalog_sprice.value as product_special_price',
|
485 |
+
'catalog_spfrom.value as product_special_from_date',
|
486 |
+
'catalog_spto.value as product_special_to_date',
|
487 |
+
'quote_table.entity_id as cart_id',
|
488 |
+
'quote_table.updated_at as cart_updated_at',
|
489 |
+
'quote_table.abandoned_sale_notified as has_been_notified',
|
490 |
+
'quote_items.price as product_price_in_cart',
|
491 |
+
'quote_table.customer_email as customer_email',
|
492 |
+
'quote_table.customer_firstname as customer_firstname',
|
493 |
+
'quote_table.customer_lastname as customer_lastname',
|
494 |
+
'quote_table.customer_group_id as customer_group'
|
495 |
+
)
|
496 |
+
)
|
497 |
// Name
|
498 |
->joinInner(
|
499 |
array('catalog_name' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_varchar')),
|
564 |
}
|
565 |
}
|
566 |
|
567 |
+
/**
|
568 |
+
* Send notification email to customer with abandoned carts after the number of days specified in the config
|
569 |
+
* @param bool $nodate
|
570 |
+
* @param boolean $dryrun if dryrun is set to true, it won't send emails and won't alter quotes
|
571 |
+
* @param string $testemail email to test
|
572 |
+
*/
|
573 |
public function sendAbandonedCartsEmail($nodate = false, $dryrun = false, $testemail = null)
|
574 |
{
|
575 |
if (Mage::helper('abandonedcarts')->getDryRun()) $dryrun = true;
|
632 |
$collection->getSelect()
|
633 |
->reset(Zend_Db_Select::COLUMNS)
|
634 |
->columns(array('e.entity_id AS product_id',
|
635 |
+
'e.sku',
|
636 |
+
'catalog_flat.name as product_name',
|
637 |
+
'catalog_flat.price as product_price',
|
638 |
+
'quote_table.entity_id as cart_id',
|
639 |
+
'quote_table.updated_at as cart_updated_at',
|
640 |
+
'quote_table.abandoned_notified as has_been_notified',
|
641 |
+
'quote_table.customer_email as customer_email',
|
642 |
+
'quote_table.customer_firstname as customer_firstname',
|
643 |
+
'quote_table.customer_lastname as customer_lastname',
|
644 |
+
'quote_table.customer_group_id as customer_group'
|
645 |
+
)
|
646 |
+
)
|
647 |
->joinInner(
|
648 |
array('quote_items' => Mage::getSingleton("core/resource")->getTableName('sales_flat_quote_item')),
|
649 |
'quote_items.product_id = e.entity_id AND quote_items.price > 0.00',
|
673 |
$collection->getSelect()
|
674 |
->reset(Zend_Db_Select::COLUMNS)
|
675 |
->columns(array('e.entity_id AS product_id',
|
676 |
+
'e.sku',
|
677 |
+
'catalog_name.value as product_name',
|
678 |
+
'catalog_price.value as product_price',
|
679 |
+
'quote_table.entity_id as cart_id',
|
680 |
+
'quote_table.updated_at as cart_updated_at',
|
681 |
+
'quote_table.abandoned_notified as has_been_notified',
|
682 |
+
'quote_table.customer_email as customer_email',
|
683 |
+
'quote_table.customer_firstname as customer_firstname',
|
684 |
+
'quote_table.customer_lastname as customer_lastname',
|
685 |
+
'quote_table.customer_group_id as customer_group'
|
686 |
+
)
|
687 |
+
)
|
688 |
// Name
|
689 |
->joinInner(
|
690 |
array('catalog_name' => Mage::getSingleton("core/resource")->getTableName('catalog_product_entity_varchar')),
|
app/code/community/DigitalPianism/Abandonedcarts/etc/config.xml
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
<modules>
|
6 |
<DigitalPianism_Abandonedcarts>
|
7 |
-
<version>0.3.
|
8 |
</DigitalPianism_Abandonedcarts>
|
9 |
</modules>
|
10 |
|
4 |
|
5 |
<modules>
|
6 |
<DigitalPianism_Abandonedcarts>
|
7 |
+
<version>0.3.6</version>
|
8 |
</DigitalPianism_Abandonedcarts>
|
9 |
</modules>
|
10 |
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>DigitalPianism_Abandonedcarts</name>
|
4 |
-
<version>0.3.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
7 |
<channel>community</channel>
|
@@ -95,11 +95,11 @@ Save the configuration.
|
|
95 |

|
96 |
<p>To manually trigger the notification system, please access System &gt; Configuration &gt; Digital Pianism &gt; Abandoned carts email and click on the "Send" button</p>
|
97 |
<p>Please note that this functionality will send abandoned carts notification regardless the delay you provided, all possible abandoned carts emails will be sent.</p></description>
|
98 |
-
<notes>- Fix a bug where
|
99 |
<authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
|
100 |
-
<date>2016-
|
101 |
-
<time>
|
102 |
-
<contents><target name="magecommunity"><dir name="DigitalPianism"><dir name="Abandonedcarts"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="Button.php" hash="1c8d9cad5c54bcc28c0760e72406b5e3"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5148fe5929e61f4c8385c6c5be0b89f3"/></dir><dir name="Model"><file name="Observer.php" hash="
|
103 |
<compatible/>
|
104 |
<dependencies><required><php><min>4.1.0</min><max>6.0.0</max></php></required></dependencies>
|
105 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>DigitalPianism_Abandonedcarts</name>
|
4 |
+
<version>0.3.6</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
7 |
<channel>community</channel>
|
95 |

|
96 |
<p>To manually trigger the notification system, please access System &gt; Configuration &gt; Digital Pianism &gt; Abandoned carts email and click on the "Send" button</p>
|
97 |
<p>Please note that this functionality will send abandoned carts notification regardless the delay you provided, all possible abandoned carts emails will be sent.</p></description>
|
98 |
+
<notes>- Fix a bug where an error would be logged in case the product image does not exist.</notes>
|
99 |
<authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
|
100 |
+
<date>2016-04-22</date>
|
101 |
+
<time>13:16:02</time>
|
102 |
+
<contents><target name="magecommunity"><dir name="DigitalPianism"><dir name="Abandonedcarts"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><file name="Button.php" hash="1c8d9cad5c54bcc28c0760e72406b5e3"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5148fe5929e61f4c8385c6c5be0b89f3"/></dir><dir name="Model"><file name="Observer.php" hash="8f44dfb99958d521b10a292a65d842d4"/><dir name="Sales"><dir name="Resource"><file name="Quote.php" hash="3b2f9f24a74a6ea3b6851d64bd6ae5ba"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="AbandonedcartsController.php" hash="c26ae0925cc1ca148f5e3277702842e2"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="8ddca513c0ed7e034c476f3e026ceda8"/><file name="config.xml" hash="8d6a68ea652f6c578e91adffa33d40be"/><file name="system.xml" hash="07f261c1f35321317da8f09f75a37317"/></dir><dir name="sql"><dir name="abandonedcarts_setup"><file name="install-0.0.1.php" hash="851338e4a710b5d94fead688b065f4b5"/><file name="upgrade-0.0.1-0.0.2.php" hash="0227c009e49b97bcf3f34f84c49f0927"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="DigitalPianism_Abandonedcarts.xml" hash="8a7657855486c68d548db4ba48e083d2"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="digitalpianism"><dir name="abandonedcarts"><dir name="system"><dir name="config"><file name="button.phtml" hash="8f7e673ea52cd81b616cac01b1022990"/></dir></dir></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="digitalpianism"><dir name="abandonedcarts"><file name="sales_abandonedcarts.html" hash="f8a5ec3af09730f06ade1fd18fa321e9"/><file name="sales_abandonedcarts_sale.html" hash="22bb7a1e95e336948a43f282e7e58806"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="b782bff95dba8b860cd773a674aac6c9"/></dir><dir name="fr_FR"><dir name="template"><dir name="email"><dir name="digitalpianism"><dir name="abandonedcarts"><file name="sales_abandonedcarts.html" hash="5340ea06fbf9d2213ea2f09e7425181b"/><file name="sales_abandonedcarts_sale.html" hash="22592c5467a554ab80195218bec5b6b0"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="0f5271e2ad1d6b07061314b18bd170c2"/></dir></target></contents>
|
103 |
<compatible/>
|
104 |
<dependencies><required><php><min>4.1.0</min><max>6.0.0</max></php></required></dependencies>
|
105 |
</package>
|