AnattaDesign_AbandonedCarts - Version 1.2.0

Version Notes

v1.2.0

* Weekly email reports
* Fully compatible with OneStepCheckout
* Better tracking support for Paypal
* Better translation
* Added Modman file

Download this release

Release Info

Developer Anatta Design
Extension AnattaDesign_AbandonedCarts
Version 1.2.0
Comparing to
See all releases


Code changes from version 1.1.2 to 1.2.0

Files changed (25) hide show
  1. app/code/local/AnattaDesign/AbandonedCarts/Helper/Data.php +32 -20
  2. app/code/local/AnattaDesign/AbandonedCarts/Model/Checkout/Onepage/Observer.php +19 -1
  3. app/code/local/AnattaDesign/AbandonedCarts/Model/Mysql4/Osstatistics.php +9 -0
  4. app/code/local/AnattaDesign/AbandonedCarts/Model/Mysql4/Osstatistics/Collection.php +9 -0
  5. app/code/local/AnattaDesign/AbandonedCarts/Model/Observer.php +94 -2
  6. app/code/local/AnattaDesign/AbandonedCarts/Model/Osstatistics.php +9 -0
  7. app/code/local/AnattaDesign/AbandonedCarts/Model/Statistics.php +103 -0
  8. app/code/local/AnattaDesign/AbandonedCarts/etc/adminhtml.xml +26 -0
  9. app/code/local/AnattaDesign/AbandonedCarts/etc/config.xml +96 -30
  10. app/code/local/AnattaDesign/AbandonedCarts/etc/system.xml +41 -0
  11. app/code/local/AnattaDesign/AbandonedCarts/sql/anattadesign_abandonedcarts_setup/mysql4-upgrade-1.1.2-1.1.2.1.php +26 -0
  12. app/code/local/AnattaDesign/AbandonedCarts/sql/anattadesign_abandonedcarts_setup/mysql4-upgrade-1.1.2.1-1.2.0.php +3 -0
  13. app/design/adminhtml/default/default/template/anattadesign/abandonedcarts/widget.phtml +56 -129
  14. app/locale/de_DE/AnattaDesign_AbandonedCarts.csv +24 -0
  15. app/locale/en_AU/AnattaDesign_AbandonedCarts.csv +24 -0
  16. app/locale/en_CA/AnattaDesign_AbandonedCarts.csv +24 -0
  17. app/locale/en_GB/AnattaDesign_AbandonedCarts.csv +24 -0
  18. app/locale/en_US/AnattaDesign_AbandonedCarts.csv +24 -0
  19. app/locale/en_US/template/email/anattadesign_abandonedcarts/weekly_report.html +146 -0
  20. app/locale/es_ES/AnattaDesign_AbandonedCarts.csv +24 -0
  21. app/locale/fr_FR/AnattaDesign_AbandonedCarts.csv +24 -0
  22. app/locale/it_IT/AnattaDesign_AbandonedCarts.csv +24 -0
  23. app/locale/pt_BR/AnattaDesign_AbandonedCarts.csv +24 -0
  24. app/locale/ru_RU/AnattaDesign_AbandonedCarts.csv +24 -0
  25. package.xml +10 -6
app/code/local/AnattaDesign/AbandonedCarts/Helper/Data.php CHANGED
@@ -5,6 +5,8 @@ class AnattaDesign_AbandonedCarts_Helper_Data extends Mage_Core_Helper_Abstract
5
  public function getStatisticsModel() {
6
  if ( $this->isAwesomeCheckoutActive() ) {
7
  return Mage::getModel( 'anattadesign_abandonedcarts/statistics' );
 
 
8
  } else {
9
  return Mage::getModel( 'anattadesign_abandonedcarts/opstatistics' );
10
  }
@@ -14,6 +16,10 @@ class AnattaDesign_AbandonedCarts_Helper_Data extends Mage_Core_Helper_Abstract
14
  return Mage::getConfig()->getModuleConfig( 'AnattaDesign_AwesomeCheckout' )->is( 'active', 'true' );
15
  }
16
 
 
 
 
 
17
  public function getMessage() {
18
 
19
  $cache = Mage::getSingleton( 'core/cache' );
@@ -25,7 +31,8 @@ class AnattaDesign_AbandonedCarts_Helper_Data extends Mage_Core_Helper_Abstract
25
  $contents = json_decode( $payload, true );
26
 
27
  if ( $contents['status'] == 'success' ) {
28
- $message = $this->isAwesomeCheckoutActive() ? $contents['data']['ac'] : $contents['data']['non-ac'];
 
29
  // cache data for 2 days
30
  $cache->save( $payload, 'abandonedcart_payload', array( 'abandonedcart' ), 2 * 24 * 60 * 60 );
31
  } else {
@@ -33,37 +40,42 @@ class AnattaDesign_AbandonedCarts_Helper_Data extends Mage_Core_Helper_Abstract
33
  }
34
  } else {
35
  $contents = json_decode( $payload, true );
36
- $message = $this->isAwesomeCheckoutActive() ? $contents['data']['ac'] : $contents['data']['non-ac'];
 
37
  }
38
 
39
  return $message;
40
  }
41
 
42
- public function getCurrencySymbol() {
43
- return Mage::app()->getLocale()->currency( Mage::app()->getStore()->getCurrentCurrencyCode() )->getSymbol();
44
- }
45
-
46
- public function getSalesVolume( $year, $month ) {
47
 
48
  $cache = Mage::getSingleton( 'core/cache' );
49
- $sales_volume = $cache->load( 'abandonedcart_sales_volume_' . $year . '_' . $month );
50
 
51
- if ( $sales_volume === false ) {
52
- // recalculate
53
- $orderTotals = Mage::getModel( 'sales/order' )->getCollection()
54
- ->addAttributeToFilter( 'status', Mage_Sales_Model_Order::STATE_COMPLETE )
55
- ->addAttributeToFilter( 'created_at', array( 'from' => date( 'Y-m-01' ) ) )
56
- ->addAttributeToSelect( 'grand_total' )
57
- ->getColumnValues( 'grand_total' )
58
- ;
59
 
60
- $sales_volume = array_sum( $orderTotals );
 
61
 
62
- // cache it
63
- $cache->save( $sales_volume, 'abandonedcart_sales_volume_' . $year . '_' . $month, array( 'abandonedcart' ), 24 * 60 * 60 );
 
 
 
 
 
 
 
 
 
 
64
  }
65
 
66
- return $sales_volume;
 
 
 
 
67
  }
68
 
69
  public function trailingslashit( $string ) {
5
  public function getStatisticsModel() {
6
  if ( $this->isAwesomeCheckoutActive() ) {
7
  return Mage::getModel( 'anattadesign_abandonedcarts/statistics' );
8
+ } elseif ( $this->isOneStepCheckoutActive() ) {
9
+ return Mage::getModel( 'anattadesign_abandonedcarts/osstatistics' );
10
  } else {
11
  return Mage::getModel( 'anattadesign_abandonedcarts/opstatistics' );
12
  }
16
  return Mage::getConfig()->getModuleConfig( 'AnattaDesign_AwesomeCheckout' )->is( 'active', 'true' );
17
  }
18
 
19
+ public function isOneStepCheckoutActive() {
20
+ return Mage::getConfig()->getModuleConfig( 'Idev_OneStepCheckout' )->is( 'active', 'true' );
21
+ }
22
+
23
  public function getMessage() {
24
 
25
  $cache = Mage::getSingleton( 'core/cache' );
31
  $contents = json_decode( $payload, true );
32
 
33
  if ( $contents['status'] == 'success' ) {
34
+ $message_array = $this->isAwesomeCheckoutActive() ? $contents['data_array']['ac'] : $contents['data_array']['non-ac'];
35
+ $message = $message_array[ array_rand( $message_array ) ];
36
  // cache data for 2 days
37
  $cache->save( $payload, 'abandonedcart_payload', array( 'abandonedcart' ), 2 * 24 * 60 * 60 );
38
  } else {
40
  }
41
  } else {
42
  $contents = json_decode( $payload, true );
43
+ $message_array = $this->isAwesomeCheckoutActive() ? $contents['data_array']['ac'] : $contents['data_array']['non-ac'];
44
+ $message = $message_array[ array_rand( $message_array ) ];
45
  }
46
 
47
  return $message;
48
  }
49
 
50
+ public function getEmailFooter() {
 
 
 
 
51
 
52
  $cache = Mage::getSingleton( 'core/cache' );
53
+ $payload = $cache->load( 'abandonedcart_payload' );
54
 
55
+ if ( $payload === false ) {
 
 
 
 
 
 
 
56
 
57
+ $payload = file_get_contents( 'http://api.anattadesign.com/abandonedcart/1alpha/fetch/payload' );
58
+ $contents = json_decode( $payload, true );
59
 
60
+ if ( $contents['status'] == 'success' ) {
61
+ $email_footer_array = $contents['email_footer'];
62
+ $email_footer = $email_footer_array[ array_rand( $email_footer_array ) ];
63
+ // cache data for 2 days
64
+ $cache->save( $payload, 'abandonedcart_payload', array( 'abandonedcart' ), 2 * 24 * 60 * 60 );
65
+ } else {
66
+ $email_footer = false;
67
+ }
68
+ } else {
69
+ $contents = json_decode( $payload, true );
70
+ $email_footer_array = $contents['email_footer'];
71
+ $email_footer = $email_footer_array[ array_rand( $email_footer_array ) ];
72
  }
73
 
74
+ // fallback email footer message
75
+ if ( $email_footer === false )
76
+ $email_footer = '<p style="text-align:center;padding-bottom:25px;">Sponsored by <a href="https://awesomecheckout.com/?kme=Clicked%20Link&km_Email=MyAB">Awesome Checkout</a> - the highest converting checkout extension for Magento</p>';
77
+
78
+ return $email_footer;
79
  }
80
 
81
  public function trailingslashit( $string ) {
app/code/local/AnattaDesign/AbandonedCarts/Model/Checkout/Onepage/Observer.php CHANGED
@@ -25,6 +25,8 @@ class AnattaDesign_AbandonedCarts_Model_Checkout_Onepage_Observer {
25
 
26
  if ( Mage::helper( 'anattadesign_abandonedcarts' )->isAwesomeCheckoutActive() ) {
27
  $statistics->saveStepReached( 'shipping', $this->getQuoteId() );
 
 
28
  } else {
29
  if ( Mage::getSingleton( 'customer/session' )->isLoggedIn() ) {
30
  $statistics->saveStepReached( 'billing', $this->getQuoteId() );
@@ -105,9 +107,25 @@ class AnattaDesign_AbandonedCarts_Model_Checkout_Onepage_Observer {
105
  }
106
  }
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  protected function _getNextStep( Mage_Core_Controller_Response_Http $response ) {
109
  $body = json_decode( $response->getBody() );
110
- return $body->goto_section;
111
  }
112
 
113
  protected function _isMovedToNextStep( Mage_Core_Controller_Response_Http $response ) {
25
 
26
  if ( Mage::helper( 'anattadesign_abandonedcarts' )->isAwesomeCheckoutActive() ) {
27
  $statistics->saveStepReached( 'shipping', $this->getQuoteId() );
28
+ } elseif ( Mage::helper( 'anattadesign_abandonedcarts' )->isOneStepCheckoutActive() ) {
29
+ $statistics->saveStepReached( 'review', $this->getQuoteId() );
30
  } else {
31
  if ( Mage::getSingleton( 'customer/session' )->isLoggedIn() ) {
32
  $statistics->saveStepReached( 'billing', $this->getQuoteId() );
107
  }
108
  }
109
 
110
+ public function paypalReview() {
111
+ $statistics = $this->getModel();
112
+ $statistics->saveStepReached( 'review', $this->getQuoteId() );
113
+ }
114
+
115
+ public function paypalSaveOrder() {
116
+ $statistics = $this->getModel();
117
+ $statistics->saveStepMoved( 'review', $this->getQuoteId() );
118
+ }
119
+
120
+ public function finalsaveOrder( $observer ) {
121
+ $quote_id = $observer->getEvent()->getQuote()->getId();
122
+ $statistics = $this->getModel();
123
+ $statistics->saveStepMoved( 'review', $quote_id );
124
+ }
125
+
126
  protected function _getNextStep( Mage_Core_Controller_Response_Http $response ) {
127
  $body = json_decode( $response->getBody() );
128
+ return isset( $body->goto_section ) ? $body->goto_section : '';
129
  }
130
 
131
  protected function _isMovedToNextStep( Mage_Core_Controller_Response_Http $response ) {
app/code/local/AnattaDesign/AbandonedCarts/Model/Mysql4/Osstatistics.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class AnattaDesign_AbandonedCarts_Model_Mysql4_Osstatistics extends Mage_Core_Model_Mysql4_Abstract {
4
+
5
+ protected function _construct() {
6
+ $this->_init( 'anattadesign_abandonedcarts/osstatistics', 'statistics_id' );
7
+ }
8
+
9
+ }
app/code/local/AnattaDesign/AbandonedCarts/Model/Mysql4/Osstatistics/Collection.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class AnattaDesign_AbandonedCarts_Model_Mysql4_Osstatistics_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {
4
+
5
+ protected function _construct() {
6
+ $this->_init( 'anattadesign_abandonedcarts/osstatistics' );
7
+ }
8
+
9
+ }
app/code/local/AnattaDesign/AbandonedCarts/Model/Observer.php CHANGED
@@ -38,9 +38,9 @@ class AnattaDesign_AbandonedCarts_Model_Observer {
38
  if ( $latest->latestVersion != $version ) {
39
  Mage::getModel( 'adminnotification/inbox' )
40
  ->setSeverity( Mage_AdminNotification_Model_Inbox::SEVERITY_NOTICE )
41
- ->setTitle( "My Abandoned Cart {$latest->latestVersion} is now available" )
42
  ->setDateAdded( gmdate( 'Y-m-d H:i:s' ) )->setUrl( 'http://www.myabandonedcarts.com/' )
43
- ->setDescription( 'Your version of My Abandoned Cart is currently not up-to-date. Please <a href="http://www.myabandonedcarts.com/">click here</a> to get the latest version.' )
44
  ->save();
45
  Mage::getModel( 'core/config' )
46
  ->saveConfig( 'anattadesign_abandonedcart_latest_checked_version', $latest->latestVersion );
@@ -72,4 +72,96 @@ class AnattaDesign_AbandonedCarts_Model_Observer {
72
  $layout->getBlock( 'js' )->append( $block );
73
  }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  }
38
  if ( $latest->latestVersion != $version ) {
39
  Mage::getModel( 'adminnotification/inbox' )
40
  ->setSeverity( Mage_AdminNotification_Model_Inbox::SEVERITY_NOTICE )
41
+ ->setTitle( Mage::helper( 'anattadesign_abandonedcarts' )->__( "My Abandoned Cart %s is now available", $latest->latestVersion ) )
42
  ->setDateAdded( gmdate( 'Y-m-d H:i:s' ) )->setUrl( 'http://www.myabandonedcarts.com/' )
43
+ ->setDescription( Mage::helper( 'anattadesign_abandonedcarts' )->__( 'Your version of My Abandoned Cart is currently not up-to-date. Please <a href="%s">click here</a> to get the latest version.', 'http://www.myabandonedcarts.com/' ) )
44
  ->save();
45
  Mage::getModel( 'core/config' )
46
  ->saveConfig( 'anattadesign_abandonedcart_latest_checked_version', $latest->latestVersion );
72
  $layout->getBlock( 'js' )->append( $block );
73
  }
74
 
75
+ private function _formatStatisics( $stats ) {
76
+ $stat = new stdClass();
77
+ $stat->from = date( 'F j, Y', strtotime( $stats['from'] ) );
78
+ $stat->to = date( 'F j, Y', strtotime( $stats['to'] ) );
79
+
80
+ $stats = call_user_func_array( array( Mage::helper( 'anattadesign_abandonedcarts' )->getStatisticsModel(), 'getStatistics' ), $stats );
81
+
82
+ $stat->entered = $stats[0]['reached'];
83
+ $stat->completed = $stats[count( $stats ) - 1]['moved'];
84
+ $stat->abandonment = $stat->entered == $stat->completed ? 0 : round( ( $stat->entered - $stat->completed ) * 100 / $stat->entered, 2 );
85
+
86
+ $step_names = array(
87
+ 'login' => 'Login',
88
+ 'billing' => 'Billing',
89
+ 'shipping' => 'Shipping',
90
+ 'shipping_method' => 'Shipping Method',
91
+ 'payment' => 'Payment',
92
+ 'review' => 'Review'
93
+ );
94
+ for ( $i = 1; isset( $stats[$i - 1] ); $i++ ) {
95
+ $step = 'step' . $i . '_name';
96
+ $stat->$step = $step_names[$stats[$i - 1]['step']];
97
+ $entered = 'step' . $i . '_entered';
98
+ $stat->$entered = $stats[$i - 1]['reached'];
99
+ $total = 'step' . $i . '_total';
100
+ $stat->$total = $stat->entered ? ( 100 * $stats[$i - 1]['reached'] / $stat->entered ) : 0;
101
+ $abandoned = 'step' . $i . '_abandoned';
102
+ $stat->$abandoned = $stats[$i - 1]['loss'];
103
+ }
104
+ $entered = 'step' . $i . '_entered';
105
+ $stat->$entered = $stats[$i - 2]['moved'];
106
+
107
+ return $stat;
108
+ }
109
+
110
+ public function weeklyEmailReport() {
111
+ $email_addresses = explode( ',', str_replace( ' ', '', Mage::getStoreConfig( 'abandonedcart/email_report/receiver_emails' ) ) ); // remove spaces before explode, cuz doesn't matter as they are list of emails separated by comma
112
+ // return if we don't have an Email ID set in admin to send an email to.
113
+ if ( empty( $email_addresses[0] ) )
114
+ return;
115
+
116
+ $last_sunday = strtotime( 'last sunday' );
117
+ $vars = array();
118
+
119
+ for ( $i = 0; $i < 5; $i++ ) {
120
+ // week 1 through 5
121
+ $stats = array(
122
+ 'from' => date( 'Y-m-d', strtotime( '-' . ( 1 + $i ) . ' week', $last_sunday ) ),
123
+ 'to' => date( 'Y-m-d', $i ? strtotime( '-' . $i . ' week', $last_sunday ) : $last_sunday )
124
+ );
125
+ $stats = $this->_formatStatisics( $stats );
126
+ foreach ( (array) $stats as $key => $value ) {
127
+ $vars['week' . ( 1 + $i ) . '_' . $key] = $value;
128
+ }
129
+ }
130
+
131
+ // set differences
132
+ for ( $i = 4; $i; $i-- ) {
133
+ $diff = $vars['week' . $i . '_abandonment'] - $vars['week' . ( 1 + $i ) . '_abandonment'];
134
+ $vars['week' . $i . '_difference'] = ( 0 < $diff ) ? '+ ' . $diff : ( $diff ? '- ' . abs( $diff ) : 0 );
135
+ $vars['week' . $i . '_color'] = ( 0 < $diff ) ? 'c62026' : '0c9748';
136
+ }
137
+
138
+ // Get message to display user
139
+ $tip = Mage::helper( 'anattadesign_abandonedcarts' )->getMessage();
140
+ $tip = is_string( $tip ) ? $tip : '';
141
+ $vars['tip'] = $tip;
142
+
143
+ // Dashboard url
144
+ $vars['dashboard_url'] = Mage::helper( 'adminhtml' )->getUrl( 'adminhtml/dashboard' );
145
+
146
+ // Email footer
147
+ $vars['email_footer'] = Mage::helper( 'anattadesign_abandonedcarts' )->getEmailFooter();
148
+
149
+ // Email Subject
150
+ $vars['email_subject'] = 'Abandoned Carts Report - Week of ' . $vars['week1_from'];
151
+
152
+ /* @var $email Mage_Core_Model_Email_Template */
153
+ $email = Mage::getModel( 'core/email_template' )->loadDefault( 'anattadesign_abandonedcarts_email_report_template' );
154
+ $email->setDesignConfig( array( 'area' => 'frontend' ) );
155
+ $email->setSenderName( 'My Abandoned Carts' );
156
+ $email->setSenderEmail( 'myabandonedcarts@' . Mage::helper('anattadesign_abandonedcarts')->untrailingslashit( $_SERVER['HTTP_HOST'] ) ); // its not a good idea to use any other domain for sending emails unless you want them to reaching spam/junk folders (use one that's hosted on the same IP)
157
+ $email->setTemplateType( Mage_Core_Model_Template::TYPE_HTML );
158
+ // $email->getProcessedTemplate( $vars ); // this can be used for testing
159
+
160
+ foreach ( $email_addresses as $email_id ) {
161
+ if ( !empty( $email_id ) ) {
162
+ $email->send( $email_id, '', $vars );
163
+ }
164
+ }
165
+ }
166
+
167
  }
app/code/local/AnattaDesign/AbandonedCarts/Model/Osstatistics.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class AnattaDesign_AbandonedCarts_Model_Osstatistics extends AnattaDesign_AbandonedCarts_Model_Statistics {
4
+
5
+ protected function _construct() {
6
+ $this->_init( 'anattadesign_abandonedcarts/osstatistics' );
7
+ }
8
+
9
+ }
app/code/local/AnattaDesign/AbandonedCarts/Model/Statistics.php CHANGED
@@ -77,6 +77,9 @@ class AnattaDesign_AbandonedCarts_Model_Statistics extends Mage_Core_Model_Abstr
77
  throw new Exception( 'Step key is required' );
78
  }
79
 
 
 
 
80
  // Prepare data
81
  $data = array_merge( $data, array( 'sales_flat_quote_id' => $data['quoteId'] ) );
82
 
@@ -97,4 +100,104 @@ class AnattaDesign_AbandonedCarts_Model_Statistics extends Mage_Core_Model_Abstr
97
  }
98
  }
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  }
77
  throw new Exception( 'Step key is required' );
78
  }
79
 
80
+ if ( !$data['step'] )
81
+ return;
82
+
83
  // Prepare data
84
  $data = array_merge( $data, array( 'sales_flat_quote_id' => $data['quoteId'] ) );
85
 
100
  }
101
  }
102
 
103
+ public function getStatistics( $from, $to = null ) {
104
+ // Select table name where data is stored
105
+ if (Mage::helper('anattadesign_abandonedcarts')->isAwesomeCheckoutActive()) {
106
+ $steps = array(
107
+ 0 => array(
108
+ 'step' => 'shipping'
109
+ ),
110
+ 1 => array(
111
+ 'step' => 'shipping_method'
112
+ ),
113
+ 2 => array(
114
+ 'step' => 'payment'
115
+ ),
116
+ 3 => array(
117
+ 'step' => 'review'
118
+ )
119
+ );
120
+
121
+ $table = Mage::getSingleton('core/resource')->getTableName( 'anattadesign_abandonedcarts/statistics' );
122
+ } else if ( Mage::helper( 'anattadesign_abandonedcarts' )->isOneStepCheckoutActive() ) {
123
+
124
+ $steps = array(
125
+ 0 => array(
126
+ 'step' => 'review'
127
+ )
128
+ );
129
+
130
+ $table = Mage::getSingleton( 'core/resource' )->getTableName( 'anattadesign_abandonedcarts/osstatistics' );
131
+ } else {
132
+ $steps = array(
133
+ 0 => array(
134
+ 'step' => 'login'
135
+ ),
136
+ 1 => array(
137
+ 'step' => 'billing'
138
+ ),
139
+ 2 => array(
140
+ 'step' => 'shipping'
141
+ ),
142
+ 3 => array(
143
+ 'step' => 'shipping_method'
144
+ ),
145
+ 4 => array(
146
+ 'step' => 'payment'
147
+ ),
148
+ 5 => array(
149
+ 'step' => 'review'
150
+ )
151
+ );
152
+
153
+ $table = Mage::getSingleton('core/resource')->getTableName( 'anattadesign_abandonedcarts/opstatistics' );
154
+ }
155
+
156
+ // Add reached & moved values in array
157
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
158
+ if(!$to)
159
+ $query = "SELECT SUM(reached) as `reached`, SUM(moved) as `moved`, `step` FROM `$table` WHERE DATE(date) > '$from' GROUP BY `step`;";
160
+ else
161
+ $query = "SELECT SUM(reached) as `reached`, SUM(moved) as `moved`, `step` FROM `$table` WHERE DATE(date) > '$from' AND DATE(date) < '$to' GROUP BY `step`;";
162
+ $resource = $connection->query($query);
163
+ $queried_data = $resource->fetchAll();
164
+
165
+ $data = array();
166
+ foreach($queried_data as $d)
167
+ $data[$d['step']] = $d;
168
+
169
+ foreach ($steps as &$step) {
170
+ $step['reached'] = (isset($data[$step['step']]) && isset($data[$step['step']]['reached'])) ? intval($data[$step['step']]['reached']) : 0;
171
+ $step['moved'] = (isset($data[$step['step']]) && isset($data[$step['step']]['moved'])) ? intval($data[$step['step']]['moved']) : 0;
172
+ $step['loss'] = (0 == $step['reached'] && ($step['reached'] == $step['moved'])) ? 0 : (($step['reached'] - $step['moved']) * 100 / $step['reached']);
173
+ }
174
+ unset($step);
175
+
176
+ // adjustments to data
177
+ if (!Mage::helper('anattadesign_abandonedcarts')->isAwesomeCheckoutActive() && !Mage::helper( 'anattadesign_abandonedcarts' )->isOneStepCheckoutActive()) {
178
+ // This is needed as a user already logged in will never reach the login step
179
+ // Here we add the appropriate padding (for the sake of the funnel)
180
+ $diff = $steps[1]['reached'] - $steps[0]['moved'];
181
+ $steps[0]['reached'] += $diff;
182
+ $steps[0]['moved'] += $diff;
183
+ // make sure shipping step which is optional only depicts the loss, so add padding here (for the sake of funnel)
184
+ $diff = $steps[1]['moved'] - $steps[2]['reached'];
185
+ $steps[2]['reached'] += $diff;
186
+ $steps[2]['moved'] += $diff;
187
+ }
188
+
189
+ // let's match the moved of each step to the reached of next step, this will show decent output even in case of
190
+ // manual data changes via phpmyadmin. This won't affect anything if this module doesn't have any conflicts
191
+ for($i = count($steps) - 1; $i >= 0; $i--) {
192
+ // making sure that moved is never higher than reached
193
+ if($steps[$i]['moved'] > $steps[$i]['reached'])
194
+ $steps[$i]['reached'] = $steps[$i]['moved'];
195
+
196
+ if($i)
197
+ $steps[$i-1]['moved'] = $steps[$i]['reached'] = max($steps[$i-1]['moved'], $steps[$i]['reached']);
198
+ }
199
+
200
+ return $steps;
201
+ }
202
+
203
  }
app/code/local/AnattaDesign/AbandonedCarts/etc/adminhtml.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <acl>
4
+ <resources>
5
+ <all>
6
+ <title>Allow Everything</title>
7
+ </all>
8
+ <admin>
9
+ <children>
10
+ <system>
11
+ <children>
12
+ <config>
13
+ <children>
14
+ <abandonedcart>
15
+ <title>Anatta Design | My Abandoned Carts</title>
16
+ <sort_order>200</sort_order>
17
+ </abandonedcart>
18
+ </children>
19
+ </config>
20
+ </children>
21
+ </system>
22
+ </children>
23
+ </admin>
24
+ </resources>
25
+ </acl>
26
+ </config>
app/code/local/AnattaDesign/AbandonedCarts/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <AnattaDesign_AbandonedCarts>
5
- <version>1.1.2</version>
6
  </AnattaDesign_AbandonedCarts>
7
  </modules>
8
  <global>
@@ -20,6 +20,9 @@
20
  <opstatistics>
21
  <table>anattadesign_abandonedcarts_opstatistics</table>
22
  </opstatistics>
 
 
 
23
  </entities>
24
  </anattadesign_abandonedcarts_mysql4>
25
  </models>
@@ -44,24 +47,7 @@
44
  <class>AnattaDesign_AbandonedCarts_Helper</class>
45
  </anattadesign_abandonedcarts>
46
  </helpers>
47
- <translate>
48
- <modules>
49
- <AnattaDesign_AbandonedCarts>
50
- <files>
51
- <default>AnattaDesign_AbandonedCarts.csv</default>
52
- </files>
53
- </AnattaDesign_AbandonedCarts>
54
- </modules>
55
- </translate>
56
  <events>
57
- <admin_session_user_login_success>
58
- <observers>
59
- <anattadesign_abandonedcarts_model_observer>
60
- <class>AnattaDesign_AbandonedCarts_Model_Observer</class>
61
- <method>uponAdminLogin</method>
62
- </anattadesign_abandonedcarts_model_observer>
63
- </observers>
64
- </admin_session_user_login_success>
65
  <controller_action_layout_generate_blocks_after>
66
  <observers>
67
  <anattadesign_awesomecheckout_addjs>
@@ -71,6 +57,39 @@
71
  </anattadesign_awesomecheckout_addjs>
72
  </observers>
73
  </controller_action_layout_generate_blocks_after>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  <controller_action_postdispatch_checkout_onepage_index>
75
  <observers>
76
  <anattadesign_abandonedcarts_checkout_observer>
@@ -80,6 +99,15 @@
80
  </anattadesign_abandonedcarts_checkout_observer>
81
  </observers>
82
  </controller_action_postdispatch_checkout_onepage_index>
 
 
 
 
 
 
 
 
 
83
  <sales_quote_merge_before>
84
  <observers>
85
  <anattadesign_abandonedcarts_checkout_observer>
@@ -152,19 +180,35 @@
152
  </anattadesign_abandonedcarts_checkout_observer>
153
  </observers>
154
  </controller_action_postdispatch_checkout_onepage_saveOrder>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  </events>
156
- </global>
157
- <admin>
158
- <routers>
159
- <abandonedcarts>
160
- <use>admin</use>
161
- <args>
162
- <module>AnattaDesign_AbandonedCarts</module>
163
- <frontName>abandonedcarts</frontName>
164
- </args>
165
- </abandonedcarts>
166
- </routers>
167
- </admin>
168
  <adminhtml>
169
  <translate>
170
  <modules>
@@ -182,5 +226,27 @@
182
  </anattadesign_abandonedcarts>
183
  </updates>
184
  </layout>
 
 
 
 
 
 
 
 
 
 
185
  </adminhtml>
 
 
 
 
 
 
 
 
 
 
 
 
186
  </config>
2
  <config>
3
  <modules>
4
  <AnattaDesign_AbandonedCarts>
5
+ <version>1.2.0</version>
6
  </AnattaDesign_AbandonedCarts>
7
  </modules>
8
  <global>
20
  <opstatistics>
21
  <table>anattadesign_abandonedcarts_opstatistics</table>
22
  </opstatistics>
23
+ <osstatistics>
24
+ <table>anattadesign_abandonedcarts_osstatistics</table>
25
+ </osstatistics>
26
  </entities>
27
  </anattadesign_abandonedcarts_mysql4>
28
  </models>
47
  <class>AnattaDesign_AbandonedCarts_Helper</class>
48
  </anattadesign_abandonedcarts>
49
  </helpers>
 
 
 
 
 
 
 
 
 
50
  <events>
 
 
 
 
 
 
 
 
51
  <controller_action_layout_generate_blocks_after>
52
  <observers>
53
  <anattadesign_awesomecheckout_addjs>
57
  </anattadesign_awesomecheckout_addjs>
58
  </observers>
59
  </controller_action_layout_generate_blocks_after>
60
+ </events>
61
+ <template>
62
+ <email>
63
+ <anattadesign_abandonedcarts_email_report_template translate="label" module="anattadesign_abandonedcarts">
64
+ <label>MyAbandonedCarts Weekly Report</label>
65
+ <file>anattadesign_abandonedcarts/weekly_report.html</file>
66
+ <type>html</type>
67
+ </anattadesign_abandonedcarts_email_report_template>
68
+ </email>
69
+ </template>
70
+ </global>
71
+ <admin>
72
+ <routers>
73
+ <abandonedcarts>
74
+ <use>admin</use>
75
+ <args>
76
+ <module>AnattaDesign_AbandonedCarts</module>
77
+ <frontName>abandonedcarts</frontName>
78
+ </args>
79
+ </abandonedcarts>
80
+ </routers>
81
+ </admin>
82
+ <frontend>
83
+ <translate>
84
+ <modules>
85
+ <AnattaDesign_AbandonedCarts>
86
+ <files>
87
+ <default>AnattaDesign_AbandonedCarts.csv</default>
88
+ </files>
89
+ </AnattaDesign_AbandonedCarts>
90
+ </modules>
91
+ </translate>
92
+ <events>
93
  <controller_action_postdispatch_checkout_onepage_index>
94
  <observers>
95
  <anattadesign_abandonedcarts_checkout_observer>
99
  </anattadesign_abandonedcarts_checkout_observer>
100
  </observers>
101
  </controller_action_postdispatch_checkout_onepage_index>
102
+ <controller_action_postdispatch_onestepcheckout_index_index>
103
+ <observers>
104
+ <anattadesign_abandonedcarts_checkout_observer>
105
+ <type>singleton</type>
106
+ <class>AnattaDesign_AbandonedCarts_Model_Checkout_Onepage_Observer</class>
107
+ <method>index</method>
108
+ </anattadesign_abandonedcarts_checkout_observer>
109
+ </observers>
110
+ </controller_action_postdispatch_onestepcheckout_index_index>
111
  <sales_quote_merge_before>
112
  <observers>
113
  <anattadesign_abandonedcarts_checkout_observer>
180
  </anattadesign_abandonedcarts_checkout_observer>
181
  </observers>
182
  </controller_action_postdispatch_checkout_onepage_saveOrder>
183
+ <controller_action_postdispatch_paypal_express_review>
184
+ <observers>
185
+ <anattadesign_abandonedcarts_checkout_observer>
186
+ <type>singleton</type>
187
+ <class>AnattaDesign_AbandonedCarts_Model_Checkout_Onepage_Observer</class>
188
+ <method>paypalReview</method>
189
+ </anattadesign_abandonedcarts_checkout_observer>
190
+ </observers>
191
+ </controller_action_postdispatch_paypal_express_review>
192
+ <controller_action_postdispatch_paypal_express_placeOrder>
193
+ <observers>
194
+ <anattadesign_abandonedcarts_checkout_observer>
195
+ <type>singleton</type>
196
+ <class>AnattaDesign_AbandonedCarts_Model_Checkout_Onepage_Observer</class>
197
+ <method>paypalSaveOrder</method>
198
+ </anattadesign_abandonedcarts_checkout_observer>
199
+ </observers>
200
+ </controller_action_postdispatch_paypal_express_placeOrder>
201
+ <checkout_type_onepage_save_order_after>
202
+ <observers>
203
+ <anattadesign_abandonedcarts_checkout_observer>
204
+ <type>singleton</type>
205
+ <class>AnattaDesign_AbandonedCarts_Model_Checkout_Onepage_Observer</class>
206
+ <method>finalsaveOrder</method>
207
+ </anattadesign_abandonedcarts_checkout_observer>
208
+ </observers>
209
+ </checkout_type_onepage_save_order_after>
210
  </events>
211
+ </frontend>
 
 
 
 
 
 
 
 
 
 
 
212
  <adminhtml>
213
  <translate>
214
  <modules>
226
  </anattadesign_abandonedcarts>
227
  </updates>
228
  </layout>
229
+ <events>
230
+ <admin_session_user_login_success>
231
+ <observers>
232
+ <anattadesign_abandonedcarts_model_observer>
233
+ <class>AnattaDesign_AbandonedCarts_Model_Observer</class>
234
+ <method>uponAdminLogin</method>
235
+ </anattadesign_abandonedcarts_model_observer>
236
+ </observers>
237
+ </admin_session_user_login_success>
238
+ </events>
239
  </adminhtml>
240
+ <crontab>
241
+ <jobs>
242
+ <anattadesign_abandonedcarts>
243
+ <schedule>
244
+ <cronexpr>0 6 * * 1</cronexpr>
245
+ </schedule>
246
+ <run>
247
+ <model>anattadesign_abandonedcarts/observer::weeklyEmailReport</model>
248
+ </run>
249
+ </anattadesign_abandonedcarts>
250
+ </jobs>
251
+ </crontab>
252
  </config>
app/code/local/AnattaDesign/AbandonedCarts/etc/system.xml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+ <tabs>
5
+ <anattadesign>
6
+ <label>Anatta Design</label>
7
+ <sort_order>99999</sort_order>
8
+ </anattadesign>
9
+ </tabs>
10
+ <sections>
11
+ <abandonedcart>
12
+ <label>My Abandoned Carts</label>
13
+ <tab>anattadesign</tab>
14
+ <frontend_type>text</frontend_type>
15
+ <sort_order>2000</sort_order>
16
+ <show_in_default>1</show_in_default>
17
+ <show_in_website>1</show_in_website>
18
+ <show_in_store>1</show_in_store>
19
+ <groups>
20
+ <email_report translate="label">
21
+ <label>Weekly Email Report Options</label>
22
+ <sort_order>10</sort_order>
23
+ <show_in_default>1</show_in_default>
24
+ <show_in_website>1</show_in_website>
25
+ <show_in_store>1</show_in_store>
26
+ <fields>
27
+ <receiver_emails translate="label">
28
+ <label>Email addresses</label>
29
+ <frontend_type>text</frontend_type>
30
+ <sort_order>11</sort_order>
31
+ <show_in_default>1</show_in_default>
32
+ <show_in_website>1</show_in_website>
33
+ <show_in_store>1</show_in_store>
34
+ <comment>Enter email addresses separated by comma to which weekly email reports should be sent.</comment>
35
+ </receiver_emails>
36
+ </fields>
37
+ </email_report>
38
+ </groups>
39
+ </abandonedcart>
40
+ </sections>
41
+ </config>
app/code/local/AnattaDesign/AbandonedCarts/sql/anattadesign_abandonedcarts_setup/mysql4-upgrade-1.1.2-1.1.2.1.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+
7
+ $installer->run("DROP TABLE IF EXISTS `" . $installer->getTable( 'anattadesign_abandonedcarts/osstatistics' ) . "`");
8
+
9
+ $installer->run(
10
+ "CREATE TABLE `" . $installer->getTable( 'anattadesign_abandonedcarts/osstatistics' ) . "` (
11
+ `statistics_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
12
+ `sales_flat_quote_id` int(10) unsigned NOT NULL,
13
+ `step` varchar(32) NOT NULL,
14
+ `reached` tinyint(4) NOT NULL DEFAULT '0',
15
+ `moved` tinyint(4) NOT NULL DEFAULT '0',
16
+ `year` smallint(6) NOT NULL,
17
+ `month` tinyint(4) NOT NULL,
18
+ `date` datetime NOT NULL,
19
+ PRIMARY KEY (`statistics_id`),
20
+ KEY `dashboard_tab` (`year`,`month`,`step`,`reached`,`moved`)
21
+ ) ENGINE=InnoDB"
22
+ );
23
+
24
+ $installer->endSetup();
25
+
26
+ Mage::helper( 'anattadesign_abandonedcarts' )->ping();
app/code/local/AnattaDesign/AbandonedCarts/sql/anattadesign_abandonedcarts_setup/mysql4-upgrade-1.1.2.1-1.2.0.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+
3
+ Mage::helper( 'anattadesign_abandonedcarts' )->ping();
app/design/adminhtml/default/default/template/anattadesign/abandonedcarts/widget.phtml CHANGED
@@ -1,190 +1,117 @@
1
  <?php
2
- if (!Mage::helper('core')->isModuleEnabled('AnattaDesign_AbandonedCarts')) {
3
  die();
4
  }
5
  ?>
6
 
7
- <link href='http://fonts.googleapis.com/css?family=Exo:600' rel='stylesheet' type='text/css'>
8
- <link href='http://fonts.googleapis.com/css?family=Exo:100' rel='stylesheet' type='text/css'>
9
- <link href='http://fonts.googleapis.com/css?family=Arvo' rel='stylesheet' type='text/css'>
10
- <link href='http://fonts.googleapis.com/css?family=Ubuntu:400,500' rel='stylesheet' type='text/css'>
11
 
12
  <?php
13
  $display_month = array(
14
- 1 => 'January',
15
- 2 => 'February',
16
- 3 => 'March',
17
- 4 => 'April',
18
- 5 => 'May',
19
- 6 => 'June',
20
- 7 => 'July',
21
- 8 => 'August',
22
- 9 => 'September',
23
- 10 => 'October',
24
- 11 => 'November',
25
- 12 => 'December'
26
  );
27
 
28
- $period = isset($_GET['period']) ? $_GET['period'] : '';
29
 
30
- switch ($period) {
31
  case '12h':
32
- $queried_date = date('Y-m-d', strtotime('-12 hours'));
33
  break;
34
  case '24h':
35
- $queried_date = date('Y-m-d', strtotime('-24 hours'));
36
  break;
37
  case '7d':
38
- $queried_date = date('Y-m-d', strtotime('-7 days'));
39
  break;
40
  case '1m':
41
- $queried_date = date('Y-m-d', strtotime('-1 month'));
42
  break;
43
  case '1y':
44
- $queried_date = date('Y-m-d', strtotime('-1 year'));
45
  break;
46
  case '2y':
47
- $queried_date = date('Y-m-d', strtotime('-2 years'));
48
  break;
49
  default:
50
- $queried_date = date('Y-m-d', strtotime('-24 hours'));
51
  }
52
 
53
- // Select table name where data is stored
54
- if (Mage::helper('anattadesign_abandonedcarts')->isAwesomeCheckoutActive()) {
55
-
56
- $steps = array(
57
- 0 => array(
58
- 'step' => 'shipping'
59
- ),
60
- 1 => array(
61
- 'step' => 'shipping_method'
62
- ),
63
- 2 => array(
64
- 'step' => 'payment'
65
- ),
66
- 3 => array(
67
- 'step' => 'review'
68
- )
69
- );
70
-
71
- $table = Mage::getSingleton('core/resource')->getTableName( 'anattadesign_abandonedcarts/statistics' );
72
- } else {
73
-
74
- $steps = array(
75
- 0 => array(
76
- 'step' => 'login'
77
- ),
78
- 1 => array(
79
- 'step' => 'billing'
80
- ),
81
- 2 => array(
82
- 'step' => 'shipping'
83
- ),
84
- 3 => array(
85
- 'step' => 'shipping_method'
86
- ),
87
- 4 => array(
88
- 'step' => 'payment'
89
- ),
90
- 5 => array(
91
- 'step' => 'review'
92
- )
93
- );
94
-
95
- $table = Mage::getSingleton('core/resource')->getTableName( 'anattadesign_abandonedcarts/opstatistics' );
96
- }
97
-
98
- // Add reached & moved values in array
99
- $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
100
- foreach ($steps as &$step) {
101
- $query = "SELECT SUM(reached) as `reached`, SUM(moved) as `moved` FROM `$table` WHERE DATE(date) > '$queried_date' AND `step` = '{$step['step']}';";
102
- $resource = $connection->query($query);
103
- $fetched_data = $resource->fetch();
104
- $step['reached'] = intval($fetched_data['reached']);
105
- $step['moved'] = intval($fetched_data['moved']);
106
- $step['loss'] = $step['reached'] == $step['moved'] ? 0 : ($step['reached'] - $step['moved']) * 100 / $step['reached'];
107
- }
108
- unset($step);
109
-
110
- $step_no = 1;
111
  $step_names = array(
112
- 'login' => 'Login',
113
- 'billing' => 'Billing',
114
- 'shipping' => 'Shipping',
115
- 'shipping_method' => 'Shipping Method',
116
- 'payment' => 'Payment',
117
- 'review' => 'Review'
118
  );
119
 
120
- // adjustments to data
121
- if (Mage::helper('anattadesign_abandonedcarts')->isAwesomeCheckoutActive()) {
122
-
123
- } else {
124
- // This is needed as a user already logged in will never reach the login step
125
- // Here we add the appropriate padding (for the sake of the funnel)
126
- $diff = $steps[1]['reached'] - $steps[0]['moved'];
127
- $steps[0]['reached'] += $diff;
128
- $steps[0]['moved'] += $diff;
129
- // make sure shipping step which is optional only depicts the loss, so add padding here (for the sake of funnel)
130
- $diff = $steps[1]['moved'] - $steps[2]['reached'];
131
- $steps[2]['reached'] += $diff;
132
- $steps[2]['moved'] += $diff;
133
- }
134
-
135
- // let's match the moved of each step to the reached of next step, this will show decent output even in case of
136
- // manual data changes via phpmyadmin. This won't affect anything if this module doesn't have any conflicts
137
- for($i = count($steps) - 1; $i >= 0; $i--) {
138
- // making sure that moved is never higher than reached
139
- if($steps[$i]['moved'] > $steps[$i]['reached'])
140
- $steps[$i]['reached'] = $steps[$i]['moved'];
141
-
142
- if($i)
143
- $steps[$i-1]['moved'] = $steps[$i]['reached'] = max($steps[$i-1]['moved'], $steps[$i]['reached']);
144
- }
145
 
146
  // calculate abandonment rate & loss for the queried month-year
147
- $abandonedment_rate = $steps[0]['reached'] == $steps[count($steps) - 1]['moved'] ? 0 : round(($steps[0]['reached'] - $steps[count($steps) - 1]['moved']) * 100 / $steps[0]['reached'], 2);
148
 
149
  // Get message to display user
150
- $message = Mage::helper('anattadesign_abandonedcarts')->getMessage();
151
- $message = is_string($message) ? $message : '';
152
  ?>
153
 
154
  <div id="ac-wrapper">
155
  <div class="abwidget">
156
  <h2 class="widget-title">
157
- <strong>TIPS!:</strong> <?php echo $message; ?>
158
  <a href="http://myabandonedcarts.com/?kme=Clicked%20Link&km_Referrer=Widget" class="myab"></a>
159
  </h2>
160
 
161
  <div class="widget-content">
162
- <span class="checkout-info item-1">ENTERED CHECKOUT<small><?php echo $steps[0]['reached'] ?></small></span>
163
- <span class="checkout-info item-2">COMPLETED CHECKOUT<small><?php echo $steps[count($steps) - 1]['moved'] ?></small></span>
164
- <span class="checkout-info item-3">ABANDONMENT RATE<big><?php echo $abandonedment_rate; ?>%</big></span>
 
 
 
 
 
 
 
 
165
 
166
  <div class="graph-table">
167
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
168
  <tr>
169
- <?php foreach ($steps as $step) : ?>
170
  <td><span class="number"><?php echo $step['reached']; ?></span></td>
171
- <?php $total_height = $steps[0]['reached'] ? (($step['reached'] * 100)) / $steps[0]['reached'] : 0; ?>
172
- <?php $lost_height = $step['reached'] ? (($step['reached'] - $step['moved']) * 100) / $step['reached'] : 0; ?>
173
  <td>
174
  <div class="graph" style="height:<?php echo $total_height; ?>%;">
175
  <span class="color" style="height: <?php echo $lost_height; ?>%;">
176
- <span class="value"><?php echo round($lost_height, 2); ?>%</span>
177
  </span>
178
  </div>
179
  </td>
180
  <?php endforeach; ?>
181
- <?php $last_step = end($steps); ?>
182
  <td><span class="number"><?php echo $last_step['moved']; ?></span></td>
183
  </tr>
184
  <tr class="steps">
185
  <?php $count = 0; ?>
186
- <?php foreach ($steps as $index => $step) : ?>
187
- <td<?php if ($count) echo ' class="arrow"'; ?>>&nbsp;</td>
 
188
  <?php $count++; ?>
189
  <td><span><?php echo $count . '. ' . $step_names[$step['step']]; ?></span></td>
190
  <?php endforeach; ?>
1
  <?php
2
+ if ( !Mage::helper( 'core' )->isModuleEnabled( 'AnattaDesign_AbandonedCarts' ) ) {
3
  die();
4
  }
5
  ?>
6
 
7
+ <link href='https://fonts.googleapis.com/css?family=Exo:600' rel='stylesheet' type='text/css'>
8
+ <link href='https://fonts.googleapis.com/css?family=Exo:100' rel='stylesheet' type='text/css'>
9
+ <link href='https://fonts.googleapis.com/css?family=Arvo' rel='stylesheet' type='text/css'>
10
+ <link href='https://fonts.googleapis.com/css?family=Ubuntu:400,500' rel='stylesheet' type='text/css'>
11
 
12
  <?php
13
  $display_month = array(
14
+ 1 => $this->__( 'January' ),
15
+ 2 => $this->__( 'February' ),
16
+ 3 => $this->__( 'March' ),
17
+ 4 => $this->__( 'April' ),
18
+ 5 => $this->__( 'May' ),
19
+ 6 => $this->__( 'June' ),
20
+ 7 => $this->__( 'July' ),
21
+ 8 => $this->__( 'August' ),
22
+ 9 => $this->__( 'September' ),
23
+ 10 => $this->__( 'October' ),
24
+ 11 => $this->__( 'November' ),
25
+ 12 => $this->__( 'December' )
26
  );
27
 
28
+ $period = isset( $_GET['period'] ) ? $_GET['period'] : '';
29
 
30
+ switch ( $period ) {
31
  case '12h':
32
+ $queried_date = date( 'Y-m-d', strtotime( '-12 hours' ) );
33
  break;
34
  case '24h':
35
+ $queried_date = date( 'Y-m-d', strtotime( '-24 hours' ) );
36
  break;
37
  case '7d':
38
+ $queried_date = date( 'Y-m-d', strtotime( '-7 days' ) );
39
  break;
40
  case '1m':
41
+ $queried_date = date( 'Y-m-d', strtotime( '-1 month' ) );
42
  break;
43
  case '1y':
44
+ $queried_date = date( 'Y-m-d', strtotime( '-1 year' ) );
45
  break;
46
  case '2y':
47
+ $queried_date = date( 'Y-m-d', strtotime( '-2 years' ) );
48
  break;
49
  default:
50
+ $queried_date = date( 'Y-m-d', strtotime( '-24 hours' ) );
51
  }
52
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  $step_names = array(
54
+ 'login' => $this->__( 'Login' ),
55
+ 'billing' => $this->__( 'Billing' ),
56
+ 'shipping' => $this->__( 'Shipping' ),
57
+ 'shipping_method' => $this->__( 'Shipping Method' ),
58
+ 'payment' => $this->__( 'Payment' ),
59
+ 'review' => $this->__( 'Review' )
60
  );
61
 
62
+ $steps = Mage::helper( 'anattadesign_abandonedcarts' )->getStatisticsModel()->getStatistics($queried_date);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
  // calculate abandonment rate & loss for the queried month-year
65
+ $abandonment_rate = $steps[0]['reached'] == $steps[count($steps) - 1]['moved'] ? 0 : round(($steps[0]['reached'] - $steps[count($steps) - 1]['moved']) * 100 / $steps[0]['reached'], 2);
66
 
67
  // Get message to display user
68
+ $message = Mage::helper( 'anattadesign_abandonedcarts' )->getMessage();
69
+ $message = is_string( $message ) ? $message : '';
70
  ?>
71
 
72
  <div id="ac-wrapper">
73
  <div class="abwidget">
74
  <h2 class="widget-title">
75
+ <strong><?php echo $this->__( 'TIPS!:' ); ?></strong> <?php echo $message; ?>
76
  <a href="http://myabandonedcarts.com/?kme=Clicked%20Link&km_Referrer=Widget" class="myab"></a>
77
  </h2>
78
 
79
  <div class="widget-content">
80
+ <span class="checkout-info item-1">
81
+ <?php echo $this->__( 'ENTERED CHECKOUT' ); ?>
82
+ <small><?php echo $steps[0]['reached'] ?></small>
83
+ </span>
84
+ <span class="checkout-info item-2">
85
+ <?php echo $this->__( 'COMPLETED CHECKOUT' ); ?>
86
+ <small><?php echo $steps[count( $steps ) - 1]['moved'] ?></small>
87
+ </span>
88
+ <span class="checkout-info item-3">
89
+ <?php echo $this->__( 'ABANDONMENT RATE' ); ?><big><?php echo $abandonment_rate; ?>%</big>
90
+ </span>
91
 
92
  <div class="graph-table">
93
  <table width="100%" border="0" cellspacing="0" cellpadding="0">
94
  <tr>
95
+ <?php foreach ( $steps as $step ) : ?>
96
  <td><span class="number"><?php echo $step['reached']; ?></span></td>
97
+ <?php $total_height = $steps[0]['reached'] ? ( ( $step['reached'] * 100 ) ) / $steps[0]['reached'] : 0; ?>
98
+ <?php $lost_height = $step['reached'] ? ( ( $step['reached'] - $step['moved'] ) * 100 ) / $step['reached'] : 0; ?>
99
  <td>
100
  <div class="graph" style="height:<?php echo $total_height; ?>%;">
101
  <span class="color" style="height: <?php echo $lost_height; ?>%;">
102
+ <span class="value"><?php echo round( $lost_height, 2 ); ?>%</span>
103
  </span>
104
  </div>
105
  </td>
106
  <?php endforeach; ?>
107
+ <?php $last_step = end( $steps ); ?>
108
  <td><span class="number"><?php echo $last_step['moved']; ?></span></td>
109
  </tr>
110
  <tr class="steps">
111
  <?php $count = 0; ?>
112
+ <?php foreach ( $steps as $index => $step ) : ?>
113
+ <td<?php if ( $count )
114
+ echo ' class="arrow"'; ?>>&nbsp;</td>
115
  <?php $count++; ?>
116
  <td><span><?php echo $count . '. ' . $step_names[$step['step']]; ?></span></td>
117
  <?php endforeach; ?>
app/locale/de_DE/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","Abbruchrate"
2
+ "April","April"
3
+ "August","August"
4
+ "Billing","Rechnungsschreibung"
5
+ "COMPLETED CHECKOUT","ABGESCHLOSSEN KASSE"
6
+ "December","Dezember"
7
+ "ENTERED CHECKOUT","GESCHLOSSEN KASSE"
8
+ "February","Februar"
9
+ "January","Januar"
10
+ "July","Juli"
11
+ "June","Juni"
12
+ "Login","Anmelden"
13
+ "March","März"
14
+ "May","Mai"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s ist jetzt verfügbar"
16
+ "November","November"
17
+ "October","Oktober"
18
+ "Payment","Bezahlung"
19
+ "Review","Bewertung"
20
+ "September","September"
21
+ "Shipping","Versand"
22
+ "Shipping Method","Liefer-Methode"
23
+ "TIPS!:","TIPS!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Ihre Version von My Abandoned Cart ist derzeit nicht up-to-date. Bitte <a href=\"%s\">hier</a>, um die neueste Version zu erhalten."
app/locale/en_AU/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","ABANDONMENT RATE"
2
+ "April","April"
3
+ "August","August"
4
+ "Billing","Billing"
5
+ "COMPLETED CHECKOUT","COMPLETED CHECKOUT"
6
+ "December","December"
7
+ "ENTERED CHECKOUT","ENTERED CHECKOUT"
8
+ "February","February"
9
+ "January","January"
10
+ "July","July"
11
+ "June","June"
12
+ "Login","Login"
13
+ "March","March"
14
+ "May","May"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s is now available"
16
+ "November","November"
17
+ "October","October"
18
+ "Payment","Payment"
19
+ "Review","Review"
20
+ "September","September"
21
+ "Shipping","Shipping"
22
+ "Shipping Method","Shipping Method"
23
+ "TIPS!:","TIPS!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version."
app/locale/en_CA/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","ABANDONMENT RATE"
2
+ "April","April"
3
+ "August","August"
4
+ "Billing","Billing"
5
+ "COMPLETED CHECKOUT","COMPLETED CHECKOUT"
6
+ "December","December"
7
+ "ENTERED CHECKOUT","ENTERED CHECKOUT"
8
+ "February","February"
9
+ "January","January"
10
+ "July","July"
11
+ "June","June"
12
+ "Login","Login"
13
+ "March","March"
14
+ "May","May"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s is now available"
16
+ "November","November"
17
+ "October","October"
18
+ "Payment","Payment"
19
+ "Review","Review"
20
+ "September","September"
21
+ "Shipping","Shipping"
22
+ "Shipping Method","Shipping Method"
23
+ "TIPS!:","TIPS!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version."
app/locale/en_GB/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","ABANDONMENT RATE"
2
+ "April","April"
3
+ "August","August"
4
+ "Billing","Billing"
5
+ "COMPLETED CHECKOUT","COMPLETED CHECKOUT"
6
+ "December","December"
7
+ "ENTERED CHECKOUT","ENTERED CHECKOUT"
8
+ "February","February"
9
+ "January","January"
10
+ "July","July"
11
+ "June","June"
12
+ "Login","Login"
13
+ "March","March"
14
+ "May","May"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s is now available"
16
+ "November","November"
17
+ "October","October"
18
+ "Payment","Payment"
19
+ "Review","Review"
20
+ "September","September"
21
+ "Shipping","Shipping"
22
+ "Shipping Method","Shipping Method"
23
+ "TIPS!:","TIPS!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version."
app/locale/en_US/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","ABANDONMENT RATE"
2
+ "April","April"
3
+ "August","August"
4
+ "Billing","Billing"
5
+ "COMPLETED CHECKOUT","COMPLETED CHECKOUT"
6
+ "December","December"
7
+ "ENTERED CHECKOUT","ENTERED CHECKOUT"
8
+ "February","February"
9
+ "January","January"
10
+ "July","July"
11
+ "June","June"
12
+ "Login","Login"
13
+ "March","March"
14
+ "May","May"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s is now available"
16
+ "November","November"
17
+ "October","October"
18
+ "Payment","Payment"
19
+ "Review","Review"
20
+ "September","September"
21
+ "Shipping","Shipping"
22
+ "Shipping Method","Shipping Method"
23
+ "TIPS!:","TIPS!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version."
app/locale/en_US/template/email/anattadesign_abandonedcarts/weekly_report.html ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!--@subject {{var email_subject}} @-->
2
+
3
+ <body style="background: #f3f0ec;padding: 0px; margin: 0px;">
4
+ <div style="background: #f3f0ec;padding-top: 20px; margin: 0px; ">
5
+ <!--main table with single cell-->
6
+ <table cellspacing="0" cellpadding="0" align="center" width="545px;" style="background: #fff; padding: 40px 40px 40px 40px; color: #000; font-family: 'LatoRegular',arial,sans-serif; font-size: 13px;">
7
+ <tr>
8
+ <td style="border-bottom:1px solid #d5d5d5;margin-bottom:20px">
9
+ <table cellspacing="0" cellpadding="0" align="left" width="100%">
10
+ <tbody>
11
+ <tr>
12
+ <td align="left">
13
+ <h1 style="font-size:24px;padding:0 0 18px 0;margin:0;font-family:'LatoBlack',arial,sans-serif;font-weight:normal;">Your weekly update</h1>
14
+ </td>
15
+ <td align="right" style="vertical-align: top;">
16
+ <a href="https://awesomecheckout.com/?kme=Clicked%20Link&km_Email=MyAB" style="font-size:11px; color:#000; text-decoration:none" target="_blank">
17
+ Sponsored by<br>
18
+ <img src="{{skin url='anattadesign/abandonedcarts/images/logo.png'}}" style="margin-top:5px; width:140px">
19
+ </a>
20
+ </td>
21
+ </tr>
22
+ </tbody>
23
+ </table>
24
+ </td>
25
+ </tr>
26
+ <tr>
27
+ <td>
28
+ <div style="margin:0px auto; margin-top:20px;">
29
+ <h2 style="background:#cf7e3e; height: 10px; overflow: hidden;border:2px solid #c36449;padding:8px 10px;color:#fff;margin:0px;">
30
+ <span style="float:left;font-size:12px;font-weight:normal; text-transform: uppercase;">This WEEK &nbsp; ( {{var week1_from}} - {{var week1_to}} )</span>
31
+ <a href="http://myabandonedcarts.com/?kme=Clicked%20Widget" style="float:right;"><img src="{{skin url='anattadesign/abandonedcarts/images/powerdby.jpg'}}" style="border:none;"/></a>
32
+ </h2>
33
+
34
+ <div style="border:1px solid #343434;border-top:none;">
35
+ <div style="padding:10px 0 20px 0;">
36
+ <table cellspacing="0" cellpadding="0" align="right" >
37
+ <tr>
38
+ <td align="right">
39
+ <span style="width:70px;text-transform:uppercase;font-size:8px;font-weight:bold;color:#000;text-align:center; float:right;font-family: 'LatoBlack',arial,sans-serif; font-weight: normal;">ABANDONMENT RATE<small style="font-size:26px;display:block;line-height:30px;">{{var week1_abandonment}}%</small> <sub style="font-size: 8px; color: #{{var week1_color}};"> ({{var week1_difference}}%)</sub></span>
40
+ <span style="width:70px;text-transform:uppercase;font-size:8px;font-weight:bold;color:#000;text-align:center; float:right;font-family: 'LatoBlack',arial,sans-serif; font-weight: normal;">COMPLETED CHECKOUT<small style="color:#cf7e3e;display:block;font-size:10px;">{{var week1_completed}}</small></span>
41
+ <span style="width:70px;text-transform:uppercase;font-size:8px;font-weight:bold;color:#000;text-align:center; float:right;font-family: 'LatoBlack',arial,sans-serif; font-weight: normal;">ENTERED CHECKOUT<small style="color:#cf7e3e;display:block;font-size:10px;font-family: 'LatoBlack',arial,sans-serif; font-weight: normal;">{{var week1_entered}}</small></span>
42
+ </td>
43
+ </tr>
44
+ </table>
45
+ </div>
46
+ <div style="padding-top:35px; vertical-align: middle;">
47
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" style="vertical-align: middle; height: 135px;">
48
+ <tr>
49
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="font-size:9px;color:#cf7e3e;">{{var week1_step1_entered}}</span></td>
50
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="display:block; color:#00; width: 30px; margin:0px 0 4px 0; text-align:center;font-size:10px;">{{var week1_step1_abandoned}}%</span><div style="border:2px solid #c36449;border-bottom:none;margin:-2px 0 0 0;background: #EBD5B7;height: {{var week1_step1_total}}%;"><span style="background:#333;display:block;color:#fff;text-align:center;font-size:10px;;height:{{var week1_step1_abandoned}}%;"></span></div></td>
51
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="font-size:9px;color:#cf7e3e;">{{var week1_step2_entered}}</span></td>
52
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="display:block; color:#00; width: 30px; margin:0px 0 4px 0; text-align:center;font-size:10px;">{{var week1_step2_abandoned}}%</span><div style="border:2px solid #c36449;border-bottom:none;margin:-2px 0 0 0;background: #EBD5B7;height: {{var week1_step2_total}}%;"><span style="background:#333;display:block;color:#fff;text-align:center;font-size:10px;;height:{{var week1_step2_abandoned}}%;"></span></div></td>
53
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="font-size:9px;color:#cf7e3e;">{{var week1_step3_entered}}</span></td>
54
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="display:block; color:#00; width: 30px; margin:0px 0 4px 0; text-align:center;font-size:10px;">{{var week1_step3_abandoned}}%</span><div style="border:2px solid #c36449;border-bottom:none;margin:-2px 0 0 0;background: #EBD5B7;height: {{var week1_step3_total}}%;"><span style="background:#333;display:block;color:#fff;text-align:center;font-size:10px;;height:{{var week1_step3_abandoned}}%;"></span></div></td>
55
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="font-size:9px;color:#cf7e3e;">{{var week1_step4_entered}}</span></td>
56
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="display:block; color:#00; width: 30px; margin:0px 0 4px 0; text-align:center;font-size:10px;">{{var week1_step4_abandoned}}%</span><div style="border:2px solid #c36449;border-bottom:none;margin:-2px 0 0 0;background: #EBD5B7;height: {{var week1_step4_total}}%;"><span style="background:#333;display:block;color:#fff;text-align:center;font-size:10px;;height:{{var week1_step4_abandoned}}%;"></span></div></td>
57
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="font-size:9px;color:#cf7e3e;">{{var week1_step5_entered}}</span></td>
58
+ {{if week1_step5_name}}
59
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="display:block; color:#00; width: 30px; margin:0px 0 4px 0; text-align:center;font-size:10px;">{{var week1_step5_abandoned}}%</span><div style="border:2px solid #c36449;border-bottom:none;margin:-2px 0 0 0;background: #EBD5B7;height: {{var week1_step5_total}}%;"><span style="background:#333;display:block;color:#fff;text-align:center;font-size:10px;;height:{{var week1_step5_abandoned}}%;"></span></div></td>
60
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="font-size:9px;color:#cf7e3e;">{{var week1_step6_entered}}</span></td>
61
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="display:block; color:#00; width: 30px; margin:0px 0 4px 0; text-align:center;font-size:10px;">{{var week1_step6_abandoned}}%</span><div style="border:2px solid #c36449;border-bottom:none;margin:-2px 0 0 0;background: #EBD5B7;height: {{var week1_step6_total}}%;"><span style="background:#333;display:block;color:#fff;text-align:center;font-size:10px;;height:{{var week1_step6_abandoned}}%;"></span></div></td>
62
+ <td style="text-align:center;vertical-align:bottom;padding:0 5px;width:1%;"><span style="font-size:9px;color:#cf7e3e;">{{var week1_step7_entered}}</span></td>
63
+ {{/if}}
64
+ </tr>
65
+ <tr style="padding-right:4%;border-right:1px solid #343434;">
66
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;">&nbsp;</td>
67
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><span style="padding:0px 0 0 2px;font-size:9px;">1. {{var week1_step1_name}}</span></td>
68
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><img src="{{skin url='anattadesign/abandonedcarts/images/table-step-img-arrow.jpg'}}" alt="" style="border:none;" /></td>
69
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><span style="padding:0px 0 0 2px;font-size:9px;">2. {{var week1_step2_name}}</span></td>
70
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><img src="{{skin url='anattadesign/abandonedcarts/images/table-step-img-arrow.jpg'}}" alt="" style="border:none;" /></td>
71
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><span style="padding:0px 0 0 2px;font-size:9px;">3. {{var week1_step3_name}}</span></td>
72
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><img src="{{skin url='anattadesign/abandonedcarts/images/table-step-img-arrow.jpg'}}" alt="" style="border:none;" /></td>
73
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><span style="padding:0px 0 0 2px;font-size:9px;">4. {{var week1_step4_name}}</span></td>
74
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><img src="{{skin url='anattadesign/abandonedcarts/images/table-step-img-arrow.jpg'}}" alt="" style="border:none;" /></td>
75
+ {{if week1_step5_name}}
76
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><span style="padding:0px 0 0 2px;font-size:9px;">5. {{var week1_step5_name}}</span></td>
77
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><img src="{{skin url='anattadesign/abandonedcarts/images/table-step-img-arrow.jpg'}}" alt="" style="border:none;" /></td>
78
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:center;"><span style="padding:0px 0 0 2px;font-size:9px;">6. {{var week1_step6_name}}</span></td>
79
+ <td style="background:#eaefef;vertical-align:middle;height:37px;border-top:1px solid #343434;text-align:left;"></td>
80
+ {{/if}}
81
+ </tr>
82
+ </table>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </td>
87
+ </tr>
88
+ <tr>
89
+ <td>
90
+ <h6 style="padding: 35px 0 15px 0; margin: 0; color: #d86d45; font-weight: normal;text-transform: uppercase; font-size: 12px;font-family: 'LatoBold',arial,sans-serif; font-weight: normal; letter-spacing:1px;">PREVIOUS WEEK’S ABANDONMENT RATE</h6>
91
+ </td>
92
+ </tr>
93
+ <tr>
94
+ <td>
95
+ <table cellspacing="0" cellpadding="0" align="center" width="100%" style="border:1px solid #c4c1be;">
96
+ <tr>
97
+ <th align="center" style=" background: #f6f4f1; padding: 8px 5px ; color: #000100; text-transform: uppercase; font-size: 9px; font-family: 'LatoBold',arial,sans-serif; font-weight: normal; border-right: 1px solid #c4c1be;border-bottom: 1px solid #c4c1be;">{{var week2_from}} - {{var week2_to}}</th>
98
+ <th align="center" style=" background: #f6f4f1; padding: 8px 5px; color: #000100; text-transform: uppercase; font-size: 9px; font-family: 'LatoBold',arial,sans-serif; font-weight: normal;border-right: 1px solid #c4c1be;border-bottom: 1px solid #c4c1be;">{{var week3_from}} - {{var week3_to}}</th>
99
+ <th align="center" style=" background: #f6f4f1; padding: 8px 5px ; color: #000100; text-transform: uppercase; font-size: 9px; font-family: 'LatoBold',arial,sans-serif; font-weight: normal;border-bottom: 1px solid #c4c1be;">{{var week4_from}} - {{var week4_to}}</th>
100
+ </tr>
101
+ <tr>
102
+ <td align="center" style=" background: #edd6b8; font-size: 14px;padding:10px 5px; color: #000100;border-right: 1px solid #c4c1be;">{{var week2_abandonment}}% <sub style="font-size: 8px; color: #{{var week2_color}};"> ({{var week2_difference}}%)</sub></td>
103
+ <td align="center" style=" background: #edd6b8; font-size: 14px;padding:10px 5px; color: #000100;border-right: 1px solid #c4c1be;">{{var week3_abandonment}}% <sub style="font-size: 8px; color: #{{var week3_color}};"> ({{var week3_difference}}%)</sub></td>
104
+ <td align="center" style=" background: #edd6b8; font-size: 14px;padding:10px 5px; color: #000100;">{{var week4_abandonment}}% <sub style="font-size: 8px; color: #{{var week4_color}};"> ({{var week4_difference}}%)</sub></td>
105
+ </tr>
106
+ </table>
107
+ </td>
108
+ </tr>
109
+ <tr>
110
+ <td height="50"><a href="{{var dashboard_url}}">Click here to view full reports on Magento dashboard</a></a></td>
111
+ </tr>
112
+ <tr>
113
+ <td height="50"><span style="border-top:1px solid #d5d5d5; display:block;"></span></td>
114
+ </tr>
115
+ <tr>
116
+ <td>
117
+ <table>
118
+ <tr>
119
+ <td valign="top"><img src="{{skin url='anattadesign/abandonedcarts/images/tipimproveicon.jpg'}}" alt="" style="float: left; border:none;" /></td>
120
+ <td valign="top">
121
+ <h2 style="font-size: 22px; color: #333; display:block; padding:4px 0 0 10px; margin: 0; float: left;font-family: 'LatoBlack',arial,sans-serif; font-weight: normal;">A tip to improve your checkout.</h2>
122
+ <br>
123
+ <p style="font-size:16px; color: #333; padding: 20px 0 15px 10px; margin: 0px; line-height: 24px;">{{var tip}}</p>
124
+ </td>
125
+ </tr>
126
+ </table>
127
+ </td>
128
+ </tr>
129
+ <!--
130
+ <tr>
131
+ <td>
132
+ <table width="100%">
133
+ <tr>
134
+ <td valign="top" align="center">
135
+ <p style="border-top:1px solid #d5d5d5; padding: 30px 0 25px 0; margin: 0px; text-align: center; margin-top:20px;"><a href="#"><img src="{{skin url='anattadesign/abandonedcarts/images/learnmore.jpg'}}" alt="" style="border: none;" /></a></p>
136
+ </td>
137
+ </tr>
138
+ </table>
139
+ </td>
140
+ </tr>
141
+ -->
142
+ </table>
143
+ <!--main table-->
144
+ {{var email_footer}}
145
+ </div>
146
+ </body>
app/locale/es_ES/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","ABANDONMENT RATE"
2
+ "April","April"
3
+ "August","August"
4
+ "Billing","Billing"
5
+ "COMPLETED CHECKOUT","COMPLETED CHECKOUT"
6
+ "December","December"
7
+ "ENTERED CHECKOUT","ENTERED CHECKOUT"
8
+ "February","February"
9
+ "January","January"
10
+ "July","July"
11
+ "June","June"
12
+ "Login","Login"
13
+ "March","March"
14
+ "May","May"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s is now available"
16
+ "November","November"
17
+ "October","October"
18
+ "Payment","Payment"
19
+ "Review","Review"
20
+ "September","September"
21
+ "Shipping","Shipping"
22
+ "Shipping Method","Shipping Method"
23
+ "TIPS!:","TIPS!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version."
app/locale/fr_FR/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","TAUX D'ABANDON"
2
+ "April","Avril"
3
+ "August","Août"
4
+ "Billing","facturation"
5
+ "COMPLETED CHECKOUT","REMPLIR MON PANIER"
6
+ "December","Décembre"
7
+ "ENTERED CHECKOUT","INSCRIRE MON PANIER"
8
+ "February","février"
9
+ "January","janvier"
10
+ "July","Juillet"
11
+ "June","Juin"
12
+ "Login","Connexion"
13
+ "March","mars"
14
+ "May","mai"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s est maintenant disponible"
16
+ "November","Novembre"
17
+ "October","octobre"
18
+ "Payment","paiement"
19
+ "Review","réviser"
20
+ "September","Septembre"
21
+ "Shipping","Livraison"
22
+ "Shipping Method","Mode de livraison"
23
+ "TIPS!:","CONSEILS!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Votre version de My Abandoned Cart n'est actuellement pas mise à jour. Veuillez <a href=\"%s\">cliquez ici</a> pour obtenir la dernière version."
app/locale/it_IT/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","Tasso di abbandono"
2
+ "April","aprile"
3
+ "August","agosto"
4
+ "Billing","fatturazione"
5
+ "COMPLETED CHECKOUT","COMPLETATO CHECKOUT"
6
+ "December","dicembre"
7
+ "ENTERED CHECKOUT","ENTRATO CHECKOUT"
8
+ "February","febbraio"
9
+ "January","gennaio"
10
+ "July","luglio"
11
+ "June","giugno"
12
+ "Login","Accedi"
13
+ "March","marzo"
14
+ "May","maggio"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s è ora disponibile"
16
+ "November","novembre"
17
+ "October","ottobre"
18
+ "Payment","pagamento"
19
+ "Review","recensione"
20
+ "September","Settembre"
21
+ "Shipping","spedizione"
22
+ "Shipping Method","Metodo di Spedizione"
23
+ "TIPS!:","CONSIGLI!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","La tua versione di My Abandoned Cart al momento non è up-to-date. per favore <a href=\"%s\">clicca qui</a> per ottenere la versione più recente."
app/locale/pt_BR/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","taxa de abandono"
2
+ "April","abril"
3
+ "August","agosto"
4
+ "Billing","faturamento"
5
+ "COMPLETED CHECKOUT","FINALIZAR CONCLUÍDO"
6
+ "December","dezembro"
7
+ "ENTERED CHECKOUT","check-out informada"
8
+ "February","fevereiro"
9
+ "January","janeiro"
10
+ "July","julho"
11
+ "June","junho"
12
+ "Login","Login"
13
+ "March","março"
14
+ "May","maio"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s já está disponível"
16
+ "November","novembro"
17
+ "October","outubro"
18
+ "Payment","pagamento"
19
+ "Review","rever"
20
+ "September","setembro"
21
+ "Shipping","expedição"
22
+ "Shipping Method","Método de envio"
23
+ "TIPS!:","DICAS!:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Sua versão do Meu Carrinho Abandonado não está up-to-date. <a href=\"%s\">clique aqui</a> para obter a versão mais recente."
app/locale/ru_RU/AnattaDesign_AbandonedCarts.csv ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "ABANDONMENT RATE","Коэффициент прерывания"
2
+ "April","апрель"
3
+ "August","август"
4
+ "Billing","Биллинг"
5
+ "COMPLETED CHECKOUT","ЗАВЕРШЕНА ПРОВЕРКА"
6
+ "December","декабрь"
7
+ "ENTERED CHECKOUT","ВВЕДЕН Купить"
8
+ "February","февраль"
9
+ "January","январь"
10
+ "July","июль"
11
+ "June","июнь"
12
+ "Login","Войти"
13
+ "March","март"
14
+ "May","может"
15
+ "My Abandoned Cart %s is now available","My Abandoned Cart %s теперь доступен"
16
+ "November","ноябрь"
17
+ "October","октябрь"
18
+ "Payment","оплата"
19
+ "Review","Обзор"
20
+ "September","сентябрь"
21
+ "Shipping","судоходство"
22
+ "Shipping Method","Способ доставки"
23
+ "TIPS!:","СОВЕТЫ:"
24
+ "Your version of My Abandoned Cart is currently not up-to-date. Please <a href=\"%s\">click here</a> to get the latest version.","Ваша версия My Abandoned Cart не соответствующий современным требованиям. Пожалуйста, <a href=\"%s\">нажмите здесь</a>, чтобы получить последнюю версию."
package.xml CHANGED
@@ -1,20 +1,24 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>AnattaDesign_AbandonedCarts</name>
4
- <version>1.1.2</version>
5
  <stability>stable</stability>
6
  <license>GPL</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Track abandoned carts &amp; show a funnel report to show statistics</summary>
10
  <description>Track abandoned carts &amp; show a funnel report to show statistics</description>
11
- <notes>v1.1.2&#xD;
12
  &#xD;
13
- Fixes a bug with installs using prefixed database tables</notes>
 
 
 
 
14
  <authors><author><name>Anatta Design</name><user>anattadesign</user><email>nirav@anattadesign.com</email></author></authors>
15
- <date>2013-05-09</date>
16
- <time>23:58:34</time>
17
- <contents><target name="magelocal"><dir name="AnattaDesign"><dir name="AbandonedCarts"><dir><dir name="Block"><file name="Widget.php" hash="c6baf4dc8dc25ed7c62e3b89cc78c413"/></dir><dir name="Helper"><file name="Data.php" hash="735ff6cf1bb8f18bb52c127111aac585"/></dir><dir name="Model"><dir name="Checkout"><dir name="Onepage"><file name="Observer.php" hash="6745ab11e82cf6370e04d251d1010637"/></dir></dir><dir name="Mysql4"><dir name="Opstatistics"><file name="Collection.php" hash="66b29da439c196f325c9faec4b171f30"/></dir><file name="Opstatistics.php" hash="9ccaa740ddbfa607204bde0222fceafc"/><dir name="Statistics"><file name="Collection.php" hash="c92997470a39016001c196fa4bf17861"/></dir><file name="Statistics.php" hash="88d17295de3fc05637ac55e71c52a3a3"/></dir><file name="Observer.php" hash="4039511b270dd2e87d5f91a2a04a7c84"/><file name="Opstatistics.php" hash="f3bfe7b7e44ef33e15877332a767b25a"/><file name="Statistics.php" hash="85f8bf8090484826dc0e43bb39324557"/></dir><dir name="controllers"><file name="WidgetController.php" hash="ca23d690e09435f5f4df54c539dea74b"/></dir><dir name="etc"><file name="config.xml" hash="f3d993b3bea28e645d5791a413d529db"/></dir><dir name="sql"><dir name="anattadesign_abandonedcarts_setup"><file name="mysql4-install-1.0.0.php" hash="b235486189e6609d4f9abc82ffae76c7"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="f9f7cbb6845f014f74c294692189c369"/><file name="mysql4-upgrade-1.0.1-1.1.0.php" hash="f9f7cbb6845f014f74c294692189c369"/><file name="mysql4-upgrade-1.1.0-1.1.1.php" hash="f9f7cbb6845f014f74c294692189c369"/><file name="mysql4-upgrade-1.1.1-1.1.2.php" hash="f9f7cbb6845f014f74c294692189c369"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="anattadesign_abandonedcarts.xml" hash="c14481626a0c367d974a5660ed930482"/></dir><dir name="template"><dir name="anattadesign"><dir name="abandonedcarts"><file name="widget.phtml" hash="412dc7da934de493bf65b4000e55eb53"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="AnattaDesign_AbandonedCarts.xml" hash="fba54c1c1c7b2abd323a56bcdd56be20"/></dir></target><target name="mage"><dir name="js"><dir name="anattadesign"><dir name="abandonedcarts"><file name="adminhack.js" hash="d8d1b081040d1dbbe87296e4ed064a91"/><file name="zepto.js" hash="61e66962daedd0943adc35a97b0eaa27"/></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="anattadesign"><dir name="abandonedcarts"><dir><dir name="css"><file name="style.css" hash="91b410a9fc1a5ff1e20e7c321fd64e23"/></dir><dir name="images"><file name="bt-rep.gif" hash="f2054c34f7d04f81082ef2d686464c5f"/><file name="powerdby.jpg" hash="82777ae659f9316a27dbf7e14e23a5e2"/><file name="table-step-img-arrow.jpg" hash="ea678306e6a71818565e09c771bec7a5"/><file name="table-step-img-last-arrow.jpg" hash="88b14ae05fd2105ba317025925a39880"/><file name="table-step-img.jpg" hash="4bcb56e9e828981d0c1654925848791e"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
18
  <compatible/>
19
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
20
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>AnattaDesign_AbandonedCarts</name>
4
+ <version>1.2.0</version>
5
  <stability>stable</stability>
6
  <license>GPL</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Track abandoned carts &amp; show a funnel report to show statistics</summary>
10
  <description>Track abandoned carts &amp; show a funnel report to show statistics</description>
11
+ <notes>v1.2.0&#xD;
12
  &#xD;
13
+ * Weekly email reports&#xD;
14
+ * Fully compatible with OneStepCheckout&#xD;
15
+ * Better tracking support for Paypal&#xD;
16
+ * Better translation&#xD;
17
+ * Added Modman file</notes>
18
  <authors><author><name>Anatta Design</name><user>anattadesign</user><email>nirav@anattadesign.com</email></author></authors>
19
+ <date>2013-07-29</date>
20
+ <time>04:44:12</time>
21
+ <contents><target name="magelocal"><dir name="AnattaDesign"><dir name="AbandonedCarts"><dir><dir name="Block"><file name="Widget.php" hash="c6baf4dc8dc25ed7c62e3b89cc78c413"/></dir><dir name="Helper"><file name="Data.php" hash="3b5ef34244919bebf7cfce65ff40e5d9"/></dir><dir name="Model"><dir name="Checkout"><dir name="Onepage"><file name="Observer.php" hash="fb89020f3132555a332e29c65ee5d6df"/></dir></dir><dir name="Mysql4"><dir name="Opstatistics"><file name="Collection.php" hash="66b29da439c196f325c9faec4b171f30"/></dir><file name="Opstatistics.php" hash="9ccaa740ddbfa607204bde0222fceafc"/><dir name="Osstatistics"><file name="Collection.php" hash="ece88b40a6434e61c3bb98777f9e5a80"/></dir><file name="Osstatistics.php" hash="5824f15a418adc0c034ea74264540227"/><dir name="Statistics"><file name="Collection.php" hash="c92997470a39016001c196fa4bf17861"/></dir><file name="Statistics.php" hash="88d17295de3fc05637ac55e71c52a3a3"/></dir><file name="Observer.php" hash="92700ee1de1652a4469e6cb2455f1a03"/><file name="Opstatistics.php" hash="f3bfe7b7e44ef33e15877332a767b25a"/><file name="Osstatistics.php" hash="1040d239d807dbd5f5b4f4bf0e8e2423"/><file name="Statistics.php" hash="e36ff5a9e407bbb2867da3a209a62a42"/></dir><dir name="controllers"><file name="WidgetController.php" hash="ca23d690e09435f5f4df54c539dea74b"/></dir><dir name="etc"><file name="adminhtml.xml" hash="77cbef67f18b08bed62237f75bfb68d7"/><file name="config.xml" hash="9f1317eaa5eb6b8800a7a9f2c5902d54"/><file name="system.xml" hash="66777828da2bfd1a353f09398409e379"/></dir><dir name="sql"><dir name="anattadesign_abandonedcarts_setup"><file name="mysql4-install-1.0.0.php" hash="b235486189e6609d4f9abc82ffae76c7"/><file name="mysql4-upgrade-1.0.0-1.0.1.php" hash="f9f7cbb6845f014f74c294692189c369"/><file name="mysql4-upgrade-1.0.1-1.1.0.php" hash="f9f7cbb6845f014f74c294692189c369"/><file name="mysql4-upgrade-1.1.0-1.1.1.php" hash="f9f7cbb6845f014f74c294692189c369"/><file name="mysql4-upgrade-1.1.1-1.1.2.php" hash="f9f7cbb6845f014f74c294692189c369"/><file name="mysql4-upgrade-1.1.2-1.1.2.1.php" hash="4d69acff510bb3e985155a88d1f13130"/><file name="mysql4-upgrade-1.1.2.1-1.2.0.php" hash="f9f7cbb6845f014f74c294692189c369"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="anattadesign_abandonedcarts.xml" hash="c14481626a0c367d974a5660ed930482"/></dir><dir name="template"><dir name="anattadesign"><dir name="abandonedcarts"><file name="widget.phtml" hash="4d2e492c3e0a8faf6c009da1320778aa"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="AnattaDesign_AbandonedCarts.xml" hash="fba54c1c1c7b2abd323a56bcdd56be20"/></dir></target><target name="mage"><dir name="js"><dir name="anattadesign"><dir name="abandonedcarts"><file name="adminhack.js" hash="d8d1b081040d1dbbe87296e4ed064a91"/><file name="zepto.js" hash="61e66962daedd0943adc35a97b0eaa27"/></dir></dir></dir><dir name="app"><dir name="locale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="anattadesign_abandonedcarts"><file name="weekly_report.html" hash="0b47ad9df7af1d4004b2d8f0cdb8e23e"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="anattadesign"><dir name="abandonedcarts"><dir><dir name="css"><file name="style.css" hash="91b410a9fc1a5ff1e20e7c321fd64e23"/></dir><dir name="images"><file name="bt-rep.gif" hash="f2054c34f7d04f81082ef2d686464c5f"/><file name="powerdby.jpg" hash="82777ae659f9316a27dbf7e14e23a5e2"/><file name="table-step-img-arrow.jpg" hash="ea678306e6a71818565e09c771bec7a5"/><file name="table-step-img-last-arrow.jpg" hash="88b14ae05fd2105ba317025925a39880"/><file name="table-step-img.jpg" hash="4bcb56e9e828981d0c1654925848791e"/></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="anattadesign"><file name="abandonedcarts" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="AnattaDesign_AbandonedCarts.csv" hash="bfa007f4595474255a4a72840bf6e671"/></dir><dir name="es_ES"><file name="AnattaDesign_AbandonedCarts.csv" hash="bfa007f4595474255a4a72840bf6e671"/></dir><dir name="en_CA"><file name="AnattaDesign_AbandonedCarts.csv" hash="bfa007f4595474255a4a72840bf6e671"/></dir><dir name="ru_RU"><file name="AnattaDesign_AbandonedCarts.csv" hash="403b72f3f24fa5e88bfdf98bf9acd176"/></dir><dir name="en_GB"><file name="AnattaDesign_AbandonedCarts.csv" hash="bfa007f4595474255a4a72840bf6e671"/></dir><dir name="de_DE"><file name="AnattaDesign_AbandonedCarts.csv" hash="6102c1e8cf0bc0e5fae1a873f295b213"/></dir><dir name="it_IT"><file name="AnattaDesign_AbandonedCarts.csv" hash="e191dc1c7c2b0e247e25f2b93f6e5cb3"/></dir><dir name="en_AU"><file name="AnattaDesign_AbandonedCarts.csv" hash="bfa007f4595474255a4a72840bf6e671"/></dir><dir name="fr_FR"><file name="AnattaDesign_AbandonedCarts.csv" hash="4ac2c0619a05f4db3e0facacd2e9c474"/></dir><dir name="pt_BR"><file name="AnattaDesign_AbandonedCarts.csv" hash="6167c9a9b6390223e133944bbd38d844"/></dir></target></contents>
22
  <compatible/>
23
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
24
  </package>