DigitalPianism_Abandonedcarts - Version 0.3.6

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
- * @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,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'] = (string)Mage::helper('catalog/image')->init($_productCollection->getFirstItem(), 'image');
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
- * @param $args
117
- */
118
- public function generateSaleRecipients($args)
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'] = (string)Mage::helper('catalog/image')->init($_productCollection->getFirstItem(), 'image');
177
  }
178
  else
179
  {
@@ -210,11 +224,11 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
210
  }
211
  }
212
 
213
- /**
214
- * @param $dryrun
215
- * @param $testemail
216
- */
217
- protected function _sendSaleEmails($dryrun,$testemail)
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
- ->sendTransactional(
246
- $templateId,
247
- $sender,
248
- $email,
249
- $recipient['emailTemplateVariables']['fullname'] ,
250
- $recipient['emailTemplateVariables'],
251
- null);
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
- ->sendTransactional(
261
- $templateId,
262
- $sender,
263
- $email,
264
- $recipient['emailTemplateVariables']['fullname'] ,
265
- $recipient['emailTemplateVariables'],
266
- null);
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
- $quote->getResource()->saveAttribute($quote,array('abandoned_sale_notified'));
279
  }
280
  }
281
  }
@@ -285,11 +299,11 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
285
  }
286
  }
287
 
288
- /**
289
- * @param $dryrun
290
- * @param $testemail
291
- */
292
- protected function _sendEmails($dryrun,$testemail)
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
- ->sendTransactional(
321
- $templateId,
322
- $sender,
323
- $email,
324
- $recipient['emailTemplateVariables']['fullname'] ,
325
- $recipient['emailTemplateVariables'],
326
- null);
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
- ->sendTransactional(
336
- $templateId,
337
- $sender,
338
- $email,
339
- $recipient['emailTemplateVariables']['fullname'] ,
340
- $recipient['emailTemplateVariables'],
341
- null);
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
- $quote->getResource()->saveAttribute($quote,array('abandoned_notified'));
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
- 'e.sku',
423
- 'catalog_flat.name as product_name',
424
- 'catalog_flat.price as product_price',
425
- 'catalog_flat.special_price as product_special_price',
426
- 'catalog_flat.special_from_date as product_special_from_date',
427
- 'catalog_flat.special_to_date as product_special_to_date',
428
- 'quote_table.entity_id as cart_id',
429
- 'quote_table.updated_at as cart_updated_at',
430
- 'quote_table.abandoned_sale_notified as has_been_notified',
431
- 'quote_items.price as product_price_in_cart',
432
- 'quote_table.customer_email as customer_email',
433
- 'quote_table.customer_firstname as customer_firstname',
434
- 'quote_table.customer_lastname as customer_lastname',
435
- 'quote_table.customer_group_id as customer_group'
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
- 'e.sku',
468
- 'catalog_name.value as product_name',
469
- 'catalog_price.value as product_price',
470
- 'catalog_sprice.value as product_special_price',
471
- 'catalog_spfrom.value as product_special_from_date',
472
- 'catalog_spto.value as product_special_to_date',
473
- 'quote_table.entity_id as cart_id',
474
- 'quote_table.updated_at as cart_updated_at',
475
- 'quote_table.abandoned_sale_notified as has_been_notified',
476
- 'quote_items.price as product_price_in_cart',
477
- 'quote_table.customer_email as customer_email',
478
- 'quote_table.customer_firstname as customer_firstname',
479
- 'quote_table.customer_lastname as customer_lastname',
480
- 'quote_table.customer_group_id as customer_group'
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
- * Send notification email to customer with abandoned carts after the number of days specified in the config
555
- * @param bool $nodate
556
- * @param boolean $dryrun if dryrun is set to true, it won't send emails and won't alter quotes
557
- * @param string $testemail email to test
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
- 'e.sku',
622
- 'catalog_flat.name as product_name',
623
- 'catalog_flat.price as product_price',
624
- 'quote_table.entity_id as cart_id',
625
- 'quote_table.updated_at as cart_updated_at',
626
- 'quote_table.abandoned_notified as has_been_notified',
627
- 'quote_table.customer_email as customer_email',
628
- 'quote_table.customer_firstname as customer_firstname',
629
- 'quote_table.customer_lastname as customer_lastname',
630
- 'quote_table.customer_group_id as customer_group'
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
- 'e.sku',
663
- 'catalog_name.value as product_name',
664
- 'catalog_price.value as product_price',
665
- 'quote_table.entity_id as cart_id',
666
- 'quote_table.updated_at as cart_updated_at',
667
- 'quote_table.abandoned_notified as has_been_notified',
668
- 'quote_table.customer_email as customer_email',
669
- 'quote_table.customer_firstname as customer_firstname',
670
- 'quote_table.customer_lastname as customer_lastname',
671
- 'quote_table.customer_group_id as customer_group'
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.5</version>
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</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,11 +95,11 @@ Save the configuration.&#xD;
95
  &#xD;
96
  &lt;p&gt;To manually trigger the notification system, please access System &amp;gt; Configuration &amp;gt; Digital Pianism &amp;gt; Abandoned carts email and click on the "Send" button&lt;/p&gt;&#xD;
97
  &lt;p&gt;Please note that this functionality will send abandoned carts notification regardless the delay you provided, all possible abandoned carts emails will be sent.&lt;/p&gt;</description>
98
- <notes>- Fix a bug where the product image would not be retrieved in the email.</notes>
99
  <authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
100
- <date>2016-03-08</date>
101
- <time>14:59:57</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="21557e916c65c0a36804f668eba08bd5"/><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="2219b47ebe77e6ed9e8b9a3af0683d0a"/><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>
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
  &#xD;
96
  &lt;p&gt;To manually trigger the notification system, please access System &amp;gt; Configuration &amp;gt; Digital Pianism &amp;gt; Abandoned carts email and click on the "Send" button&lt;/p&gt;&#xD;
97
  &lt;p&gt;Please note that this functionality will send abandoned carts notification regardless the delay you provided, all possible abandoned carts emails will be sent.&lt;/p&gt;</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>