DigitalPianism_Abandonedcarts - Version 0.3.0

Version Notes

- Add customer groups limitation to the configuration.
- Rename functions and change their scope in the observer.

Download this release

Release Info

Developer Digital Pianism
Extension DigitalPianism_Abandonedcarts
Version 0.3.0
Comparing to
See all releases


Code changes from version 0.2.3 to 0.3.0

app/code/community/DigitalPianism/Abandonedcarts/Helper/Data.php CHANGED
@@ -47,5 +47,13 @@ class DigitalPianism_Abandonedcarts_Helper_Data extends Mage_Core_Helper_Abstrac
47
  {
48
  return Mage::getStoreConfig('abandonedcartsconfig/options/testemail');
49
  }
50
-
 
 
 
 
 
 
 
 
51
  }
47
  {
48
  return Mage::getStoreConfig('abandonedcartsconfig/options/testemail');
49
  }
50
+
51
+ /**
52
+ * @return mixed
53
+ */
54
+ public function getCustomerGroupsLimitation()
55
+ {
56
+ return explode(',',Mage::getStoreConfig('abandonedcartsconfig/options/customer_groups'));
57
+ }
58
+
59
  }
app/code/community/DigitalPianism/Abandonedcarts/Model/Observer.php CHANGED
@@ -6,11 +6,12 @@
6
  class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstract
7
  {
8
 
9
- protected $recipients = array();
10
- protected $saleRecipients = array();
11
- protected $today = "";
12
-
13
- public function setToday()
 
14
  {
15
  // Date handling
16
  $store = Mage_Core_Model_App::ADMIN_STORE_ID;
@@ -31,31 +32,31 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
31
 
32
  date_default_timezone_set($timezone);
33
 
34
- $this->today = $today->toString("Y-MM-dd HH:mm:ss");
35
  }
36
 
37
  /**
38
  * @return string
39
  */
40
- public function getToday()
41
  {
42
- return $this->today;
43
  }
44
 
45
  /**
46
  * @return array
47
  */
48
- public function getRecipients()
49
  {
50
- return $this->recipients;
51
  }
52
 
53
  /**
54
  * @return array
55
  */
56
- public function getSaleRecipients()
57
  {
58
- return $this->saleRecipients;
59
  }
60
 
61
  /**
@@ -63,8 +64,14 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
63
  */
64
  public function generateRecipients($args)
65
  {
 
 
 
 
 
 
66
  // Test if the customer is already in the array
67
- if (!array_key_exists($args['row']['customer_email'], $this->recipients))
68
  {
69
  // Create an array of variables to assign to template
70
  $emailTemplateVariables = array();
@@ -75,7 +82,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
75
  $emailTemplateVariables['productname'] = $args['row']['product_name'];
76
 
77
  // Assign the values to the array of recipients
78
- $this->recipients[$args['row']['customer_email']]['cartId'] = $args['row']['cart_id'];
79
 
80
  // Get product image via collection
81
  $_productCollection = Mage::getResourceModel('catalog/product_collection');
@@ -94,12 +101,12 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
94
  else
95
  {
96
  // We create some extra variables if there is several products in the cart
97
- $emailTemplateVariables = $this->recipients[$args['row']['customer_email']]['emailTemplateVariables'];
98
  // We increase the product count
99
  $emailTemplateVariables['extraproductcount'] += 1;
100
  }
101
  // Assign the array of template variables
102
- $this->recipients[$args['row']['customer_email']]['emailTemplateVariables'] = $emailTemplateVariables;
103
  }
104
 
105
  /**
@@ -107,18 +114,24 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
107
  */
108
  public function generateSaleRecipients($args)
109
  {
 
 
 
 
 
 
110
  // Double check if the special from date is set
111
  if (!array_key_exists('product_special_from_date',$args['row']) || !$args['row']['product_special_from_date'])
112
  {
113
  // If not we use today for the comparison
114
- $fromDate = $this->getToday();
115
  }
116
  else $fromDate = $args['row']['product_special_from_date'];
117
 
118
  // Do the same for the special to date
119
  if (!array_key_exists('product_special_to_date',$args['row']) || !$args['row']['product_special_to_date'])
120
  {
121
- $toDate = $this->getToday();
122
  }
123
  else $toDate = $args['row']['product_special_to_date'];
124
 
@@ -127,12 +140,12 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
127
  if ($args['row']['product_price_in_cart'] > 0.00
128
  && $args['row']['product_special_price'] > 0.00
129
  && ($args['row']['product_price_in_cart'] > $args['row']['product_special_price'])
130
- && ($fromDate <= $this->getToday())
131
- && ($toDate >= $this->getToday()))
132
  {
133
 
134
  // Test if the customer is already in the array
135
- if (!array_key_exists($args['row']['customer_email'], $this->saleRecipients))
136
  {
137
  // Create an array of variables to assign to template
138
  $emailTemplateVariables = array();
@@ -145,7 +158,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
145
  $emailTemplateVariables['specialprice'] = number_format($args['row']['product_special_price'],2);
146
 
147
  // Assign the values to the array of recipients
148
- $this->saleRecipients[$args['row']['customer_email']]['cartId'] = $args['row']['cart_id'];
149
 
150
  // Get product image via collection
151
  $_productCollection = Mage::getResourceModel('catalog/product_collection');
@@ -162,7 +175,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
162
  else
163
  {
164
  // We create some extra variables if there is several products in the cart
165
- $emailTemplateVariables = $this->saleRecipients[$args['row']['customer_email']]['emailTemplateVariables'];
166
  // Discount amount
167
  // If one product before
168
  if (!array_key_exists('discount',$emailTemplateVariables))
@@ -189,7 +202,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
189
  }
190
 
191
  // Assign the array of template variables
192
- $this->saleRecipients[$args['row']['customer_email']]['emailTemplateVariables'] = $emailTemplateVariables;
193
  }
194
  }
195
 
@@ -197,7 +210,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
197
  * @param $dryrun
198
  * @param $testemail
199
  */
200
- public function sendSaleEmails($dryrun,$testemail)
201
  {
202
  try
203
  {
@@ -209,7 +222,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
209
  $sender['name'] = Mage::getStoreConfig('abandonedcartsconfig/options/name');
210
 
211
  // Send the emails via a loop
212
- foreach ($this->getSaleRecipients() as $email => $recipient)
213
  {
214
  // Don't send the email if dryrun is set
215
  if ($dryrun)
@@ -270,7 +283,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
270
  * @param $dryrun
271
  * @param $testemail
272
  */
273
- public function sendEmails($dryrun,$testemail)
274
  {
275
  try
276
  {
@@ -282,7 +295,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
282
  $sender['name'] = Mage::getStoreConfig('abandonedcartsconfig/options/name');
283
 
284
  // Send the emails via a loop
285
- foreach ($this->getRecipients() as $email => $recipient)
286
  {
287
  // Don't send the email if dryrun is set
288
  if ($dryrun)
@@ -350,9 +363,12 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
350
  {
351
  if (Mage::helper('abandonedcarts')->getDryRun()) $dryrun = true;
352
  if (Mage::helper('abandonedcarts')->getTestEmail()) $testemail = Mage::helper('abandonedcarts')->getTestEmail();
 
 
 
353
  if (Mage::helper('abandonedcarts')->isSaleEnabled())
354
  {
355
- $this->setToday();
356
 
357
  // Get the attribute id for the status attribute
358
  $eavAttribute = Mage::getModel('eav/entity_attribute');
@@ -404,7 +420,8 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
404
  'quote_items.price as product_price_in_cart',
405
  'quote_table.customer_email as customer_email',
406
  'quote_table.customer_firstname as customer_firstname',
407
- 'quote_table.customer_lastname as customer_lastname'
 
408
  )
409
  )
410
  ->joinInner(
@@ -448,7 +465,8 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
448
  'quote_items.price as product_price_in_cart',
449
  'quote_table.customer_email as customer_email',
450
  'quote_table.customer_firstname as customer_firstname',
451
- 'quote_table.customer_lastname as customer_lastname'
 
452
  )
453
  )
454
  // Name
@@ -509,7 +527,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
509
  }
510
 
511
  // Send the emails
512
- $this->sendSaleEmails($dryrun,$testemail);
513
  }
514
  }
515
  catch (Exception $e)
@@ -528,6 +546,9 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
528
  {
529
  if (Mage::helper('abandonedcarts')->getDryRun()) $dryrun = true;
530
  if (Mage::helper('abandonedcarts')->getTestEmail()) $testemail = Mage::helper('abandonedcarts')->getTestEmail();
 
 
 
531
  try
532
  {
533
  if (Mage::helper('abandonedcarts')->isEnabled())
@@ -588,7 +609,8 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
588
  'quote_table.abandoned_notified as has_been_notified',
589
  'quote_table.customer_email as customer_email',
590
  'quote_table.customer_firstname as customer_firstname',
591
- 'quote_table.customer_lastname as customer_lastname'
 
592
  )
593
  )
594
  ->joinInner(
@@ -628,7 +650,8 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
628
  'quote_table.abandoned_notified as has_been_notified',
629
  'quote_table.customer_email as customer_email',
630
  'quote_table.customer_firstname as customer_firstname',
631
- 'quote_table.customer_lastname as customer_lastname'
 
632
  )
633
  )
634
  // Name
@@ -671,7 +694,7 @@ class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstr
671
  }
672
 
673
  // Send the emails
674
- $this->sendEmails($dryrun,$testemail);
675
  }
676
  }
677
  catch (Exception $e)
6
  class DigitalPianism_Abandonedcarts_Model_Observer extends Mage_Core_Model_Abstract
7
  {
8
 
9
+ protected $_recipients = array();
10
+ protected $_saleRecipients = array();
11
+ protected $_today = "";
12
+ protected $_customerGroups = "";
13
+
14
+ protected function _setToday()
15
  {
16
  // Date handling
17
  $store = Mage_Core_Model_App::ADMIN_STORE_ID;
32
 
33
  date_default_timezone_set($timezone);
34
 
35
+ $this->_today = $today->toString("Y-MM-dd HH:mm:ss");
36
  }
37
 
38
  /**
39
  * @return string
40
  */
41
+ protected function _getToday()
42
  {
43
+ return $this->_today;
44
  }
45
 
46
  /**
47
  * @return array
48
  */
49
+ protected function _getRecipients()
50
  {
51
+ return $this->_recipients;
52
  }
53
 
54
  /**
55
  * @return array
56
  */
57
+ protected function _getSaleRecipients()
58
  {
59
+ return $this->_saleRecipients;
60
  }
61
 
62
  /**
64
  */
65
  public function generateRecipients($args)
66
  {
67
+ // Customer group check
68
+ if (array_key_exists('customer_group',$args['row']) && !in_array($args['row']['customer_group'],$this->_customerGroups))
69
+ {
70
+ return;
71
+ }
72
+
73
  // Test if the customer is already in the array
74
+ if (!array_key_exists($args['row']['customer_email'], $this->_recipients))
75
  {
76
  // Create an array of variables to assign to template
77
  $emailTemplateVariables = array();
82
  $emailTemplateVariables['productname'] = $args['row']['product_name'];
83
 
84
  // Assign the values to the array of recipients
85
+ $this->_recipients[$args['row']['customer_email']]['cartId'] = $args['row']['cart_id'];
86
 
87
  // Get product image via collection
88
  $_productCollection = Mage::getResourceModel('catalog/product_collection');
101
  else
102
  {
103
  // We create some extra variables if there is several products in the cart
104
+ $emailTemplateVariables = $this->_recipients[$args['row']['customer_email']]['emailTemplateVariables'];
105
  // We increase the product count
106
  $emailTemplateVariables['extraproductcount'] += 1;
107
  }
108
  // Assign the array of template variables
109
+ $this->_recipients[$args['row']['customer_email']]['emailTemplateVariables'] = $emailTemplateVariables;
110
  }
111
 
112
  /**
114
  */
115
  public function generateSaleRecipients($args)
116
  {
117
+ // Customer group check
118
+ if (array_key_exists('customer_group',$args['row']) && !in_array($args['row']['customer_group'],$this->_customerGroups))
119
+ {
120
+ return;
121
+ }
122
+
123
  // Double check if the special from date is set
124
  if (!array_key_exists('product_special_from_date',$args['row']) || !$args['row']['product_special_from_date'])
125
  {
126
  // If not we use today for the comparison
127
+ $fromDate = $this->_getToday();
128
  }
129
  else $fromDate = $args['row']['product_special_from_date'];
130
 
131
  // Do the same for the special to date
132
  if (!array_key_exists('product_special_to_date',$args['row']) || !$args['row']['product_special_to_date'])
133
  {
134
+ $toDate = $this->_getToday();
135
  }
136
  else $toDate = $args['row']['product_special_to_date'];
137
 
140
  if ($args['row']['product_price_in_cart'] > 0.00
141
  && $args['row']['product_special_price'] > 0.00
142
  && ($args['row']['product_price_in_cart'] > $args['row']['product_special_price'])
143
+ && ($fromDate <= $this->_getToday())
144
+ && ($toDate >= $this->_getToday()))
145
  {
146
 
147
  // Test if the customer is already in the array
148
+ if (!array_key_exists($args['row']['customer_email'], $this->_saleRecipients))
149
  {
150
  // Create an array of variables to assign to template
151
  $emailTemplateVariables = array();
158
  $emailTemplateVariables['specialprice'] = number_format($args['row']['product_special_price'],2);
159
 
160
  // Assign the values to the array of recipients
161
+ $this->_saleRecipients[$args['row']['customer_email']]['cartId'] = $args['row']['cart_id'];
162
 
163
  // Get product image via collection
164
  $_productCollection = Mage::getResourceModel('catalog/product_collection');
175
  else
176
  {
177
  // We create some extra variables if there is several products in the cart
178
+ $emailTemplateVariables = $this->_saleRecipients[$args['row']['customer_email']]['emailTemplateVariables'];
179
  // Discount amount
180
  // If one product before
181
  if (!array_key_exists('discount',$emailTemplateVariables))
202
  }
203
 
204
  // Assign the array of template variables
205
+ $this->_saleRecipients[$args['row']['customer_email']]['emailTemplateVariables'] = $emailTemplateVariables;
206
  }
207
  }
208
 
210
  * @param $dryrun
211
  * @param $testemail
212
  */
213
+ protected function _sendSaleEmails($dryrun,$testemail)
214
  {
215
  try
216
  {
222
  $sender['name'] = Mage::getStoreConfig('abandonedcartsconfig/options/name');
223
 
224
  // Send the emails via a loop
225
+ foreach ($this->_getSaleRecipients() as $email => $recipient)
226
  {
227
  // Don't send the email if dryrun is set
228
  if ($dryrun)
283
  * @param $dryrun
284
  * @param $testemail
285
  */
286
+ protected function _sendEmails($dryrun,$testemail)
287
  {
288
  try
289
  {
295
  $sender['name'] = Mage::getStoreConfig('abandonedcartsconfig/options/name');
296
 
297
  // Send the emails via a loop
298
+ foreach ($this->_getRecipients() as $email => $recipient)
299
  {
300
  // Don't send the email if dryrun is set
301
  if ($dryrun)
363
  {
364
  if (Mage::helper('abandonedcarts')->getDryRun()) $dryrun = true;
365
  if (Mage::helper('abandonedcarts')->getTestEmail()) $testemail = Mage::helper('abandonedcarts')->getTestEmail();
366
+ // Set customer groups
367
+ $this->_customerGroups = $this->_customerGroups ? $this->_customerGroups : Mage::helper('abandonedcarts')->getCustomerGroupsLimitation();
368
+
369
  if (Mage::helper('abandonedcarts')->isSaleEnabled())
370
  {
371
+ $this->_setToday();
372
 
373
  // Get the attribute id for the status attribute
374
  $eavAttribute = Mage::getModel('eav/entity_attribute');
420
  'quote_items.price as product_price_in_cart',
421
  'quote_table.customer_email as customer_email',
422
  'quote_table.customer_firstname as customer_firstname',
423
+ 'quote_table.customer_lastname as customer_lastname',
424
+ 'quote_table.customer_group_id as customer_group'
425
  )
426
  )
427
  ->joinInner(
465
  'quote_items.price as product_price_in_cart',
466
  'quote_table.customer_email as customer_email',
467
  'quote_table.customer_firstname as customer_firstname',
468
+ 'quote_table.customer_lastname as customer_lastname',
469
+ 'quote_table.customer_group_id as customer_group'
470
  )
471
  )
472
  // Name
527
  }
528
 
529
  // Send the emails
530
+ $this->_sendSaleEmails($dryrun,$testemail);
531
  }
532
  }
533
  catch (Exception $e)
546
  {
547
  if (Mage::helper('abandonedcarts')->getDryRun()) $dryrun = true;
548
  if (Mage::helper('abandonedcarts')->getTestEmail()) $testemail = Mage::helper('abandonedcarts')->getTestEmail();
549
+ // Set customer groups
550
+ $this->_customerGroups = $this->_customerGroups ? $this->_customerGroups : Mage::helper('abandonedcarts')->getCustomerGroupsLimitation();
551
+
552
  try
553
  {
554
  if (Mage::helper('abandonedcarts')->isEnabled())
609
  'quote_table.abandoned_notified as has_been_notified',
610
  'quote_table.customer_email as customer_email',
611
  'quote_table.customer_firstname as customer_firstname',
612
+ 'quote_table.customer_lastname as customer_lastname',
613
+ 'quote_table.customer_group_id as customer_group'
614
  )
615
  )
616
  ->joinInner(
650
  'quote_table.abandoned_notified as has_been_notified',
651
  'quote_table.customer_email as customer_email',
652
  'quote_table.customer_firstname as customer_firstname',
653
+ 'quote_table.customer_lastname as customer_lastname',
654
+ 'quote_table.customer_group_id as customer_group'
655
  )
656
  )
657
  // Name
694
  }
695
 
696
  // Send the emails
697
+ $this->_sendEmails($dryrun,$testemail);
698
  }
699
  }
700
  catch (Exception $e)
app/code/community/DigitalPianism/Abandonedcarts/etc/config.xml CHANGED
@@ -4,7 +4,7 @@
4
 
5
  <modules>
6
  <DigitalPianism_Abandonedcarts>
7
- <version>0.2.3</version>
8
  </DigitalPianism_Abandonedcarts>
9
  </modules>
10
 
@@ -131,6 +131,7 @@
131
  <notify_delay>20</notify_delay>
132
  <email_template>abandonedcartsconfig_options_email_template</email_template>
133
  <email_template_sale>abandonedcartsconfig_options_email_template_sale</email_template_sale>
 
134
  </options>
135
  </abandonedcartsconfig>
136
  </default>
4
 
5
  <modules>
6
  <DigitalPianism_Abandonedcarts>
7
+ <version>0.3.0</version>
8
  </DigitalPianism_Abandonedcarts>
9
  </modules>
10
 
131
  <notify_delay>20</notify_delay>
132
  <email_template>abandonedcartsconfig_options_email_template</email_template>
133
  <email_template_sale>abandonedcartsconfig_options_email_template_sale</email_template_sale>
134
+ <customer_groups>1,2,3</customer_groups>
135
  </options>
136
  </abandonedcartsconfig>
137
  </default>
app/code/community/DigitalPianism/Abandonedcarts/etc/system.xml CHANGED
@@ -69,7 +69,7 @@
69
  <show_in_website>1</show_in_website>
70
  <show_in_store>1</show_in_store>
71
  </email_template>
72
- <notify_delay translate="label">
73
  <label>Send Abandoned Cart Email After</label>
74
  <frontend_type>text</frontend_type>
75
  <validate>validate-not-negative-number</validate>
@@ -97,7 +97,16 @@
97
  <show_in_website>1</show_in_website>
98
  <show_in_store>1</show_in_store>
99
  </email_template_sale>
100
- <dryrun translate="label">
 
 
 
 
 
 
 
 
 
101
  <label>Dry Run</label>
102
  <frontend_type>select</frontend_type>
103
  <source_model>adminhtml/system_config_source_yesno</source_model>
@@ -107,7 +116,7 @@
107
  <show_in_store>1</show_in_store>
108
  <comment>Setting this parameter to Yes will log all the email addresses supposed to receive a notification into the var/log/digitalpianism_abandonedcarts.log file and will not send the real email notification</comment>
109
  </dryrun>
110
- <testemail translate="label">
111
  <label>Test Email</label>
112
  <frontend_type>text</frontend_type>
113
  <sort_order>90</sort_order>
69
  <show_in_website>1</show_in_website>
70
  <show_in_store>1</show_in_store>
71
  </email_template>
72
+ <notify_delay translate="label comment">
73
  <label>Send Abandoned Cart Email After</label>
74
  <frontend_type>text</frontend_type>
75
  <validate>validate-not-negative-number</validate>
97
  <show_in_website>1</show_in_website>
98
  <show_in_store>1</show_in_store>
99
  </email_template_sale>
100
+ <customer_groups translate="label">
101
+ <label>Customer Groups Restriction</label>
102
+ <frontend_type>multiselect</frontend_type>
103
+ <source_model>adminhtml/system_config_source_customer_group_multiselect</source_model>
104
+ <sort_order>75</sort_order>
105
+ <show_in_default>1</show_in_default>
106
+ <show_in_website>1</show_in_website>
107
+ <show_in_store>1</show_in_store>
108
+ </customer_groups>
109
+ <dryrun translate="label comment">
110
  <label>Dry Run</label>
111
  <frontend_type>select</frontend_type>
112
  <source_model>adminhtml/system_config_source_yesno</source_model>
116
  <show_in_store>1</show_in_store>
117
  <comment>Setting this parameter to Yes will log all the email addresses supposed to receive a notification into the var/log/digitalpianism_abandonedcarts.log file and will not send the real email notification</comment>
118
  </dryrun>
119
+ <testemail translate="label comment">
120
  <label>Test Email</label>
121
  <frontend_type>text</frontend_type>
122
  <sort_order>90</sort_order>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>DigitalPianism_Abandonedcarts</name>
4
- <version>0.2.3</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,12 @@ 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>- Add _isAllowed method to the controller to improve security (see patch 6285)</notes>
 
99
  <authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
100
- <date>2015-10-29</date>
101
- <time>10:06:33</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="4eda7b865d023206a58a4178f7db81a5"/></dir><dir name="Model"><file name="Observer.php" hash="b592de89874d6feeba72fa4106c05b3e"/><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="b78daf5f18a139d9568ed317686f2182"/><file name="system.xml" hash="d54fa8ad3607a7f54809f967ebff6ce6"/></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="30565f91c47913465fd184a214c14b23"/><file name="sales_abandonedcarts_sale.html" hash="3cdee557727cb0166741062e5fdcf06f"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="4e17b6cae58dd1cdcd43b1113e2e09f4"/></dir><dir name="fr_FR"><file name="DigitalPianism_Abandonedcarts.csv" hash=""/></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.0</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>- Add customer groups limitation to the configuration.&#xD;
99
+ - Rename functions and change their scope in the observer.</notes>
100
  <authors><author><name>Digital Pianism</name><user>digitalpianism</user><email>contact@digital-pianism.com</email></author></authors>
101
+ <date>2015-11-09</date>
102
+ <time>22:05:06</time>
103
+ <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="da44cfc8260e379469d30d084bb657d0"/><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="af76ba643fcdf63b75e636a43dc264a9"/><file name="system.xml" hash="4f3de82fe3221fb6b4f81cd646a8200b"/></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="30565f91c47913465fd184a214c14b23"/><file name="sales_abandonedcarts_sale.html" hash="3cdee557727cb0166741062e5fdcf06f"/></dir></dir></dir></dir><file name="DigitalPianism_Abandonedcarts.csv" hash="4e17b6cae58dd1cdcd43b1113e2e09f4"/></dir><dir name="fr_FR"><file name="DigitalPianism_Abandonedcarts.csv" hash=""/></dir></target></contents>
104
  <compatible/>
105
  <dependencies><required><php><min>4.1.0</min><max>6.0.0</max></php></required></dependencies>
106
  </package>