WooCommerce Cart Abandonment Recovery - Version 1.1.7

Version Description

Download this release

Release Info

Developer sandesh055
Plugin Icon 128x128 WooCommerce Cart Abandonment Recovery
Version 1.1.7
Comparing to
See all releases

Code changes from version 1.1.6 to 1.1.7

changelog.txt CHANGED
@@ -1,3 +1,10 @@
 
 
 
 
 
 
 
1
  Version 1.1.6 - Friday, 19th July 2019
2
  - New: Bundled product support for email checkout URL.
3
  - Improvement: Added phone number and address while triggering the to webhook.
1
+ Version 1.1.7 - Monday, 12th August 2019
2
+ - New: Filter added to show the cart total inside the email template.
3
+ - New: Filter added to change the cart abandoned time.
4
+ - Improvement: Order tracking logic updated for automated payments.
5
+ - Improvement: Update report dashboard DateTime format to WordPress format.
6
+ - Fix: Broken image in the email template.
7
+
8
  Version 1.1.6 - Friday, 19th July 2019
9
  - New: Bundled product support for email checkout URL.
10
  - Improvement: Added phone number and address while triggering the to webhook.
classes/class-cartflows-ca-loader.php CHANGED
@@ -77,7 +77,7 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
77
  define( 'CARTFLOWS_CA_BASE', plugin_basename( CARTFLOWS_CA_FILE ) );
78
  define( 'CARTFLOWS_CA_DIR', plugin_dir_path( CARTFLOWS_CA_FILE ) );
79
  define( 'CARTFLOWS_CA_URL', plugins_url( '/', CARTFLOWS_CA_FILE ) );
80
- define( 'CARTFLOWS_CA_VER', '1.1.6' );
81
  define( 'CARTFLOWS_CA_SLUG', 'cartflows_ca' );
82
 
83
  define( 'CARTFLOWS_CA_CART_ABANDONMENT_TABLE', 'cartflows_ca_cart_abandonment' );
@@ -131,7 +131,7 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
131
 
132
  $class = 'notice notice-error';
133
  /* translators: %s: html tags */
134
- $message = sprintf( __( 'The %1$sWooCommerce Cart Abandonment Recovery%2$s plugin requires %1$sWooCommerce%2$s plugin installed & activated.', 'cartflows-ca' ), '<strong>', '</strong>' );
135
 
136
  $plugin = 'woocommerce/woocommerce.php';
137
 
@@ -141,7 +141,7 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
141
  }
142
 
143
  $action_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $plugin . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin );
144
- $button_label = __( 'Activate WooCommerce', 'cartflows-ca' );
145
 
146
  } else {
147
  if ( ! current_user_can( 'install_plugins' ) ) {
@@ -149,7 +149,7 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
149
  }
150
 
151
  $action_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=woocommerce' ), 'install-plugin_woocommerce' );
152
- $button_label = __( 'Install WooCommerce', 'cartflows-ca' );
153
  }
154
 
155
  $button = '<p><a href="' . $action_url . '" class="button-primary">' . $button_label . '</a></p><p></p>';
@@ -249,8 +249,8 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
249
  * Uses get_user_locale()` in WordPress 4.7 or greater,
250
  * otherwise uses `get_locale()`.
251
  */
252
- $locale = apply_filters( 'plugin_locale', $get_locale, 'cartflows-ca' );
253
- $mofile = sprintf( '%1$s-%2$s.mo', 'cartflows-ca', $locale );
254
 
255
  // Setup paths to current locale file.
256
  $mofile_local = $lang_dir . $mofile;
@@ -258,13 +258,13 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
258
 
259
  if ( file_exists( $mofile_global ) ) {
260
  // Look in global /wp-content/languages/%plugin-folder-name%/ folder.
261
- load_textdomain( 'cartflows-ca', $mofile_global );
262
  } elseif ( file_exists( $mofile_local ) ) {
263
  // Look in local /wp-content/plugins/%plugin-folder-name%/languages/ folder.
264
- load_textdomain( 'cartflows-ca', $mofile_local );
265
  } else {
266
  // Load the default language files.
267
- load_plugin_textdomain( 'cartflows-ca', false, $lang_dir );
268
  }
269
  }
270
  /**
77
  define( 'CARTFLOWS_CA_BASE', plugin_basename( CARTFLOWS_CA_FILE ) );
78
  define( 'CARTFLOWS_CA_DIR', plugin_dir_path( CARTFLOWS_CA_FILE ) );
79
  define( 'CARTFLOWS_CA_URL', plugins_url( '/', CARTFLOWS_CA_FILE ) );
80
+ define( 'CARTFLOWS_CA_VER', '1.1.7' );
81
  define( 'CARTFLOWS_CA_SLUG', 'cartflows_ca' );
82
 
83
  define( 'CARTFLOWS_CA_CART_ABANDONMENT_TABLE', 'cartflows_ca_cart_abandonment' );
131
 
132
  $class = 'notice notice-error';
133
  /* translators: %s: html tags */
134
+ $message = sprintf( __( 'The %1$sWooCommerce Cart Abandonment Recovery%2$s plugin requires %1$sWooCommerce%2$s plugin installed & activated.', 'woo-cart-abandonment-recovery' ), '<strong>', '</strong>' );
135
 
136
  $plugin = 'woocommerce/woocommerce.php';
137
 
141
  }
142
 
143
  $action_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $plugin . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $plugin );
144
+ $button_label = __( 'Activate WooCommerce', 'woo-cart-abandonment-recovery' );
145
 
146
  } else {
147
  if ( ! current_user_can( 'install_plugins' ) ) {
149
  }
150
 
151
  $action_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=woocommerce' ), 'install-plugin_woocommerce' );
152
+ $button_label = __( 'Install WooCommerce', 'woo-cart-abandonment-recovery' );
153
  }
154
 
155
  $button = '<p><a href="' . $action_url . '" class="button-primary">' . $button_label . '</a></p><p></p>';
249
  * Uses get_user_locale()` in WordPress 4.7 or greater,
250
  * otherwise uses `get_locale()`.
251
  */
252
+ $locale = apply_filters( 'plugin_locale', $get_locale, 'woo-cart-abandonment-recovery' );
253
+ $mofile = sprintf( '%1$s-%2$s.mo', 'woo-cart-abandonment-recovery', $locale );
254
 
255
  // Setup paths to current locale file.
256
  $mofile_local = $lang_dir . $mofile;
258
 
259
  if ( file_exists( $mofile_global ) ) {
260
  // Look in global /wp-content/languages/%plugin-folder-name%/ folder.
261
+ load_textdomain( 'woo-cart-abandonment-recovery', $mofile_global );
262
  } elseif ( file_exists( $mofile_local ) ) {
263
  // Look in local /wp-content/plugins/%plugin-folder-name%/languages/ folder.
264
+ load_textdomain( 'woo-cart-abandonment-recovery', $mofile_local );
265
  } else {
266
  // Load the default language files.
267
+ load_plugin_textdomain( 'woo-cart-abandonment-recovery', false, $lang_dir );
268
  }
269
  }
270
  /**
classes/class-cartflows-ca-settings.php CHANGED
@@ -50,18 +50,18 @@ class Cartflows_Ca_Settings {
50
  // Start: Settings for cart abandonment.
51
  add_settings_section(
52
  WCF_CA_GENERAL_SETTINGS_SECTION,
53
- __( 'Cart Abandonment Settings', 'cartflows-ca' ),
54
  array( $this, 'wcf_cart_abandonment_options_callback' ),
55
  WCF_CA_PAGE_NAME
56
  );
57
 
58
  add_settings_field(
59
  'wcf_ca_status',
60
- __( 'Enable Tracking', 'cartflows-ca' ),
61
  array( $this, 'wcf_ca_status_callback' ),
62
  WCF_CA_PAGE_NAME,
63
  WCF_CA_GENERAL_SETTINGS_SECTION,
64
- array( __( 'Start capturing abandoned carts. <br/><br/> <span class="description"><strong>Note:</strong> Cart will be considered abandoned if order is not completed in <strong>15 minutes</strong>.</span>', 'cartflows-ca' ) )
65
  );
66
 
67
  register_setting(
@@ -73,36 +73,36 @@ class Cartflows_Ca_Settings {
73
  // Start: Settings for email templates.
74
  add_settings_section(
75
  WCF_CA_EMAIL_SETTINGS_SECTION,
76
- __( 'Email Settings', 'cartflows-ca' ),
77
  array( $this, 'wcf_cart_abandonment_options_callback' ),
78
  WCF_CA_PAGE_NAME
79
  );
80
 
81
  add_settings_field(
82
  'wcf_ca_from_name',
83
- __( '"From" Name', 'cartflows-ca' ),
84
  array( $this, 'wcf_ca_from_name_callback' ),
85
  WCF_CA_PAGE_NAME,
86
  WCF_CA_EMAIL_SETTINGS_SECTION,
87
- array( 'Name will appear in email sent.', 'cartflows-ca' )
88
  );
89
 
90
  add_settings_field(
91
  'wcf_ca_from_email',
92
- __( '"From" Address', 'cartflows-ca' ),
93
  array( $this, 'wcf_ca_from_email_callback' ),
94
  WCF_CA_PAGE_NAME,
95
  WCF_CA_EMAIL_SETTINGS_SECTION,
96
- array( 'Email which send from.', 'cartflows-ca' )
97
  );
98
 
99
  add_settings_field(
100
  'wcf_ca_reply_email',
101
- __( '"Reply To" Address', 'cartflows-ca' ),
102
  array( $this, 'wcf_ca_reply_email_callback' ),
103
  WCF_CA_PAGE_NAME,
104
  WCF_CA_EMAIL_SETTINGS_SECTION,
105
- array( 'When a user clicks reply, which email address should that reply be sent to?', 'cartflows-ca' )
106
  );
107
 
108
  register_setting(
@@ -125,20 +125,20 @@ class Cartflows_Ca_Settings {
125
  // Start: Settings for coupon code.
126
  add_settings_field(
127
  'wcf_ca_zapier_tracking_status',
128
- __( 'Enable Webhook', 'cartflows-ca' ),
129
  array( $this, 'wcf_ca_zapier_tracking_status_callback' ),
130
  WCF_CA_PAGE_NAME,
131
  WCF_CA_ZAPIER_SETTINGS_SECTION,
132
- array( __( 'Allows you to trigger webhook automatically upon cart abandonment and recovery.', 'cartflows-ca' ) )
133
  );
134
 
135
  add_settings_field(
136
  'wcf_ca_zapier_cart_abandoned_webhook',
137
- __( 'Webhook URL', 'cartflows-ca' ),
138
  array( $this, 'wcf_ca_zapier_cart_abandoned_webhook_callback' ),
139
  WCF_CA_PAGE_NAME,
140
  WCF_CA_ZAPIER_SETTINGS_SECTION,
141
- array( '', 'cartflows-ca' )
142
  );
143
 
144
  register_setting(
@@ -153,45 +153,45 @@ class Cartflows_Ca_Settings {
153
 
154
  add_settings_section(
155
  WCF_CA_ZAPIER_SETTINGS_SECTION,
156
- __( 'Coupon Code Settings', 'cartflows-ca' ),
157
  array( $this, 'wcf_cart_abandonment_options_callback' ),
158
  WCF_CA_PAGE_NAME
159
  );
160
 
161
  add_settings_field(
162
  'wcf_ca_coupon_code_status',
163
- __( 'Create Coupon Code', 'cartflows-ca' ),
164
  array( $this, 'wcf_ca_coupon_code_status_callback' ),
165
  WCF_CA_PAGE_NAME,
166
  WCF_CA_ZAPIER_SETTINGS_SECTION,
167
- array( __( 'Auto-create the special coupon for the abandoned cart to send over the emails.', 'cartflows-ca' ) )
168
  );
169
 
170
  add_settings_field(
171
  'wcf_ca_discount_type',
172
- __( 'Discount Type', 'cartflows-ca' ),
173
  array( $this, 'wcf_ca_discount_type_callback' ),
174
  WCF_CA_PAGE_NAME,
175
  WCF_CA_ZAPIER_SETTINGS_SECTION,
176
- array( '', 'cartflows-ca' )
177
  );
178
 
179
  add_settings_field(
180
  'wcf_ca_coupon_amount',
181
- __( 'Coupon Amount', 'cartflows-ca' ),
182
  array( $this, 'wcf_ca_coupon_amount_callback' ),
183
  WCF_CA_PAGE_NAME,
184
  WCF_CA_ZAPIER_SETTINGS_SECTION,
185
- array( '', 'cartflows-ca' )
186
  );
187
 
188
  add_settings_field(
189
  'wcf_ca_coupon_expiry',
190
- __( 'Coupon Expires After', 'cartflows-ca' ),
191
  array( $this, 'wcf_ca_coupon_expiry_callback' ),
192
  WCF_CA_PAGE_NAME,
193
  WCF_CA_ZAPIER_SETTINGS_SECTION,
194
- array( '<br/><br/> <span class="description"><strong>Note: </strong> Enter zero (0) to restrict coupon from expiring.</span>', 'cartflows-ca' )
195
  );
196
 
197
  register_setting(
@@ -222,7 +222,7 @@ class Cartflows_Ca_Settings {
222
  // Start: Settings for Zapier.
223
  add_settings_section(
224
  WCF_CA_ZAPIER_SETTINGS_SECTION,
225
- __( 'Webhook Settings', 'cartflows-ca' ),
226
  array( $this, 'wcf_cart_abandonment_options_callback' ),
227
  WCF_CA_PAGE_NAME
228
  );
@@ -231,27 +231,27 @@ class Cartflows_Ca_Settings {
231
  // Start: GDPR Settings.
232
  add_settings_section(
233
  WCF_CA_GDPR_SETTINGS_SECTION,
234
- __( 'GDPR Settings', 'cartflows-ca' ),
235
  array( $this, 'wcf_cart_abandonment_options_callback' ),
236
  WCF_CA_PAGE_NAME
237
  );
238
 
239
  add_settings_field(
240
  'wcf_ca_gdpr_status',
241
- __( 'Enable GDPR Integration', 'cartflows-ca' ),
242
  array( $this, 'wcf_ca_gdpr_status_callback' ),
243
  WCF_CA_PAGE_NAME,
244
  WCF_CA_GDPR_SETTINGS_SECTION,
245
- array( __( 'Ask confirmation from the user before tracking data. <br/><br/> <span class="description"><strong>Note:</strong> By checking this, it will show up confirmation text below the email id on checkout page.</span>', 'cartflows-ca' ) )
246
  );
247
 
248
  add_settings_field(
249
  'wcf_ca_gdpr_message',
250
- __( 'GDPR Message', 'cartflows-ca' ),
251
  array( $this, 'wcf_ca_gdpr_message_callback' ),
252
  WCF_CA_PAGE_NAME,
253
  WCF_CA_GDPR_SETTINGS_SECTION,
254
- array( '', 'cartflows-ca' )
255
  );
256
 
257
  register_setting(
@@ -418,7 +418,7 @@ class Cartflows_Ca_Settings {
418
  add_settings_error(
419
  'wcf_ca_coupon_amount',
420
  'error found',
421
- __( 'Coupon code should be numeric and has to be greater than or equals to 1.', 'cartflows-ca' )
422
  );
423
  }
424
  return $output;
@@ -528,7 +528,7 @@ class Cartflows_Ca_Settings {
528
  add_settings_error(
529
  'wcf_ca_from_email',
530
  'error found',
531
- __( 'Invalid email "From" address field', 'cartflows-ca' )
532
  );
533
  }
534
  return sanitize_email( $input );
@@ -546,7 +546,7 @@ class Cartflows_Ca_Settings {
546
  add_settings_error(
547
  'wcf_ca_reply_email',
548
  'error found',
549
- __( 'Invalid email "Reply" address field', 'cartflows-ca' )
550
  );
551
  }
552
  return sanitize_email( $input );
50
  // Start: Settings for cart abandonment.
51
  add_settings_section(
52
  WCF_CA_GENERAL_SETTINGS_SECTION,
53
+ __( 'Cart Abandonment Settings', 'woo-cart-abandonment-recovery' ),
54
  array( $this, 'wcf_cart_abandonment_options_callback' ),
55
  WCF_CA_PAGE_NAME
56
  );
57
 
58
  add_settings_field(
59
  'wcf_ca_status',
60
+ __( 'Enable Tracking', 'woo-cart-abandonment-recovery' ),
61
  array( $this, 'wcf_ca_status_callback' ),
62
  WCF_CA_PAGE_NAME,
63
  WCF_CA_GENERAL_SETTINGS_SECTION,
64
+ array( __( 'Start capturing abandoned carts. <br/><br/> <span class="description"><strong>Note:</strong> Cart will be considered abandoned if order is not completed in <strong>15 minutes</strong>.</span>', 'woo-cart-abandonment-recovery' ) )
65
  );
66
 
67
  register_setting(
73
  // Start: Settings for email templates.
74
  add_settings_section(
75
  WCF_CA_EMAIL_SETTINGS_SECTION,
76
+ __( 'Email Settings', 'woo-cart-abandonment-recovery' ),
77
  array( $this, 'wcf_cart_abandonment_options_callback' ),
78
  WCF_CA_PAGE_NAME
79
  );
80
 
81
  add_settings_field(
82
  'wcf_ca_from_name',
83
+ __( '"From" Name', 'woo-cart-abandonment-recovery' ),
84
  array( $this, 'wcf_ca_from_name_callback' ),
85
  WCF_CA_PAGE_NAME,
86
  WCF_CA_EMAIL_SETTINGS_SECTION,
87
+ array( 'Name will appear in email sent.', 'woo-cart-abandonment-recovery' )
88
  );
89
 
90
  add_settings_field(
91
  'wcf_ca_from_email',
92
+ __( '"From" Address', 'woo-cart-abandonment-recovery' ),
93
  array( $this, 'wcf_ca_from_email_callback' ),
94
  WCF_CA_PAGE_NAME,
95
  WCF_CA_EMAIL_SETTINGS_SECTION,
96
+ array( 'Email which send from.', 'woo-cart-abandonment-recovery' )
97
  );
98
 
99
  add_settings_field(
100
  'wcf_ca_reply_email',
101
+ __( '"Reply To" Address', 'woo-cart-abandonment-recovery' ),
102
  array( $this, 'wcf_ca_reply_email_callback' ),
103
  WCF_CA_PAGE_NAME,
104
  WCF_CA_EMAIL_SETTINGS_SECTION,
105
+ array( 'When a user clicks reply, which email address should that reply be sent to?', 'woo-cart-abandonment-recovery' )
106
  );
107
 
108
  register_setting(
125
  // Start: Settings for coupon code.
126
  add_settings_field(
127
  'wcf_ca_zapier_tracking_status',
128
+ __( 'Enable Webhook', 'woo-cart-abandonment-recovery' ),
129
  array( $this, 'wcf_ca_zapier_tracking_status_callback' ),
130
  WCF_CA_PAGE_NAME,
131
  WCF_CA_ZAPIER_SETTINGS_SECTION,
132
+ array( __( 'Allows you to trigger webhook automatically upon cart abandonment and recovery.', 'woo-cart-abandonment-recovery' ) )
133
  );
134
 
135
  add_settings_field(
136
  'wcf_ca_zapier_cart_abandoned_webhook',
137
+ __( 'Webhook URL', 'woo-cart-abandonment-recovery' ),
138
  array( $this, 'wcf_ca_zapier_cart_abandoned_webhook_callback' ),
139
  WCF_CA_PAGE_NAME,
140
  WCF_CA_ZAPIER_SETTINGS_SECTION,
141
+ array( '', 'woo-cart-abandonment-recovery' )
142
  );
143
 
144
  register_setting(
153
 
154
  add_settings_section(
155
  WCF_CA_ZAPIER_SETTINGS_SECTION,
156
+ __( 'Coupon Code Settings', 'woo-cart-abandonment-recovery' ),
157
  array( $this, 'wcf_cart_abandonment_options_callback' ),
158
  WCF_CA_PAGE_NAME
159
  );
160
 
161
  add_settings_field(
162
  'wcf_ca_coupon_code_status',
163
+ __( 'Create Coupon Code', 'woo-cart-abandonment-recovery' ),
164
  array( $this, 'wcf_ca_coupon_code_status_callback' ),
165
  WCF_CA_PAGE_NAME,
166
  WCF_CA_ZAPIER_SETTINGS_SECTION,
167
+ array( __( 'Auto-create the special coupon for the abandoned cart to send over the emails.', 'woo-cart-abandonment-recovery' ) )
168
  );
169
 
170
  add_settings_field(
171
  'wcf_ca_discount_type',
172
+ __( 'Discount Type', 'woo-cart-abandonment-recovery' ),
173
  array( $this, 'wcf_ca_discount_type_callback' ),
174
  WCF_CA_PAGE_NAME,
175
  WCF_CA_ZAPIER_SETTINGS_SECTION,
176
+ array( '', 'woo-cart-abandonment-recovery' )
177
  );
178
 
179
  add_settings_field(
180
  'wcf_ca_coupon_amount',
181
+ __( 'Coupon Amount', 'woo-cart-abandonment-recovery' ),
182
  array( $this, 'wcf_ca_coupon_amount_callback' ),
183
  WCF_CA_PAGE_NAME,
184
  WCF_CA_ZAPIER_SETTINGS_SECTION,
185
+ array( '', 'woo-cart-abandonment-recovery' )
186
  );
187
 
188
  add_settings_field(
189
  'wcf_ca_coupon_expiry',
190
+ __( 'Coupon Expires After', 'woo-cart-abandonment-recovery' ),
191
  array( $this, 'wcf_ca_coupon_expiry_callback' ),
192
  WCF_CA_PAGE_NAME,
193
  WCF_CA_ZAPIER_SETTINGS_SECTION,
194
+ array( '<br/><br/> <span class="description"><strong>Note: </strong> Enter zero (0) to restrict coupon from expiring.</span>', 'woo-cart-abandonment-recovery' )
195
  );
196
 
197
  register_setting(
222
  // Start: Settings for Zapier.
223
  add_settings_section(
224
  WCF_CA_ZAPIER_SETTINGS_SECTION,
225
+ __( 'Webhook Settings', 'woo-cart-abandonment-recovery' ),
226
  array( $this, 'wcf_cart_abandonment_options_callback' ),
227
  WCF_CA_PAGE_NAME
228
  );
231
  // Start: GDPR Settings.
232
  add_settings_section(
233
  WCF_CA_GDPR_SETTINGS_SECTION,
234
+ __( 'GDPR Settings', 'woo-cart-abandonment-recovery' ),
235
  array( $this, 'wcf_cart_abandonment_options_callback' ),
236
  WCF_CA_PAGE_NAME
237
  );
238
 
239
  add_settings_field(
240
  'wcf_ca_gdpr_status',
241
+ __( 'Enable GDPR Integration', 'woo-cart-abandonment-recovery' ),
242
  array( $this, 'wcf_ca_gdpr_status_callback' ),
243
  WCF_CA_PAGE_NAME,
244
  WCF_CA_GDPR_SETTINGS_SECTION,
245
+ array( __( 'Ask confirmation from the user before tracking data. <br/><br/> <span class="description"><strong>Note:</strong> By checking this, it will show up confirmation text below the email id on checkout page.</span>', 'woo-cart-abandonment-recovery' ) )
246
  );
247
 
248
  add_settings_field(
249
  'wcf_ca_gdpr_message',
250
+ __( 'GDPR Message', 'woo-cart-abandonment-recovery' ),
251
  array( $this, 'wcf_ca_gdpr_message_callback' ),
252
  WCF_CA_PAGE_NAME,
253
  WCF_CA_GDPR_SETTINGS_SECTION,
254
+ array( '', 'woo-cart-abandonment-recovery' )
255
  );
256
 
257
  register_setting(
418
  add_settings_error(
419
  'wcf_ca_coupon_amount',
420
  'error found',
421
+ __( 'Coupon code should be numeric and has to be greater than or equals to 1.', 'woo-cart-abandonment-recovery' )
422
  );
423
  }
424
  return $output;
528
  add_settings_error(
529
  'wcf_ca_from_email',
530
  'error found',
531
+ __( 'Invalid email "From" address field', 'woo-cart-abandonment-recovery' )
532
  );
533
  }
534
  return sanitize_email( $input );
546
  add_settings_error(
547
  'wcf_ca_reply_email',
548
  'error found',
549
+ __( 'Invalid email "Reply" address field', 'woo-cart-abandonment-recovery' )
550
  );
551
  }
552
  return sanitize_email( $input );
languages/{cartflows-ca.pot → woo-cart-abandonment-recovery.pot} RENAMED
@@ -2,10 +2,10 @@
2
  # This file is distributed under the same license as the WooCommerce Cart Abandonment Recovery package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WooCommerce Cart Abandonment Recovery 1.1.6\n"
6
  "Report-Msgid-Bugs-To: "
7
  "https://wordpress.org/support/plugin/woo-cart-abandonment-recovery\n"
8
- "POT-Creation-Date: 2019-07-19 11:14:46+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=utf-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
@@ -153,132 +153,137 @@ msgid "View"
153
  msgstr ""
154
 
155
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:66
156
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:122
157
  #: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:85
158
  #: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:119
159
  msgid "Delete"
160
  msgstr ""
161
 
162
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:70
163
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1444
164
  msgid "Unsubscribe"
165
  msgstr ""
166
 
167
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:188
168
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1563
169
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1618
 
170
  #: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:168
171
  msgid "Name"
172
  msgstr ""
173
 
174
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:189
175
  msgid "Email"
176
  msgstr ""
177
 
178
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:190
179
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1640
180
  msgid "Cart Total"
181
  msgstr ""
182
 
183
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:191
184
  msgid "Order Status"
185
  msgstr ""
186
 
187
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:192
188
  msgid "Time"
189
  msgstr ""
190
 
191
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:97
 
 
 
 
 
192
  msgid "Mail has been sent successfully!"
193
  msgstr ""
194
 
195
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:99
196
  msgid "Mail sending failed!"
197
  msgstr ""
198
 
199
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:134
200
  msgid "Every Fifteen Minutes"
201
  msgstr ""
202
 
203
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:200
204
  msgid "You have successfully unsubscribed from our email list."
205
  msgstr ""
206
 
207
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:200
208
  #: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:159
209
  msgid "Unsubscribed"
210
  msgstr ""
211
 
212
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:357
213
  msgid "No Thanks"
214
  msgstr ""
215
 
216
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:358
217
  msgid "You won't receive further emails from us, thank you!"
218
  msgstr ""
219
 
220
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:773
221
- msgid "CartFlows says: This order was abandoned & subsequently recovered."
222
- msgstr ""
223
-
224
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:885
225
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:886
226
  msgid "Cart Abandonment"
227
  msgstr ""
228
 
229
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:919
230
  msgid "Items deleted: %d"
231
  msgstr ""
232
 
233
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:936
234
  msgid "User unsubscribed successfully!"
235
  msgstr ""
236
 
237
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1131
238
  msgid "Report"
239
  msgstr ""
240
 
241
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1147
242
  msgid "Follow-Up Emails"
243
  msgstr ""
244
 
245
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1163
246
  msgid "Settings"
247
  msgstr ""
248
 
249
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1414
250
  msgid "there"
251
  msgstr ""
252
 
253
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1562
 
 
 
254
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1617
 
255
  msgid "Item"
256
  msgstr ""
257
 
258
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1564
259
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1619
 
260
  msgid "Quantity"
261
  msgstr ""
262
 
263
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1565
264
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1620
 
265
  msgid "Price"
266
  msgstr ""
267
 
268
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1566
269
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1621
 
270
  msgid "Line Subtotal"
271
  msgstr ""
272
 
273
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1627
274
  msgid "Discount"
275
  msgstr ""
276
 
277
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1631
278
  msgid "Other"
279
  msgstr ""
280
 
281
- #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1636
282
  msgid "Shipping"
283
  msgstr ""
284
 
2
  # This file is distributed under the same license as the WooCommerce Cart Abandonment Recovery package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WooCommerce Cart Abandonment Recovery 1.1.7\n"
6
  "Report-Msgid-Bugs-To: "
7
  "https://wordpress.org/support/plugin/woo-cart-abandonment-recovery\n"
8
+ "POT-Creation-Date: 2019-08-12 08:43:46+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=utf-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
153
  msgstr ""
154
 
155
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:66
156
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:118
157
  #: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:85
158
  #: modules/cart-abandonment/class-cartflows-ca-email-templates-table.php:119
159
  msgid "Delete"
160
  msgstr ""
161
 
162
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:70
163
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1488
164
  msgid "Unsubscribe"
165
  msgstr ""
166
 
167
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:184
 
168
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1618
169
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1673
170
  #: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:168
171
  msgid "Name"
172
  msgstr ""
173
 
174
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:185
175
  msgid "Email"
176
  msgstr ""
177
 
178
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:186
179
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1695
180
  msgid "Cart Total"
181
  msgstr ""
182
 
183
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:187
184
  msgid "Order Status"
185
  msgstr ""
186
 
187
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php:188
188
  msgid "Time"
189
  msgstr ""
190
 
191
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:119
192
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:817
193
+ msgid "This order was abandoned & subsequently recovered."
194
+ msgstr ""
195
+
196
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:136
197
  msgid "Mail has been sent successfully!"
198
  msgstr ""
199
 
200
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:138
201
  msgid "Mail sending failed!"
202
  msgstr ""
203
 
204
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:178
205
  msgid "Every Fifteen Minutes"
206
  msgstr ""
207
 
208
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:244
209
  msgid "You have successfully unsubscribed from our email list."
210
  msgstr ""
211
 
212
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:244
213
  #: modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php:159
214
  msgid "Unsubscribed"
215
  msgstr ""
216
 
217
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:401
218
  msgid "No Thanks"
219
  msgstr ""
220
 
221
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:402
222
  msgid "You won't receive further emails from us, thank you!"
223
  msgstr ""
224
 
225
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:929
226
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:930
 
 
 
 
227
  msgid "Cart Abandonment"
228
  msgstr ""
229
 
230
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:963
231
  msgid "Items deleted: %d"
232
  msgstr ""
233
 
234
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:980
235
  msgid "User unsubscribed successfully!"
236
  msgstr ""
237
 
238
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1175
239
  msgid "Report"
240
  msgstr ""
241
 
242
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1191
243
  msgid "Follow-Up Emails"
244
  msgstr ""
245
 
246
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1207
247
  msgid "Settings"
248
  msgstr ""
249
 
250
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1458
251
  msgid "there"
252
  msgstr ""
253
 
254
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1610
255
+ msgid "Cart Total ( Cart Total + Shipping + Tax )"
256
+ msgstr ""
257
+
258
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1617
259
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1672
260
  msgid "Item"
261
  msgstr ""
262
 
 
263
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1619
264
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1674
265
  msgid "Quantity"
266
  msgstr ""
267
 
 
268
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1620
269
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1675
270
  msgid "Price"
271
  msgstr ""
272
 
 
273
  #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1621
274
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1676
275
  msgid "Line Subtotal"
276
  msgstr ""
277
 
278
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1682
279
  msgid "Discount"
280
  msgstr ""
281
 
282
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1686
283
  msgid "Other"
284
  msgstr ""
285
 
286
+ #: modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php:1691
287
  msgid "Shipping"
288
  msgstr ""
289
 
modules/cart-abandonment/class-cartflows-ca-cart-abandonment-table.php CHANGED
@@ -62,12 +62,12 @@ class Cartflows_Ca_Cart_Abandonment_Table extends WP_List_Table {
62
  );
63
 
64
  $actions = array(
65
- 'view' => sprintf( '<a href="%s">%s</a>', esc_url( $view_url ), __( 'View', 'cartflows-ca' ) ),
66
- 'delete' => sprintf( '<a onclick="return confirm(\'Are you sure to delete this order?\');" href="?page=%s&action=delete&id=%s">%s</a>', esc_html( $page ), esc_html( $item['id'] ), __( 'Delete', 'cartflows-ca' ) ),
67
  );
68
 
69
  if ( WCF_CART_ABANDONED_ORDER === $item['order_status'] && ! $item['unsubscribed'] ) {
70
- $actions['unsubscribe'] = sprintf( '<a onclick="return confirm(\'Are you sure to unsubscribe this user? \');" href="?page=%s&action=unsubscribe&id=%s">%s</a>', esc_html( $page ), esc_html( $item['id'] ), __( 'Unsubscribe', 'cartflows-ca' ) );
71
 
72
  }
73
 
@@ -87,16 +87,12 @@ class Cartflows_Ca_Cart_Abandonment_Table extends WP_List_Table {
87
  * @return HTML
88
  */
89
  function column_time( $item ) {
90
- $database_time = $item['time'];
91
- $date_time = new DateTime( $database_time );
92
- $date = $date_time->format( 'd.m.Y' );
93
- $time = $date_time->format( 'H:i:s' );
94
 
95
- return sprintf(
96
- '<span class="dashicons dashicons-clock"></span> %s %s',
97
- esc_html( $time ),
98
- esc_html( $date )
99
- );
100
  }
101
 
102
  /**
@@ -119,7 +115,7 @@ class Cartflows_Ca_Cart_Abandonment_Table extends WP_List_Table {
119
  */
120
  function get_bulk_actions() {
121
  $actions = array(
122
- 'delete' => __( 'Delete', 'cartflows-ca' ),
123
  );
124
  return $actions;
125
  }
@@ -185,11 +181,11 @@ class Cartflows_Ca_Cart_Abandonment_Table extends WP_List_Table {
185
  function get_columns() {
186
  $columns = array(
187
  'cb' => '<input type="checkbox" />',
188
- 'nameSurname' => __( 'Name', 'cartflows-ca' ),
189
- 'email' => __( 'Email', 'cartflows-ca' ),
190
- 'cart_total' => __( 'Cart Total', 'cartflows-ca' ),
191
- 'order_status' => __( 'Order Status', 'cartflows-ca' ),
192
- 'time' => __( 'Time', 'cartflows-ca' ),
193
  );
194
  return $columns;
195
  }
62
  );
63
 
64
  $actions = array(
65
+ 'view' => sprintf( '<a href="%s">%s</a>', esc_url( $view_url ), __( 'View', 'woo-cart-abandonment-recovery' ) ),
66
+ 'delete' => sprintf( '<a onclick="return confirm(\'Are you sure to delete this order?\');" href="?page=%s&action=delete&id=%s">%s</a>', esc_html( $page ), esc_html( $item['id'] ), __( 'Delete', 'woo-cart-abandonment-recovery' ) ),
67
  );
68
 
69
  if ( WCF_CART_ABANDONED_ORDER === $item['order_status'] && ! $item['unsubscribed'] ) {
70
+ $actions['unsubscribe'] = sprintf( '<a onclick="return confirm(\'Are you sure to unsubscribe this user? \');" href="?page=%s&action=unsubscribe&id=%s">%s</a>', esc_html( $page ), esc_html( $item['id'] ), __( 'Unsubscribe', 'woo-cart-abandonment-recovery' ) );
71
 
72
  }
73
 
87
  * @return HTML
88
  */
89
  function column_time( $item ) {
90
+ $database_time = $item['time'];
91
+ $date_time = new DateTime( $database_time );
92
+ $date_time_format = get_option( 'date_format' ) . ' ' . get_option( 'time_format' );
93
+ $date_time = $date_time->format( $date_time_format );
94
 
95
+ return sprintf( '<span class="dashicons dashicons-clock"></span> %s', esc_html( $date_time ) );
 
 
 
 
96
  }
97
 
98
  /**
115
  */
116
  function get_bulk_actions() {
117
  $actions = array(
118
+ 'delete' => __( 'Delete', 'woo-cart-abandonment-recovery' ),
119
  );
120
  return $actions;
121
  }
181
  function get_columns() {
182
  $columns = array(
183
  'cb' => '<input type="checkbox" />',
184
+ 'nameSurname' => __( 'Name', 'woo-cart-abandonment-recovery' ),
185
+ 'email' => __( 'Email', 'woo-cart-abandonment-recovery' ),
186
+ 'cart_total' => __( 'Cart Total', 'woo-cart-abandonment-recovery' ),
187
+ 'order_status' => __( 'Order Status', 'woo-cart-abandonment-recovery' ),
188
+ 'time' => __( 'Time', 'woo-cart-abandonment-recovery' ),
189
  );
190
  return $columns;
191
  }
modules/cart-abandonment/class-cartflows-ca-cart-abandonment.php CHANGED
@@ -44,8 +44,6 @@ class Cartflows_Ca_Cart_Abandonment {
44
 
45
  if ( wcf_ca()->utils->is_cart_abandonment_tracking_enabled() && ! isset( $_COOKIE['wcf_ca_skip_track_data'] ) ) {
46
 
47
- add_action( 'woocommerce_update_cart_action_cart_updated', 'on_action_cart_updated', 20, 1 );
48
-
49
  // Add script to track the cart abandonment.
50
  add_action( 'woocommerce_after_checkout_form', array( $this, 'cart_abandonment_tracking_script' ) );
51
 
@@ -60,6 +58,7 @@ class Cartflows_Ca_Cart_Abandonment {
60
  // Delete the stored cart abandonment data once order gets created.
61
  add_action( 'woocommerce_new_order', array( $this, 'delete_cart_abandonment_data' ) );
62
  add_action( 'woocommerce_thankyou', array( $this, 'delete_cart_abandonment_data' ) );
 
63
 
64
  // Adding filter to restore the data if recreating abandonment order.
65
  add_filter( 'wp', array( $this, 'restore_cart_abandonment_data' ), 10 );
@@ -86,6 +85,46 @@ class Cartflows_Ca_Cart_Abandonment {
86
 
87
  }
88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  /**
90
  * Send preview emails.
91
  */
@@ -94,9 +133,9 @@ class Cartflows_Ca_Cart_Abandonment {
94
  check_ajax_referer( WCF_EMAIL_TEMPLATES_NONCE, 'security' );
95
  $mail_result = $this->send_email_templates( null, true );
96
  if ( $mail_result ) {
97
- wp_send_json_success( __( 'Mail has been sent successfully!', 'cartflows-ca' ) );
98
  } else {
99
- wp_send_json_error( __( 'Mail sending failed!', 'cartflows-ca' ) );
100
  }
101
  }
102
 
@@ -129,9 +168,14 @@ class Cartflows_Ca_Cart_Abandonment {
129
  */
130
  function cartflows_ca_update_order_status_action( $schedules ) {
131
 
 
 
 
 
 
132
  $schedules['every_fifteen_minutes'] = array(
133
- 'interval' => 15 * MINUTE_IN_SECONDS,
134
- 'display' => __( 'Every Fifteen Minutes', 'cartflows-ca' ),
135
  );
136
 
137
  return $schedules;
@@ -197,7 +241,7 @@ class Cartflows_Ca_Cart_Abandonment {
197
  array( 'unsubscribed' => true ),
198
  array( 'session_id' => $session_id )
199
  );
200
- wp_die( __( 'You have successfully unsubscribed from our email list.', 'cartflows-ca' ), __( 'Unsubscribed', 'cartflows-ca' ) );
201
 
202
  }
203
  }
@@ -354,8 +398,8 @@ class Cartflows_Ca_Cart_Abandonment {
354
  '_post_id' => get_the_ID(),
355
  '_show_gdpr_message' => ( wcf_ca()->utils->is_gdpr_enabled() && ! isset( $_COOKIE['wcf_ca_skip_track_data'] ) ),
356
  '_gdpr_message' => get_option( 'wcf_ca_gdpr_message' ),
357
- '_gdpr_nothanks_msg' => __( 'No Thanks', 'cartflows-ca' ),
358
- '_gdpr_after_no_thanks_msg' => __( 'You won\'t receive further emails from us, thank you!', 'cartflows-ca' ),
359
  'enable_ca_tracking' => true,
360
  );
361
 
@@ -770,7 +814,7 @@ class Cartflows_Ca_Cart_Abandonment {
770
  $this->trigger_zapier_webhook( $session_id, WCF_CART_COMPLETED_ORDER );
771
 
772
  $order = wc_get_order( $order_id );
773
- $note = __( 'CartFlows says: This order was abandoned & subsequently recovered.', 'cartflows-ca' );
774
  $order->add_order_note( $note );
775
  $order->save();
776
 
@@ -882,8 +926,8 @@ class Cartflows_Ca_Cart_Abandonment {
882
  function abandoned_cart_tracking_menu() {
883
 
884
  $parent_slug = 'woocommerce';
885
- $page_title = __( 'Cart Abandonment', 'cartflows-ca' );
886
- $menu_title = __( 'Cart Abandonment', 'cartflows-ca' );
887
  $capability = 'manage_options';
888
  $menu_slug = WCF_CA_PAGE_NAME;
889
  $callback = array( $this, 'render_abandoned_cart_tracking' );
@@ -916,7 +960,7 @@ class Cartflows_Ca_Cart_Abandonment {
916
  $deleted_row_count = empty( $ids ) ? 1 : count( $ids );
917
 
918
  $wcf_list_table->process_bulk_action();
919
- $message = '<div class="notice notice-success is-dismissible" id="message"><p>' . sprintf( __( 'Items deleted: %d', 'cartflows-ca' ), $deleted_row_count ) . '</p></div>'; // phpcs:ignore
920
  set_transient( 'wcf_ca_show_message', $message, 5 );
921
  if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
922
  wp_safe_redirect( $_SERVER['HTTP_REFERER'] );
@@ -933,7 +977,7 @@ class Cartflows_Ca_Cart_Abandonment {
933
  array( 'id' => $id )
934
  );
935
 
936
- $message = '<div class="notice notice-success is-dismissible" id="message"><p>' . sprintf( __( 'User unsubscribed successfully!', 'cartflows-ca' ) ) . '</p></div>'; // phpcs:ignore
937
  set_transient( 'wcf_ca_show_message', $message, 5 );
938
  if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
939
  wp_safe_redirect( $_SERVER['HTTP_REFERER'] );
@@ -990,7 +1034,7 @@ class Cartflows_Ca_Cart_Abandonment {
990
  $reports_btn_markup = '<style>.wrap{ position:relative;}</style>';
991
  $reports_btn_markup .= "<div class='wcf-reports-button-wrap'>";
992
  $reports_btn_markup .= "<button class='wcf-cart-abandonment-reports-popup button button-secondary'>";
993
- $reports_btn_markup .= esc_html( 'View Report', 'cartflows-ca' );
994
  $reports_btn_markup .= '</button>';
995
  $reports_btn_markup .= '</div>';
996
 
@@ -1128,7 +1172,7 @@ class Cartflows_Ca_Cart_Abandonment {
1128
  echo $active_reports;}
1129
  ?>
1130
  ">
1131
- <?php _e( 'Report', 'cartflows-ca' ); ?>
1132
  </a>
1133
 
1134
  <?php
@@ -1144,7 +1188,7 @@ class Cartflows_Ca_Cart_Abandonment {
1144
  echo $active_email_templates;}
1145
  ?>
1146
  ">
1147
- <?php _e( 'Follow-Up Emails', 'cartflows-ca' ); ?>
1148
  </a>
1149
 
1150
  <?php
@@ -1160,7 +1204,7 @@ class Cartflows_Ca_Cart_Abandonment {
1160
  echo $active_settings;}
1161
  ?>
1162
  ">
1163
- <?php _e( 'Settings', 'cartflows-ca' ); ?>
1164
  </a>
1165
 
1166
  </div>
@@ -1283,7 +1327,7 @@ class Cartflows_Ca_Cart_Abandonment {
1283
  ?>
1284
  <div class="notice notice-warning is-dismissible">
1285
  <p>
1286
- <?php echo __('Looks like abandonment tracking is disabled! Please enable it from <a href=' . esc_url($settings_url) . '> <strong>settings</strong></a>.', 'cartflows-ca'); // phpcs:ignore
1287
  ?>
1288
  </p>
1289
  </div>
@@ -1411,7 +1455,7 @@ class Cartflows_Ca_Cart_Abandonment {
1411
  $from_email_preview = get_option( 'wcf_ca_reply_email' );
1412
 
1413
  $user_first_name = ucfirst( $other_fields['wcf_first_name'] );
1414
- $user_first_name = $user_first_name ? $user_first_name : __( 'there', 'cartflows-ca' );
1415
  $user_last_name = ucfirst( $other_fields['wcf_last_name'] );
1416
  $user_full_name = trim( $user_first_name . ' ' . $user_last_name );
1417
 
@@ -1441,7 +1485,7 @@ class Cartflows_Ca_Cart_Abandonment {
1441
 
1442
  $current_time_stamp = $email_data->time;
1443
  $body_email_preview = str_replace( '{{cart.abandoned_date}}', $current_time_stamp, $body_email_preview );
1444
- $unsubscribe_element = '<a target="_blank" style="color: lightgray" href="' . $checkout_url . '&unsubscribe=true' . '">' . __( 'Unsubscribe', 'cartflows-ca' ) . '</a>';
1445
  $body_email_preview = str_replace( '{{cart.unsubscribe}}', $unsubscribe_element, $body_email_preview );
1446
  $body_email_preview = str_replace( 'http://{{cart.checkout_url}}', '{{cart.checkout_url}}', $body_email_preview );
1447
  $body_email_preview = str_replace( 'https://{{cart.checkout_url}}', '{{cart.checkout_url}}', $body_email_preview );
@@ -1549,7 +1593,7 @@ class Cartflows_Ca_Cart_Abandonment {
1549
  }
1550
 
1551
  $tr = $tr . '<tr style="color: #636363; border: 1px solid #e5e5e5;" align="center">
1552
- <td ' . $style . '><img class="demo_img" width="42" height="42" src=" ' . esc_url( get_the_post_thumbnail_url( $product->get_id() ) ) . ' "/></td>
1553
  <td ' . $style . '>' . $product->get_title() . '</td>
1554
  <td ' . $style . '> ' . $cart_item['quantity'] . ' </td>
1555
  <td ' . $style . '>' . $currency_symbol . number_format_i18n( $cart_item['line_total'], 2 ) . '</td>
@@ -1557,13 +1601,24 @@ class Cartflows_Ca_Cart_Abandonment {
1557
  </tr> ';
1558
  }
1559
 
 
 
 
 
 
 
 
 
 
 
 
1560
  return '<table align="left" cellpadding="10" cellspacing="0" style="float: none; border: 1px solid #e5e5e5;">
1561
  <tr align="center">
1562
- <th ' . $style . '>' . __( 'Item', 'cartflows-ca' ) . '</th>
1563
- <th ' . $style . '>' . __( 'Name', 'cartflows-ca' ) . '</th>
1564
- <th ' . $style . '>' . __( 'Quantity', 'cartflows-ca' ) . '</th>
1565
- <th ' . $style . '>' . __( 'Price', 'cartflows-ca' ) . '</th>
1566
- <th ' . $style . '>' . __( 'Line Subtotal', 'cartflows-ca' ) . '</th>
1567
  </tr> ' . $tr . '
1568
  </table>';
1569
 
@@ -1614,30 +1669,30 @@ class Cartflows_Ca_Cart_Abandonment {
1614
  return '<table align="left" cellspacing="0" class="widefat fixed striped posts">
1615
  <thead>
1616
  <tr align="center">
1617
- <th >' . __( 'Item', 'cartflows-ca' ) . '</th>
1618
- <th >' . __( 'Name', 'cartflows-ca' ) . '</th>
1619
- <th >' . __( 'Quantity', 'cartflows-ca' ) . '</th>
1620
- <th >' . __( 'Price', 'cartflows-ca' ) . '</th>
1621
- <th >' . __( 'Line Subtotal', 'cartflows-ca' ) . '</th>
1622
  </tr>
1623
  </thead>
1624
  <tbody>
1625
  ' . $tr . '
1626
  <tr align="center" id="wcf-ca-discount">
1627
- <td colspan="4" >' . __( 'Discount', 'cartflows-ca' ) . '</td>
1628
  <td>' . $currency_symbol . ( $discount ) . '</td>
1629
  </tr>
1630
  <tr align="center" id="wcf-ca-other">
1631
- <td colspan="4" >' . __( 'Other', 'cartflows-ca' ) . '</td>
1632
  <td>' . $currency_symbol . ( $tax ) . '</td>
1633
  </tr>
1634
 
1635
  <tr align="center" id="wcf-ca-shipping">
1636
- <td colspan="4" >' . __( 'Shipping', 'cartflows-ca' ) . '</td>
1637
  <td>' . $currency_symbol . number_format_i18n( $discount + ( $cart_total - $total ) - $tax, 2 ) . '</td>
1638
  </tr>
1639
  <tr align="center" id="wcf-ca-cart-total">
1640
- <td colspan="4" >' . __( 'Cart Total', 'cartflows-ca' ) . '</td>
1641
  <td>' . $currency_symbol . $cart_total . '</td>
1642
  </tr>
1643
  </tbody>
44
 
45
  if ( wcf_ca()->utils->is_cart_abandonment_tracking_enabled() && ! isset( $_COOKIE['wcf_ca_skip_track_data'] ) ) {
46
 
 
 
47
  // Add script to track the cart abandonment.
48
  add_action( 'woocommerce_after_checkout_form', array( $this, 'cart_abandonment_tracking_script' ) );
49
 
58
  // Delete the stored cart abandonment data once order gets created.
59
  add_action( 'woocommerce_new_order', array( $this, 'delete_cart_abandonment_data' ) );
60
  add_action( 'woocommerce_thankyou', array( $this, 'delete_cart_abandonment_data' ) );
61
+ add_action( 'woocommerce_order_status_changed', array( $this, 'wcf_ca_update_order_status' ), 999, 3 );
62
 
63
  // Adding filter to restore the data if recreating abandonment order.
64
  add_filter( 'wp', array( $this, 'restore_cart_abandonment_data' ), 10 );
85
 
86
  }
87
 
88
+
89
+ /**
90
+ * Update the Order status.
91
+ *
92
+ * @param integer $order_id order id.
93
+ * @param string $old_order_status old order status.
94
+ * @param string $new_order_status new order status.
95
+ */
96
+ public function wcf_ca_update_order_status( $order_id, $old_order_status, $new_order_status ) {
97
+
98
+ $acceptable_order_statuses = array( 'completed', 'processing' );
99
+
100
+ if ( $order_id && in_array( $new_order_status, $acceptable_order_statuses, true ) ) {
101
+
102
+ $order = wc_get_order( $order_id );
103
+
104
+ $order_email = $order->get_billing_email();
105
+ $captured_data = $this->get_captured_data_by_email( $order_email );
106
+
107
+ if ( $captured_data && is_object( $captured_data ) ) {
108
+ $capture_status = $captured_data->order_status;
109
+ global $wpdb;
110
+ $cart_abandonment_table = $wpdb->prefix . CARTFLOWS_CA_CART_ABANDONMENT_TABLE;
111
+
112
+ if ( ( WCF_CART_NORMAL_ORDER === $capture_status ) ) {
113
+ $wpdb->delete( $cart_abandonment_table, array( 'session_id' => sanitize_key( $captured_data->session_id ) ) );
114
+ }
115
+
116
+ if ( ( WCF_CART_ABANDONED_ORDER === $capture_status || WCF_CART_LOST_ORDER === $capture_status ) ) {
117
+ $wpdb->update( $cart_abandonment_table, array( 'order_status' => WCF_CART_COMPLETED_ORDER ), array( 'session_id' => sanitize_key( $captured_data->session_id ) ) );
118
+ $this->trigger_zapier_webhook( $captured_data->session_id, WCF_CART_COMPLETED_ORDER );
119
+ $note = __( 'This order was abandoned & subsequently recovered.', 'woo-cart-abandonment-recovery' );
120
+ $order->add_order_note( $note );
121
+ $order->save();
122
+ }
123
+ }
124
+ }
125
+
126
+ }
127
+
128
  /**
129
  * Send preview emails.
130
  */
133
  check_ajax_referer( WCF_EMAIL_TEMPLATES_NONCE, 'security' );
134
  $mail_result = $this->send_email_templates( null, true );
135
  if ( $mail_result ) {
136
+ wp_send_json_success( __( 'Mail has been sent successfully!', 'woo-cart-abandonment-recovery' ) );
137
  } else {
138
+ wp_send_json_error( __( 'Mail sending failed!', 'woo-cart-abandonment-recovery' ) );
139
  }
140
  }
141
 
168
  */
169
  function cartflows_ca_update_order_status_action( $schedules ) {
170
 
171
+ /**
172
+ * Add filter to change the cron interval time to uodate order status.
173
+ */
174
+ $cron_time = apply_filters( 'woo_ca_update_order_cron_interval', 15 );
175
+
176
  $schedules['every_fifteen_minutes'] = array(
177
+ 'interval' => $cron_time * MINUTE_IN_SECONDS,
178
+ 'display' => __( 'Every Fifteen Minutes', 'woo-cart-abandonment-recovery' ),
179
  );
180
 
181
  return $schedules;
241
  array( 'unsubscribed' => true ),
242
  array( 'session_id' => $session_id )
243
  );
244
+ wp_die( __( 'You have successfully unsubscribed from our email list.', 'woo-cart-abandonment-recovery' ), __( 'Unsubscribed', 'woo-cart-abandonment-recovery' ) );
245
 
246
  }
247
  }
398
  '_post_id' => get_the_ID(),
399
  '_show_gdpr_message' => ( wcf_ca()->utils->is_gdpr_enabled() && ! isset( $_COOKIE['wcf_ca_skip_track_data'] ) ),
400
  '_gdpr_message' => get_option( 'wcf_ca_gdpr_message' ),
401
+ '_gdpr_nothanks_msg' => __( 'No Thanks', 'woo-cart-abandonment-recovery' ),
402
+ '_gdpr_after_no_thanks_msg' => __( 'You won\'t receive further emails from us, thank you!', 'woo-cart-abandonment-recovery' ),
403
  'enable_ca_tracking' => true,
404
  );
405
 
814
  $this->trigger_zapier_webhook( $session_id, WCF_CART_COMPLETED_ORDER );
815
 
816
  $order = wc_get_order( $order_id );
817
+ $note = __( 'This order was abandoned & subsequently recovered.', 'woo-cart-abandonment-recovery' );
818
  $order->add_order_note( $note );
819
  $order->save();
820
 
926
  function abandoned_cart_tracking_menu() {
927
 
928
  $parent_slug = 'woocommerce';
929
+ $page_title = __( 'Cart Abandonment', 'woo-cart-abandonment-recovery' );
930
+ $menu_title = __( 'Cart Abandonment', 'woo-cart-abandonment-recovery' );
931
  $capability = 'manage_options';
932
  $menu_slug = WCF_CA_PAGE_NAME;
933
  $callback = array( $this, 'render_abandoned_cart_tracking' );
960
  $deleted_row_count = empty( $ids ) ? 1 : count( $ids );
961
 
962
  $wcf_list_table->process_bulk_action();
963
+ $message = '<div class="notice notice-success is-dismissible" id="message"><p>' . sprintf( __( 'Items deleted: %d', 'woo-cart-abandonment-recovery' ), $deleted_row_count ) . '</p></div>'; // phpcs:ignore
964
  set_transient( 'wcf_ca_show_message', $message, 5 );
965
  if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
966
  wp_safe_redirect( $_SERVER['HTTP_REFERER'] );
977
  array( 'id' => $id )
978
  );
979
 
980
+ $message = '<div class="notice notice-success is-dismissible" id="message"><p>' . sprintf( __( 'User unsubscribed successfully!', 'woo-cart-abandonment-recovery' ) ) . '</p></div>'; // phpcs:ignore
981
  set_transient( 'wcf_ca_show_message', $message, 5 );
982
  if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
983
  wp_safe_redirect( $_SERVER['HTTP_REFERER'] );
1034
  $reports_btn_markup = '<style>.wrap{ position:relative;}</style>';
1035
  $reports_btn_markup .= "<div class='wcf-reports-button-wrap'>";
1036
  $reports_btn_markup .= "<button class='wcf-cart-abandonment-reports-popup button button-secondary'>";
1037
+ $reports_btn_markup .= esc_html( 'View Report', 'woo-cart-abandonment-recovery' );
1038
  $reports_btn_markup .= '</button>';
1039
  $reports_btn_markup .= '</div>';
1040
 
1172
  echo $active_reports;}
1173
  ?>
1174
  ">
1175
+ <?php _e( 'Report', 'woo-cart-abandonment-recovery' ); ?>
1176
  </a>
1177
 
1178
  <?php
1188
  echo $active_email_templates;}
1189
  ?>
1190
  ">
1191
+ <?php _e( 'Follow-Up Emails', 'woo-cart-abandonment-recovery' ); ?>
1192
  </a>
1193
 
1194
  <?php
1204
  echo $active_settings;}
1205
  ?>
1206
  ">
1207
+ <?php _e( 'Settings', 'woo-cart-abandonment-recovery' ); ?>
1208
  </a>
1209
 
1210
  </div>
1327
  ?>
1328
  <div class="notice notice-warning is-dismissible">
1329
  <p>
1330
+ <?php echo __('Looks like abandonment tracking is disabled! Please enable it from <a href=' . esc_url($settings_url) . '> <strong>settings</strong></a>.', 'woo-cart-abandonment-recovery'); // phpcs:ignore
1331
  ?>
1332
  </p>
1333
  </div>
1455
  $from_email_preview = get_option( 'wcf_ca_reply_email' );
1456
 
1457
  $user_first_name = ucfirst( $other_fields['wcf_first_name'] );
1458
+ $user_first_name = $user_first_name ? $user_first_name : __( 'there', 'woo-cart-abandonment-recovery' );
1459
  $user_last_name = ucfirst( $other_fields['wcf_last_name'] );
1460
  $user_full_name = trim( $user_first_name . ' ' . $user_last_name );
1461
 
1485
 
1486
  $current_time_stamp = $email_data->time;
1487
  $body_email_preview = str_replace( '{{cart.abandoned_date}}', $current_time_stamp, $body_email_preview );
1488
+ $unsubscribe_element = '<a target="_blank" style="color: lightgray" href="' . $checkout_url . '&unsubscribe=true' . '">' . __( 'Unsubscribe', 'woo-cart-abandonment-recovery' ) . '</a>';
1489
  $body_email_preview = str_replace( '{{cart.unsubscribe}}', $unsubscribe_element, $body_email_preview );
1490
  $body_email_preview = str_replace( 'http://{{cart.checkout_url}}', '{{cart.checkout_url}}', $body_email_preview );
1491
  $body_email_preview = str_replace( 'https://{{cart.checkout_url}}', '{{cart.checkout_url}}', $body_email_preview );
1593
  }
1594
 
1595
  $tr = $tr . '<tr style="color: #636363; border: 1px solid #e5e5e5;" align="center">
1596
+ <td ' . $style . '><img class="demo_img" width="42" height="42" src="' . esc_url( get_the_post_thumbnail_url( $product->get_id() ) ) . '"></td>
1597
  <td ' . $style . '>' . $product->get_title() . '</td>
1598
  <td ' . $style . '> ' . $cart_item['quantity'] . ' </td>
1599
  <td ' . $style . '>' . $currency_symbol . number_format_i18n( $cart_item['line_total'], 2 ) . '</td>
1601
  </tr> ';
1602
  }
1603
 
1604
+ /**
1605
+ * Add filter to toggle the Cart Total row.
1606
+ */
1607
+ $enable_cart_total = apply_filters( 'woo_ca_recovery_enable_cart_total', false );
1608
+ if ( $enable_cart_total ) {
1609
+ $tr = $tr . '<tr ' . $style . ' align="center">
1610
+ <td colspan="4" ' . $style . '> ' . __( 'Cart Total ( Cart Total + Shipping + Tax )', 'woo-cart-abandonment-recovery' ) . ' </td>
1611
+ <td ' . $style . ' >' . $currency_symbol . number_format_i18n( $cart_total, 2 ) . '</td>
1612
+ </tr> ';
1613
+ }
1614
+
1615
  return '<table align="left" cellpadding="10" cellspacing="0" style="float: none; border: 1px solid #e5e5e5;">
1616
  <tr align="center">
1617
+ <th ' . $style . '>' . __( 'Item', 'woo-cart-abandonment-recovery' ) . '</th>
1618
+ <th ' . $style . '>' . __( 'Name', 'woo-cart-abandonment-recovery' ) . '</th>
1619
+ <th ' . $style . '>' . __( 'Quantity', 'woo-cart-abandonment-recovery' ) . '</th>
1620
+ <th ' . $style . '>' . __( 'Price', 'woo-cart-abandonment-recovery' ) . '</th>
1621
+ <th ' . $style . '>' . __( 'Line Subtotal', 'woo-cart-abandonment-recovery' ) . '</th>
1622
  </tr> ' . $tr . '
1623
  </table>';
1624
 
1669
  return '<table align="left" cellspacing="0" class="widefat fixed striped posts">
1670
  <thead>
1671
  <tr align="center">
1672
+ <th >' . __( 'Item', 'woo-cart-abandonment-recovery' ) . '</th>
1673
+ <th >' . __( 'Name', 'woo-cart-abandonment-recovery' ) . '</th>
1674
+ <th >' . __( 'Quantity', 'woo-cart-abandonment-recovery' ) . '</th>
1675
+ <th >' . __( 'Price', 'woo-cart-abandonment-recovery' ) . '</th>
1676
+ <th >' . __( 'Line Subtotal', 'woo-cart-abandonment-recovery' ) . '</th>
1677
  </tr>
1678
  </thead>
1679
  <tbody>
1680
  ' . $tr . '
1681
  <tr align="center" id="wcf-ca-discount">
1682
+ <td colspan="4" >' . __( 'Discount', 'woo-cart-abandonment-recovery' ) . '</td>
1683
  <td>' . $currency_symbol . ( $discount ) . '</td>
1684
  </tr>
1685
  <tr align="center" id="wcf-ca-other">
1686
+ <td colspan="4" >' . __( 'Other', 'woo-cart-abandonment-recovery' ) . '</td>
1687
  <td>' . $currency_symbol . ( $tax ) . '</td>
1688
  </tr>
1689
 
1690
  <tr align="center" id="wcf-ca-shipping">
1691
+ <td colspan="4" >' . __( 'Shipping', 'woo-cart-abandonment-recovery' ) . '</td>
1692
  <td>' . $currency_symbol . number_format_i18n( $discount + ( $cart_total - $total ) - $tax, 2 ) . '</td>
1693
  </tr>
1694
  <tr align="center" id="wcf-ca-cart-total">
1695
+ <td colspan="4" >' . __( 'Cart Total', 'woo-cart-abandonment-recovery' ) . '</td>
1696
  <td>' . $currency_symbol . $cart_total . '</td>
1697
  </tr>
1698
  </tbody>
modules/cart-abandonment/class-cartflows-ca-email-templates-table.php CHANGED
@@ -70,7 +70,7 @@ class Cartflows_Ca_Email_Templates_Table extends WP_List_Table {
70
  $this->base_url
71
  ),
72
  WCF_EMAIL_TEMPLATES_NONCE
73
- ) . '">' . __( 'Edit', 'cartflows-ca' ) . '</a>';
74
 
75
  $row_actions['delete'] = '<a onclick="return confirm(\'Are you sure to delete this email template?\');" href="' . wp_nonce_url(
76
  add_query_arg(
@@ -82,7 +82,7 @@ class Cartflows_Ca_Email_Templates_Table extends WP_List_Table {
82
  $this->base_url
83
  ),
84
  WCF_EMAIL_TEMPLATES_NONCE
85
- ) . '">' . __( 'Delete', 'cartflows-ca' ) . '</a>';
86
 
87
  $row_actions['clone'] = '<a href="' . wp_nonce_url(
88
  add_query_arg(
@@ -94,7 +94,7 @@ class Cartflows_Ca_Email_Templates_Table extends WP_List_Table {
94
  $this->base_url
95
  ),
96
  WCF_EMAIL_TEMPLATES_NONCE
97
- ) . '">' . __( 'Clone', 'cartflows-ca' ) . '</a>';
98
 
99
  return sprintf( '%s %s', esc_html( $item['template_name'] ), $this->row_actions( $row_actions ) );
100
  }
@@ -116,7 +116,7 @@ class Cartflows_Ca_Email_Templates_Table extends WP_List_Table {
116
  */
117
  function get_bulk_actions() {
118
  $actions = array(
119
- WCF_ACTION_EMAIL_TEMPLATES => __( 'Delete', 'cartflows-ca' ),
120
  );
121
  return $actions;
122
  }
@@ -180,10 +180,10 @@ class Cartflows_Ca_Email_Templates_Table extends WP_List_Table {
180
  function get_columns() {
181
  $columns = array(
182
  'cb' => '<input type="checkbox" />',
183
- 'template_name' => __( 'Template Name', 'cartflows-ca' ),
184
- 'email_subject' => __( 'Email Subject', 'cartflows-ca' ),
185
- 'trigger_time' => __( 'Trigger After', 'cartflows-ca' ),
186
- 'is_activated' => __( 'Is Activated?', 'cartflows-ca' ),
187
 
188
  );
189
  return $columns;
70
  $this->base_url
71
  ),
72
  WCF_EMAIL_TEMPLATES_NONCE
73
+ ) . '">' . __( 'Edit', 'woo-cart-abandonment-recovery' ) . '</a>';
74
 
75
  $row_actions['delete'] = '<a onclick="return confirm(\'Are you sure to delete this email template?\');" href="' . wp_nonce_url(
76
  add_query_arg(
82
  $this->base_url
83
  ),
84
  WCF_EMAIL_TEMPLATES_NONCE
85
+ ) . '">' . __( 'Delete', 'woo-cart-abandonment-recovery' ) . '</a>';
86
 
87
  $row_actions['clone'] = '<a href="' . wp_nonce_url(
88
  add_query_arg(
94
  $this->base_url
95
  ),
96
  WCF_EMAIL_TEMPLATES_NONCE
97
+ ) . '">' . __( 'Clone', 'woo-cart-abandonment-recovery' ) . '</a>';
98
 
99
  return sprintf( '%s %s', esc_html( $item['template_name'] ), $this->row_actions( $row_actions ) );
100
  }
116
  */
117
  function get_bulk_actions() {
118
  $actions = array(
119
+ WCF_ACTION_EMAIL_TEMPLATES => __( 'Delete', 'woo-cart-abandonment-recovery' ),
120
  );
121
  return $actions;
122
  }
180
  function get_columns() {
181
  $columns = array(
182
  'cb' => '<input type="checkbox" />',
183
+ 'template_name' => __( 'Template Name', 'woo-cart-abandonment-recovery' ),
184
+ 'email_subject' => __( 'Email Subject', 'woo-cart-abandonment-recovery' ),
185
+ 'trigger_time' => __( 'Trigger After', 'woo-cart-abandonment-recovery' ),
186
+ 'is_activated' => __( 'Is Activated?', 'woo-cart-abandonment-recovery' ),
187
 
188
  );
189
  return $columns;
modules/cart-abandonment/class-cartflows-ca-email-templates.php CHANGED
@@ -183,7 +183,7 @@ class Cartflows_Ca_Email_Templates {
183
  <div id="message" class="notice notice-success is-dismissible">
184
  <p>
185
  <strong>
186
- <?php _e( 'The Email Template has been successfully added.', 'cartflows-ca' ); ?>
187
  </strong>
188
  </p>
189
  </div>
@@ -193,7 +193,7 @@ class Cartflows_Ca_Email_Templates {
193
  <div id="message" class="notice notice-success is-dismissible">
194
  <p>
195
  <strong>
196
- <?php _e( 'The Email Template has been cloned successfully.', 'cartflows-ca' ); ?>
197
  </strong>
198
  </p>
199
  </div>
@@ -203,7 +203,7 @@ class Cartflows_Ca_Email_Templates {
203
  <div id="message" class="notice notice-success is-dismissible">
204
  <p>
205
  <strong>
206
- <?php _e( 'The Email Template has been successfully deleted.', 'cartflows-ca' ); ?>
207
  </strong>
208
  </p>
209
  </div>
@@ -212,7 +212,7 @@ class Cartflows_Ca_Email_Templates {
212
  <div id="message" class="notice notice-success is-dismissible">
213
  <p>
214
  <strong>
215
- <?php _e( 'The Email Template has been successfully updated.', 'cartflows-ca' ); ?>
216
  </strong>
217
  </p>
218
  </div>
@@ -222,7 +222,7 @@ class Cartflows_Ca_Email_Templates {
222
  <div id="message" class="notice notice-success is-dismissible">
223
  <p>
224
  <strong>
225
- <?php _e( 'Default Email Templates has been restored successfully.', 'cartflows-ca' ); ?>
226
  </strong>
227
  </p>
228
  </div>
@@ -382,13 +382,13 @@ class Cartflows_Ca_Email_Templates {
382
  ?>
383
  <div id="poststuff">
384
  <div> <!-- <div class="postbox" > -->
385
- <h3><?php _e($display_message, 'cartflows-ca'); // phpcs:ignore ?></h3>
386
  <hr/>
387
  <div>
388
  <table class="form-table" id="addedit_template">
389
  <tr>
390
  <th>
391
- <label for="wcf_email_subject"><b><?php _e( 'Activate Template now?', 'cartflows-ca' ); ?></b></label>
392
  </th>
393
  <td>
394
  <?php
@@ -408,7 +408,7 @@ class Cartflows_Ca_Email_Templates {
408
 
409
  <tr>
410
  <th>
411
- <label for="wcf_template_name"><b><?php _e( 'Template Name:', 'cartflows-ca' ); ?></b></label>
412
  </th>
413
  <td>
414
  <?php
@@ -423,7 +423,7 @@ class Cartflows_Ca_Email_Templates {
423
 
424
  <tr>
425
  <th>
426
- <label for="wcf_email_subject"><b><?php _e( 'Email Subject:', 'cartflows-ca' ); ?></b></label>
427
  </th>
428
  <td>
429
  <?php
@@ -438,7 +438,7 @@ class Cartflows_Ca_Email_Templates {
438
 
439
  <tr>
440
  <th>
441
- <label for="wcf_email_body"><b><?php _e( 'Email Body:', 'cartflows-ca' ); ?></b></label>
442
  </th>
443
  <td>
444
  <?php
@@ -467,7 +467,7 @@ class Cartflows_Ca_Email_Templates {
467
 
468
  <tr>
469
  <th>
470
- <label for="wcf_override_global_coupon"><b><?php _e( 'Create Coupon', 'cartflows-ca' ); ?></b></label>
471
  </th>
472
  <td>
473
  <?php
@@ -487,7 +487,7 @@ class Cartflows_Ca_Email_Templates {
487
 
488
  <tr>
489
  <th>
490
- <label for="wcf_email_discount_type"><b><?php _e( 'Discount Type', 'cartflows-ca' ); ?></b></label>
491
  </th>
492
  <td>
493
  <?php
@@ -519,7 +519,7 @@ class Cartflows_Ca_Email_Templates {
519
 
520
  <tr>
521
  <th>
522
- <label for="wcf_email_discount_amount"><b><?php _e( 'Coupon Amount', 'cartflows-ca' ); ?></b></label>
523
  </th>
524
  <td>
525
  <?php
@@ -537,7 +537,7 @@ class Cartflows_Ca_Email_Templates {
537
 
538
  <tr>
539
  <th>
540
- <label for="wcf_email_coupon_expiry_date"><b><?php _e( 'Coupon expiry date', 'cartflows-ca' ); ?></b></label>
541
  </th>
542
  <td>
543
  <?php
@@ -574,7 +574,7 @@ class Cartflows_Ca_Email_Templates {
574
 
575
  <tr>
576
  <th>
577
- <label for="wcf_email_subject"><b><?php _e( 'Send This Email', 'cartflows-ca' ); ?></b></label>
578
  </th>
579
  <td>
580
  <?php
@@ -607,7 +607,7 @@ class Cartflows_Ca_Email_Templates {
607
  ?>
608
  </select>
609
  <span class="description">
610
- <?php _e( 'after cart is abandoned.', 'cartflows-ca' ); ?>
611
  </span>
612
 
613
 
@@ -617,7 +617,7 @@ class Cartflows_Ca_Email_Templates {
617
  <tr>
618
  <?php $current_user = wp_get_current_user(); ?>
619
  <th>
620
- <label for="wcf_email_preview"><b><?php _e( 'Send Test Email To:', 'cartflows-ca' ); ?></b></label>
621
  </th>
622
  <td>
623
  <input class="wcf-ca-trigger-input" type="text" id="wcf_send_test_email" name="send_test_email" value="<?php echo $current_user->user_email; ?>" class="wcf-ca-trigger-input">
@@ -931,10 +931,10 @@ class Cartflows_Ca_Email_Templates {
931
  ?>
932
  <div class="wcf-ca-report-btn">
933
  <div class="wcf-ca-left-report-field-group">
934
- <a style="cursor: pointer" href="<?php echo $add_new_template_url; ?>" class="button-secondary"><?php _e( 'Create New Template', 'cartflows-ca' ); ?></a>
935
  </div>
936
  <div class="wcf-ca-right-report-field-group">
937
- <a onclick="return confirm('Are you sure to restore email templates?');" style="cursor: pointer" href="<?php echo $restore_template_url; ?>" class="button-secondary"><?php _e( ' Restore Default Templates', 'cartflows-ca' ); ?></a>
938
  </div>
939
  </div>
940
  <?php
183
  <div id="message" class="notice notice-success is-dismissible">
184
  <p>
185
  <strong>
186
+ <?php _e( 'The Email Template has been successfully added.', 'woo-cart-abandonment-recovery' ); ?>
187
  </strong>
188
  </p>
189
  </div>
193
  <div id="message" class="notice notice-success is-dismissible">
194
  <p>
195
  <strong>
196
+ <?php _e( 'The Email Template has been cloned successfully.', 'woo-cart-abandonment-recovery' ); ?>
197
  </strong>
198
  </p>
199
  </div>
203
  <div id="message" class="notice notice-success is-dismissible">
204
  <p>
205
  <strong>
206
+ <?php _e( 'The Email Template has been successfully deleted.', 'woo-cart-abandonment-recovery' ); ?>
207
  </strong>
208
  </p>
209
  </div>
212
  <div id="message" class="notice notice-success is-dismissible">
213
  <p>
214
  <strong>
215
+ <?php _e( 'The Email Template has been successfully updated.', 'woo-cart-abandonment-recovery' ); ?>
216
  </strong>
217
  </p>
218
  </div>
222
  <div id="message" class="notice notice-success is-dismissible">
223
  <p>
224
  <strong>
225
+ <?php _e( 'Default Email Templates has been restored successfully.', 'woo-cart-abandonment-recovery' ); ?>
226
  </strong>
227
  </p>
228
  </div>
382
  ?>
383
  <div id="poststuff">
384
  <div> <!-- <div class="postbox" > -->
385
+ <h3><?php _e($display_message, 'woo-cart-abandonment-recovery'); // phpcs:ignore ?></h3>
386
  <hr/>
387
  <div>
388
  <table class="form-table" id="addedit_template">
389
  <tr>
390
  <th>
391
+ <label for="wcf_email_subject"><b><?php _e( 'Activate Template now?', 'woo-cart-abandonment-recovery' ); ?></b></label>
392
  </th>
393
  <td>
394
  <?php
408
 
409
  <tr>
410
  <th>
411
+ <label for="wcf_template_name"><b><?php _e( 'Template Name:', 'woo-cart-abandonment-recovery' ); ?></b></label>
412
  </th>
413
  <td>
414
  <?php
423
 
424
  <tr>
425
  <th>
426
+ <label for="wcf_email_subject"><b><?php _e( 'Email Subject:', 'woo-cart-abandonment-recovery' ); ?></b></label>
427
  </th>
428
  <td>
429
  <?php
438
 
439
  <tr>
440
  <th>
441
+ <label for="wcf_email_body"><b><?php _e( 'Email Body:', 'woo-cart-abandonment-recovery' ); ?></b></label>
442
  </th>
443
  <td>
444
  <?php
467
 
468
  <tr>
469
  <th>
470
+ <label for="wcf_override_global_coupon"><b><?php _e( 'Create Coupon', 'woo-cart-abandonment-recovery' ); ?></b></label>
471
  </th>
472
  <td>
473
  <?php
487
 
488
  <tr>
489
  <th>
490
+ <label for="wcf_email_discount_type"><b><?php _e( 'Discount Type', 'woo-cart-abandonment-recovery' ); ?></b></label>
491
  </th>
492
  <td>
493
  <?php
519
 
520
  <tr>
521
  <th>
522
+ <label for="wcf_email_discount_amount"><b><?php _e( 'Coupon Amount', 'woo-cart-abandonment-recovery' ); ?></b></label>
523
  </th>
524
  <td>
525
  <?php
537
 
538
  <tr>
539
  <th>
540
+ <label for="wcf_email_coupon_expiry_date"><b><?php _e( 'Coupon expiry date', 'woo-cart-abandonment-recovery' ); ?></b></label>
541
  </th>
542
  <td>
543
  <?php
574
 
575
  <tr>
576
  <th>
577
+ <label for="wcf_email_subject"><b><?php _e( 'Send This Email', 'woo-cart-abandonment-recovery' ); ?></b></label>
578
  </th>
579
  <td>
580
  <?php
607
  ?>
608
  </select>
609
  <span class="description">
610
+ <?php _e( 'after cart is abandoned.', 'woo-cart-abandonment-recovery' ); ?>
611
  </span>
612
 
613
 
617
  <tr>
618
  <?php $current_user = wp_get_current_user(); ?>
619
  <th>
620
+ <label for="wcf_email_preview"><b><?php _e( 'Send Test Email To:', 'woo-cart-abandonment-recovery' ); ?></b></label>
621
  </th>
622
  <td>
623
  <input class="wcf-ca-trigger-input" type="text" id="wcf_send_test_email" name="send_test_email" value="<?php echo $current_user->user_email; ?>" class="wcf-ca-trigger-input">
931
  ?>
932
  <div class="wcf-ca-report-btn">
933
  <div class="wcf-ca-left-report-field-group">
934
+ <a style="cursor: pointer" href="<?php echo $add_new_template_url; ?>" class="button-secondary"><?php _e( 'Create New Template', 'woo-cart-abandonment-recovery' ); ?></a>
935
  </div>
936
  <div class="wcf-ca-right-report-field-group">
937
+ <a onclick="return confirm('Are you sure to restore email templates?');" style="cursor: pointer" href="<?php echo $restore_template_url; ?>" class="button-secondary"><?php _e( ' Restore Default Templates', 'woo-cart-abandonment-recovery' ); ?></a>
938
  </div>
939
  </div>
940
  <?php
modules/cart-abandonment/includes/admin/cartflows-ca-single-report-details.php CHANGED
@@ -35,7 +35,7 @@
35
 
36
  <div class="wcf-ca-report-btn" style="padding: 0px">
37
  <div class="wcf-ca-left-report-field-group">
38
- <h2> <?php _e( 'Email Details:', 'cartflows-ca' ); ?> </h2>
39
  </div>
40
  <div class="wcf-ca-right-report-field-group">
41
 
@@ -67,7 +67,7 @@
67
  </div>
68
 
69
  <?php if ( empty( $scheduled_emails ) ) : ?>
70
- <div style="text-align: center;"><strong> <?php _e( ' No Email Scheduled.', 'cartflows-ca' ); ?></strong>
71
  </div>
72
  <?php else : ?>
73
  <table cellpadding="15" cellspacing="0" class="wcf-table wcf-table-striped fixed posts">
@@ -107,19 +107,19 @@
107
  case 0:
108
  if ( $details->unsubscribed ) {
109
  $icon = '<span class="dashicons dashicons-minus"></span>';
110
- $title = __( 'The email has been unsubscribed and won\'t be sent further.', 'cartflows-ca' );
111
  } else {
112
  $icon = '<span class="dashicons dashicons-no"></span>';
113
- $title = __( 'Email is in the queue and will be sent at the scheduled time.', 'cartflows-ca' );
114
  }
115
  break;
116
  case 1:
117
  $icon = '<span class="dashicons dashicons-yes wp-ui-text-highlight" ></span>';
118
- $title = __( 'The email has been sent.', 'cartflows-ca' );
119
  break;
120
  case -1:
121
  $icon = '<span class="dashicons dashicons-dismiss wp-ui-text-highlight" ></span>';
122
- $title = __( 'The email has been unscheduled due to the complete order and won\'t be sent further.', 'cartflows-ca' );
123
  break;
124
  }
125
 
@@ -152,11 +152,11 @@
152
 
153
  <div class="wcf-ca-report-btn" style="padding: 0px">
154
  <div class="wcf-ca-left-report-field-group">
155
- <h2> <?php _e( 'User Address Details:', 'cartflows-ca' ); ?> </h2>
156
  </div>
157
  <div class="wcf-ca-right-report-field-group">
158
  <?php if ( $details->unsubscribed ) : ?>
159
- <span class="wcf-ca-tag"> <?php _e( 'Unsubscribed', 'cartflows-ca' ); ?> </span>
160
  <?php endif; ?>
161
 
162
  <span class="wcf-ca-tag"> <?php echo ucfirst( $details->order_status ); ?> </span>
@@ -164,61 +164,61 @@
164
  </div>
165
 
166
  <div class="wcf-ca-user-address wcf-pull-left">
167
- <h3> <?php _e( 'Billing Address', 'cartflows-ca' ); ?> </h3>
168
- <p><strong> <?php _e( 'Name', 'cartflows-ca' ); ?> </strong>
169
  <?php echo $user_details->wcf_first_name . ' ' . $user_details->wcf_last_name; ?> </p>
170
  <p>
171
- <strong> <?php _e( 'Email address', 'cartflows-ca' ); ?> </strong>
172
  <a href="mailto:<?php echo( $details->email ); ?>"><?php echo( $details->email ); ?></a>
173
  </p>
174
 
175
  <p>
176
- <strong> <?php _e( 'Phone', 'cartflows-ca' ); ?> </strong>
177
  <a href="tel:<?php echo( $user_details->wcf_phone_number ); ?>"><?php echo( $user_details->wcf_phone_number ); ?></a>
178
  </p>
179
 
180
  <p>
181
- <strong> <?php _e( 'Address 1:', 'cartflows-ca' ); ?> </strong> <?php echo $user_details->wcf_billing_address_1; ?>
182
  </p>
183
  <p>
184
- <strong> <?php _e( 'Address 2:', 'cartflows-ca' ); ?> </strong> <?php echo $user_details->wcf_billing_address_2; ?>
185
  </p>
186
  <p>
187
- <strong> <?php _e( 'Country, City:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_location ); ?>
188
  </p>
189
  <p>
190
- <strong> <?php _e( 'State:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_billing_state ); ?>
191
  </p>
192
 
193
  <p>
194
- <strong> <?php _e( 'Postcode:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_billing_postcode ); ?>
195
  </p>
196
  </div>
197
 
198
  <div class="wcf-ca-user-address wcf-pull-left">
199
- <h3> <?php _e( 'Shipping Address', 'cartflows-ca' ); ?> </h3>
200
  <p>
201
- <strong> <?php _e( 'Address 1:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_address_1 ); ?>
202
  </p>
203
  <p>
204
- <strong> <?php _e( 'Address 2:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_address_2 ); ?>
205
  </p>
206
  <p>
207
- <strong> <?php _e( 'City:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_city ); ?>
208
  </p>
209
  <p>
210
- <strong> <?php _e( 'State:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_state ); ?>
211
  </p>
212
  <p>
213
- <strong> <?php _e( 'Country:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_country ); ?>
214
  </p>
215
  <p>
216
- <strong> <?php _e( 'Postcode:', 'cartflows-ca' ); ?> </strong> <?php echo( $user_details->wcf_shipping_postcode ); ?>
217
  </p>
218
  <p>
219
  <?php $cart_abandonment = Cartflows_Ca_Cart_Abandonment::get_instance(); ?>
220
  <strong> <a target="_blank" href=" <?php echo $cart_abandonment->get_checkout_url( $details->checkout_id, $details->session_id ); ?> ">
221
- <?php _e( 'Checkout Link', 'cartflows-ca' ); ?>
222
  </a>
223
  </strong>
224
  </p>
@@ -233,7 +233,7 @@
233
  <div class="wcf-ca-panel">
234
  <div class="wcf-ca-column wcf-ca-column-one">
235
  <div class="wcf-ca-user-order">
236
- <h2> <?php _e( 'User Order Details:', 'cartflows-ca' ); ?> </h2>
237
  <?php echo( $this->get_admin_product_block( $details->cart_contents, $details->cart_total ) ); ?>
238
  </div>
239
  </div>
35
 
36
  <div class="wcf-ca-report-btn" style="padding: 0px">
37
  <div class="wcf-ca-left-report-field-group">
38
+ <h2> <?php _e( 'Email Details:', 'woo-cart-abandonment-recovery' ); ?> </h2>
39
  </div>
40
  <div class="wcf-ca-right-report-field-group">
41
 
67
  </div>
68
 
69
  <?php if ( empty( $scheduled_emails ) ) : ?>
70
+ <div style="text-align: center;"><strong> <?php _e( ' No Email Scheduled.', 'woo-cart-abandonment-recovery' ); ?></strong>
71
  </div>
72
  <?php else : ?>
73
  <table cellpadding="15" cellspacing="0" class="wcf-table wcf-table-striped fixed posts">
107
  case 0:
108
  if ( $details->unsubscribed ) {
109
  $icon = '<span class="dashicons dashicons-minus"></span>';
110
+ $title = __( 'The email has been unsubscribed and won\'t be sent further.', 'woo-cart-abandonment-recovery' );
111
  } else {
112
  $icon = '<span class="dashicons dashicons-no"></span>';
113
+ $title = __( 'Email is in the queue and will be sent at the scheduled time.', 'woo-cart-abandonment-recovery' );
114
  }
115
  break;
116
  case 1:
117
  $icon = '<span class="dashicons dashicons-yes wp-ui-text-highlight" ></span>';
118
+ $title = __( 'The email has been sent.', 'woo-cart-abandonment-recovery' );
119
  break;
120
  case -1:
121
  $icon = '<span class="dashicons dashicons-dismiss wp-ui-text-highlight" ></span>';
122
+ $title = __( 'The email has been unscheduled due to the complete order and won\'t be sent further.', 'woo-cart-abandonment-recovery' );
123
  break;
124
  }
125
 
152
 
153
  <div class="wcf-ca-report-btn" style="padding: 0px">
154
  <div class="wcf-ca-left-report-field-group">
155
+ <h2> <?php _e( 'User Address Details:', 'woo-cart-abandonment-recovery' ); ?> </h2>
156
  </div>
157
  <div class="wcf-ca-right-report-field-group">
158
  <?php if ( $details->unsubscribed ) : ?>
159
+ <span class="wcf-ca-tag"> <?php _e( 'Unsubscribed', 'woo-cart-abandonment-recovery' ); ?> </span>
160
  <?php endif; ?>
161
 
162
  <span class="wcf-ca-tag"> <?php echo ucfirst( $details->order_status ); ?> </span>
164
  </div>
165
 
166
  <div class="wcf-ca-user-address wcf-pull-left">
167
+ <h3> <?php _e( 'Billing Address', 'woo-cart-abandonment-recovery' ); ?> </h3>
168
+ <p><strong> <?php _e( 'Name', 'woo-cart-abandonment-recovery' ); ?> </strong>
169
  <?php echo $user_details->wcf_first_name . ' ' . $user_details->wcf_last_name; ?> </p>
170
  <p>
171
+ <strong> <?php _e( 'Email address', 'woo-cart-abandonment-recovery' ); ?> </strong>
172
  <a href="mailto:<?php echo( $details->email ); ?>"><?php echo( $details->email ); ?></a>
173
  </p>
174
 
175
  <p>
176
+ <strong> <?php _e( 'Phone', 'woo-cart-abandonment-recovery' ); ?> </strong>
177
  <a href="tel:<?php echo( $user_details->wcf_phone_number ); ?>"><?php echo( $user_details->wcf_phone_number ); ?></a>
178
  </p>
179
 
180
  <p>
181
+ <strong> <?php _e( 'Address 1:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo $user_details->wcf_billing_address_1; ?>
182
  </p>
183
  <p>
184
+ <strong> <?php _e( 'Address 2:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo $user_details->wcf_billing_address_2; ?>
185
  </p>
186
  <p>
187
+ <strong> <?php _e( 'Country, City:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_location ); ?>
188
  </p>
189
  <p>
190
+ <strong> <?php _e( 'State:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_billing_state ); ?>
191
  </p>
192
 
193
  <p>
194
+ <strong> <?php _e( 'Postcode:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_billing_postcode ); ?>
195
  </p>
196
  </div>
197
 
198
  <div class="wcf-ca-user-address wcf-pull-left">
199
+ <h3> <?php _e( 'Shipping Address', 'woo-cart-abandonment-recovery' ); ?> </h3>
200
  <p>
201
+ <strong> <?php _e( 'Address 1:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_shipping_address_1 ); ?>
202
  </p>
203
  <p>
204
+ <strong> <?php _e( 'Address 2:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_shipping_address_2 ); ?>
205
  </p>
206
  <p>
207
+ <strong> <?php _e( 'City:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_shipping_city ); ?>
208
  </p>
209
  <p>
210
+ <strong> <?php _e( 'State:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_shipping_state ); ?>
211
  </p>
212
  <p>
213
+ <strong> <?php _e( 'Country:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_shipping_country ); ?>
214
  </p>
215
  <p>
216
+ <strong> <?php _e( 'Postcode:', 'woo-cart-abandonment-recovery' ); ?> </strong> <?php echo( $user_details->wcf_shipping_postcode ); ?>
217
  </p>
218
  <p>
219
  <?php $cart_abandonment = Cartflows_Ca_Cart_Abandonment::get_instance(); ?>
220
  <strong> <a target="_blank" href=" <?php echo $cart_abandonment->get_checkout_url( $details->checkout_id, $details->session_id ); ?> ">
221
+ <?php _e( 'Checkout Link', 'woo-cart-abandonment-recovery' ); ?>
222
  </a>
223
  </strong>
224
  </p>
233
  <div class="wcf-ca-panel">
234
  <div class="wcf-ca-column wcf-ca-column-one">
235
  <div class="wcf-ca-user-order">
236
+ <h2> <?php _e( 'User Order Details:', 'woo-cart-abandonment-recovery' ); ?> </h2>
237
  <?php echo( $this->get_admin_product_block( $details->cart_contents, $details->cart_total ) ); ?>
238
  </div>
239
  </div>
modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-reports.php CHANGED
@@ -43,26 +43,26 @@
43
 
44
  <div class="wcf-ca-ibox">
45
  <div class="wcf-ca-ibox-title">
46
- <h3> <?php _e( 'Recoverable Orders', 'cartflows-ca' ); ?> </h3>
47
  </div>
48
  <div class="wcf-ca-ibox-content">
49
  <h1> <?php echo $abandoned_report['no_of_orders']; ?> </h1>
50
- <small> <?php _e( 'Total Recoverable Orders.', 'cartflows-ca' ); ?> </small>
51
  </div>
52
  </div>
53
 
54
  <div class="wcf-ca-ibox">
55
- <div class="wcf-ca-ibox-title"><h3><?php _e( 'Recovered Orders', 'cartflows-ca' ); ?></h3></div>
56
  <div class="wcf-ca-ibox-content"><h1><?php echo $recovered_report['no_of_orders']; ?></h1>
57
- <small> <?php _e( 'Total Recovered Orders.', 'cartflows-ca' ); ?> </small>
58
  </div>
59
  </div>
60
 
61
  <div class="wcf-ca-ibox">
62
- <div class="wcf-ca-ibox-title"><h3><?php _e( 'Lost Orders', 'cartflows-ca' ); ?></h3></div>
63
  <div class="wcf-ca-ibox-content"><h1
64
  ><?php echo $lost_report['no_of_orders']; ?></h1>
65
- <small> <?php _e( 'Total Lost Orders.', 'cartflows-ca' ); ?> </small>
66
  </div>
67
  </div>
68
 
@@ -71,30 +71,30 @@
71
  <div class="wcf-ca-grid-container">
72
 
73
  <div class="wcf-ca-ibox">
74
- <div class="wcf-ca-ibox-title"><h3> <?php _e( 'Recoverable Revenue', 'cartflows-ca' ); ?> </h3></div>
75
  <div class="wcf-ca-ibox-content">
76
  <h1>
77
  <?php echo $currency_symbol . number_format_i18n( $abandoned_report['revenue'], 2 ); ?>
78
  </h1>
79
- <small> <?php _e( 'Total Recoverable Revenue.', 'cartflows-ca' ); ?> </small>
80
  </div>
81
  </div>
82
 
83
  <div class="wcf-ca-ibox">
84
- <div class="wcf-ca-ibox-title"><h3><?php _e( 'Recovered Revenue', 'cartflows-ca' ); ?></h3></div>
85
  <div class="wcf-ca-ibox-content"><h1>
86
  <?php
87
  echo $currency_symbol . number_format_i18n( $recovered_report['revenue'], 2 );
88
  ?>
89
  </h1>
90
- <small> <?php _e( 'Total Recovered Revenue.', 'cartflows-ca' ); ?> </small>
91
  </div>
92
  </div>
93
 
94
  <div class="wcf-ca-ibox">
95
- <div class="wcf-ca-ibox-title"><h3> <?php _e( 'Recovery Rate', 'cartflows-ca' ); ?> </h3></div>
96
  <div class="wcf-ca-ibox-content"><h1><?php echo $conversion_rate . '%'; ?></h1>
97
- <small><?php _e( 'Total Percentage Of Recovered Orders After Abandonment.', 'cartflows-ca' ); ?> </small>
98
  </div>
99
  </div>
100
 
@@ -132,7 +132,7 @@ if ( count( $wcf_list_table->items ) ) {
132
  <?php
133
  } else {
134
 
135
- echo '<div> <strong> ' . __( 'No Orders Found.', 'cartflows-ca' ) . '</strong> </div>';
136
 
137
  }
138
 
43
 
44
  <div class="wcf-ca-ibox">
45
  <div class="wcf-ca-ibox-title">
46
+ <h3> <?php _e( 'Recoverable Orders', 'woo-cart-abandonment-recovery' ); ?> </h3>
47
  </div>
48
  <div class="wcf-ca-ibox-content">
49
  <h1> <?php echo $abandoned_report['no_of_orders']; ?> </h1>
50
+ <small> <?php _e( 'Total Recoverable Orders.', 'woo-cart-abandonment-recovery' ); ?> </small>
51
  </div>
52
  </div>
53
 
54
  <div class="wcf-ca-ibox">
55
+ <div class="wcf-ca-ibox-title"><h3><?php _e( 'Recovered Orders', 'woo-cart-abandonment-recovery' ); ?></h3></div>
56
  <div class="wcf-ca-ibox-content"><h1><?php echo $recovered_report['no_of_orders']; ?></h1>
57
+ <small> <?php _e( 'Total Recovered Orders.', 'woo-cart-abandonment-recovery' ); ?> </small>
58
  </div>
59
  </div>
60
 
61
  <div class="wcf-ca-ibox">
62
+ <div class="wcf-ca-ibox-title"><h3><?php _e( 'Lost Orders', 'woo-cart-abandonment-recovery' ); ?></h3></div>
63
  <div class="wcf-ca-ibox-content"><h1
64
  ><?php echo $lost_report['no_of_orders']; ?></h1>
65
+ <small> <?php _e( 'Total Lost Orders.', 'woo-cart-abandonment-recovery' ); ?> </small>
66
  </div>
67
  </div>
68
 
71
  <div class="wcf-ca-grid-container">
72
 
73
  <div class="wcf-ca-ibox">
74
+ <div class="wcf-ca-ibox-title"><h3> <?php _e( 'Recoverable Revenue', 'woo-cart-abandonment-recovery' ); ?> </h3></div>
75
  <div class="wcf-ca-ibox-content">
76
  <h1>
77
  <?php echo $currency_symbol . number_format_i18n( $abandoned_report['revenue'], 2 ); ?>
78
  </h1>
79
+ <small> <?php _e( 'Total Recoverable Revenue.', 'woo-cart-abandonment-recovery' ); ?> </small>
80
  </div>
81
  </div>
82
 
83
  <div class="wcf-ca-ibox">
84
+ <div class="wcf-ca-ibox-title"><h3><?php _e( 'Recovered Revenue', 'woo-cart-abandonment-recovery' ); ?></h3></div>
85
  <div class="wcf-ca-ibox-content"><h1>
86
  <?php
87
  echo $currency_symbol . number_format_i18n( $recovered_report['revenue'], 2 );
88
  ?>
89
  </h1>
90
+ <small> <?php _e( 'Total Recovered Revenue.', 'woo-cart-abandonment-recovery' ); ?> </small>
91
  </div>
92
  </div>
93
 
94
  <div class="wcf-ca-ibox">
95
+ <div class="wcf-ca-ibox-title"><h3> <?php _e( 'Recovery Rate', 'woo-cart-abandonment-recovery' ); ?> </h3></div>
96
  <div class="wcf-ca-ibox-content"><h1><?php echo $conversion_rate . '%'; ?></h1>
97
+ <small><?php _e( 'Total Percentage Of Recovered Orders After Abandonment.', 'woo-cart-abandonment-recovery' ); ?> </small>
98
  </div>
99
  </div>
100
 
132
  <?php
133
  } else {
134
 
135
+ echo '<div> <strong> ' . __( 'No Orders Found.', 'woo-cart-abandonment-recovery' ) . '</strong> </div>';
136
 
137
  }
138
 
modules/cart-abandonment/includes/admin/cartflows-cart-abandonment-tabs.php CHANGED
@@ -7,7 +7,7 @@
7
 
8
  ?>
9
  <div class="wrap">
10
- <h1 id="wcf_cart_abandonment_tracking_table"><?php echo __( 'WooCommerce Cart Abandonment Recovery ', 'cartflows-ca' ); ?></h1>
11
  <?php
12
 
13
  $action = filter_input( INPUT_GET, 'action', FILTER_SANITIZE_STRING );
7
 
8
  ?>
9
  <div class="wrap">
10
+ <h1 id="wcf_cart_abandonment_tracking_table"><?php echo __( 'WooCommerce Cart Abandonment Recovery ', 'woo-cart-abandonment-recovery' ); ?></h1>
11
  <?php
12
 
13
  $action = filter_input( INPUT_GET, 'action', FILTER_SANITIZE_STRING );
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.me/BrainstormForce
4
  Tags: woocommerce, cart abandonment, cart recovery
5
  Requires at least: 4.4
6
  Tested up to: 5.2
7
- Stable tag: 1.1.6
8
  Requires PHP: 5.6
9
  License: GPLv2 or later
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
@@ -17,9 +17,9 @@ Recover your lost revenue. Capture email address of users on the checkout page a
17
 
18
  Research shows about 60% to 80% of the users who go to the checkout page, do not complete their purchase. Even the best <a href="https://wpastra.com/best-checkout-experience/" target="_blank">optimized checkout process</a> has an abandonment rate of 20%
19
 
20
- There can be many reasons for cart abandonment.
21
 
22
- But we have good news for you. Install our plugin and recover your lost revenue, **absolutely free**.
23
 
24
  **How Does This Plugin Work?**
25
 
@@ -54,6 +54,7 @@ WooCommerce Cart Abandonment Recovery offers everything you need to recover your
54
 
55
  * **Reports**: You get a full report of how the plugin is working behind the scenes, and recovering your lost revenue on autopilot.
56
 
 
57
 
58
  **Is This Plugin Really Free? What’s the Catch?**
59
 
@@ -85,34 +86,39 @@ The plugin will start recovering your lost sales in as quickly as 15 minutes.
85
 
86
  == Frequently Asked Questions ==
87
 
88
- = Does this plugin work with CartFlows? =
89
 
90
- Yes, of course. We have built it in a way that it will work with CartFlows as well as with WooCommerce.
91
 
92
- = Why Follow-up emails not sent? =
93
 
94
- Make sure to activate the email template from Follow-Up Emails > Edit (the template) > Activate Template. Similarly, activate all required templates.
95
 
96
- = Why incomplete order is not being considered as abandoned? =
97
 
98
- The cart will be considered abandoned if the order is not completed in 15 minutes. You would need to start capturing abandoned carts from Settings > Enable Tracking.
99
 
100
- = Where can I create a coupon code? =
101
 
102
- From the Settings tab, enable webhook. It will offer you an option to create a coupon code. You can create a coupon for a specific email template as well. Just edit the template you will find an option below the editor.
103
 
104
- = Can I display a confirmation message for GDPR? =
105
 
106
- Yes, the plugin has GDPR integration. You can ask for permission before tracking data. The option will be available under Settings > GDPR Settings.
107
 
108
- = How to allow the user to unsubscribe the abandoned cart notification emails? =
109
 
110
- In the email templates, you can use `{{cart.unsubscribe}}' to add an unsubscribe link.
111
- The plugin offers an advanced feature for admin to unsubscribe a particular user. As the admin can view the list of abandoned users, he can manually do the unsubscription.
112
 
113
- = Can I integrate the other email services like MailerLite? =
114
 
115
- Yes, the webhook feature will help you with this. You just need to create a webhook in the Zapier and add it from Settings tab > Webhook Settings.
 
 
 
 
 
 
116
 
117
  == Screenshots ==
118
 
@@ -122,6 +128,13 @@ Yes, the webhook feature will help you with this. You just need to create a webh
122
  4. General settings for Email, Webhook (Coupon Code), GDPR
123
 
124
  == Changelog ==
 
 
 
 
 
 
 
125
  = Version 1.1.6 - Friday, 19th July 2019
126
  * New: Bundled product support for email checkout URL.
127
  * Improvement: Added phone number and address while triggering the to webhook.
4
  Tags: woocommerce, cart abandonment, cart recovery
5
  Requires at least: 4.4
6
  Tested up to: 5.2
7
+ Stable tag: 1.1.7
8
  Requires PHP: 5.6
9
  License: GPLv2 or later
10
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
17
 
18
  Research shows about 60% to 80% of the users who go to the checkout page, do not complete their purchase. Even the best <a href="https://wpastra.com/best-checkout-experience/" target="_blank">optimized checkout process</a> has an abandonment rate of 20%
19
 
20
+ Cart gets abandoned for many reasons.
21
 
22
+ But we have good news for you. Install our plugin and automatically recover your lost revenue **absolutely free**.
23
 
24
  **How Does This Plugin Work?**
25
 
54
 
55
  * **Reports**: You get a full report of how the plugin is working behind the scenes, and recovering your lost revenue on autopilot.
56
 
57
+ [youtube https://www.youtube.com/watch?v=VWGxjjuP2_k]
58
 
59
  **Is This Plugin Really Free? What’s the Catch?**
60
 
86
 
87
  == Frequently Asked Questions ==
88
 
89
+ = What Is Meant by Cart Abandonment? =
90
 
91
+ While shopping, a user adds products to the cart. But if this user doesn't complete the purchase on the checkout page, the cart is considered abandoned.
92
 
93
+ = How Often Cart Gets Abandoned? Is It Happening on My Shop? =
94
 
95
+ According to research, 6 out of 10 visitors, leave the checkout page and do not complete the purchase. Even if you have motivated enough, 20% to 25% of the shoppers leave the purchase process.
96
 
97
+ = Do I Need Any Technical Experience to Use This Plugin? =
98
 
99
+ Any WooCommerce shop owner selling anything online can use this plugin.You will not need any technical experience to start recovering your lost revenue. Once initiated the plugin will work automatically for you.
100
 
101
+ = Can I Send Coupon with Follow up Email? =
102
 
103
+ Yes. You can generate and send unique, limited-time discount coupon. Though there is no compulsion of sending coupon. It's completely optional.
104
 
105
+ = Can I Directly Take Users to Checkout Page, Exactly Where They Left Off? =
106
 
107
+ Absolutely. A unique checkout link can be sent with follow up email. This will take the shopper to their prefilled checkout page. This will make the purchase process easier for the shopper.
108
 
109
+ = Can Marketing Automation Tools Be Integrated with This? =
110
 
111
+ Plugin offers Webhooks. This allows integrating Active Campaign, Mautic, Campaign Monitor, etc with the plugin.
 
112
 
113
+ = Will This Plugin Add Any Extra Time in Website Loading? =
114
 
115
+ Not at all. All the plugin data is stored in its own database table. It is completely self-hosted plugin. It works smoothly and does not leave any impact on the performance of the website. So you don't have to worry about the speed.
116
+
117
+ = Why This Awesome Plugin Is Free? =
118
+
119
+ Here are few thoughts behind making it available for free:
120
+ - It is our way of saying thank you to the community and helping shop owners to boost their profits.
121
+ - And quite honestly, we want you to try one of our products for free. And when you see how helpful it is, it should get you excited to buy other products from us in the future
122
 
123
  == Screenshots ==
124
 
128
  4. General settings for Email, Webhook (Coupon Code), GDPR
129
 
130
  == Changelog ==
131
+ = Version 1.1.7 - Monday, 12th August 2019
132
+ * New: Filter added to show the cart total inside the email template.
133
+ * New: Filter added to change the cart abandoned time.
134
+ * Improvement: Order tracking logic updated for automated payments.
135
+ * Improvement: Update report dashboard DateTime format to WordPress format.
136
+ * Fix: Broken image in the email template.
137
+
138
  = Version 1.1.6 - Friday, 19th July 2019
139
  * New: Bundled product support for email checkout URL.
140
  * Improvement: Added phone number and address while triggering the to webhook.
woo-cart-abandonment-recovery.php CHANGED
@@ -3,10 +3,10 @@
3
  * Plugin Name: WooCommerce Cart Abandonment Recovery
4
  * Plugin URI: https://cartflows.com/
5
  * Description: Recover your lost revenue. Capture email address of users on the checkout page and send follow up emails if they don't complete the purchase.
6
- * Version: 1.1.6
7
  * Author: CartFlows Inc
8
  * Author URI: https://cartflows.com/
9
- * Text Domain: cartflows-ca
10
  * WC requires at least: 3.0
11
  * WC tested up to: 3.6.3
12
  *
3
  * Plugin Name: WooCommerce Cart Abandonment Recovery
4
  * Plugin URI: https://cartflows.com/
5
  * Description: Recover your lost revenue. Capture email address of users on the checkout page and send follow up emails if they don't complete the purchase.
6
+ * Version: 1.1.7
7
  * Author: CartFlows Inc
8
  * Author URI: https://cartflows.com/
9
+ * Text Domain: woo-cart-abandonment-recovery
10
  * WC requires at least: 3.0
11
  * WC tested up to: 3.6.3
12
  *