WooCommerce Cart Abandonment Recovery - Version 1.2.21

Version Description

Download this release

Release Info

Developer cartflowswp
Plugin Icon 128x128 WooCommerce Cart Abandonment Recovery
Version 1.2.21
Comparing to
See all releases

Code changes from version 1.2.20 to 1.2.21

changelog.txt CHANGED
@@ -1,3 +1,7 @@
 
 
 
 
1
  Version 1.2.20 - Monday, 7th November 2022
2
  - New: Added `woo_ca_session_abandoned_data` filter to extend the session data.
3
 
1
+ Version 1.2.21 - Thursday, 15th December 2022
2
+ - Fix: Fixed deprecation notices for PHP 8.1.
3
+ - Fix: Some strings were not translatable.
4
+
5
  Version 1.2.20 - Monday, 7th November 2022
6
  - New: Added `woo_ca_session_abandoned_data` filter to extend the session data.
7
 
classes/class-cartflows-ca-loader.php CHANGED
@@ -84,7 +84,7 @@ if ( ! class_exists( 'CARTFLOWS_CA_Loader' ) ) {
84
  define( 'CARTFLOWS_CA_BASE', plugin_basename( CARTFLOWS_CA_FILE ) );
85
  define( 'CARTFLOWS_CA_DIR', plugin_dir_path( CARTFLOWS_CA_FILE ) );
86
  define( 'CARTFLOWS_CA_URL', plugins_url( '/', CARTFLOWS_CA_FILE ) );
87
- define( 'CARTFLOWS_CA_VER', '1.2.20' );
88
 
89
  define( 'CARTFLOWS_CA_SLUG', 'cartflows_ca' );
90
 
84
  define( 'CARTFLOWS_CA_BASE', plugin_basename( CARTFLOWS_CA_FILE ) );
85
  define( 'CARTFLOWS_CA_DIR', plugin_dir_path( CARTFLOWS_CA_FILE ) );
86
  define( 'CARTFLOWS_CA_URL', plugins_url( '/', CARTFLOWS_CA_FILE ) );
87
+ define( 'CARTFLOWS_CA_VER', '1.2.21' );
88
 
89
  define( 'CARTFLOWS_CA_SLUG', 'cartflows_ca' );
90
 
classes/class-cartflows-ca-settings.php CHANGED
@@ -660,8 +660,8 @@ class Cartflows_Ca_Settings {
660
 
661
  $discount_type = get_option( 'wcf_ca_discount_type' );
662
  $items = array(
663
- 'percent' => 'Percentage discount',
664
- 'fixed_cart' => 'Fixed cart discount',
665
  );
666
  echo "<select id='wcf_ca_discount_type' name='wcf_ca_discount_type'>";
667
  foreach ( $items as $key => $item ) {
660
 
661
  $discount_type = get_option( 'wcf_ca_discount_type' );
662
  $items = array(
663
+ 'percent' => __( 'Percentage discount', 'woo-cart-abandonment-recovery' ),
664
+ 'fixed_cart' => __( 'Fixed cart discount', 'woo-cart-abandonment-recovery' ),
665
  );
666
  echo "<select id='wcf_ca_discount_type' name='wcf_ca_discount_type'>";
667
  foreach ( $items as $key => $item ) {
classes/class-cartflows-ca-tabs.php CHANGED
@@ -80,6 +80,7 @@ class Cartflows_Ca_Tabs {
80
  $deleted_row_count = empty( $ids ) ? 1 : count( $ids );
81
 
82
  $wcf_list_table->process_bulk_action();
 
83
  $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
84
  set_transient( 'wcf_ca_show_message', $message, 5 );
85
  if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
@@ -117,8 +118,9 @@ class Cartflows_Ca_Tabs {
117
  */
118
  public function wcf_display_tabs() {
119
 
120
- $wcar_action = filter_input( INPUT_GET, 'action', FILTER_SANITIZE_STRING );
121
- $sub_action = filter_input( INPUT_GET, 'sub_action', FILTER_SANITIZE_STRING );
 
122
 
123
  if ( ! $wcar_action ) {
124
  $wcar_action = WCF_ACTION_REPORTS;
@@ -186,7 +188,7 @@ class Cartflows_Ca_Tabs {
186
  ), admin_url( '/admin.php' ) )
187
  ?>
188
  <a href="<?php echo $url; ?>"
189
- class="nav-tab
190
  <?php
191
  if ( isset( $active_settings ) ) {
192
  echo $active_settings;}
@@ -224,8 +226,9 @@ class Cartflows_Ca_Tabs {
224
  */
225
  public function wcf_display_reports() {
226
 
227
- $filter = filter_input( INPUT_GET, 'filter', FILTER_SANITIZE_STRING );
228
- $filter_table = filter_input( INPUT_GET, 'filter_table', FILTER_SANITIZE_STRING );
 
229
 
230
  if ( ! $filter ) {
231
  $filter = 'last_month';
@@ -234,8 +237,8 @@ class Cartflows_Ca_Tabs {
234
  $filter_table = WCF_CART_ABANDONED_ORDER;
235
  }
236
 
237
- $from_date = filter_input( INPUT_GET, 'from_date', FILTER_SANITIZE_STRING );
238
- $to_date = filter_input( INPUT_GET, 'to_date', FILTER_SANITIZE_STRING );
239
  $export_data = filter_input( INPUT_GET, 'export_data', FILTER_VALIDATE_BOOLEAN );
240
 
241
  switch ( $filter ) {
@@ -386,7 +389,7 @@ class Cartflows_Ca_Tabs {
386
  */
387
  public function wcf_display_report_details() {
388
 
389
- $sesson_id = filter_input( INPUT_GET, 'session_id', FILTER_SANITIZE_STRING );
390
 
391
  if ( $sesson_id ) {
392
  $details = Cartflows_Ca_Helper::get_instance()->get_checkout_details( $sesson_id );
@@ -455,7 +458,7 @@ class Cartflows_Ca_Tabs {
455
  </tr>
456
  </thead>
457
  <tbody>
458
- ' . $tr . '
459
  <tr align="center" id="wcf-ca-discount">
460
  <td colspan="4" >' . __( 'Discount', 'woo-cart-abandonment-recovery' ) . '</td>
461
  <td>' . wc_price( $discount ) . '</td>
80
  $deleted_row_count = empty( $ids ) ? 1 : count( $ids );
81
 
82
  $wcf_list_table->process_bulk_action();
83
+ /* translators: %d count */
84
  $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
85
  set_transient( 'wcf_ca_show_message', $message, 5 );
86
  if ( isset( $_SERVER['HTTP_REFERER'] ) ) {
118
  */
119
  public function wcf_display_tabs() {
120
 
121
+ $helper_class = Cartflows_Ca_Helper::get_instance();
122
+ $wcar_action = $helper_class->sanitize_text_filter( 'action', 'GET' );
123
+ $sub_action = $helper_class->sanitize_text_filter( 'sub_action', 'GET' );
124
 
125
  if ( ! $wcar_action ) {
126
  $wcar_action = WCF_ACTION_REPORTS;
188
  ), admin_url( '/admin.php' ) )
189
  ?>
190
  <a href="<?php echo $url; ?>"
191
+ class="nav-tab
192
  <?php
193
  if ( isset( $active_settings ) ) {
194
  echo $active_settings;}
226
  */
227
  public function wcf_display_reports() {
228
 
229
+ $helper_class = Cartflows_Ca_Helper::get_instance();
230
+ $filter = $helper_class->sanitize_text_filter( 'filter', 'GET' );
231
+ $filter_table = $helper_class->sanitize_text_filter( 'filter_table', 'GET' );
232
 
233
  if ( ! $filter ) {
234
  $filter = 'last_month';
237
  $filter_table = WCF_CART_ABANDONED_ORDER;
238
  }
239
 
240
+ $from_date = $helper_class->sanitize_text_filter( 'from_date', 'GET' );
241
+ $to_date = $helper_class->sanitize_text_filter( 'to_date', 'GET' );
242
  $export_data = filter_input( INPUT_GET, 'export_data', FILTER_VALIDATE_BOOLEAN );
243
 
244
  switch ( $filter ) {
389
  */
390
  public function wcf_display_report_details() {
391
 
392
+ $sesson_id = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'session_id', 'GET' );
393
 
394
  if ( $sesson_id ) {
395
  $details = Cartflows_Ca_Helper::get_instance()->get_checkout_details( $sesson_id );
458
  </tr>
459
  </thead>
460
  <tbody>
461
+ ' . $tr . '
462
  <tr align="center" id="wcf-ca-discount">
463
  <td colspan="4" >' . __( 'Discount', 'woo-cart-abandonment-recovery' ) . '</td>
464
  <td>' . wc_price( $discount ) . '</td>
languages/woo-cart-abandonment-recovery.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the WooCommerce Cart Abandonment Recovery plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WooCommerce Cart Abandonment Recovery 1.2.20\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woo-cart-abandonment-recovery\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2022-11-04T10:24:42+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.5.0\n"
15
  "X-Domain: woo-cart-abandonment-recovery\n"
@@ -50,7 +50,7 @@ msgid "Yes! Allow it"
50
  msgstr ""
51
 
52
  #: admin/bsf-analytics/class-bsf-analytics.php:260
53
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:389
54
  msgid "No Thanks"
55
  msgstr ""
56
 
@@ -97,20 +97,20 @@ msgid "%1$sWooCommerce Cart Abandonment recovery:%2$s We just introduced an awes
97
  msgstr ""
98
 
99
  #. translators: %s: html tags
100
- #: classes/class-cartflows-ca-loader.php:139
101
  msgid "Required database tables are not created for %1$sWooCommerce Cart Abandonment Recovery%2$s plugin. Please make sure that the database user has the REFERENCES privilege to create tables."
102
  msgstr ""
103
 
104
  #. translators: %s: html tags
105
- #: classes/class-cartflows-ca-loader.php:162
106
  msgid "The %1$sWooCommerce Cart Abandonment Recovery%2$s plugin requires %1$sWooCommerce%2$s plugin installed & activated."
107
  msgstr ""
108
 
109
- #: classes/class-cartflows-ca-loader.php:171
110
  msgid "Activate WooCommerce"
111
  msgstr ""
112
 
113
- #: classes/class-cartflows-ca-loader.php:179
114
  msgid "Install WooCommerce"
115
  msgstr ""
116
 
@@ -265,12 +265,12 @@ msgid "Auto-create the special coupon for the abandoned cart to send over the em
265
  msgstr ""
266
 
267
  #: classes/class-cartflows-ca-settings.php:327
268
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:567
269
  msgid "Discount Type"
270
  msgstr ""
271
 
272
  #: classes/class-cartflows-ca-settings.php:336
273
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:599
274
  msgid "Coupon Amount"
275
  msgstr ""
276
 
@@ -326,17 +326,25 @@ msgid "Add UTM parameter per line."
326
  msgstr ""
327
 
328
  #: classes/class-cartflows-ca-settings.php:620
329
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:637
330
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:733
331
  msgid "Hour(s)"
332
  msgstr ""
333
 
334
  #: classes/class-cartflows-ca-settings.php:621
335
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:638
336
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:734
337
  msgid "Day(s)"
338
  msgstr ""
339
 
 
 
 
 
 
 
 
 
340
  #: classes/class-cartflows-ca-settings.php:689
341
  msgid "Coupon code should be numeric and has to be greater than or equals to 1."
342
  msgstr ""
@@ -362,74 +370,79 @@ msgstr ""
362
  msgid "Cart Abandonment"
363
  msgstr ""
364
 
365
- #: classes/class-cartflows-ca-tabs.php:83
 
366
  msgid "Items deleted: %d"
367
  msgstr ""
368
 
369
- #: classes/class-cartflows-ca-tabs.php:100
370
  msgid "User(s) unsubscribed successfully!"
371
  msgstr ""
372
 
373
- #: classes/class-cartflows-ca-tabs.php:163
374
  msgid "Report"
375
  msgstr ""
376
 
377
- #: classes/class-cartflows-ca-tabs.php:179
378
  msgid "Follow-Up Emails"
379
  msgstr ""
380
 
381
- #: classes/class-cartflows-ca-tabs.php:195
382
  msgid "Settings"
383
  msgstr ""
384
 
385
- #: classes/class-cartflows-ca-tabs.php:450
386
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:323
387
  msgid "Item"
388
  msgstr ""
389
 
390
- #: classes/class-cartflows-ca-tabs.php:451
391
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:324
392
- #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:244
393
  #: modules/cart-abandonment/includes/cartflows-ca-single-report-details.php:176
394
  msgid "Name"
395
  msgstr ""
396
 
397
- #: classes/class-cartflows-ca-tabs.php:452
398
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:325
399
  msgid "Quantity"
400
  msgstr ""
401
 
402
- #: classes/class-cartflows-ca-tabs.php:453
403
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:326
404
  msgid "Price"
405
  msgstr ""
406
 
407
- #: classes/class-cartflows-ca-tabs.php:454
408
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:327
409
  msgid "Line Subtotal"
410
  msgstr ""
411
 
412
- #: classes/class-cartflows-ca-tabs.php:460
413
  msgid "Discount"
414
  msgstr ""
415
 
416
- #: classes/class-cartflows-ca-tabs.php:464
417
  msgid "Other"
418
  msgstr ""
419
 
420
- #: classes/class-cartflows-ca-tabs.php:469
421
  msgid "Shipping"
422
  msgstr ""
423
 
424
- #: classes/class-cartflows-ca-tabs.php:473
425
- #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:246
426
  msgid "Cart Total"
427
  msgstr ""
428
 
429
- #: classes/class-cartflows-ca-tabs.php:496
430
  msgid "Looks like abandonment tracking is disabled! Please enable it from <a href="
431
  msgstr ""
432
 
 
 
 
 
433
  #: modules/cart-abandonment/classes/class-cartflows-ca-cron.php:63
434
  msgid "Every Fifteen Minutes"
435
  msgstr ""
@@ -454,7 +467,7 @@ msgstr ""
454
  msgid "Admin"
455
  msgstr ""
456
 
457
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:316
458
  msgid "Cart Total ( Cart Total + Shipping + Tax )"
459
  msgstr ""
460
 
@@ -466,20 +479,20 @@ msgstr ""
466
  msgid "Clone"
467
  msgstr ""
468
 
469
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php:189
470
  msgid "Template Name"
471
  msgstr ""
472
 
473
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php:190
474
  #: modules/cart-abandonment/includes/cartflows-ca-single-report-details.php:86
475
  msgid "Email Subject"
476
  msgstr ""
477
 
478
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php:191
479
  msgid "Trigger After"
480
  msgstr ""
481
 
482
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php:192
483
  msgid "Activate Template"
484
  msgstr ""
485
 
@@ -563,123 +576,123 @@ msgstr ""
563
  msgid "Deactivated"
564
  msgstr ""
565
 
566
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:241
567
  msgid "The Email Template has been successfully added."
568
  msgstr ""
569
 
570
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:251
571
  msgid "The Email Template has been cloned successfully."
572
  msgstr ""
573
 
574
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:261
575
  msgid "The Email Template has been successfully deleted."
576
  msgstr ""
577
 
578
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:270
579
  msgid "The Email Template has been successfully updated."
580
  msgstr ""
581
 
582
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:280
583
  msgid "Default Email Templates has been restored successfully."
584
  msgstr ""
585
 
586
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:447
587
  msgid "Activate Template now?"
588
  msgstr ""
589
 
590
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:467
591
  msgid "Template Name:"
592
  msgstr ""
593
 
594
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:482
595
  msgid "Email Subject:"
596
  msgstr ""
597
 
598
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:497
599
  msgid "Email Body:"
600
  msgstr ""
601
 
602
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:526
603
  msgid "Use WooCommerce email style"
604
  msgstr ""
605
 
606
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:539
607
  msgid "Email will be sent in WooCommerce email format. Also the sender name and sender email address will be replaced by the Woocommerce Email sender options."
608
  msgstr ""
609
 
610
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:547
611
  msgid "Create Coupon"
612
  msgstr ""
613
 
614
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:560
615
  msgid "Allows you to send new coupon only for this template."
616
  msgstr ""
617
 
618
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:617
619
  msgid "Coupon expiry date"
620
  msgstr ""
621
 
622
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:647
623
  msgid "Enter zero (0) to restrict coupon from expiring"
624
  msgstr ""
625
 
626
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:653
627
  msgid "Free Shipping"
628
  msgstr ""
629
 
630
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:666
631
  msgid "Allows you to grant free shipping. A free shipping method must be enabled in your shipping zone and be set to require \"a valid free shipping coupon\". "
632
  msgstr ""
633
 
634
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:673
635
  msgid "Individual use only"
636
  msgstr ""
637
 
638
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:687
639
  msgid "Check this box if the coupon cannot be used in conjunction with other coupons."
640
  msgstr ""
641
 
642
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:694
643
  msgid "Auto Apply Coupon"
644
  msgstr ""
645
 
646
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:708
647
  msgid " Automatically add the coupon to the cart at the checkout."
648
  msgstr ""
649
 
650
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:714
651
  msgid "Send This Email"
652
  msgstr ""
653
 
654
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:732
655
  msgid "Minute(s)"
656
  msgstr ""
657
 
658
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:747
659
  msgid "after cart is abandoned."
660
  msgstr ""
661
 
662
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:757
663
  msgid "Send Test Email To:"
664
  msgstr ""
665
 
666
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:761
667
  msgid "Send a test email"
668
  msgstr ""
669
 
670
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:774
671
  msgid "Save Changes"
672
  msgstr ""
673
 
674
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:776
675
  msgid "Update Changes"
676
  msgstr ""
677
 
678
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:1085
679
  msgid "Create New Template"
680
  msgstr ""
681
 
682
- #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:1088
683
  msgid " Restore Default Templates"
684
  msgstr ""
685
 
@@ -689,18 +702,19 @@ msgstr ""
689
 
690
  #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:90
691
  #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:150
 
692
  msgid "Unsubscribe"
693
  msgstr ""
694
 
695
- #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:245
696
  msgid "Email"
697
  msgstr ""
698
 
699
- #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:247
700
  msgid "Order Status"
701
  msgstr ""
702
 
703
- #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:248
704
  msgid "Time"
705
  msgstr ""
706
 
@@ -719,37 +733,37 @@ msgid "New Customer Order - Recovered Order ID: "
719
  msgstr ""
720
 
721
  #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:215
722
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:834
723
  msgid "This order was abandoned & subsequently recovered."
724
  msgstr ""
725
 
726
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:250
727
  msgid "You have successfully unsubscribed from our email list."
728
  msgstr ""
729
 
730
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:250
731
  #: modules/cart-abandonment/includes/cartflows-ca-single-report-details.php:167
732
- #: modules/weekly-email-report/class-cartflows-ca-admin-report-emails.php:174
733
  msgid "Unsubscribed"
734
  msgstr ""
735
 
736
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:347
737
  msgid "This checkout page is generated by WooCommerce Cart Abandonment Recovery plugin from test mail."
738
  msgstr ""
739
 
740
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:390
741
  msgid "You won't receive further emails from us, thank you!"
742
  msgstr ""
743
 
744
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:1011
745
  msgid "Do you really want to delete the used and expired coupons created by Cart Abandonment Plugin?"
746
  msgstr ""
747
 
748
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:1012
749
  msgid "Do you really want to export orders?"
750
  msgstr ""
751
 
752
- #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:1016
753
  msgid "No such order is found."
754
  msgstr ""
755
 
@@ -941,6 +955,7 @@ msgid "Total Recovered Revenue."
941
  msgstr ""
942
 
943
  #: modules/cart-abandonment/includes/cartflows-cart-abandonment-reports.php:99
 
944
  msgid "Recovery Rate"
945
  msgstr ""
946
 
@@ -968,11 +983,11 @@ msgstr ""
968
  msgid "There"
969
  msgstr ""
970
 
971
- #: modules/weekly-email-report/class-cartflows-ca-admin-report-emails.php:113
972
  msgid "Your Weekly Cart Abandonment Summary is here - CartFlows"
973
  msgstr ""
974
 
975
- #: modules/weekly-email-report/class-cartflows-ca-admin-report-emails.php:174
976
  msgid "You have successfully unsubscribed from our weekly emails list."
977
  msgstr ""
978
 
@@ -980,7 +995,61 @@ msgstr ""
980
  msgid "Cart Abandonment Recovery Weekly Report"
981
  msgstr ""
982
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
983
  #. translators: %1$s - link to a site;
984
  #: modules/weekly-email-report/templates/email-footer.php:62
985
  msgid "This email was auto-generated and sent from %1$s."
986
  msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  # This file is distributed under the same license as the WooCommerce Cart Abandonment Recovery plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: WooCommerce Cart Abandonment Recovery 1.2.21\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/woo-cart-abandonment-recovery\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2022-12-15T09:30:25+00:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.5.0\n"
15
  "X-Domain: woo-cart-abandonment-recovery\n"
50
  msgstr ""
51
 
52
  #: admin/bsf-analytics/class-bsf-analytics.php:260
53
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:391
54
  msgid "No Thanks"
55
  msgstr ""
56
 
97
  msgstr ""
98
 
99
  #. translators: %s: html tags
100
+ #: classes/class-cartflows-ca-loader.php:142
101
  msgid "Required database tables are not created for %1$sWooCommerce Cart Abandonment Recovery%2$s plugin. Please make sure that the database user has the REFERENCES privilege to create tables."
102
  msgstr ""
103
 
104
  #. translators: %s: html tags
105
+ #: classes/class-cartflows-ca-loader.php:165
106
  msgid "The %1$sWooCommerce Cart Abandonment Recovery%2$s plugin requires %1$sWooCommerce%2$s plugin installed & activated."
107
  msgstr ""
108
 
109
+ #: classes/class-cartflows-ca-loader.php:174
110
  msgid "Activate WooCommerce"
111
  msgstr ""
112
 
113
+ #: classes/class-cartflows-ca-loader.php:182
114
  msgid "Install WooCommerce"
115
  msgstr ""
116
 
265
  msgstr ""
266
 
267
  #: classes/class-cartflows-ca-settings.php:327
268
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:568
269
  msgid "Discount Type"
270
  msgstr ""
271
 
272
  #: classes/class-cartflows-ca-settings.php:336
273
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:600
274
  msgid "Coupon Amount"
275
  msgstr ""
276
 
326
  msgstr ""
327
 
328
  #: classes/class-cartflows-ca-settings.php:620
329
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:638
330
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:734
331
  msgid "Hour(s)"
332
  msgstr ""
333
 
334
  #: classes/class-cartflows-ca-settings.php:621
335
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:639
336
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:735
337
  msgid "Day(s)"
338
  msgstr ""
339
 
340
+ #: classes/class-cartflows-ca-settings.php:663
341
+ msgid "Percentage discount"
342
+ msgstr ""
343
+
344
+ #: classes/class-cartflows-ca-settings.php:664
345
+ msgid "Fixed cart discount"
346
+ msgstr ""
347
+
348
  #: classes/class-cartflows-ca-settings.php:689
349
  msgid "Coupon code should be numeric and has to be greater than or equals to 1."
350
  msgstr ""
370
  msgid "Cart Abandonment"
371
  msgstr ""
372
 
373
+ #. translators: %d count
374
+ #: classes/class-cartflows-ca-tabs.php:84
375
  msgid "Items deleted: %d"
376
  msgstr ""
377
 
378
+ #: classes/class-cartflows-ca-tabs.php:101
379
  msgid "User(s) unsubscribed successfully!"
380
  msgstr ""
381
 
382
+ #: classes/class-cartflows-ca-tabs.php:165
383
  msgid "Report"
384
  msgstr ""
385
 
386
+ #: classes/class-cartflows-ca-tabs.php:181
387
  msgid "Follow-Up Emails"
388
  msgstr ""
389
 
390
+ #: classes/class-cartflows-ca-tabs.php:197
391
  msgid "Settings"
392
  msgstr ""
393
 
394
+ #: classes/class-cartflows-ca-tabs.php:453
395
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:324
396
  msgid "Item"
397
  msgstr ""
398
 
399
+ #: classes/class-cartflows-ca-tabs.php:454
400
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:325
401
+ #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:245
402
  #: modules/cart-abandonment/includes/cartflows-ca-single-report-details.php:176
403
  msgid "Name"
404
  msgstr ""
405
 
406
+ #: classes/class-cartflows-ca-tabs.php:455
407
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:326
408
  msgid "Quantity"
409
  msgstr ""
410
 
411
+ #: classes/class-cartflows-ca-tabs.php:456
412
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:327
413
  msgid "Price"
414
  msgstr ""
415
 
416
+ #: classes/class-cartflows-ca-tabs.php:457
417
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:328
418
  msgid "Line Subtotal"
419
  msgstr ""
420
 
421
+ #: classes/class-cartflows-ca-tabs.php:463
422
  msgid "Discount"
423
  msgstr ""
424
 
425
+ #: classes/class-cartflows-ca-tabs.php:467
426
  msgid "Other"
427
  msgstr ""
428
 
429
+ #: classes/class-cartflows-ca-tabs.php:472
430
  msgid "Shipping"
431
  msgstr ""
432
 
433
+ #: classes/class-cartflows-ca-tabs.php:476
434
+ #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:247
435
  msgid "Cart Total"
436
  msgstr ""
437
 
438
+ #: classes/class-cartflows-ca-tabs.php:499
439
  msgid "Looks like abandonment tracking is disabled! Please enable it from <a href="
440
  msgstr ""
441
 
442
+ #: lib/astra-notices/class-astra-notices.php:119
443
+ msgid "WordPress Nonce not validated."
444
+ msgstr ""
445
+
446
  #: modules/cart-abandonment/classes/class-cartflows-ca-cron.php:63
447
  msgid "Every Fifteen Minutes"
448
  msgstr ""
467
  msgid "Admin"
468
  msgstr ""
469
 
470
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php:317
471
  msgid "Cart Total ( Cart Total + Shipping + Tax )"
472
  msgstr ""
473
 
479
  msgid "Clone"
480
  msgstr ""
481
 
482
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php:190
483
  msgid "Template Name"
484
  msgstr ""
485
 
486
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php:191
487
  #: modules/cart-abandonment/includes/cartflows-ca-single-report-details.php:86
488
  msgid "Email Subject"
489
  msgstr ""
490
 
491
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php:192
492
  msgid "Trigger After"
493
  msgstr ""
494
 
495
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php:193
496
  msgid "Activate Template"
497
  msgstr ""
498
 
576
  msgid "Deactivated"
577
  msgstr ""
578
 
579
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:242
580
  msgid "The Email Template has been successfully added."
581
  msgstr ""
582
 
583
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:252
584
  msgid "The Email Template has been cloned successfully."
585
  msgstr ""
586
 
587
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:262
588
  msgid "The Email Template has been successfully deleted."
589
  msgstr ""
590
 
591
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:271
592
  msgid "The Email Template has been successfully updated."
593
  msgstr ""
594
 
595
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:281
596
  msgid "Default Email Templates has been restored successfully."
597
  msgstr ""
598
 
599
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:448
600
  msgid "Activate Template now?"
601
  msgstr ""
602
 
603
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:468
604
  msgid "Template Name:"
605
  msgstr ""
606
 
607
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:483
608
  msgid "Email Subject:"
609
  msgstr ""
610
 
611
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:498
612
  msgid "Email Body:"
613
  msgstr ""
614
 
615
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:527
616
  msgid "Use WooCommerce email style"
617
  msgstr ""
618
 
619
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:540
620
  msgid "Email will be sent in WooCommerce email format. Also the sender name and sender email address will be replaced by the Woocommerce Email sender options."
621
  msgstr ""
622
 
623
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:548
624
  msgid "Create Coupon"
625
  msgstr ""
626
 
627
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:561
628
  msgid "Allows you to send new coupon only for this template."
629
  msgstr ""
630
 
631
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:618
632
  msgid "Coupon expiry date"
633
  msgstr ""
634
 
635
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:648
636
  msgid "Enter zero (0) to restrict coupon from expiring"
637
  msgstr ""
638
 
639
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:654
640
  msgid "Free Shipping"
641
  msgstr ""
642
 
643
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:667
644
  msgid "Allows you to grant free shipping. A free shipping method must be enabled in your shipping zone and be set to require \"a valid free shipping coupon\". "
645
  msgstr ""
646
 
647
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:674
648
  msgid "Individual use only"
649
  msgstr ""
650
 
651
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:688
652
  msgid "Check this box if the coupon cannot be used in conjunction with other coupons."
653
  msgstr ""
654
 
655
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:695
656
  msgid "Auto Apply Coupon"
657
  msgstr ""
658
 
659
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:709
660
  msgid " Automatically add the coupon to the cart at the checkout."
661
  msgstr ""
662
 
663
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:715
664
  msgid "Send This Email"
665
  msgstr ""
666
 
667
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:733
668
  msgid "Minute(s)"
669
  msgstr ""
670
 
671
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:748
672
  msgid "after cart is abandoned."
673
  msgstr ""
674
 
675
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:758
676
  msgid "Send Test Email To:"
677
  msgstr ""
678
 
679
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:762
680
  msgid "Send a test email"
681
  msgstr ""
682
 
683
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:775
684
  msgid "Save Changes"
685
  msgstr ""
686
 
687
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:777
688
  msgid "Update Changes"
689
  msgstr ""
690
 
691
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:1090
692
  msgid "Create New Template"
693
  msgstr ""
694
 
695
+ #: modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php:1093
696
  msgid " Restore Default Templates"
697
  msgstr ""
698
 
702
 
703
  #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:90
704
  #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:150
705
+ #: modules/weekly-email-report/templates/email-footer.php:70
706
  msgid "Unsubscribe"
707
  msgstr ""
708
 
709
+ #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:246
710
  msgid "Email"
711
  msgstr ""
712
 
713
+ #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:248
714
  msgid "Order Status"
715
  msgstr ""
716
 
717
+ #: modules/cart-abandonment/classes/class-cartflows-ca-order-table.php:249
718
  msgid "Time"
719
  msgstr ""
720
 
733
  msgstr ""
734
 
735
  #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:215
736
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:840
737
  msgid "This order was abandoned & subsequently recovered."
738
  msgstr ""
739
 
740
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:251
741
  msgid "You have successfully unsubscribed from our email list."
742
  msgstr ""
743
 
744
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:251
745
  #: modules/cart-abandonment/includes/cartflows-ca-single-report-details.php:167
746
+ #: modules/weekly-email-report/class-cartflows-ca-admin-report-emails.php:167
747
  msgid "Unsubscribed"
748
  msgstr ""
749
 
750
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:349
751
  msgid "This checkout page is generated by WooCommerce Cart Abandonment Recovery plugin from test mail."
752
  msgstr ""
753
 
754
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:392
755
  msgid "You won't receive further emails from us, thank you!"
756
  msgstr ""
757
 
758
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:1017
759
  msgid "Do you really want to delete the used and expired coupons created by Cart Abandonment Plugin?"
760
  msgstr ""
761
 
762
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:1018
763
  msgid "Do you really want to export orders?"
764
  msgstr ""
765
 
766
+ #: modules/cart-abandonment/classes/class-cartflows-ca-tracking.php:1022
767
  msgid "No such order is found."
768
  msgstr ""
769
 
955
  msgstr ""
956
 
957
  #: modules/cart-abandonment/includes/cartflows-cart-abandonment-reports.php:99
958
+ #: modules/weekly-email-report/templates/email-recovery-stat.php:129
959
  msgid "Recovery Rate"
960
  msgstr ""
961
 
983
  msgid "There"
984
  msgstr ""
985
 
986
+ #: modules/weekly-email-report/class-cartflows-ca-admin-report-emails.php:106
987
  msgid "Your Weekly Cart Abandonment Summary is here - CartFlows"
988
  msgstr ""
989
 
990
+ #: modules/weekly-email-report/class-cartflows-ca-admin-report-emails.php:167
991
  msgid "You have successfully unsubscribed from our weekly emails list."
992
  msgstr ""
993
 
995
  msgid "Cart Abandonment Recovery Weekly Report"
996
  msgstr ""
997
 
998
+ #: modules/weekly-email-report/templates/email-bsf-product-block.php:26
999
+ msgid "Would you like to try our other products that help WooCommerce stores sell more?"
1000
+ msgstr ""
1001
+
1002
+ #: modules/weekly-email-report/templates/email-bsf-product-block.php:41
1003
+ msgid "TRY OUR OTHER PRODUCTS"
1004
+ msgstr ""
1005
+
1006
+ #: modules/weekly-email-report/templates/email-cf-block.php:26
1007
+ msgid "CartFlows Pro can help you to increase conversion and maximize profits."
1008
+ msgstr ""
1009
+
1010
+ #: modules/weekly-email-report/templates/email-cf-block.php:43
1011
+ msgid "Want to earn 30% more store revenue on autopilot? CartFlows order bumps and upsells help you do just that. Try CartFlows Pro risk-free for 30 days!"
1012
+ msgstr ""
1013
+
1014
+ #: modules/weekly-email-report/templates/email-cf-block.php:61
1015
+ msgid "GET CARTFLOWS NOW"
1016
+ msgstr ""
1017
+
1018
+ #. translators: %s admin name
1019
+ #: modules/weekly-email-report/templates/email-content-section.php:26
1020
+ msgid "Hey %s!"
1021
+ msgstr ""
1022
+
1023
+ #. translators: %1$s: store name, %2$s: total revenue. %3$s: total revenue
1024
+ #: modules/weekly-email-report/templates/email-content-section.php:41
1025
+ msgid "%1$s has recovered a total %2$s revenue in last week by using Cart Abandonment Recover by CartFlows! And in last month, we recovered %3$s"
1026
+ msgstr ""
1027
+
1028
+ #: modules/weekly-email-report/templates/email-content-section.php:78
1029
+ msgid "(Last 7 days)"
1030
+ msgstr ""
1031
+
1032
+ #: modules/weekly-email-report/templates/email-content-section.php:92
1033
+ msgid "(Last 30 days)"
1034
+ msgstr ""
1035
+
1036
  #. translators: %1$s - link to a site;
1037
  #: modules/weekly-email-report/templates/email-footer.php:62
1038
  msgid "This email was auto-generated and sent from %1$s."
1039
  msgstr ""
1040
+
1041
+ #: modules/weekly-email-report/templates/email-header.php:30
1042
+ msgid "Your weekly cart abandonment summary from CartFlows."
1043
+ msgstr ""
1044
+
1045
+ #: modules/weekly-email-report/templates/email-recovery-stat.php:25
1046
+ msgid "Full Overview"
1047
+ msgstr ""
1048
+
1049
+ #: modules/weekly-email-report/templates/email-recovery-stat.php:73
1050
+ msgid "Carts Abandoned"
1051
+ msgstr ""
1052
+
1053
+ #: modules/weekly-email-report/templates/email-recovery-stat.php:101
1054
+ msgid "Carts Recovered"
1055
+ msgstr ""
modules/cart-abandonment/classes/class-cartflows-ca-email-schedule.php CHANGED
@@ -202,14 +202,15 @@ class Cartflows_Ca_Email_Schedule {
202
 
203
  $email_data = new stdClass();
204
  $current_user = wp_get_current_user();
205
- $email_data->email_template_id = filter_input( INPUT_POST, 'email_template_id', FILTER_SANITIZE_STRING );
 
206
 
207
  $email_data->checkout_id = wc_get_page_id( 'checkout' );
208
  $email_data->session_id = 'dummy-session-id';
209
  $email_send_to = filter_input( INPUT_POST, 'email_send_to', FILTER_SANITIZE_EMAIL );
210
  $email_data->email = $email_send_to ? $email_send_to : $current_user->user_email;
211
  $email_data->email_body = filter_input( INPUT_POST, 'email_body', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
212
- $email_data->email_subject = filter_input( INPUT_POST, 'email_subject', FILTER_SANITIZE_STRING );
213
  $email_data->email_body = html_entity_decode( $email_data->email_body, ENT_COMPAT, 'UTF-8' );
214
  $email_data->other_fields = serialize(
215
  array(
202
 
203
  $email_data = new stdClass();
204
  $current_user = wp_get_current_user();
205
+ $helper_class = Cartflows_Ca_Helper::get_instance();
206
+ $email_data->email_template_id = $helper_class->sanitize_text_filter( 'email_template_id', 'POST' );
207
 
208
  $email_data->checkout_id = wc_get_page_id( 'checkout' );
209
  $email_data->session_id = 'dummy-session-id';
210
  $email_send_to = filter_input( INPUT_POST, 'email_send_to', FILTER_SANITIZE_EMAIL );
211
  $email_data->email = $email_send_to ? $email_send_to : $current_user->user_email;
212
  $email_data->email_body = filter_input( INPUT_POST, 'email_body', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
213
+ $email_data->email_subject = $helper_class->sanitize_text_filter( 'email_subject', 'POST' );
214
  $email_data->email_body = html_entity_decode( $email_data->email_body, ENT_COMPAT, 'UTF-8' );
215
  $email_data->other_fields = serialize(
216
  array(
modules/cart-abandonment/classes/class-cartflows-ca-email-templates-table.php CHANGED
@@ -154,9 +154,10 @@ class Cartflows_Ca_Email_Templates_Table extends WP_List_Table {
154
 
155
  $total_items = $wpdb->get_var( "SELECT COUNT(id) FROM $cart_abandonment_template_table_name" ); // phpcs:ignore
156
 
157
- $paged = filter_input( INPUT_GET, 'paged', FILTER_SANITIZE_NUMBER_INT );
158
- $orderby = filter_input( INPUT_GET, 'orderby', FILTER_SANITIZE_STRING );
159
- $order = filter_input( INPUT_GET, 'order', FILTER_SANITIZE_STRING );
 
160
 
161
  $orderby = strtolower( str_replace( ' ', '_', $orderby ) );
162
 
@@ -253,7 +254,7 @@ class Cartflows_Ca_Email_Templates_Table extends WP_List_Table {
253
 
254
  global $wpdb;
255
  $table_name = $wpdb->prefix . CARTFLOWS_CA_EMAIL_TEMPLATE_TABLE;
256
- $action = filter_input( INPUT_GET, 'sub_action', FILTER_SANITIZE_STRING );
257
 
258
  if ( WCF_SUB_ACTION_DELETE_BULK_EMAIL_TEMPLATES === $action ) {
259
  $ids = array();
154
 
155
  $total_items = $wpdb->get_var( "SELECT COUNT(id) FROM $cart_abandonment_template_table_name" ); // phpcs:ignore
156
 
157
+ $paged = filter_input( INPUT_GET, 'paged', FILTER_SANITIZE_NUMBER_INT );
158
+ $helper_class = Cartflows_Ca_Helper::get_instance();
159
+ $orderby = $helper_class->sanitize_text_filter( 'orderby', 'GET' );
160
+ $order = $helper_class->sanitize_text_filter( 'order', 'GET' );
161
 
162
  $orderby = strtolower( str_replace( ' ', '_', $orderby ) );
163
 
254
 
255
  global $wpdb;
256
  $table_name = $wpdb->prefix . CARTFLOWS_CA_EMAIL_TEMPLATE_TABLE;
257
+ $action = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'sub_action', 'GET' );
258
 
259
  if ( WCF_SUB_ACTION_DELETE_BULK_EMAIL_TEMPLATES === $action ) {
260
  $ids = array();
modules/cart-abandonment/classes/class-cartflows-ca-email-templates.php CHANGED
@@ -91,7 +91,7 @@ class Cartflows_Ca_Email_Templates {
91
  */
92
  public static function load_email_templates_script() {
93
 
94
- $page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
95
 
96
  if ( WCF_CA_PAGE_NAME !== $page ) {
97
  return;
@@ -165,7 +165,7 @@ class Cartflows_Ca_Email_Templates {
165
 
166
  $id = filter_input( INPUT_POST, 'id', FILTER_VALIDATE_INT );
167
 
168
- $is_activated = filter_input( INPUT_POST, 'state', FILTER_SANITIZE_STRING );
169
 
170
  $response = __( 'Something went wrong', 'woo-cart-abandonment-recovery' );
171
  if ( ! isset( $is_activated ) || ! isset( $id ) ) {
@@ -227,11 +227,12 @@ class Cartflows_Ca_Email_Templates {
227
  */
228
  public function show_messages() {
229
 
230
- $wcf_ca_template_created = filter_input( INPUT_GET, 'wcf_ca_template_created', FILTER_SANITIZE_STRING );
231
- $wcf_ca_template_cloned = filter_input( INPUT_GET, 'wcf_ca_template_cloned', FILTER_SANITIZE_STRING );
232
- $wcf_ca_template_deleted = filter_input( INPUT_GET, 'wcf_ca_template_deleted', FILTER_SANITIZE_STRING );
233
- $wcf_ca_template_updated = filter_input( INPUT_GET, 'wcf_ca_template_updated', FILTER_SANITIZE_STRING );
234
- $wcf_ca_template_restored = filter_input( INPUT_GET, 'wcf_ca_template_restored', FILTER_SANITIZE_STRING );
 
235
 
236
  ?>
237
  <?php if ( 'YES' === $wcf_ca_template_created ) { ?>
@@ -308,7 +309,7 @@ class Cartflows_Ca_Email_Templates {
308
  public function delete_single_template() {
309
 
310
  $id = filter_input( INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT );
311
- $wpnonce = filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING );
312
 
313
  if ( $id && $wpnonce && wp_verify_nonce( $wpnonce, WCF_EMAIL_TEMPLATES_NONCE ) ) {
314
 
@@ -334,7 +335,7 @@ class Cartflows_Ca_Email_Templates {
334
  public function clone_email_template() {
335
 
336
  $id = filter_input( INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT );
337
- $wpnonce = filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING );
338
 
339
  if ( $id && $wpnonce && wp_verify_nonce( $wpnonce, WCF_EMAIL_TEMPLATES_NONCE ) ) {
340
 
@@ -795,7 +796,7 @@ class Cartflows_Ca_Email_Templates {
795
  $input_post_values = array(
796
  'wcf_email_subject' => array(
797
  'default' => '',
798
- 'sanitize' => FILTER_SANITIZE_STRING,
799
  ),
800
  'wcf_email_body' => array(
801
  'default' => '',
@@ -803,7 +804,7 @@ class Cartflows_Ca_Email_Templates {
803
  ),
804
  'wcf_template_name' => array(
805
  'default' => '',
806
- 'sanitize' => FILTER_SANITIZE_STRING,
807
  ),
808
  'wcf_email_frequency' => array(
809
  'default' => 30,
@@ -811,7 +812,7 @@ class Cartflows_Ca_Email_Templates {
811
  ),
812
  'wcf_email_frequency_unit' => array(
813
  'default' => 'MINUTE',
814
- 'sanitize' => FILTER_SANITIZE_STRING,
815
  ),
816
  'wcf_activate_email_template' => array(
817
  'default' => 0,
@@ -820,7 +821,7 @@ class Cartflows_Ca_Email_Templates {
820
 
821
  'wcf_email_discount_type' => array(
822
  'default' => 'percent',
823
- 'sanitize' => FILTER_SANITIZE_STRING,
824
  ),
825
  'wcf_email_discount_amount' => array(
826
  'default' => 10,
@@ -828,11 +829,11 @@ class Cartflows_Ca_Email_Templates {
828
  ),
829
  'wcf_email_coupon_expiry_date' => array(
830
  'default' => '',
831
- 'sanitize' => FILTER_SANITIZE_STRING,
832
  ),
833
  'wcf_coupon_expiry_unit' => array(
834
  'default' => 'hours',
835
- 'sanitize' => FILTER_SANITIZE_STRING,
836
  ),
837
  'id' => array(
838
  'default' => null,
@@ -844,7 +845,11 @@ class Cartflows_Ca_Email_Templates {
844
  foreach ( $input_post_values as $key => $input_post_value ) {
845
 
846
  if ( isset( $_POST[ $key ] ) ) { //phpcs:ignore
847
- $sanitized_post[ $key ] = filter_input( INPUT_POST, $key, $input_post_value['sanitize'] );
 
 
 
 
848
  } else {
849
  $sanitized_post[ $key ] = $input_post_value['default'];
850
  }
@@ -967,7 +972,7 @@ class Cartflows_Ca_Email_Templates {
967
  */
968
  public function restore_email_templates() {
969
 
970
- $wpnonce = filter_input( INPUT_GET, '_wpnonce', FILTER_SANITIZE_STRING );
971
 
972
  if ( $wpnonce && wp_verify_nonce( $wpnonce, WCF_EMAIL_TEMPLATES_NONCE ) ) {
973
 
@@ -1051,7 +1056,7 @@ class Cartflows_Ca_Email_Templates {
1051
  public function show_email_template_data_table() {
1052
  $wcf_template_list = new Cartflows_Ca_Email_Templates_Table();
1053
  $wcf_template_list->prepare_items();
1054
- $page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
1055
  ?>
1056
  <div class="wrap">
1057
  <form id="wcf-cart-abandonment-template-table" method="GET">
91
  */
92
  public static function load_email_templates_script() {
93
 
94
+ $page = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'page', 'GET' );
95
 
96
  if ( WCF_CA_PAGE_NAME !== $page ) {
97
  return;
165
 
166
  $id = filter_input( INPUT_POST, 'id', FILTER_VALIDATE_INT );
167
 
168
+ $is_activated = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'state', 'POST' );
169
 
170
  $response = __( 'Something went wrong', 'woo-cart-abandonment-recovery' );
171
  if ( ! isset( $is_activated ) || ! isset( $id ) ) {
227
  */
228
  public function show_messages() {
229
 
230
+ $helper_class = Cartflows_Ca_Helper::get_instance();
231
+ $wcf_ca_template_created = $helper_class->sanitize_text_filter( 'wcf_ca_template_created', 'GET' );
232
+ $wcf_ca_template_cloned = $helper_class->sanitize_text_filter( 'wcf_ca_template_cloned', 'GET' );
233
+ $wcf_ca_template_deleted = $helper_class->sanitize_text_filter( 'wcf_ca_template_deleted', 'GET' );
234
+ $wcf_ca_template_updated = $helper_class->sanitize_text_filter( 'wcf_ca_template_updated', 'GET' );
235
+ $wcf_ca_template_restored = $helper_class->sanitize_text_filter( 'wcf_ca_template_restored', 'GET' );
236
 
237
  ?>
238
  <?php if ( 'YES' === $wcf_ca_template_created ) { ?>
309
  public function delete_single_template() {
310
 
311
  $id = filter_input( INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT );
312
+ $wpnonce = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( '_wpnonce', 'GET' );
313
 
314
  if ( $id && $wpnonce && wp_verify_nonce( $wpnonce, WCF_EMAIL_TEMPLATES_NONCE ) ) {
315
 
335
  public function clone_email_template() {
336
 
337
  $id = filter_input( INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT );
338
+ $wpnonce = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( '_wpnonce', 'GET' );
339
 
340
  if ( $id && $wpnonce && wp_verify_nonce( $wpnonce, WCF_EMAIL_TEMPLATES_NONCE ) ) {
341
 
796
  $input_post_values = array(
797
  'wcf_email_subject' => array(
798
  'default' => '',
799
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
800
  ),
801
  'wcf_email_body' => array(
802
  'default' => '',
804
  ),
805
  'wcf_template_name' => array(
806
  'default' => '',
807
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
808
  ),
809
  'wcf_email_frequency' => array(
810
  'default' => 30,
812
  ),
813
  'wcf_email_frequency_unit' => array(
814
  'default' => 'MINUTE',
815
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
816
  ),
817
  'wcf_activate_email_template' => array(
818
  'default' => 0,
821
 
822
  'wcf_email_discount_type' => array(
823
  'default' => 'percent',
824
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
825
  ),
826
  'wcf_email_discount_amount' => array(
827
  'default' => 10,
829
  ),
830
  'wcf_email_coupon_expiry_date' => array(
831
  'default' => '',
832
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
833
  ),
834
  'wcf_coupon_expiry_unit' => array(
835
  'default' => 'hours',
836
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
837
  ),
838
  'id' => array(
839
  'default' => null,
845
  foreach ( $input_post_values as $key => $input_post_value ) {
846
 
847
  if ( isset( $_POST[ $key ] ) ) { //phpcs:ignore
848
+ if ( 'FILTER_SANITIZE_STRING' === $input_post_value['sanitize'] ) {
849
+ $sanitized_post[ $key ] = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( $key, 'POST' );
850
+ } else {
851
+ $sanitized_post[ $key ] = filter_input( INPUT_POST, $key, $input_post_value['sanitize'] );
852
+ }
853
  } else {
854
  $sanitized_post[ $key ] = $input_post_value['default'];
855
  }
972
  */
973
  public function restore_email_templates() {
974
 
975
+ $wpnonce = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( '_wpnonce', 'GET' );
976
 
977
  if ( $wpnonce && wp_verify_nonce( $wpnonce, WCF_EMAIL_TEMPLATES_NONCE ) ) {
978
 
1056
  public function show_email_template_data_table() {
1057
  $wcf_template_list = new Cartflows_Ca_Email_Templates_Table();
1058
  $wcf_template_list->prepare_items();
1059
+ $page = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'page', 'GET' );
1060
  ?>
1061
  <div class="wrap">
1062
  <form id="wcf-cart-abandonment-template-table" method="GET">
modules/cart-abandonment/classes/class-cartflows-ca-helper.php CHANGED
@@ -39,13 +39,13 @@ class Cartflows_Ca_Helper {
39
  public function __construct() {
40
  }
41
 
42
- /**
43
- * Get checkout url.
44
- *
45
- * @param integer $post_id post id.
46
- * @param string $token_data token data.
47
- * @return string
48
- */
49
  public function get_checkout_url( $post_id, $token_data ) {
50
 
51
  $token = $this->wcf_generate_token( (array) $token_data );
@@ -73,11 +73,11 @@ class Cartflows_Ca_Helper {
73
  return esc_url( $checkout_url );
74
  }
75
 
76
- /**
77
- * Geberate the token for the given data.
78
- *
79
- * @param array $data data.
80
- */
81
  public function wcf_generate_token( $data ) {
82
  return urlencode( base64_encode( http_build_query( $data ) ) );
83
  }
@@ -129,11 +129,11 @@ class Cartflows_Ca_Helper {
129
 
130
  }
131
 
132
- /**
133
- * Count abandoned carts
134
- *
135
- * @since 1.1.5
136
- */
137
  public function abandoned_cart_count() {
138
  global $wpdb;
139
  $cart_abandonment_table_name = $wpdb->prefix . CARTFLOWS_CA_CART_ABANDONMENT_TABLE;
@@ -168,12 +168,12 @@ class Cartflows_Ca_Helper {
168
  );
169
  }
170
 
171
- /**
172
- * Get the checkout details for the user.
173
- *
174
- * @param string $wcf_session_id checkout page session id.
175
- * @since 1.0.0
176
- */
177
  public function get_checkout_details( $wcf_session_id ) {
178
  global $wpdb;
179
  $cart_abandonment_table = $wpdb->prefix . CARTFLOWS_CA_CART_ABANDONMENT_TABLE;
@@ -183,13 +183,13 @@ class Cartflows_Ca_Helper {
183
  return $result;
184
  }
185
 
186
- /**
187
- * Fetch all the scheduled emails with templates for the specific session.
188
- *
189
- * @param string $session_id session id.
190
- * @param boolean $fetch_sent sfetch sent emails.
191
- * @return array|object|null
192
- */
193
  public function fetch_scheduled_emails( $session_id, $fetch_sent = false ) {
194
  global $wpdb;
195
  $email_history_table = $wpdb->prefix . CARTFLOWS_CA_EMAIL_HISTORY_TABLE;
@@ -205,6 +205,27 @@ class Cartflows_Ca_Helper {
205
  return $result;
206
  }
207
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  }
209
 
210
  Cartflows_Ca_Helper::get_instance();
39
  public function __construct() {
40
  }
41
 
42
+ /**
43
+ * Get checkout url.
44
+ *
45
+ * @param integer $post_id post id.
46
+ * @param string $token_data token data.
47
+ * @return string
48
+ */
49
  public function get_checkout_url( $post_id, $token_data ) {
50
 
51
  $token = $this->wcf_generate_token( (array) $token_data );
73
  return esc_url( $checkout_url );
74
  }
75
 
76
+ /**
77
+ * Geberate the token for the given data.
78
+ *
79
+ * @param array $data data.
80
+ */
81
  public function wcf_generate_token( $data ) {
82
  return urlencode( base64_encode( http_build_query( $data ) ) );
83
  }
129
 
130
  }
131
 
132
+ /**
133
+ * Count abandoned carts
134
+ *
135
+ * @since 1.1.5
136
+ */
137
  public function abandoned_cart_count() {
138
  global $wpdb;
139
  $cart_abandonment_table_name = $wpdb->prefix . CARTFLOWS_CA_CART_ABANDONMENT_TABLE;
168
  );
169
  }
170
 
171
+ /**
172
+ * Get the checkout details for the user.
173
+ *
174
+ * @param string $wcf_session_id checkout page session id.
175
+ * @since 1.0.0
176
+ */
177
  public function get_checkout_details( $wcf_session_id ) {
178
  global $wpdb;
179
  $cart_abandonment_table = $wpdb->prefix . CARTFLOWS_CA_CART_ABANDONMENT_TABLE;
183
  return $result;
184
  }
185
 
186
+ /**
187
+ * Fetch all the scheduled emails with templates for the specific session.
188
+ *
189
+ * @param string $session_id session id.
190
+ * @param boolean $fetch_sent sfetch sent emails.
191
+ * @return array|object|null
192
+ */
193
  public function fetch_scheduled_emails( $session_id, $fetch_sent = false ) {
194
  global $wpdb;
195
  $email_history_table = $wpdb->prefix . CARTFLOWS_CA_EMAIL_HISTORY_TABLE;
205
  return $result;
206
  }
207
 
208
+ /**
209
+ * Sanitize text field.
210
+ *
211
+ * @param string $key field key to sanitize.
212
+ * @param string $method method type.
213
+ */
214
+ public function sanitize_text_filter( $key, $method = 'POST' ) {
215
+
216
+ $sanitized_value = '';
217
+
218
+ if ( 'POST' === $method && isset( $_POST[ $key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
219
+ $sanitized_value = sanitize_text_field( wp_unslash( $_POST[ $key ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
220
+ }
221
+
222
+ if ( 'GET' === $method && isset( $_GET[ $key ] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
223
+ $sanitized_value = sanitize_text_field( wp_unslash( $_GET[ $key ] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
224
+ }
225
+
226
+ return $sanitized_value;
227
+ }
228
+
229
  }
230
 
231
  Cartflows_Ca_Helper::get_instance();
modules/cart-abandonment/classes/class-cartflows-ca-order-table.php CHANGED
@@ -69,7 +69,7 @@ class Cartflows_Ca_Order_Table extends WP_List_Table {
69
 
70
  $item_details = unserialize( $item['other_fields'] );
71
 
72
- $page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
73
 
74
  $view_url = add_query_arg(
75
  array(
@@ -183,10 +183,11 @@ class Cartflows_Ca_Order_Table extends WP_List_Table {
183
 
184
  $this->process_bulk_action();
185
 
186
- $paged = filter_input( INPUT_GET, 'paged', FILTER_SANITIZE_NUMBER_INT );
187
- $orderby = filter_input( INPUT_GET, 'orderby', FILTER_SANITIZE_STRING );
188
- $order = filter_input( INPUT_GET, 'order', FILTER_SANITIZE_STRING );
189
- $search_term = filter_input( INPUT_GET, 'search_term', FILTER_SANITIZE_STRING );
 
190
 
191
  $orderby = strtolower( str_replace( ' ', '_', $orderby ) );
192
 
69
 
70
  $item_details = unserialize( $item['other_fields'] );
71
 
72
+ $page = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'page', 'GET' );
73
 
74
  $view_url = add_query_arg(
75
  array(
183
 
184
  $this->process_bulk_action();
185
 
186
+ $paged = filter_input( INPUT_GET, 'paged', FILTER_SANITIZE_NUMBER_INT );
187
+ $helper_class = Cartflows_Ca_Helper::get_instance();
188
+ $orderby = $helper_class->sanitize_text_filter( 'orderby', 'GET' );
189
+ $order = $helper_class->sanitize_text_filter( 'order', 'GET' );
190
+ $search_term = $helper_class->sanitize_text_filter( 'search_term', 'GET' );
191
 
192
  $orderby = strtolower( str_replace( ' ', '_', $orderby ) );
193
 
modules/cart-abandonment/classes/class-cartflows-ca-setting-functions.php CHANGED
@@ -38,7 +38,7 @@ class Cartflows_Ca_Setting_Functions {
38
  */
39
  public function __construct() {
40
 
41
- $page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
42
 
43
  if ( WCF_CA_PAGE_NAME === $page ) {
44
  // Adding filter to add new button to add custom fields.
@@ -144,17 +144,17 @@ class Cartflows_Ca_Setting_Functions {
144
  $coupons = $wpdb->get_results(
145
  $wpdb->prepare(
146
  "SELECT ID, coupon_code, usage_limit, total_usaged, expiry_date FROM (
147
- SELECT p.ID,
148
- p.post_title AS coupon_code,
149
- Max(CASE WHEN pm.meta_key = 'date_expires' AND p.`ID` = pm.`post_id` THEN pm.meta_value END) AS expiry_date,
150
- Max(CASE WHEN pm.meta_key = 'usage_limit' AND p.`ID` = pm.`post_id` THEN pm.meta_value END) AS usage_limit,
151
  Max(CASE WHEN pm.meta_key = 'usage_count' AND p.`ID` = pm.`post_id` THEN pm.meta_value END) AS total_usaged,
152
 
153
  Max(CASE WHEN pm.meta_key = 'coupon_generated_by' AND p.`ID` = pm.`post_id` THEN pm.meta_value END) AS coupon_generated_by
154
- FROM {$wpdb->prefix}posts AS p
155
- INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
156
- WHERE p.`post_type` = %s
157
-
158
  GROUP BY p.ID
159
  ) AS final_res WHERE coupon_generated_by IS NOT NULL AND coupon_generated_by = %s AND ( ( usage_limit = total_usaged ) OR ( expiry_date <= %d AND expiry_date != '') )",
160
  $post_type,
38
  */
39
  public function __construct() {
40
 
41
+ $page = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'page', 'GET' );
42
 
43
  if ( WCF_CA_PAGE_NAME === $page ) {
44
  // Adding filter to add new button to add custom fields.
144
  $coupons = $wpdb->get_results(
145
  $wpdb->prepare(
146
  "SELECT ID, coupon_code, usage_limit, total_usaged, expiry_date FROM (
147
+ SELECT p.ID,
148
+ p.post_title AS coupon_code,
149
+ Max(CASE WHEN pm.meta_key = 'date_expires' AND p.`ID` = pm.`post_id` THEN pm.meta_value END) AS expiry_date,
150
+ Max(CASE WHEN pm.meta_key = 'usage_limit' AND p.`ID` = pm.`post_id` THEN pm.meta_value END) AS usage_limit,
151
  Max(CASE WHEN pm.meta_key = 'usage_count' AND p.`ID` = pm.`post_id` THEN pm.meta_value END) AS total_usaged,
152
 
153
  Max(CASE WHEN pm.meta_key = 'coupon_generated_by' AND p.`ID` = pm.`post_id` THEN pm.meta_value END) AS coupon_generated_by
154
+ FROM {$wpdb->prefix}posts AS p
155
+ INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
156
+ WHERE p.`post_type` = %s
157
+
158
  GROUP BY p.ID
159
  ) AS final_res WHERE coupon_generated_by IS NOT NULL AND coupon_generated_by = %s AND ( ( usage_limit = total_usaged ) OR ( expiry_date <= %d AND expiry_date != '') )",
160
  $post_type,
modules/cart-abandonment/classes/class-cartflows-ca-tracking.php CHANGED
@@ -234,7 +234,8 @@ class Cartflows_Ca_Tracking {
234
  public function unsubscribe_cart_abandonment_emails() {
235
 
236
  $unsubscribe = filter_input( INPUT_GET, 'unsubscribe', FILTER_VALIDATE_BOOLEAN );
237
- $wcf_ac_token = filter_input( INPUT_GET, 'wcf_ac_token', FILTER_SANITIZE_STRING );
 
238
  if ( $unsubscribe && $this->is_valid_token( $wcf_ac_token ) ) {
239
  $token_data = $this->wcf_decode_token( $wcf_ac_token );
240
  if ( isset( $token_data['wcf_session_id'] ) ) {
@@ -264,7 +265,8 @@ class Cartflows_Ca_Tracking {
264
  global $woocommerce;
265
  $result = array();
266
  // Restore only of user is not logged in.
267
- $wcf_ac_token = filter_input( INPUT_GET, 'wcf_ac_token', FILTER_SANITIZE_STRING );
 
268
  if ( $this->is_valid_token( $wcf_ac_token ) ) {
269
 
270
  // Check if `wcf_restore_token` exists to restore cart data.
@@ -341,7 +343,7 @@ class Cartflows_Ca_Tracking {
341
  */
342
  public function test_email_checkout_page() {
343
 
344
- $wcf_ac_token = filter_input( INPUT_GET, 'wcf_ac_token', FILTER_SANITIZE_STRING );
345
  $token_data = $this->wcf_decode_token( $wcf_ac_token );
346
  if ( is_checkout() && ! is_wc_endpoint_url() && isset( $token_data['wcf_preview_email'] ) && $token_data['wcf_preview_email'] ) {
347
  wc_print_notice( __( 'This checkout page is generated by WooCommerce Cart Abandonment Recovery plugin from test mail.', 'woo-cart-abandonment-recovery' ), 'notice' );
@@ -568,7 +570,7 @@ class Cartflows_Ca_Tracking {
568
  $input_post_values = array(
569
  'wcf_billing_company' => array(
570
  'default' => '',
571
- 'sanitize' => FILTER_SANITIZE_STRING,
572
  ),
573
  'wcf_email' => array(
574
  'default' => '',
@@ -576,79 +578,79 @@ class Cartflows_Ca_Tracking {
576
  ),
577
  'wcf_billing_address_1' => array(
578
  'default' => '',
579
- 'sanitize' => FILTER_SANITIZE_STRING,
580
  ),
581
  'wcf_billing_address_2' => array(
582
  'default' => '',
583
- 'sanitize' => FILTER_SANITIZE_STRING,
584
  ),
585
  'wcf_billing_state' => array(
586
  'default' => '',
587
- 'sanitize' => FILTER_SANITIZE_STRING,
588
  ),
589
  'wcf_billing_postcode' => array(
590
  'default' => '',
591
- 'sanitize' => FILTER_SANITIZE_STRING,
592
  ),
593
  'wcf_shipping_first_name' => array(
594
  'default' => '',
595
- 'sanitize' => FILTER_SANITIZE_STRING,
596
  ),
597
  'wcf_shipping_last_name' => array(
598
  'default' => '',
599
- 'sanitize' => FILTER_SANITIZE_STRING,
600
  ),
601
  'wcf_shipping_company' => array(
602
  'default' => '',
603
- 'sanitize' => FILTER_SANITIZE_STRING,
604
  ),
605
  'wcf_shipping_country' => array(
606
  'default' => '',
607
- 'sanitize' => FILTER_SANITIZE_STRING,
608
  ),
609
  'wcf_shipping_address_1' => array(
610
  'default' => '',
611
- 'sanitize' => FILTER_SANITIZE_STRING,
612
  ),
613
  'wcf_shipping_address_2' => array(
614
  'default' => '',
615
- 'sanitize' => FILTER_SANITIZE_STRING,
616
  ),
617
  'wcf_shipping_city' => array(
618
  'default' => '',
619
- 'sanitize' => FILTER_SANITIZE_STRING,
620
  ),
621
  'wcf_shipping_state' => array(
622
  'default' => '',
623
- 'sanitize' => FILTER_SANITIZE_STRING,
624
  ),
625
  'wcf_shipping_postcode' => array(
626
  'default' => '',
627
- 'sanitize' => FILTER_SANITIZE_STRING,
628
  ),
629
  'wcf_order_comments' => array(
630
  'default' => '',
631
- 'sanitize' => FILTER_SANITIZE_STRING,
632
  ),
633
  'wcf_name' => array(
634
  'default' => '',
635
- 'sanitize' => FILTER_SANITIZE_STRING,
636
  ),
637
  'wcf_surname' => array(
638
  'default' => '',
639
- 'sanitize' => FILTER_SANITIZE_STRING,
640
  ),
641
  'wcf_phone' => array(
642
  'default' => '',
643
- 'sanitize' => FILTER_SANITIZE_STRING,
644
  ),
645
  'wcf_country' => array(
646
  'default' => '',
647
- 'sanitize' => FILTER_SANITIZE_STRING,
648
  ),
649
  'wcf_city' => array(
650
  'default' => '',
651
- 'sanitize' => FILTER_SANITIZE_STRING,
652
  ),
653
  'wcf_post_id' => array(
654
  'default' => 0,
@@ -661,7 +663,11 @@ class Cartflows_Ca_Tracking {
661
  foreach ( $input_post_values as $key => $input_post_value ) {
662
 
663
  if ( isset( $_POST[ $key ] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing
664
- $sanitized_post[ $key ] = filter_input( INPUT_POST, $key, $input_post_value['sanitize'] );
 
 
 
 
665
  } else {
666
  $sanitized_post[ $key ] = $input_post_value['default'];
667
  }
@@ -986,7 +992,7 @@ class Cartflows_Ca_Tracking {
986
 
987
  }
988
 
989
- $wcar_page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
990
 
991
  if ( WCF_CA_PAGE_NAME !== $wcar_page ) {
992
  return;
234
  public function unsubscribe_cart_abandonment_emails() {
235
 
236
  $unsubscribe = filter_input( INPUT_GET, 'unsubscribe', FILTER_VALIDATE_BOOLEAN );
237
+ $wcf_ac_token = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'wcf_ac_token', 'GET' );
238
+
239
  if ( $unsubscribe && $this->is_valid_token( $wcf_ac_token ) ) {
240
  $token_data = $this->wcf_decode_token( $wcf_ac_token );
241
  if ( isset( $token_data['wcf_session_id'] ) ) {
265
  global $woocommerce;
266
  $result = array();
267
  // Restore only of user is not logged in.
268
+ $wcf_ac_token = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'wcf_ac_token', 'GET' );
269
+
270
  if ( $this->is_valid_token( $wcf_ac_token ) ) {
271
 
272
  // Check if `wcf_restore_token` exists to restore cart data.
343
  */
344
  public function test_email_checkout_page() {
345
 
346
+ $wcf_ac_token = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'wcf_ac_token', 'GET' );
347
  $token_data = $this->wcf_decode_token( $wcf_ac_token );
348
  if ( is_checkout() && ! is_wc_endpoint_url() && isset( $token_data['wcf_preview_email'] ) && $token_data['wcf_preview_email'] ) {
349
  wc_print_notice( __( 'This checkout page is generated by WooCommerce Cart Abandonment Recovery plugin from test mail.', 'woo-cart-abandonment-recovery' ), 'notice' );
570
  $input_post_values = array(
571
  'wcf_billing_company' => array(
572
  'default' => '',
573
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
574
  ),
575
  'wcf_email' => array(
576
  'default' => '',
578
  ),
579
  'wcf_billing_address_1' => array(
580
  'default' => '',
581
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
582
  ),
583
  'wcf_billing_address_2' => array(
584
  'default' => '',
585
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
586
  ),
587
  'wcf_billing_state' => array(
588
  'default' => '',
589
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
590
  ),
591
  'wcf_billing_postcode' => array(
592
  'default' => '',
593
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
594
  ),
595
  'wcf_shipping_first_name' => array(
596
  'default' => '',
597
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
598
  ),
599
  'wcf_shipping_last_name' => array(
600
  'default' => '',
601
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
602
  ),
603
  'wcf_shipping_company' => array(
604
  'default' => '',
605
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
606
  ),
607
  'wcf_shipping_country' => array(
608
  'default' => '',
609
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
610
  ),
611
  'wcf_shipping_address_1' => array(
612
  'default' => '',
613
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
614
  ),
615
  'wcf_shipping_address_2' => array(
616
  'default' => '',
617
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
618
  ),
619
  'wcf_shipping_city' => array(
620
  'default' => '',
621
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
622
  ),
623
  'wcf_shipping_state' => array(
624
  'default' => '',
625
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
626
  ),
627
  'wcf_shipping_postcode' => array(
628
  'default' => '',
629
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
630
  ),
631
  'wcf_order_comments' => array(
632
  'default' => '',
633
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
634
  ),
635
  'wcf_name' => array(
636
  'default' => '',
637
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
638
  ),
639
  'wcf_surname' => array(
640
  'default' => '',
641
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
642
  ),
643
  'wcf_phone' => array(
644
  'default' => '',
645
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
646
  ),
647
  'wcf_country' => array(
648
  'default' => '',
649
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
650
  ),
651
  'wcf_city' => array(
652
  'default' => '',
653
+ 'sanitize' => 'FILTER_SANITIZE_STRING',
654
  ),
655
  'wcf_post_id' => array(
656
  'default' => 0,
663
  foreach ( $input_post_values as $key => $input_post_value ) {
664
 
665
  if ( isset( $_POST[ $key ] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Missing
666
+ if ( 'FILTER_SANITIZE_STRING' === $input_post_value['sanitize'] ) {
667
+ $sanitized_post[ $key ] = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( $key, 'POST' );
668
+ } else {
669
+ $sanitized_post[ $key ] = filter_input( INPUT_POST, $key, $input_post_value['sanitize'] );
670
+ }
671
  } else {
672
  $sanitized_post[ $key ] = $input_post_value['default'];
673
  }
992
 
993
  }
994
 
995
+ $wcar_page = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'page', 'GET' );
996
 
997
  if ( WCF_CA_PAGE_NAME !== $wcar_page ) {
998
  return;
modules/cart-abandonment/includes/cartflows-cart-abandonment-reports.php CHANGED
@@ -123,7 +123,7 @@ if ( ! defined( 'ABSPATH' ) ) {
123
  <div class="wcf-search-orders" id="wcf_search_wrapper" >
124
  <div class="search-box">
125
  <?php
126
- $search_term = filter_input( INPUT_GET, 'search_term', FILTER_SANITIZE_STRING );
127
  ?>
128
  <input type="search" id="wcf_search_id_search_input" name="s" placeholder="<?php echo esc_html__( 'Search by email', 'woo-cart-abandonment-recovery' ); ?>" value="<?php echo esc_attr( $search_term ); ?>">
129
  <input type="submit" id="wcf_search_id_submit" class="button" value="<?php esc_html_e( 'Search Orders', 'woo-cart-abandonment-recovery' ); ?>">
@@ -143,7 +143,7 @@ if ( ! defined( 'ABSPATH' ) ) {
143
 
144
  <?php
145
  if ( count( $wcf_list_table->items ) ) {
146
- $wcar_page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
147
  ?>
148
  <form id="wcf-cart-abandonment-table" method="GET">
149
  <input type="hidden" name="page" value="<?php echo esc_html( $wcar_page ); ?>"/>
123
  <div class="wcf-search-orders" id="wcf_search_wrapper" >
124
  <div class="search-box">
125
  <?php
126
+ $search_term = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'search_term', 'GET' );
127
  ?>
128
  <input type="search" id="wcf_search_id_search_input" name="s" placeholder="<?php echo esc_html__( 'Search by email', 'woo-cart-abandonment-recovery' ); ?>" value="<?php echo esc_attr( $search_term ); ?>">
129
  <input type="submit" id="wcf_search_id_submit" class="button" value="<?php esc_html_e( 'Search Orders', 'woo-cart-abandonment-recovery' ); ?>">
143
 
144
  <?php
145
  if ( count( $wcf_list_table->items ) ) {
146
+ $wcar_page = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'page', 'GET' );
147
  ?>
148
  <form id="wcf-cart-abandonment-table" method="GET">
149
  <input type="hidden" name="page" value="<?php echo esc_html( $wcar_page ); ?>"/>
modules/cart-abandonment/includes/cartflows-cart-abandonment-tabs.php CHANGED
@@ -16,8 +16,9 @@ if ( ! defined( 'ABSPATH' ) ) {
16
  <h1 id="wcf_cart_abandonment_tracking_table"><?php echo esc_html__( 'WooCommerce Cart Abandonment Recovery ', 'woo-cart-abandonment-recovery' ); ?></h1>
17
  <?php
18
 
19
- $wcar_action = filter_input( INPUT_GET, 'action', FILTER_SANITIZE_STRING );
20
- $sub_action = filter_input( INPUT_GET, 'sub_action', FILTER_SANITIZE_STRING );
 
21
 
22
 
23
  if ( ! $wcar_action ) {
@@ -49,7 +50,7 @@ if ( ! defined( 'ABSPATH' ) ) {
49
  case WCF_SUB_ACTION_REPORTS_RESCHEDULE:
50
  $email_schedule = Cartflows_Ca_Email_Schedule::get_instance();
51
 
52
- $session_id = filter_input( INPUT_GET, 'session_id', FILTER_SANITIZE_STRING );
53
  if ( $session_id ) {
54
  $email_schedule->schedule_emails( $session_id, true );
55
  }
@@ -101,7 +102,7 @@ if ( ! defined( 'ABSPATH' ) ) {
101
  case WCF_SUB_ACTION_SAVE_EMAIL_TEMPLATES:
102
  check_ajax_referer( WCF_EMAIL_TEMPLATES_NONCE, '_wpnonce' );
103
 
104
- $wcf_settings_frm = filter_input( INPUT_POST, 'wcf_settings_frm', FILTER_SANITIZE_STRING );
105
  $action_id = filter_input( INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT );
106
 
107
  if ( 'save' === $wcf_settings_frm ) {
16
  <h1 id="wcf_cart_abandonment_tracking_table"><?php echo esc_html__( 'WooCommerce Cart Abandonment Recovery ', 'woo-cart-abandonment-recovery' ); ?></h1>
17
  <?php
18
 
19
+ $helper_class = Cartflows_Ca_Helper::get_instance();
20
+ $wcar_action = $helper_class->sanitize_text_filter( 'action', 'GET' );
21
+ $sub_action = $helper_class->sanitize_text_filter( 'sub_action', 'GET' );
22
 
23
 
24
  if ( ! $wcar_action ) {
50
  case WCF_SUB_ACTION_REPORTS_RESCHEDULE:
51
  $email_schedule = Cartflows_Ca_Email_Schedule::get_instance();
52
 
53
+ $session_id = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'session_id', 'GET' );
54
  if ( $session_id ) {
55
  $email_schedule->schedule_emails( $session_id, true );
56
  }
102
  case WCF_SUB_ACTION_SAVE_EMAIL_TEMPLATES:
103
  check_ajax_referer( WCF_EMAIL_TEMPLATES_NONCE, '_wpnonce' );
104
 
105
+ $wcf_settings_frm = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'wcf_settings_frm', 'POST' );
106
  $action_id = filter_input( INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT );
107
 
108
  if ( 'save' === $wcf_settings_frm ) {
modules/weekly-email-report/class-cartflows-ca-admin-report-emails.php CHANGED
@@ -103,13 +103,6 @@ class Cartflows_Ca_Admin_Report_Emails {
103
  */
104
  public function get_email_subject() {
105
 
106
- $home_url = wp_parse_url( home_url() );
107
- $site_domain = $home_url['host'];
108
-
109
- if ( is_multisite() && isset( $home_url['path'] ) ) {
110
- $site_domain .= $home_url['path'];
111
- }
112
-
113
  return esc_html__( 'Your Weekly Cart Abandonment Summary is here - CartFlows', 'woo-cart-abandonment-recovery' );
114
  }
115
 
@@ -149,7 +142,7 @@ class Cartflows_Ca_Admin_Report_Emails {
149
  public function unsubscribe_cart_abandonment_weekly_emails() {
150
 
151
  $unsubscribe = filter_input( INPUT_GET, 'unsubscribe_weekly_email', FILTER_VALIDATE_BOOLEAN );
152
- $page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_STRING );
153
  $email = filter_input( INPUT_GET, 'email', FILTER_SANITIZE_EMAIL );
154
 
155
  if ( $unsubscribe && 'woo-cart-abandonment-recovery' === $page && ! empty( $email ) && is_user_logged_in() && current_user_can( 'manage_options' ) ) {
103
  */
104
  public function get_email_subject() {
105
 
 
 
 
 
 
 
 
106
  return esc_html__( 'Your Weekly Cart Abandonment Summary is here - CartFlows', 'woo-cart-abandonment-recovery' );
107
  }
108
 
142
  public function unsubscribe_cart_abandonment_weekly_emails() {
143
 
144
  $unsubscribe = filter_input( INPUT_GET, 'unsubscribe_weekly_email', FILTER_VALIDATE_BOOLEAN );
145
+ $page = Cartflows_Ca_Helper::get_instance()->sanitize_text_filter( 'page', 'GET' );
146
  $email = filter_input( INPUT_GET, 'email', FILTER_SANITIZE_EMAIL );
147
 
148
  if ( $unsubscribe && 'woo-cart-abandonment-recovery' === $page && ! empty( $email ) && is_user_logged_in() && current_user_can( 'manage_options' ) ) {
modules/weekly-email-report/templates/email-bsf-product-block.php CHANGED
@@ -25,7 +25,7 @@ if ( ! defined( 'ABSPATH' ) ) {
25
  <?php
26
  echo esc_html__(
27
  'Would you like to try our other products that help WooCommerce stores sell more?',
28
- 'cartflows'
29
  )
30
  ?>
31
   </h1>
@@ -38,7 +38,7 @@ if ( ! defined( 'ABSPATH' ) ) {
38
  <div align="center">
39
  <!--[if mso]><v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" style="height:43px;width:273px;v-text-anchor:middle;" arcsize="10%" strokeweight="0.75pt" strokecolor="#F06434" fillcolor="#f06434"><w:anchorlock/><v:textbox inset="0px,0px,0px,0px"><center style="color:#ffffff; font-family:Arial, sans-serif; font-size:14px"><![endif]-->
40
  <div style="text-decoration:none;display:inline-block;color:#ffffff;background-color:#f06434;border-radius:4px;width:auto;border-top:1px solid #F06434;border-right:1px solid #F06434;border-bottom:1px solid #F06434;border-left:1px solid #F06434;padding-top:5px;padding-bottom:5px;font-family:Arial, Helvetica Neue, Helvetica, sans-serif;text-align:center;mso-border-alt:none;word-break:keep-all;">
41
- <span style="padding-left:20px;padding-right:20px;font-size:14px;display:inline-block;letter-spacing:normal;"><span style="font-size: 16px; line-height: 2; word-break: break-word; mso-line-height-alt: 32px;"><strong><span data-mce-style="font-size: 14px; line-height: 28px;" style="font-size: 14px; line-height: 28px;"><a href="https://cartflows.com/products-to-scale-growth/?utm_source=newsletter&utm_medium=email&utm_campaign=cart-abandonment-bsf" target="_blank" style="text-decoration:none; color:#ffffff;"><?php echo esc_html__( 'CHECK OUR OTHERS PRODUCTS', 'cartflows' ); ?></a></span></strong></span></span>
42
  </div>
43
  <!--[if mso]></center></v:textbox></v:roundrect><![endif]-->
44
  </div>
25
  <?php
26
  echo esc_html__(
27
  'Would you like to try our other products that help WooCommerce stores sell more?',
28
+ 'woo-cart-abandonment-recovery'
29
  )
30
  ?>
31
   </h1>
38
  <div align="center">
39
  <!--[if mso]><v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" style="height:43px;width:273px;v-text-anchor:middle;" arcsize="10%" strokeweight="0.75pt" strokecolor="#F06434" fillcolor="#f06434"><w:anchorlock/><v:textbox inset="0px,0px,0px,0px"><center style="color:#ffffff; font-family:Arial, sans-serif; font-size:14px"><![endif]-->
40
  <div style="text-decoration:none;display:inline-block;color:#ffffff;background-color:#f06434;border-radius:4px;width:auto;border-top:1px solid #F06434;border-right:1px solid #F06434;border-bottom:1px solid #F06434;border-left:1px solid #F06434;padding-top:5px;padding-bottom:5px;font-family:Arial, Helvetica Neue, Helvetica, sans-serif;text-align:center;mso-border-alt:none;word-break:keep-all;">
41
+ <span style="padding-left:20px;padding-right:20px;font-size:14px;display:inline-block;letter-spacing:normal;"><span style="font-size: 16px; line-height: 2; word-break: break-word; mso-line-height-alt: 32px;"><strong><span data-mce-style="font-size: 14px; line-height: 28px;" style="font-size: 14px; line-height: 28px;"><a href="https://cartflows.com/products-to-scale-growth/?utm_source=newsletter&utm_medium=email&utm_campaign=cart-abandonment-bsf" target="_blank" style="text-decoration:none; color:#ffffff;"><?php echo esc_html__( 'TRY OUR OTHER PRODUCTS', 'woo-cart-abandonment-recovery' ); ?></a></span></strong></span></span>
42
  </div>
43
  <!--[if mso]></center></v:textbox></v:roundrect><![endif]-->
44
  </div>
modules/weekly-email-report/templates/email-cf-block.php CHANGED
@@ -25,7 +25,7 @@ if ( ! defined( 'ABSPATH' ) ) {
25
  <?php
26
  echo esc_html__(
27
  'CartFlows Pro can help you to increase conversion and maximize profits.',
28
- 'cartflows'
29
  )
30
  ?>
31
  </h1>
@@ -42,7 +42,7 @@ if ( ! defined( 'ABSPATH' ) ) {
42
  <?php
43
  echo esc_html__(
44
  'Want to earn 30% more store revenue on autopilot? CartFlows order bumps and upsells help you do just that. Try CartFlows Pro risk-free for 30 days!',
45
- 'cartflows'
46
  )
47
  ?>
48
  </span>
@@ -60,7 +60,7 @@ if ( ! defined( 'ABSPATH' ) ) {
60
  <?php
61
  echo esc_html__(
62
  'GET CARTFLOWS NOW',
63
- 'cartflows'
64
  )
65
  ?>
66
  </span></strong></span></span></a>
25
  <?php
26
  echo esc_html__(
27
  'CartFlows Pro can help you to increase conversion and maximize profits.',
28
+ 'woo-cart-abandonment-recovery'
29
  )
30
  ?>
31
  </h1>
42
  <?php
43
  echo esc_html__(
44
  'Want to earn 30% more store revenue on autopilot? CartFlows order bumps and upsells help you do just that. Try CartFlows Pro risk-free for 30 days!',
45
+ 'woo-cart-abandonment-recovery'
46
  )
47
  ?>
48
  </span>
60
  <?php
61
  echo esc_html__(
62
  'GET CARTFLOWS NOW',
63
+ 'woo-cart-abandonment-recovery'
64
  )
65
  ?>
66
  </span></strong></span></span></a>
modules/weekly-email-report/templates/email-content-section.php CHANGED
@@ -23,7 +23,7 @@ if ( ! defined( 'ABSPATH' ) ) {
23
  <tr>
24
  <td style="padding-bottom:10px;padding-left:10px;padding-top:60px;text-align:center;width:100%;">
25
  <h1 style="margin: 0; color: #1f2937; direction: ltr; font-family: Arial, Helvetica Neue, Helvetica, sans-serif; font-size: 32px; font-weight: 400; letter-spacing: normal; line-height: 120%; text-align: left; margin-top: 0; margin-bottom: 0;">
26
- <?php echo sprintf(esc_html__('Hey %s!', 'cartflows'), esc_attr__($user_name)); // phpcs:ignore
27
  ?>
28
  </h1>
29
  </td>
@@ -39,8 +39,8 @@ if ( ! defined( 'ABSPATH' ) ) {
39
  echo sprintf(
40
  /* translators: %1$s: store name, %2$s: total revenue. %3$s: total revenue*/
41
  esc_html__(
42
- '%1$s has recovered a total %2$s revenue in last week from CartFlows cart abandonment! And in last month, it generated %3$s',
43
- 'cartflows'
44
  ),
45
  esc_attr( $store_name ),
46
  wp_kses_post( wc_price( $report_details['recovered_revenue'] ) ),
@@ -76,8 +76,8 @@ if ( ! defined( 'ABSPATH' ) ) {
76
  <span style="font-size:12px;">
77
  <?php
78
  echo esc_html__(
79
- '(In last 7 days)',
80
- 'cartflows'
81
  )
82
  ?>
83
  </span>
@@ -90,8 +90,8 @@ if ( ! defined( 'ABSPATH' ) ) {
90
  <p style="margin: 0; text-align: center;"><span style="font-size:12px;">
91
  <?php
92
  echo esc_html__(
93
- '(In last 30 days)',
94
- 'cartflows'
95
  )
96
  ?>
97
  </span></p>
23
  <tr>
24
  <td style="padding-bottom:10px;padding-left:10px;padding-top:60px;text-align:center;width:100%;">
25
  <h1 style="margin: 0; color: #1f2937; direction: ltr; font-family: Arial, Helvetica Neue, Helvetica, sans-serif; font-size: 32px; font-weight: 400; letter-spacing: normal; line-height: 120%; text-align: left; margin-top: 0; margin-bottom: 0;">
26
+ <?php /* translators: %s admin name */ echo sprintf( esc_html__( 'Hey %s!', 'woo-cart-abandonment-recovery' ), esc_attr__( $user_name, 'woo-cart-abandonment-recovery' ) ); // phpcs:ignore
27
  ?>
28
  </h1>
29
  </td>
39
  echo sprintf(
40
  /* translators: %1$s: store name, %2$s: total revenue. %3$s: total revenue*/
41
  esc_html__(
42
+ '%1$s has recovered a total %2$s revenue in last week by using Cart Abandonment Recover by CartFlows! And in last month, we recovered %3$s',
43
+ 'woo-cart-abandonment-recovery'
44
  ),
45
  esc_attr( $store_name ),
46
  wp_kses_post( wc_price( $report_details['recovered_revenue'] ) ),
76
  <span style="font-size:12px;">
77
  <?php
78
  echo esc_html__(
79
+ '(Last 7 days)',
80
+ 'woo-cart-abandonment-recovery'
81
  )
82
  ?>
83
  </span>
90
  <p style="margin: 0; text-align: center;"><span style="font-size:12px;">
91
  <?php
92
  echo esc_html__(
93
+ '(Last 30 days)',
94
+ 'woo-cart-abandonment-recovery'
95
  )
96
  ?>
97
  </span></p>
modules/weekly-email-report/templates/email-footer.php CHANGED
@@ -67,7 +67,7 @@ if ( ! defined( 'ABSPATH' ) ) {
67
  </p>
68
  <p style="margin: 0; text-align: center; mso-line-height-alt: 16.8px;">
69
   </p>
70
- <p style="margin: 0; text-align: center;"><a href="<?php echo esc_url( $unsubscribe_link ); ?>" rel="noopener" style="color: #8a3b8f;" target="_blank"><?php echo esc_html__( 'Unsubscribe', 'cartflows' ); ?></a></p>
71
  </div>
72
  </div>
73
  </td>
67
  </p>
68
  <p style="margin: 0; text-align: center; mso-line-height-alt: 16.8px;">
69
   </p>
70
+ <p style="margin: 0; text-align: center;"><a href="<?php echo esc_url( $unsubscribe_link ); ?>" rel="noopener" style="color: #8a3b8f;" target="_blank"><?php echo esc_html__( 'Unsubscribe', 'woo-cart-abandonment-recovery' ); ?></a></p>
71
  </div>
72
  </div>
73
  </td>
modules/weekly-email-report/templates/email-header.php CHANGED
@@ -29,7 +29,7 @@ if ( ! defined( 'ABSPATH' ) ) {
29
  <?php
30
  echo esc_html__(
31
  'Your weekly cart abandonment summary from CartFlows.',
32
- 'cartflows'
33
  )
34
  ?>
35
  </strong>
29
  <?php
30
  echo esc_html__(
31
  'Your weekly cart abandonment summary from CartFlows.',
32
+ 'woo-cart-abandonment-recovery'
33
  )
34
  ?>
35
  </strong>
modules/weekly-email-report/templates/email-recovery-stat.php CHANGED
@@ -22,7 +22,7 @@ if ( ! defined( 'ABSPATH' ) ) {
22
  <tr>
23
  <td style="text-align:center;width:100%;">
24
  <h1 style="margin: 0; color: #1f2937; direction: ltr; font-family: Arial, Helvetica Neue, Helvetica, sans-serif; font-size: 28px; font-weight: 400; letter-spacing: normal; line-height: 120%; text-align: center; margin-top: 0; margin-bottom: 0;">
25
- <?php echo esc_html__( 'Some More Numbers', 'cartflows' ); ?></h1>
26
  </td>
27
  </tr>
28
  </table>
@@ -71,9 +71,8 @@ if ( ! defined( 'ABSPATH' ) ) {
71
  <p style="margin: 0; text-align: center;"><span style="font-size:16px;">
72
  <?php
73
  echo esc_html__(
74
- 'Carts
75
- abandoned',
76
- 'cartflows'
77
  )
78
  ?>
79
  </span></p>
@@ -100,9 +99,8 @@ if ( ! defined( 'ABSPATH' ) ) {
100
  <p style="margin: 0; text-align: center;"><span style="font-size:16px;">
101
  <?php
102
  echo esc_html__(
103
- 'Carts
104
- recovered',
105
- 'cartflows'
106
  )
107
  ?>
108
  </span></p>
@@ -129,9 +127,8 @@ if ( ! defined( 'ABSPATH' ) ) {
129
  <p style="margin: 0; text-align: center;"><span style="font-size:16px;">
130
  <?php
131
  echo esc_html__(
132
- 'Recovery
133
- rate',
134
- 'cartflows'
135
  )
136
  ?>
137
  </span></p>
22
  <tr>
23
  <td style="text-align:center;width:100%;">
24
  <h1 style="margin: 0; color: #1f2937; direction: ltr; font-family: Arial, Helvetica Neue, Helvetica, sans-serif; font-size: 28px; font-weight: 400; letter-spacing: normal; line-height: 120%; text-align: center; margin-top: 0; margin-bottom: 0;">
25
+ <?php echo esc_html__( 'Full Overview', 'woo-cart-abandonment-recovery' ); ?></h1>
26
  </td>
27
  </tr>
28
  </table>
71
  <p style="margin: 0; text-align: center;"><span style="font-size:16px;">
72
  <?php
73
  echo esc_html__(
74
+ 'Carts Abandoned',
75
+ 'woo-cart-abandonment-recovery'
 
76
  )
77
  ?>
78
  </span></p>
99
  <p style="margin: 0; text-align: center;"><span style="font-size:16px;">
100
  <?php
101
  echo esc_html__(
102
+ 'Carts Recovered',
103
+ 'woo-cart-abandonment-recovery'
 
104
  )
105
  ?>
106
  </span></p>
127
  <p style="margin: 0; text-align: center;"><span style="font-size:16px;">
128
  <?php
129
  echo esc_html__(
130
+ 'Recovery Rate',
131
+ 'woo-cart-abandonment-recovery'
 
132
  )
133
  ?>
134
  </span></p>
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: sujaypawar, wpcrafter
3
  Tags: woocommerce, cart abandonment, cart recovery
4
  Requires at least: 5.4
5
  Tested up to: 6.1
6
- Stable tag: 1.2.20
7
- Requires PHP: 5.6
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -128,6 +128,10 @@ Here are few thoughts behind making it available for free:
128
 
129
  == Changelog ==
130
 
 
 
 
 
131
  = Version 1.2.20 - Monday, 7th November 2022 =
132
  * New: Added `woo_ca_session_abandoned_data` filter to extend the session data.
133
 
3
  Tags: woocommerce, cart abandonment, cart recovery
4
  Requires at least: 5.4
5
  Tested up to: 6.1
6
+ Stable tag: 1.2.21
7
+ Requires PHP: 7.2
8
  License: GPLv2 or later
9
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
10
 
128
 
129
  == Changelog ==
130
 
131
+ = Version 1.2.21 - Thursday, 15th December 2022 =
132
+ * Fix: Fixed deprecation notices for PHP 8.1.
133
+ * Fix: Some strings were not translatable.
134
+
135
  = Version 1.2.20 - Monday, 7th November 2022 =
136
  * New: Added `woo_ca_session_abandoned_data` filter to extend the session data.
137
 
woo-cart-abandonment-recovery.php CHANGED
@@ -3,12 +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.2.20
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: 7.1.0
12
  *
13
  * @package Woocommerce-Cart-Abandonment-Recovery
14
  */
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.2.21
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: 7.2.0
12
  *
13
  * @package Woocommerce-Cart-Abandonment-Recovery
14
  */