Email Subscribers & Newsletters - Version 5.3.7

Version Description

  • New: Added preview for workflow emails
  • Fix: Duplicate drafts were getting created for campaigns in some cases
  • Fix: Custom post type were not getting saved in post notification campaigns
  • Fix: Encoding issues with pepipost email sending

=

Download this release

Release Info

Developer Icegram
Plugin Icon 128x128 Email Subscribers & Newsletters
Version 5.3.7
Comparing to
See all releases

Code changes from version 5.3.6 to 5.3.7

email-subscribers.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Email Subscribers & Newsletters
4
  * Plugin URI: https://www.icegram.com/
5
  * Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
6
- * Version: 5.3.6
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
@@ -187,7 +187,7 @@ if ( 'premium' === $ig_es_plan ) {
187
  /* ***************************** Initial Compatibility Work (End) ******************* */
188
 
189
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
190
- define( 'ES_PLUGIN_VERSION', '5.3.6' );
191
  }
192
 
193
  // Plugin Folder Path.
3
  * Plugin Name: Email Subscribers & Newsletters
4
  * Plugin URI: https://www.icegram.com/
5
  * Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
6
+ * Version: 5.3.7
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
187
  /* ***************************** Initial Compatibility Work (End) ******************* */
188
 
189
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
190
+ define( 'ES_PLUGIN_VERSION', '5.3.7' );
191
  }
192
 
193
  // Plugin Folder Path.
lite/admin/class-es-campaign-admin.php CHANGED
@@ -1041,11 +1041,18 @@ if ( ! class_exists( 'ES_Campaign_Admin' ) ) {
1041
 
1042
  public function add_post_notification_data( $campaign_data ) {
1043
 
1044
- $cat = ! empty( $campaign_data['es_note_cat'] ) ? $campaign_data['es_note_cat'] : array();
1045
  $es_note_cat_parent = $campaign_data['es_note_cat_parent'];
1046
- $cat = ( ! empty( $es_note_cat_parent ) && in_array( $es_note_cat_parent, array( '{a}All{a}', '{a}None{a}' ), true ) ) ? array( $es_note_cat_parent ) : $cat;
1047
 
1048
- $campaign_data['categories'] = ES_Common::convert_categories_array_to_string( $cat );
 
 
 
 
 
 
 
1049
 
1050
  return $campaign_data;
1051
  }
1041
 
1042
  public function add_post_notification_data( $campaign_data ) {
1043
 
1044
+ $categories = ! empty( $campaign_data['es_note_cat'] ) ? $campaign_data['es_note_cat'] : array();
1045
  $es_note_cat_parent = $campaign_data['es_note_cat_parent'];
1046
+ $categories = ( ! empty( $es_note_cat_parent ) && in_array( $es_note_cat_parent, array( '{a}All{a}', '{a}None{a}' ), true ) ) ? array( $es_note_cat_parent ) : $categories;
1047
 
1048
+ // Check if custom post types are selected.
1049
+ if ( ! empty( $campaign_data['es_note_cpt'] ) ) {
1050
+ // Merge categories and selected custom post types.
1051
+ $categories = array_merge( $categories, $campaign_data['es_note_cpt'] );
1052
+ }
1053
+
1054
+
1055
+ $campaign_data['categories'] = ES_Common::convert_categories_array_to_string( $categories );
1056
 
1057
  return $campaign_data;
1058
  }
lite/admin/js/email-subscribers-admin.js CHANGED
@@ -1216,8 +1216,15 @@
1216
  $('#es_preview_template').hide();
1217
  });
1218
 
1219
-
1220
-
 
 
 
 
 
 
 
1221
 
1222
  // Workflow JS
1223
  IG_ES_Workflows = {
@@ -1430,6 +1437,76 @@
1430
  IG_ES_Workflows.action_delete($action);
1431
  IG_ES_Workflows.maybe_show_run_option();
1432
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1433
 
1434
  $('#ig_es_workflow_save #publish').on('click', function(e){
1435
  let trigger_name = $('.js-trigger-select').val();
@@ -1459,6 +1536,16 @@
1459
  });
1460
  }
1461
  });
 
 
 
 
 
 
 
 
 
 
1462
  },
1463
 
1464
  add_new_action: function() {
@@ -1531,10 +1618,20 @@
1531
  $action.find('.action-title').text( response.data.title );
1532
 
1533
  $action.find('.js-action-description').html( response.data.description );
1534
-
 
1535
  });
1536
 
1537
  },
 
 
 
 
 
 
 
 
 
1538
 
1539
  get_number_of_actions: function () {
1540
  return $('.ig-es-action:not([data-action-number=""])').length;
@@ -2519,7 +2616,14 @@
2519
  });
2520
  }
2521
 
 
2522
  function ig_es_draft_campaign( trigger_elem ) {
 
 
 
 
 
 
2523
  let is_draft_bttuon = $(trigger_elem).hasClass('ig_es_draft_campaign');
2524
  let is_save_bttuon = $(trigger_elem).hasClass('ig_es_save_campaign');
2525
 
@@ -2528,6 +2632,7 @@
2528
  if ( is_draft_bttuon ) {
2529
  alert( ig_es_js_data.i18n_data.campaign_subject_empty_message );
2530
  }
 
2531
  return;
2532
  }
2533
 
@@ -2572,6 +2677,7 @@
2572
  alert( ig_es_js_data.i18n_data.ajax_error_message );
2573
  }
2574
  }).always(function(){
 
2575
  $('#ig_es_campaign_submitted').removeClass('opacity-50 cursor-not-allowed').removeAttr('disabled');
2576
  });
2577
  }
1216
  $('#es_preview_template').hide();
1217
  });
1218
 
1219
+ // Prevent campaign form submission on enter key press
1220
+ $('#campaign_form input').on('keyup keypress', function(e) {
1221
+ let pressedKeyCode = e.keyCode || e.which;
1222
+ let enterKeyCode = 13;
1223
+ let enterKeyPressed = pressedKeyCode === enterKeyCode;
1224
+ if ( enterKeyPressed ) {
1225
+ e.preventDefault();
1226
+ }
1227
+ });
1228
 
1229
  // Workflow JS
1230
  IG_ES_Workflows = {
1437
  IG_ES_Workflows.action_delete($action);
1438
  IG_ES_Workflows.maybe_show_run_option();
1439
  });
1440
+
1441
+ // Preview action
1442
+ $(document).on('click', '.js-preview-action', function (e) {
1443
+ e.preventDefault();
1444
+ e.stopImmediatePropagation();
1445
+ let preview_action_button = $(this);
1446
+ let $action = preview_action_button.parents('.ig-es-action').first();
1447
+ let action_id = $action.data('action-number');
1448
+ ig_es_sync_wp_editor_content();
1449
+ let content_container = $('#workflow-email-preview-container');
1450
+ let content_loader_container = $('#workflow-email-preview-loader');
1451
+
1452
+ let content = $('textarea[name="ig_es_workflow_data[actions][' + action_id + '][ig-es-email-content]"]').val();
1453
+ let subject = $('textarea[name="ig_es_workflow_data[actions][' + action_id + '][ig-es-email-subject]"]').val();
1454
+
1455
+ if (!content) {
1456
+ alert(ig_es_js_data.i18n_data.empty_template_message);
1457
+ return;
1458
+ }
1459
+ preview_action_button.attr('disabled', true);
1460
+ $('#browser-preview-tab').trigger('click');
1461
+ let form_data = {
1462
+ 'action': 'ig_es_get_workflow_email_preview',
1463
+ 'security': ig_es_js_data.security,
1464
+ 'content': content,
1465
+ 'subject': subject,
1466
+ 'action_id': action_id,
1467
+ 'preview_type': 'inline',
1468
+ 'trigger': $('select[name="ig_es_workflow_data[trigger_name]"]').val()
1469
+ };
1470
+ content_container.addClass('hidden');
1471
+ content_loader_container.removeClass('hidden');
1472
+
1473
+ $('#workflow-email-preview-popup').removeClass('hidden');
1474
+ $('#workflow-email-preview-popup').css('visibility', 'visible');
1475
+ $('#send-workflow-preview-email-btn').data('action', action_id);
1476
+ $.ajax({
1477
+ method: 'POST',
1478
+ url: ajaxurl,
1479
+ data: form_data,
1480
+ dataType: 'json',
1481
+ success: function (response) {
1482
+ preview_action_button.attr('disabled', false);
1483
+ if (response.success) {
1484
+ if ('undefined' !== typeof response.data) {
1485
+ let response_data = response.data;
1486
+ let preview_html = response_data.preview_html;
1487
+ ig_es_load_iframe_preview('#workflow-preview-iframe-container', preview_html);
1488
+ // We are setting popup visiblity hidden so that we can calculate iframe width/height before it is shown to user.
1489
+ }
1490
+ } else {
1491
+ alert(ig_es_js_data.i18n_data.ajax_error_message);
1492
+ }
1493
+ },
1494
+ error: function (err) {
1495
+ preview_action_button.attr('disabled', false);
1496
+ alert(ig_es_js_data.i18n_data.ajax_error_message);
1497
+ }
1498
+ }).done(function () {
1499
+ preview_action_button.attr('disabled', false);
1500
+ content_container.removeClass('hidden');
1501
+ content_loader_container.addClass('hidden');
1502
+ });
1503
+ });
1504
+
1505
+ $('#close-workflow-email-preview-popup').on('click', function (event) {
1506
+ event.preventDefault();
1507
+ $('#workflow-email-preview-popup').addClass('hidden');
1508
+ $('#workflow-email-preview-popup').css('visibility', 'hidden');
1509
+ });
1510
 
1511
  $('#ig_es_workflow_save #publish').on('click', function(e){
1512
  let trigger_name = $('.js-trigger-select').val();
1536
  });
1537
  }
1538
  });
1539
+ this.maybe_show_action_preview_on_init();
1540
+ },
1541
+
1542
+ maybe_show_action_preview_on_init: function () {
1543
+ let actions = $('.ig-es-action:not([data-action-number = ""]) .js-action-select');
1544
+ $(actions).each(function (action) {
1545
+ let selected_action = $(this).val();
1546
+ let $action = $(this).parents('.ig-es-action').first();
1547
+ IG_ES_Workflows.maybe_show_action_preview_option($action, selected_action);
1548
+ });
1549
  },
1550
 
1551
  add_new_action: function() {
1618
  $action.find('.action-title').text( response.data.title );
1619
 
1620
  $action.find('.js-action-description').html( response.data.description );
1621
+
1622
+ IG_ES_Workflows.maybe_show_action_preview_option( $action, selected_action );
1623
  });
1624
 
1625
  },
1626
+
1627
+ maybe_show_action_preview_option: function ($action, selected_action) {
1628
+ var preview_option = $action.find('.ig-es-action__header .row-options .js-preview-action');
1629
+ if ('ig_es_send_email' === selected_action) {
1630
+ preview_option.removeClass('hidden');
1631
+ } else {
1632
+ preview_option.addClass('hidden');
1633
+ }
1634
+ },
1635
 
1636
  get_number_of_actions: function () {
1637
  return $('.ig-es-action:not([data-action-number=""])').length;
2616
  });
2617
  }
2618
 
2619
+ let drafting_campaign = false;
2620
  function ig_es_draft_campaign( trigger_elem ) {
2621
+
2622
+ if( drafting_campaign){
2623
+ return;
2624
+ }
2625
+
2626
+ drafting_campaign = true;
2627
  let is_draft_bttuon = $(trigger_elem).hasClass('ig_es_draft_campaign');
2628
  let is_save_bttuon = $(trigger_elem).hasClass('ig_es_save_campaign');
2629
 
2632
  if ( is_draft_bttuon ) {
2633
  alert( ig_es_js_data.i18n_data.campaign_subject_empty_message );
2634
  }
2635
+ drafting_campaign = false;
2636
  return;
2637
  }
2638
 
2677
  alert( ig_es_js_data.i18n_data.ajax_error_message );
2678
  }
2679
  }).always(function(){
2680
+ drafting_campaign = false;
2681
  $('#ig_es_campaign_submitted').removeClass('opacity-50 cursor-not-allowed').removeAttr('disabled');
2682
  });
2683
  }
lite/includes/class-email-subscribers.php CHANGED
@@ -899,6 +899,7 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
899
  'lite/includes/workflows/actions/class-es-action-update-contact.php',
900
  'lite/includes/workflows/actions/class-es-action-send-email.php',
901
  'lite/includes/workflows/class-es-workflow-actions.php',
 
902
 
903
  // Workflow Query
904
  'lite/includes/workflows/class-es-workflow-query.php',
899
  'lite/includes/workflows/actions/class-es-action-update-contact.php',
900
  'lite/includes/workflows/actions/class-es-action-send-email.php',
901
  'lite/includes/workflows/class-es-workflow-actions.php',
902
+ 'lite/includes/workflows/class-es-workflow-action-preview.php',
903
 
904
  // Workflow Query
905
  'lite/includes/workflows/class-es-workflow-query.php',
lite/includes/class-es-common.php CHANGED
@@ -673,7 +673,7 @@ class ES_Common {
673
  } else {
674
  $checked = '';
675
  }
676
- $custom_post_type_html .= '<tr><td style="padding-top:4px;padding-bottom:4px;padding-right:10px;"><span class="block pr-4 text-sm font-medium text-gray-600 pb-2"><input type="checkbox" ' . esc_attr( $checked ) . ' value="{T}' . esc_html( $post_type ) . '{T}" id="es_note_cat[]" class="es_custom_post_type form-checkbox" name="campaign_data[es_note_cat][]">' . esc_html( $post_type ) . '</td></tr>';
677
  }
678
  } else {
679
  $custom_post_type_html = '<tr><span class="block pr-4 text-sm font-normal text-gray-600 pb-2">' . __( 'No Custom Post Types Available', 'email-subscribers' ) . '</tr>';
673
  } else {
674
  $checked = '';
675
  }
676
+ $custom_post_type_html .= '<tr><td style="padding-top:4px;padding-bottom:4px;padding-right:10px;"><span class="block pr-4 text-sm font-medium text-gray-600 pb-2"><input type="checkbox" ' . esc_attr( $checked ) . ' value="{T}' . esc_html( $post_type ) . '{T}" class="es_custom_post_type form-checkbox" name="campaign_data[es_note_cpt][]">' . esc_html( $post_type ) . '</td></tr>';
677
  }
678
  } else {
679
  $custom_post_type_html = '<tr><span class="block pr-4 text-sm font-normal text-gray-600 pb-2">' . __( 'No Custom Post Types Available', 'email-subscribers' ) . '</tr>';
lite/includes/mailers/class-es-pepipost-mailer.php CHANGED
@@ -281,10 +281,6 @@ if ( ! class_exists( 'ES_Pepipost_Mailer' ) ) {
281
  */
282
  public function set_content( $content ) {
283
 
284
- // We are decoding HTML entities i.e. converting &#8220; to “ to fix garbage characters issue in CZech languange
285
- // We need to decode entities only in case of Pepipost. For other mailers it is working as expected.
286
- $content = ES_Common::decode_entities( $content );
287
-
288
  $content = utf8_encode( $content );
289
 
290
  $this->set_body_param(
281
  */
282
  public function set_content( $content ) {
283
 
 
 
 
 
284
  $content = utf8_encode( $content );
285
 
286
  $this->set_body_param(
lite/includes/workflows/abstracts/class-es-workflow-action.php CHANGED
@@ -333,4 +333,11 @@ abstract class ES_Workflow_Action {
333
  return false;
334
  }
335
 
 
 
 
 
 
 
 
336
  }
333
  return false;
334
  }
335
 
336
+ /**
337
+ * Load preview for the action
338
+ * @return null
339
+ */
340
+ public function load_preview() {
341
+ return null;
342
+ }
343
  }
lite/includes/workflows/actions/class-es-action-send-email.php CHANGED
@@ -66,7 +66,24 @@ if ( ! class_exists( 'ES_Action_Send_Email' ) ) {
66
  $this->add_field( $tracking_campaign_id );
67
 
68
  }
69
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  /**
71
  * Called when an action should be run
72
  *
66
  $this->add_field( $tracking_campaign_id );
67
 
68
  }
69
+
70
+ /**
71
+ * Create content for showing preview
72
+ * @return mixed|null
73
+ */
74
+ public function load_preview() {
75
+ $email_content = $this->get_option( 'ig-es-email-content', true, true );
76
+ $email_content = wpautop( $email_content );
77
+ $current_user = wp_get_current_user();
78
+
79
+ return ES_Common::replace_keywords_with_fallback( $email_content, array(
80
+ 'EMAIL' => $current_user->user_email,
81
+ 'NAME' => $current_user->display_name,
82
+ 'FIRSTNAME' => $current_user->first_name,
83
+ 'LASTNAME' => $current_user->last_name,
84
+ ) );
85
+ }
86
+
87
  /**
88
  * Called when an action should be run
89
  *
lite/includes/workflows/admin/class-es-workflow-admin-edit.php CHANGED
@@ -64,6 +64,65 @@ class ES_Workflow_Admin_Edit {
64
  add_action( 'ig_es_workflow_updated', array( __CLASS__, 'update_optin_email_wp_option' ), 10, 2 );
65
 
66
  add_action( 'ig_es_after_campaign_status_updated', array( __CLASS__, 'update_campaign_workflow_status' ), 10, 2 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
 
69
  /**
@@ -166,7 +225,7 @@ class ES_Workflow_Admin_Edit {
166
  }
167
  ?>
168
  <script>
169
- jQuery(document).ready(function(){
170
  postboxes.add_postbox_toggles(pagenow);
171
  });
172
  </script>
@@ -574,7 +633,7 @@ class ES_Workflow_Admin_Edit {
574
  * @param int $workflow_id
575
  * @param array $workflow_data
576
  * @return void
577
- *
578
  * @since 5.0.6
579
  */
580
  public static function update_campaign_data_in_workflow( $workflow_id, $workflow_data = array() ) {
@@ -595,10 +654,10 @@ class ES_Workflow_Admin_Edit {
595
 
596
  $tracking_campaign_id = ! empty ( $action['ig-es-tracking-campaign-id'] ) ? $action['ig-es-tracking-campaign-id'] : 0;
597
  if ( ! empty( $tracking_campaign_id ) ) {
598
- ES()->workflows_db->update_child_tracking_campaign( $tracking_campaign_id, $action );
599
  } else {
600
  $tracking_campaign_id = ES()->workflows_db->create_child_tracking_campaign( $parent_campaign_id, $action );
601
-
602
  $workflow_actions[$action_index]['ig-es-tracking-campaign-id'] = $tracking_campaign_id;
603
  $actions_data_updated = true;
604
  }
@@ -608,10 +667,10 @@ class ES_Workflow_Admin_Edit {
608
  if ( $has_parent_workflow_campaign ) {
609
  ES()->workflows_db->update_parent_workflow_campaign( $parent_campaign_id, $workflow_data );
610
  }
611
-
612
  $workflow_data['actions'] = maybe_serialize( $workflow_actions );
613
  }
614
-
615
  if ( $actions_data_updated ) {
616
  ES()->workflows_db->update_workflow( $workflow_id, $workflow_data );
617
  }
@@ -625,7 +684,7 @@ class ES_Workflow_Admin_Edit {
625
  * @param int $workflow_id
626
  * @param array $workflow_data
627
  * @return void
628
- *
629
  * @since 5.0.6
630
  */
631
  public static function delete_unmapped_child_tracking_campaigns( $workflow_id, $workflow_data = array() ) {
@@ -642,13 +701,13 @@ class ES_Workflow_Admin_Edit {
642
  *
643
  * @param int $workflow_id
644
  * @return array $unmapped_child_tracking_campaigns_ids
645
- *
646
  * @since 5.0.6
647
  */
648
  public static function get_unmapped_child_tracking_campaigns_ids( $workflow_id ) {
649
-
650
  $mapped_child_tracking_campaign_ids = self::get_mapped_child_tracking_campaign_ids( $workflow_id );
651
- $all_child_tracking_campaign_ids = ES()->workflows_db->get_all_child_tracking_campaign_ids( $workflow_id );
652
 
653
  $unmapped_child_tracking_campaigns_ids = array_diff( $all_child_tracking_campaign_ids, $mapped_child_tracking_campaign_ids );
654
 
@@ -660,11 +719,11 @@ class ES_Workflow_Admin_Edit {
660
  *
661
  * @param int $workflow_id
662
  * @return array $mapped_child_tracking_campaign_ids
663
- *
664
  * @since 5.0.6
665
  */
666
  public static function get_mapped_child_tracking_campaign_ids( $workflow_id ) {
667
-
668
  $mapped_child_tracking_campaign_ids = array();
669
 
670
  $workflow = new ES_Workflow( $workflow_id );
@@ -692,7 +751,7 @@ class ES_Workflow_Admin_Edit {
692
  * @param int $workflow_id
693
  * @param array $workflow_data
694
  * @return void
695
- *
696
  * @since 5.3.4
697
  */
698
  public static function update_optin_email_wp_option( $workflow_id, $workflow_data = array() ) {
@@ -736,11 +795,11 @@ class ES_Workflow_Admin_Edit {
736
  * @param int $campaign_ids
737
  * @param array $new_status
738
  * @return void
739
- *
740
  * @since 5.3.4
741
  */
742
  public static function update_campaign_workflow_status( $campaign_ids, $new_status = 0 ) {
743
-
744
  if ( empty( $campaign_ids ) ) {
745
  return;
746
  }
64
  add_action( 'ig_es_workflow_updated', array( __CLASS__, 'update_optin_email_wp_option' ), 10, 2 );
65
 
66
  add_action( 'ig_es_after_campaign_status_updated', array( __CLASS__, 'update_campaign_workflow_status' ), 10, 2 );
67
+
68
+ add_action( 'wp_ajax_ig_es_get_workflow_email_preview', array( __CLASS__, 'get_workflow_email_preview' ) );
69
+ add_action( 'wp_ajax_ig_es_send_workflow_action_test_email', array( __CLASS__, 'send_workflow_action_test_email' ) );
70
+ }
71
+
72
+ /**
73
+ * Handle send test email for send email action
74
+ *
75
+ * @since 5.3.6
76
+ */
77
+ public static function send_workflow_action_test_email() {
78
+ check_ajax_referer( 'ig-es-admin-ajax-nonce', 'security' );
79
+
80
+ $email = sanitize_email( ig_es_get_request_data( 'es_test_email' ) );
81
+ $subject = ig_es_get_request_data( 'subject', '' );
82
+ $content = ig_es_get_request_data( 'content', '', false );
83
+ $trigger = ig_es_get_request_data( 'trigger', '' );
84
+
85
+ $content = ES_Workflow_Action_Preview::get_preview( $trigger, array(
86
+ 'action_name' => 'ig_es_send_email',
87
+ 'ig-es-send-to' => '',
88
+ 'ig-es-email-subject' => $subject,
89
+ 'ig-es-email-content' => $content,
90
+ 'ig-es-tracking-campaign-id' => ''
91
+ ) );
92
+
93
+ $response = ES()->mailer->send_test_email( $email, $subject, $content, array() );
94
+
95
+ if ( $response && 'SUCCESS' === $response['status'] ) {
96
+ $response['message'] = __( 'Email has been sent. Please check your inbox', 'email-subscribers' );
97
+ }
98
+ wp_send_json( array( 'status' => 'SUCCESS' ) );
99
+ }
100
+
101
+ /**
102
+ * Get the workflow email preview
103
+ *
104
+ * @since 5.3.6
105
+ */
106
+ public static function get_workflow_email_preview() {
107
+ check_ajax_referer( 'ig-es-admin-ajax-nonce', 'security' );
108
+
109
+ $response = array();
110
+ $trigger = ig_es_get_request_data( 'trigger' );
111
+ $content = ig_es_get_request_data( 'content', '', false );
112
+ $subject = ig_es_get_request_data( 'subject', '' );
113
+
114
+ $response['preview_html'] = ES_Workflow_Action_Preview::get_preview( $trigger, array(
115
+ 'action_name' => 'ig_es_send_email',
116
+ 'ig-es-send-to' => '',
117
+ 'ig-es-email-subject' => $subject,
118
+ 'ig-es-email-content' => $content,
119
+ 'ig-es-tracking-campaign-id' => ''
120
+ ) );
121
+ if ( ! empty( $response ) ) {
122
+ wp_send_json_success( $response );
123
+ } else {
124
+ wp_send_json_error();
125
+ }
126
  }
127
 
128
  /**
225
  }
226
  ?>
227
  <script>
228
+ jQuery(document).ready(function(){
229
  postboxes.add_postbox_toggles(pagenow);
230
  });
231
  </script>
633
  * @param int $workflow_id
634
  * @param array $workflow_data
635
  * @return void
636
+ *
637
  * @since 5.0.6
638
  */
639
  public static function update_campaign_data_in_workflow( $workflow_id, $workflow_data = array() ) {
654
 
655
  $tracking_campaign_id = ! empty ( $action['ig-es-tracking-campaign-id'] ) ? $action['ig-es-tracking-campaign-id'] : 0;
656
  if ( ! empty( $tracking_campaign_id ) ) {
657
+ ES()->workflows_db->update_child_tracking_campaign( $tracking_campaign_id, $action );
658
  } else {
659
  $tracking_campaign_id = ES()->workflows_db->create_child_tracking_campaign( $parent_campaign_id, $action );
660
+
661
  $workflow_actions[$action_index]['ig-es-tracking-campaign-id'] = $tracking_campaign_id;
662
  $actions_data_updated = true;
663
  }
667
  if ( $has_parent_workflow_campaign ) {
668
  ES()->workflows_db->update_parent_workflow_campaign( $parent_campaign_id, $workflow_data );
669
  }
670
+
671
  $workflow_data['actions'] = maybe_serialize( $workflow_actions );
672
  }
673
+
674
  if ( $actions_data_updated ) {
675
  ES()->workflows_db->update_workflow( $workflow_id, $workflow_data );
676
  }
684
  * @param int $workflow_id
685
  * @param array $workflow_data
686
  * @return void
687
+ *
688
  * @since 5.0.6
689
  */
690
  public static function delete_unmapped_child_tracking_campaigns( $workflow_id, $workflow_data = array() ) {
701
  *
702
  * @param int $workflow_id
703
  * @return array $unmapped_child_tracking_campaigns_ids
704
+ *
705
  * @since 5.0.6
706
  */
707
  public static function get_unmapped_child_tracking_campaigns_ids( $workflow_id ) {
708
+
709
  $mapped_child_tracking_campaign_ids = self::get_mapped_child_tracking_campaign_ids( $workflow_id );
710
+ $all_child_tracking_campaign_ids = ES()->workflows_db->get_all_child_tracking_campaign_ids( $workflow_id );
711
 
712
  $unmapped_child_tracking_campaigns_ids = array_diff( $all_child_tracking_campaign_ids, $mapped_child_tracking_campaign_ids );
713
 
719
  *
720
  * @param int $workflow_id
721
  * @return array $mapped_child_tracking_campaign_ids
722
+ *
723
  * @since 5.0.6
724
  */
725
  public static function get_mapped_child_tracking_campaign_ids( $workflow_id ) {
726
+
727
  $mapped_child_tracking_campaign_ids = array();
728
 
729
  $workflow = new ES_Workflow( $workflow_id );
751
  * @param int $workflow_id
752
  * @param array $workflow_data
753
  * @return void
754
+ *
755
  * @since 5.3.4
756
  */
757
  public static function update_optin_email_wp_option( $workflow_id, $workflow_data = array() ) {
795
  * @param int $campaign_ids
796
  * @param array $new_status
797
  * @return void
798
+ *
799
  * @since 5.3.4
800
  */
801
  public static function update_campaign_workflow_status( $campaign_ids, $new_status = 0 ) {
802
+
803
  if ( empty( $campaign_ids ) ) {
804
  return;
805
  }
lite/includes/workflows/admin/views/action.php CHANGED
@@ -25,6 +25,7 @@ defined( 'ABSPATH' ) || exit;
25
 
26
  <div class="ig-es-action__header">
27
  <div class="row-options">
 
28
  <a class="js-edit-action text-indigo-600" href="#" title="<?php esc_attr_e( 'Edit', 'email-subscribers' ); ?>"><span class="dashicons dashicons-edit"></span></a>
29
  <a class="js-delete-action text-indigo-600" href="#" title="<?php esc_attr_e( 'Delete', 'email-subscribers' ); ?>"><span class="dashicons dashicons-trash"></span></a>
30
  </div>
25
 
26
  <div class="ig-es-action__header">
27
  <div class="row-options">
28
+ <button class="js-preview-action text-indigo-600 hidden" title="<?php esc_attr_e( 'Preview', 'email-subscribers' ); ?>"><span class="dashicons dashicons-welcome-view-site"></span></button>
29
  <a class="js-edit-action text-indigo-600" href="#" title="<?php esc_attr_e( 'Edit', 'email-subscribers' ); ?>"><span class="dashicons dashicons-edit"></span></a>
30
  <a class="js-delete-action text-indigo-600" href="#" title="<?php esc_attr_e( 'Delete', 'email-subscribers' ); ?>"><span class="dashicons dashicons-trash"></span></a>
31
  </div>
lite/includes/workflows/admin/views/meta-box-actions.php CHANGED
@@ -75,3 +75,52 @@ if ( ! defined( 'ABSPATH' ) ) {
75
  <div class="ig-es-metabox-footer">
76
  <button type="button" class="js-ig-es-add-action inline-flex justify-center rounded-md border border-transparent px-4 py-1.5 bg-white text-sm leading-5 font-medium text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:shadow-outline-blue transition ease-in-out duration-150"><?php echo esc_html__( '+ Add action', 'email-subscribers' ); ?></button>
77
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  <div class="ig-es-metabox-footer">
76
  <button type="button" class="js-ig-es-add-action inline-flex justify-center rounded-md border border-transparent px-4 py-1.5 bg-white text-sm leading-5 font-medium text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:shadow-outline-blue transition ease-in-out duration-150"><?php echo esc_html__( '+ Add action', 'email-subscribers' ); ?></button>
77
  </div>
78
+
79
+ <!--Email Action Preview-->
80
+ <div class="hidden" id="workflow-email-preview-popup">
81
+ <div class="fixed top-0 left-0 flex items-center justify-center w-full h-full" style="background-color: rgba(0,0,0,.5); z-index: 999;">
82
+ <div id="campaign-preview-main-container" class="absolute h-auto pt-2 ml-16 mr-4 text-left bg-white rounded shadow-xl z-80 w-1/2 md:max-w-5xl lg:max-w-7xl md:pt-3 lg:pt-2">
83
+ <div class="py-2 px-4">
84
+ <div class="flex border-b border-gray-200 pb-2">
85
+ <h3 class="w-full text-2xl text-left">
86
+ <?php
87
+ echo esc_html__( 'Email Preview', 'email-subscribers' );
88
+ ?>
89
+ </h3>
90
+ <div class="flex">
91
+ <div class="campaign-preview-options flex">
92
+ <div id="browser-preview-tab" class="campaign-preview-option cursor-pointer text-sm font-normal text-gray-600 active" title="<?php echo esc_attr__( 'Preview in browser', 'email-subscribers' ); ?>">
93
+ <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
94
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" />
95
+ </svg>
96
+ </div>
97
+ <?php do_action( 'ig_es_campaign_preview_tab_options', array() ); ?>
98
+ </div>
99
+ <button id="close-workflow-email-preview-popup" class="text-sm font-medium tracking-wide text-gray-700 select-none no-outline focus:outline-none focus:shadow-outline-red hover:border-red-400 active:shadow-lg">
100
+ <svg class="h-5 w-5 inline" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
101
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
102
+ </svg>
103
+ </button>
104
+ </div>
105
+
106
+ </div>
107
+ </div>
108
+ <div id="workflow-email-preview-container" class="hidden">
109
+ <div id="campaign-browser-preview-container">
110
+ <p class="mx-4 mb-2">
111
+ <?php echo esc_html__( 'There could be a slight variation on how your customer will view the email content.', 'email-subscribers' ); ?>
112
+ </p>
113
+ <div id="workflow-preview-iframe-container" class="py-4 list-decimal popup-preview">
114
+ </div>
115
+ </div>
116
+ <?php
117
+ do_action( 'ig_es_campaign_preview_options_content', array( 'type' => 'workflow' ) );
118
+ ?>
119
+ </div>
120
+ <div id="workflow-email-preview-loader" class="p-13 text-center" style="min-width: 600px">
121
+ <img src="<?php echo esc_attr( ES_PLUGIN_URL . 'lite/admin/images/spinner-2x.gif' ); ?>" class="inline-block es-loader pl-2 h-5 w-7"
122
+ alt="<?php echo esc_attr__( 'Loading...', 'email-subscribers' ); ?>"/>
123
+ </div>
124
+ </div>
125
+ </div>
126
+ </div>
lite/includes/workflows/class-es-workflow-action-preview.php ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) {
4
+ exit;
5
+ }
6
+
7
+ class ES_Workflow_Action_Preview {
8
+
9
+ /**
10
+ * Get email preview
11
+ *
12
+ * @param $trigger_name
13
+ * @param $action
14
+ *
15
+ * @return string|null
16
+ */
17
+ public static function get_preview( $trigger_name, $action ) {
18
+ try {
19
+ $workflow = self::load_preview_workflow( $trigger_name, $action );
20
+ $trigger = ES_Workflow_Triggers::get( $trigger_name );
21
+
22
+ $required_items = $trigger->get_supplied_data_items();
23
+ $workflow->set_data_layer( self::get_preview_data_layer( $required_items ), false );
24
+
25
+ $workflow_action = $workflow->get_action( 1 );
26
+ $workflow_action->workflow = $workflow;
27
+
28
+ return $workflow_action->load_preview();
29
+ } catch ( Exception $exception ) {
30
+ return $exception->getMessage();
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Initialize Workflow dynamically for preview purpose
36
+ *
37
+ * @param $trigger_name
38
+ * @param $action
39
+ *
40
+ * @return ES_Workflow
41
+ */
42
+ public static function load_preview_workflow( $trigger_name, $action ) {
43
+ $workflow_object = new stdClass();
44
+ $workflow_object->id = 0;
45
+ $workflow_object->name = 'action-preview';
46
+ $workflow_object->title = __( 'Action Preview', 'email-subscribers' );
47
+ $workflow_object->trigger_name = $trigger_name;
48
+ $workflow_object->trigger_options = array();
49
+ $workflow_object->rules = array();
50
+ $workflow_object->actions = array( $action );
51
+ $workflow_object->meta = array();
52
+ $workflow_object->status = 'draft';
53
+ $workflow_object->priority = 0;
54
+ $workflow_object->created_at = current_time( 'mysql', true );
55
+ $workflow_object->updated_at = current_time( 'mysql', true );
56
+
57
+ $workflow = new ES_Workflow( $workflow_object );
58
+ $workflow->preview_mode = true;
59
+
60
+ return $workflow;
61
+ }
62
+
63
+ /**
64
+ * Get data layer for preview
65
+ *
66
+ * @param array $required_items
67
+ * @return array $data_layer
68
+ *
69
+ * @throws Exception
70
+ */
71
+ public static function get_preview_data_layer( $required_items = [] ) {
72
+ $data_layer = [];
73
+
74
+ if ( in_array( 'user', $required_items ) ) {
75
+ $data_layer['user'] = wp_get_current_user();
76
+ }
77
+
78
+ if ( in_array( 'customer', $required_items ) ) {
79
+ $data_layer['customer'] = IG_ES_Customer_Factory::get_by_user_id( get_current_user_id() );
80
+ }
81
+
82
+ /**
83
+ * Order and order item
84
+ */
85
+ if ( in_array( 'wc_order', $required_items ) || in_array( 'order_item', $required_items ) ) {
86
+ $order = self::get_preview_order();
87
+ $order_items = $order->get_items();
88
+
89
+ if ( empty( $order_items ) ) {
90
+ throw new Exception( __( 'A valid "Order items" must exist to generate the preview.', 'email-subscribers' ) );
91
+ }
92
+
93
+ $data_layer['wc_order'] = $order;
94
+ $data_layer['order_item'] = current( $order_items );
95
+ }
96
+
97
+ /**
98
+ * Product
99
+ */
100
+ if ( in_array( 'product', $required_items ) ) {
101
+ $product_ids = self::get_preview_product_ids();
102
+ $data_layer['product'] = wc_get_product( $product_ids[0] );
103
+ }
104
+
105
+ /**
106
+ * Cart
107
+ */
108
+ if ( in_array( 'cart', $required_items ) ) {
109
+ $cart = new IG_ES_Cart();
110
+ $cart->set_id( 1 );
111
+ $cart->set_total( 100 );
112
+ $cart->set_user_id( get_current_user_id() );
113
+ $cart->set_token();
114
+ $cart->set_date_last_modified( new DateTime() );
115
+
116
+ $items = [];
117
+
118
+ foreach ( self::get_preview_product_ids() as $product_id ) {
119
+ $product = wc_get_product( $product_id );
120
+
121
+ // Reject products that can't be purchased
122
+ if ( ! $product->is_purchasable() ) {
123
+ continue;
124
+ }
125
+
126
+ $variation_id = 0;
127
+ $variation = [];
128
+
129
+ if ( $product->is_type( 'variable' ) ) {
130
+ $variations = $product->get_available_variations();
131
+ if ( $variations ) {
132
+ $variation_id = $variations[0]['variation_id'];
133
+ $variation = $variations[0]['attributes'];
134
+ }
135
+ }
136
+
137
+ $items[ uniqid() ] = [
138
+ 'product_id' => $product_id,
139
+ 'variation_id' => $variation_id,
140
+ 'variation' => $variation,
141
+ 'quantity' => 1,
142
+ 'line_subtotal' => (float) $product->get_price(),
143
+ 'line_subtotal_tax' => (float) wc_get_price_including_tax( $product ) - (float) $product->get_price(),
144
+ ];
145
+
146
+ }
147
+
148
+ $cart->set_items( $items );
149
+
150
+ $cart->set_coupons( [
151
+ '10off' => [
152
+ 'discount_incl_tax' => '10',
153
+ 'discount_excl_tax' => '9',
154
+ 'discount_tax' => '1'
155
+ ]
156
+ ] );
157
+
158
+ $data_layer['cart'] = $cart;
159
+ }
160
+
161
+ /**
162
+ * Guest
163
+ */
164
+ if ( in_array( 'guest', $required_items ) ) {
165
+ $guest = new IG_ES_Guest();
166
+ $guest->set_email( 'guest@example.com' );
167
+ $data_layer['guest'] = $guest;
168
+ }
169
+
170
+ return apply_filters( 'ig_es_get_preview_data_layer', $data_layer, $required_items );
171
+ }
172
+
173
+ /**
174
+ * Get preview products.
175
+ *
176
+ * @return array
177
+ *
178
+ * @throws Exception
179
+ */
180
+ protected static function get_preview_product_ids() {
181
+ // Cache for request since this may be called multiple times
182
+ static $products = null;
183
+ if ( null === $products ) {
184
+ $product_query = new \WP_Query(
185
+ [
186
+ 'post_type' => 'product',
187
+ 'posts_per_page' => 4,
188
+ 'fields' => 'ids'
189
+ ]
190
+ );
191
+
192
+ $products = $product_query->posts;
193
+ if ( empty( $products ) ) {
194
+ throw new Exception( __( 'A valid "Product" must exist to generate the preview.', 'email-subscribers' ) );
195
+ }
196
+ }
197
+
198
+ return $products;
199
+ }
200
+
201
+ /**
202
+ * Get an order for preview.
203
+ *
204
+ * @param int $offset used to do multiple attempts to get a valid order
205
+ *
206
+ * @return WC_Order
207
+ * @throws Exception
208
+ */
209
+ protected static function get_preview_order( $offset = 0 ) {
210
+
211
+ $orders = wc_get_orders(
212
+ [
213
+ 'type' => 'shop_order',
214
+ 'limit' => 1,
215
+ 'offset' => $offset,
216
+ 'return' => 'ids',
217
+ ]
218
+ );
219
+
220
+ if ( ! $orders ) {
221
+ throw new Exception( __( 'A valid "Order" must exist to generate the preview.', 'email-subscribers' ) );
222
+ }
223
+
224
+ $order = wc_get_order( $orders[0] );
225
+
226
+ // if the order has a blank email, it will cause issues
227
+ if ( $order && $order->get_billing_email() ) {
228
+ return $order;
229
+ }
230
+
231
+ return self::get_preview_order( $offset + 1 );
232
+ }
233
+ }
lite/includes/workflows/class-es-workflow.php CHANGED
@@ -147,6 +147,14 @@ class ES_Workflow {
147
  */
148
  public static $extra;
149
 
 
 
 
 
 
 
 
 
150
  /**
151
  * Class constructor
152
  *
147
  */
148
  public static $extra;
149
 
150
+ /**
151
+ * Is the workflow in preview mode
152
+ * @var bool
153
+ *
154
+ * @since 5.3.6
155
+ */
156
+ public $preview_mode = false;
157
+
158
  /**
159
  * Class constructor
160
  *
lite/language.php CHANGED
@@ -1006,6 +1006,7 @@ __( 'Action', 'email-subscribers' ),
1006
  /* translators: 1: Starting strong tag 2: Closing strong tag */
1007
  __( 'No actions found. Click the %1$s+ Add action%2$s to create an action.', 'email-subscribers' ),
1008
  __( '+ Add action', 'email-subscribers' ),
 
1009
  __( 'Workflow priority', 'email-subscribers' ),
1010
  __( 'Performs add to list action on existing orders that match trigger conditions.', 'email-subscribers' ),
1011
  __( 'Run now', 'email-subscribers' ),
@@ -1046,6 +1047,10 @@ _n( '%d second', '%d seconds', 2, 'email-subscribers' ),
1046
  __( '%s from now', 'email-subscribers' ),
1047
  /* translators: %s: time difference */
1048
  __( '%s ago', 'email-subscribers' ),
 
 
 
 
1049
  /* translators: 1. Customer first name 2. Customer last name */
1050
  /* translators: 1. Guest first name 2. Guest last name */
1051
  esc_html_x( '%1$s %2$s', 'full name', 'email-subscribers' ),
1006
  /* translators: 1: Starting strong tag 2: Closing strong tag */
1007
  __( 'No actions found. Click the %1$s+ Add action%2$s to create an action.', 'email-subscribers' ),
1008
  __( '+ Add action', 'email-subscribers' ),
1009
+ __( 'Email Preview', 'email-subscribers' ),
1010
  __( 'Workflow priority', 'email-subscribers' ),
1011
  __( 'Performs add to list action on existing orders that match trigger conditions.', 'email-subscribers' ),
1012
  __( 'Run now', 'email-subscribers' ),
1047
  __( '%s from now', 'email-subscribers' ),
1048
  /* translators: %s: time difference */
1049
  __( '%s ago', 'email-subscribers' ),
1050
+ __( 'Action Preview', 'email-subscribers' ),
1051
+ __( 'A valid "Order items" must exist to generate the preview.', 'email-subscribers' ),
1052
+ __( 'A valid "Product" must exist to generate the preview.', 'email-subscribers' ),
1053
+ __( 'A valid "Order" must exist to generate the preview.', 'email-subscribers' ),
1054
  /* translators: 1. Customer first name 2. Customer last name */
1055
  /* translators: 1. Guest first name 2. Guest last name */
1056
  esc_html_x( '%1$s %2$s', 'full name', 'email-subscribers' ),
lite/languages/email-subscribers.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Email Subscribers & Newsletters plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Email Subscribers & Newsletters 5.3.6\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/email-subscribers\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-03-09T07:00:13+01:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: email-subscribers\n"
@@ -29,7 +29,7 @@ msgstr ""
29
 
30
  #. Author of the plugin
31
  #: lite/admin/partials/help.php:28
32
- #: lite/includes/class-email-subscribers.php:1597
33
  msgid "Icegram"
34
  msgstr ""
35
 
@@ -282,7 +282,7 @@ msgstr ""
282
 
283
  #: lite/admin/class-email-subscribers-admin.php:334
284
  #: lite/includes/pro-features.php:191
285
- #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:266
286
  #: lite/includes/workflows/class-es-workflows-table.php:53
287
  #: lite/includes/workflows/class-es-workflows-table.php:169
288
  #: starter/starter-class-email-subscribers.php:653
@@ -324,7 +324,7 @@ msgstr ""
324
 
325
  #: lite/admin/class-email-subscribers-admin.php:1327
326
  #: lite/includes/class-email-subscribers-activator.php:61
327
- #: lite/includes/class-email-subscribers.php:1594
328
  #: lite/includes/classes/class-es-form-widget.php:11
329
  #: lite/includes/classes/class-es-old-widget.php:13
330
  #: lite/includes/classes/class-es-old-widget.php:15
@@ -431,6 +431,7 @@ msgstr ""
431
  #: lite/includes/classes/class-es-newsletters.php:413
432
  #: lite/includes/classes/class-es-newsletters.php:441
433
  #: lite/includes/classes/class-es-reports-table.php:263
 
434
  #: pro/classes/class-es-pro-sequence-report.php:273
435
  msgid "Preview"
436
  msgstr ""
@@ -450,7 +451,7 @@ msgstr ""
450
  #: lite/admin/class-es-campaign-admin.php:343
451
  #: lite/includes/classes/class-es-newsletters.php:296
452
  #: lite/includes/classes/class-es-post-notifications.php:546
453
- #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:326
454
  #: lite/includes/workflows/admin/views/meta-box-save.php:68
455
  msgid "Save"
456
  msgstr ""
@@ -472,6 +473,7 @@ msgid "Campaign Preview"
472
  msgstr ""
473
 
474
  #: lite/admin/class-es-campaign-admin.php:432
 
475
  msgid "Preview in browser"
476
  msgstr ""
477
 
@@ -479,6 +481,7 @@ msgstr ""
479
  #: lite/includes/classes/class-es-newsletters.php:427
480
  #: lite/includes/classes/class-es-reports-table.php:552
481
  #: lite/includes/classes/class-es-templates-table.php:150
 
482
  #: lite/admin/dist/main.js:1
483
  #: lite/admin/js/src/views/GalleryItemPreview.js:29
484
  msgid "There could be a slight variation on how your customer will view the email content."
@@ -528,13 +531,13 @@ msgstr ""
528
 
529
  #: lite/admin/class-es-campaign-admin.php:646
530
  #: lite/includes/classes/class-es-newsletters.php:445
531
- #: pro/classes/class-es-campaign-admin-pro.php:102
532
  msgid "Something went wrong. Please try again later"
533
  msgstr ""
534
 
535
- #: lite/admin/class-es-campaign-admin.php:1138
536
- #: lite/admin/class-es-campaign-admin.php:1158
537
- #: lite/admin/class-es-campaign-admin.php:1167
538
  #: lite/includes/classes/class-es-templates-table.php:56
539
  #: lite/includes/classes/class-es-templates-table.php:67
540
  #: lite/includes/classes/class-es-templates-table.php:73
@@ -542,17 +545,17 @@ msgstr ""
542
  msgid "Available Keywords"
543
  msgstr ""
544
 
545
- #: lite/admin/class-es-campaign-admin.php:1158
546
  #: lite/includes/classes/class-es-templates-table.php:73
547
  msgid "for Broadcast:"
548
  msgstr ""
549
 
550
- #: lite/admin/class-es-campaign-admin.php:1167
551
  #: lite/includes/classes/class-es-templates-table.php:78
552
  msgid "for Post Digest:"
553
  msgstr ""
554
 
555
- #: lite/admin/class-es-campaign-admin.php:1171
556
  #: lite/includes/classes/class-es-templates-table.php:79
557
  msgid "Any keywords related Post Notification"
558
  msgstr ""
@@ -586,6 +589,7 @@ msgstr ""
586
 
587
  #: lite/admin/class-ig-es-campaign-rules.php:224
588
  #: lite/includes/classes/class-es-post-notifications.php:545
 
589
  msgid "Loading..."
590
  msgstr ""
591
 
@@ -1386,16 +1390,16 @@ msgid "OK, I Got it!"
1386
  msgstr ""
1387
 
1388
  #. translators: 1: Error message 2: File name 3: Line number
1389
- #: lite/includes/class-email-subscribers.php:1344
1390
  msgid "%1$s in %2$s on line %3$s"
1391
  msgstr ""
1392
 
1393
- #: lite/includes/class-email-subscribers.php:1607
1394
  msgid "Icegram WC"
1395
  msgstr ""
1396
 
1397
  #. translators: %1$s - constant that was used
1398
- #: lite/includes/class-email-subscribers.php:2058
1399
  msgid "Value was set using constant %1$s"
1400
  msgstr ""
1401
 
@@ -1622,7 +1626,7 @@ msgstr ""
1622
  #: lite/includes/pro-features.php:1132
1623
  #: lite/includes/workflows/admin/views/meta-box-timing.php:82
1624
  #: lite/includes/workflows/fields/class-es-date.php:31
1625
- #: pro/classes/class-es-campaign-admin-pro.php:195
1626
  #: pro/pro-class-email-subscribers.php:858
1627
  msgid "Date"
1628
  msgstr ""
@@ -2079,7 +2083,7 @@ msgstr ""
2079
  #: lite/includes/classes/class-es-contacts-table.php:1034
2080
  #: lite/includes/classes/class-es-forms-table.php:967
2081
  #: lite/includes/classes/class-es-lists-table.php:616
2082
- #: lite/includes/workflows/admin/views/action.php:28
2083
  #: lite/includes/workflows/class-es-workflows-table.php:305
2084
  #: pro/classes/class-es-pro-custom-fields-table.php:564
2085
  msgid "Edit"
@@ -2094,7 +2098,7 @@ msgstr ""
2094
  #: lite/includes/classes/class-es-lists-table.php:671
2095
  #: lite/includes/classes/class-es-reports-table.php:262
2096
  #: lite/includes/classes/class-es-reports-table.php:356
2097
- #: lite/includes/workflows/admin/views/action.php:29
2098
  #: lite/includes/workflows/admin/views/meta-box-save.php:45
2099
  #: lite/includes/workflows/class-es-workflows-table.php:306
2100
  #: lite/includes/workflows/class-es-workflows-table.php:367
@@ -3181,7 +3185,7 @@ msgid "Close"
3181
  msgstr ""
3182
 
3183
  #: lite/includes/classes/class-es-newsletters.php:444
3184
- #: pro/classes/class-es-campaign-admin-pro.php:99
3185
  msgid "Email sent successfully "
3186
  msgstr ""
3187
 
@@ -3440,6 +3444,7 @@ msgid "Copy"
3440
  msgstr ""
3441
 
3442
  #: lite/includes/classes/class-es-tools.php:78
 
3443
  msgid "Email has been sent. Please check your inbox"
3444
  msgstr ""
3445
 
@@ -4047,7 +4052,7 @@ msgid "Reduce the possibility to land in spam with PRO"
4047
  msgstr ""
4048
 
4049
  #: lite/includes/pro-features.php:1068
4050
- #: pro/classes/class-es-campaign-admin-pro.php:122
4051
  msgid "Link tracking"
4052
  msgstr ""
4053
 
@@ -4056,26 +4061,26 @@ msgid "Get spam score"
4056
  msgstr ""
4057
 
4058
  #: lite/includes/pro-features.php:1122
4059
- #: pro/classes/class-es-campaign-admin-pro.php:170
4060
  #: pro/pro-class-email-subscribers.php:839
4061
  msgid "Send options"
4062
  msgstr ""
4063
 
4064
  #: lite/includes/pro-features.php:1125
4065
- #: pro/classes/class-es-campaign-admin-pro.php:181
4066
  #: pro/pro-class-email-subscribers.php:844
4067
  msgid "Schedule for later"
4068
  msgstr ""
4069
 
4070
  #: lite/includes/pro-features.php:1141
4071
  #: lite/includes/workflows/fields/class-es-time.php:64
4072
- #: pro/classes/class-es-campaign-admin-pro.php:209
4073
  #: pro/pro-class-email-subscribers.php:872
4074
  msgid "Time"
4075
  msgstr ""
4076
 
4077
  #: lite/includes/pro-features.php:1151
4078
- #: pro/classes/class-es-campaign-admin-pro.php:224
4079
  #: pro/pro-class-email-subscribers.php:887
4080
  msgid "Local Time: "
4081
  msgstr ""
@@ -4340,36 +4345,36 @@ msgstr ""
4340
  msgid "Variable not found."
4341
  msgstr ""
4342
 
4343
- #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:254
4344
  msgid " Add New Workflow"
4345
  msgstr ""
4346
 
4347
- #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:256
4348
  msgid " Edit Workflow"
4349
  msgstr ""
4350
 
4351
- #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:293
4352
  msgid "Add title"
4353
  msgstr ""
4354
 
4355
- #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:324
4356
  #: lite/includes/workflows/admin/views/meta-box-trigger.php:68
4357
  msgid "Trigger"
4358
  msgstr ""
4359
 
4360
- #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:325
4361
  msgid "Actions"
4362
  msgstr ""
4363
 
4364
- #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:327
4365
  msgid "Placeholders"
4366
  msgstr ""
4367
 
4368
- #: lite/includes/workflows/admin/views/action.php:31
4369
  msgid "New Action"
4370
  msgstr ""
4371
 
4372
- #: lite/includes/workflows/admin/views/action.php:38
4373
  msgid "Action"
4374
  msgstr ""
4375
 
@@ -4382,6 +4387,10 @@ msgstr ""
4382
  msgid "+ Add action"
4383
  msgstr ""
4384
 
 
 
 
 
4385
  #: lite/includes/workflows/admin/views/meta-box-options.php:23
4386
  msgid "Workflow priority"
4387
  msgstr ""
@@ -4558,6 +4567,22 @@ msgstr ""
4558
  msgid "%s ago"
4559
  msgstr ""
4560
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4561
  #. translators: 1. Customer first name 2. Customer last name
4562
  #. translators: 1. Guest first name 2. Guest last name
4563
  #: lite/includes/workflows/class-es-workflow-data-layer.php:201
@@ -4567,11 +4592,11 @@ msgctxt "full name"
4567
  msgid "%1$s %2$s"
4568
  msgstr ""
4569
 
4570
- #: lite/includes/workflows/class-es-workflow.php:1016
4571
  msgid "Missing action_name key in array."
4572
  msgstr ""
4573
 
4574
- #: lite/includes/workflows/class-es-workflow.php:1022
4575
  msgid "Could not retrieve the action."
4576
  msgstr ""
4577
 
@@ -4850,7 +4875,7 @@ msgid "Total Emails In Queue"
4850
  msgstr ""
4851
 
4852
  #: lite/public/partials/cron-message.php:43
4853
- #: pro/classes/class-es-campaign-admin-pro.php:175
4854
  #: pro/pro-class-email-subscribers.php:898
4855
  msgid "Send Now"
4856
  msgstr ""
@@ -4883,11 +4908,11 @@ msgstr ""
4883
  msgid "Free!"
4884
  msgstr ""
4885
 
4886
- #: pro/classes/class-es-campaign-admin-pro.php:84
4887
  msgid "Email address to receive preview email for testing"
4888
  msgstr ""
4889
 
4890
- #: pro/classes/class-es-campaign-admin-pro.php:89
4891
  msgid "Send email"
4892
  msgstr ""
4893
 
@@ -5163,7 +5188,7 @@ msgstr ""
5163
  msgid "Please share the reason"
5164
  msgstr ""
5165
 
5166
- #: pro/classes/coupon/class-ig-es-coupon.php:84
5167
  msgid "Generated by Email subscribers and Newsletters"
5168
  msgstr ""
5169
 
2
  # This file is distributed under the same license as the Email Subscribers & Newsletters plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Email Subscribers & Newsletters 5.3.7\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/email-subscribers\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-03-16T08:16:56+01:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: email-subscribers\n"
29
 
30
  #. Author of the plugin
31
  #: lite/admin/partials/help.php:28
32
+ #: lite/includes/class-email-subscribers.php:1598
33
  msgid "Icegram"
34
  msgstr ""
35
 
282
 
283
  #: lite/admin/class-email-subscribers-admin.php:334
284
  #: lite/includes/pro-features.php:191
285
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:325
286
  #: lite/includes/workflows/class-es-workflows-table.php:53
287
  #: lite/includes/workflows/class-es-workflows-table.php:169
288
  #: starter/starter-class-email-subscribers.php:653
324
 
325
  #: lite/admin/class-email-subscribers-admin.php:1327
326
  #: lite/includes/class-email-subscribers-activator.php:61
327
+ #: lite/includes/class-email-subscribers.php:1595
328
  #: lite/includes/classes/class-es-form-widget.php:11
329
  #: lite/includes/classes/class-es-old-widget.php:13
330
  #: lite/includes/classes/class-es-old-widget.php:15
431
  #: lite/includes/classes/class-es-newsletters.php:413
432
  #: lite/includes/classes/class-es-newsletters.php:441
433
  #: lite/includes/classes/class-es-reports-table.php:263
434
+ #: lite/includes/workflows/admin/views/action.php:28
435
  #: pro/classes/class-es-pro-sequence-report.php:273
436
  msgid "Preview"
437
  msgstr ""
451
  #: lite/admin/class-es-campaign-admin.php:343
452
  #: lite/includes/classes/class-es-newsletters.php:296
453
  #: lite/includes/classes/class-es-post-notifications.php:546
454
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:385
455
  #: lite/includes/workflows/admin/views/meta-box-save.php:68
456
  msgid "Save"
457
  msgstr ""
473
  msgstr ""
474
 
475
  #: lite/admin/class-es-campaign-admin.php:432
476
+ #: lite/includes/workflows/admin/views/meta-box-actions.php:92
477
  msgid "Preview in browser"
478
  msgstr ""
479
 
481
  #: lite/includes/classes/class-es-newsletters.php:427
482
  #: lite/includes/classes/class-es-reports-table.php:552
483
  #: lite/includes/classes/class-es-templates-table.php:150
484
+ #: lite/includes/workflows/admin/views/meta-box-actions.php:111
485
  #: lite/admin/dist/main.js:1
486
  #: lite/admin/js/src/views/GalleryItemPreview.js:29
487
  msgid "There could be a slight variation on how your customer will view the email content."
531
 
532
  #: lite/admin/class-es-campaign-admin.php:646
533
  #: lite/includes/classes/class-es-newsletters.php:445
534
+ #: pro/classes/class-es-campaign-admin-pro.php:103
535
  msgid "Something went wrong. Please try again later"
536
  msgstr ""
537
 
538
+ #: lite/admin/class-es-campaign-admin.php:1145
539
+ #: lite/admin/class-es-campaign-admin.php:1165
540
+ #: lite/admin/class-es-campaign-admin.php:1174
541
  #: lite/includes/classes/class-es-templates-table.php:56
542
  #: lite/includes/classes/class-es-templates-table.php:67
543
  #: lite/includes/classes/class-es-templates-table.php:73
545
  msgid "Available Keywords"
546
  msgstr ""
547
 
548
+ #: lite/admin/class-es-campaign-admin.php:1165
549
  #: lite/includes/classes/class-es-templates-table.php:73
550
  msgid "for Broadcast:"
551
  msgstr ""
552
 
553
+ #: lite/admin/class-es-campaign-admin.php:1174
554
  #: lite/includes/classes/class-es-templates-table.php:78
555
  msgid "for Post Digest:"
556
  msgstr ""
557
 
558
+ #: lite/admin/class-es-campaign-admin.php:1178
559
  #: lite/includes/classes/class-es-templates-table.php:79
560
  msgid "Any keywords related Post Notification"
561
  msgstr ""
589
 
590
  #: lite/admin/class-ig-es-campaign-rules.php:224
591
  #: lite/includes/classes/class-es-post-notifications.php:545
592
+ #: lite/includes/workflows/admin/views/meta-box-actions.php:122
593
  msgid "Loading..."
594
  msgstr ""
595
 
1390
  msgstr ""
1391
 
1392
  #. translators: 1: Error message 2: File name 3: Line number
1393
+ #: lite/includes/class-email-subscribers.php:1345
1394
  msgid "%1$s in %2$s on line %3$s"
1395
  msgstr ""
1396
 
1397
+ #: lite/includes/class-email-subscribers.php:1608
1398
  msgid "Icegram WC"
1399
  msgstr ""
1400
 
1401
  #. translators: %1$s - constant that was used
1402
+ #: lite/includes/class-email-subscribers.php:2059
1403
  msgid "Value was set using constant %1$s"
1404
  msgstr ""
1405
 
1626
  #: lite/includes/pro-features.php:1132
1627
  #: lite/includes/workflows/admin/views/meta-box-timing.php:82
1628
  #: lite/includes/workflows/fields/class-es-date.php:31
1629
+ #: pro/classes/class-es-campaign-admin-pro.php:196
1630
  #: pro/pro-class-email-subscribers.php:858
1631
  msgid "Date"
1632
  msgstr ""
2083
  #: lite/includes/classes/class-es-contacts-table.php:1034
2084
  #: lite/includes/classes/class-es-forms-table.php:967
2085
  #: lite/includes/classes/class-es-lists-table.php:616
2086
+ #: lite/includes/workflows/admin/views/action.php:29
2087
  #: lite/includes/workflows/class-es-workflows-table.php:305
2088
  #: pro/classes/class-es-pro-custom-fields-table.php:564
2089
  msgid "Edit"
2098
  #: lite/includes/classes/class-es-lists-table.php:671
2099
  #: lite/includes/classes/class-es-reports-table.php:262
2100
  #: lite/includes/classes/class-es-reports-table.php:356
2101
+ #: lite/includes/workflows/admin/views/action.php:30
2102
  #: lite/includes/workflows/admin/views/meta-box-save.php:45
2103
  #: lite/includes/workflows/class-es-workflows-table.php:306
2104
  #: lite/includes/workflows/class-es-workflows-table.php:367
3185
  msgstr ""
3186
 
3187
  #: lite/includes/classes/class-es-newsletters.php:444
3188
+ #: pro/classes/class-es-campaign-admin-pro.php:100
3189
  msgid "Email sent successfully "
3190
  msgstr ""
3191
 
3444
  msgstr ""
3445
 
3446
  #: lite/includes/classes/class-es-tools.php:78
3447
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:96
3448
  msgid "Email has been sent. Please check your inbox"
3449
  msgstr ""
3450
 
4052
  msgstr ""
4053
 
4054
  #: lite/includes/pro-features.php:1068
4055
+ #: pro/classes/class-es-campaign-admin-pro.php:123
4056
  msgid "Link tracking"
4057
  msgstr ""
4058
 
4061
  msgstr ""
4062
 
4063
  #: lite/includes/pro-features.php:1122
4064
+ #: pro/classes/class-es-campaign-admin-pro.php:171
4065
  #: pro/pro-class-email-subscribers.php:839
4066
  msgid "Send options"
4067
  msgstr ""
4068
 
4069
  #: lite/includes/pro-features.php:1125
4070
+ #: pro/classes/class-es-campaign-admin-pro.php:182
4071
  #: pro/pro-class-email-subscribers.php:844
4072
  msgid "Schedule for later"
4073
  msgstr ""
4074
 
4075
  #: lite/includes/pro-features.php:1141
4076
  #: lite/includes/workflows/fields/class-es-time.php:64
4077
+ #: pro/classes/class-es-campaign-admin-pro.php:210
4078
  #: pro/pro-class-email-subscribers.php:872
4079
  msgid "Time"
4080
  msgstr ""
4081
 
4082
  #: lite/includes/pro-features.php:1151
4083
+ #: pro/classes/class-es-campaign-admin-pro.php:225
4084
  #: pro/pro-class-email-subscribers.php:887
4085
  msgid "Local Time: "
4086
  msgstr ""
4345
  msgid "Variable not found."
4346
  msgstr ""
4347
 
4348
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:313
4349
  msgid " Add New Workflow"
4350
  msgstr ""
4351
 
4352
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:315
4353
  msgid " Edit Workflow"
4354
  msgstr ""
4355
 
4356
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:352
4357
  msgid "Add title"
4358
  msgstr ""
4359
 
4360
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:383
4361
  #: lite/includes/workflows/admin/views/meta-box-trigger.php:68
4362
  msgid "Trigger"
4363
  msgstr ""
4364
 
4365
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:384
4366
  msgid "Actions"
4367
  msgstr ""
4368
 
4369
+ #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:386
4370
  msgid "Placeholders"
4371
  msgstr ""
4372
 
4373
+ #: lite/includes/workflows/admin/views/action.php:32
4374
  msgid "New Action"
4375
  msgstr ""
4376
 
4377
+ #: lite/includes/workflows/admin/views/action.php:39
4378
  msgid "Action"
4379
  msgstr ""
4380
 
4387
  msgid "+ Add action"
4388
  msgstr ""
4389
 
4390
+ #: lite/includes/workflows/admin/views/meta-box-actions.php:87
4391
+ msgid "Email Preview"
4392
+ msgstr ""
4393
+
4394
  #: lite/includes/workflows/admin/views/meta-box-options.php:23
4395
  msgid "Workflow priority"
4396
  msgstr ""
4567
  msgid "%s ago"
4568
  msgstr ""
4569
 
4570
+ #: lite/includes/workflows/class-es-workflow-action-preview.php:46
4571
+ msgid "Action Preview"
4572
+ msgstr ""
4573
+
4574
+ #: lite/includes/workflows/class-es-workflow-action-preview.php:90
4575
+ msgid "A valid \"Order items\" must exist to generate the preview."
4576
+ msgstr ""
4577
+
4578
+ #: lite/includes/workflows/class-es-workflow-action-preview.php:194
4579
+ msgid "A valid \"Product\" must exist to generate the preview."
4580
+ msgstr ""
4581
+
4582
+ #: lite/includes/workflows/class-es-workflow-action-preview.php:221
4583
+ msgid "A valid \"Order\" must exist to generate the preview."
4584
+ msgstr ""
4585
+
4586
  #. translators: 1. Customer first name 2. Customer last name
4587
  #. translators: 1. Guest first name 2. Guest last name
4588
  #: lite/includes/workflows/class-es-workflow-data-layer.php:201
4592
  msgid "%1$s %2$s"
4593
  msgstr ""
4594
 
4595
+ #: lite/includes/workflows/class-es-workflow.php:1024
4596
  msgid "Missing action_name key in array."
4597
  msgstr ""
4598
 
4599
+ #: lite/includes/workflows/class-es-workflow.php:1030
4600
  msgid "Could not retrieve the action."
4601
  msgstr ""
4602
 
4875
  msgstr ""
4876
 
4877
  #: lite/public/partials/cron-message.php:43
4878
+ #: pro/classes/class-es-campaign-admin-pro.php:176
4879
  #: pro/pro-class-email-subscribers.php:898
4880
  msgid "Send Now"
4881
  msgstr ""
4908
  msgid "Free!"
4909
  msgstr ""
4910
 
4911
+ #: pro/classes/class-es-campaign-admin-pro.php:85
4912
  msgid "Email address to receive preview email for testing"
4913
  msgstr ""
4914
 
4915
+ #: pro/classes/class-es-campaign-admin-pro.php:90
4916
  msgid "Send email"
4917
  msgstr ""
4918
 
5188
  msgid "Please share the reason"
5189
  msgstr ""
5190
 
5191
+ #: pro/classes/coupon/class-ig-es-coupon.php:99
5192
  msgid "Generated by Email subscribers and Newsletters"
5193
  msgstr ""
5194
 
readme.txt CHANGED
@@ -6,7 +6,7 @@ Tags: email marketing, subscription, autoresponder, post notification, welcome e
6
  Requires at least: 3.9
7
  Tested up to: 5.9.1
8
  Requires PHP: 5.6
9
- Stable tag: 5.3.6
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
@@ -310,14 +310,22 @@ Refer [here](https://www.icegram.com/documentation/es-faq/).
310
 
311
  == Upgrade Notice ==
312
 
313
- = 5.3.6 =
314
 
315
- * New: Added support for fallback value for NAME and FIRSTNAME keywords
316
- * Fix: PHP warning on custom post type page
317
- * Fix: Welcome email issue with Rainmaker integration
 
318
 
319
  == Changelog ==
320
 
 
 
 
 
 
 
 
321
  **5.3.6 (09.03.2022)**
322
 
323
  * New: Added support for fallback value for NAME and FIRSTNAME keywords
6
  Requires at least: 3.9
7
  Tested up to: 5.9.1
8
  Requires PHP: 5.6
9
+ Stable tag: 5.3.7
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
310
 
311
  == Upgrade Notice ==
312
 
313
+ = 5.3.7 =
314
 
315
+ * New: Added preview for workflow emails
316
+ * Fix: Duplicate drafts were getting created for campaigns in some cases
317
+ * Fix: Custom post type were not getting saved in post notification campaigns
318
+ * Fix: Encoding issues with pepipost email sending
319
 
320
  == Changelog ==
321
 
322
+ **5.3.7 (16.03.2022)**
323
+
324
+ * New: Added preview for workflow emails
325
+ * Fix: Duplicate drafts were getting created for campaigns in some cases
326
+ * Fix: Custom post type were not getting saved in post notification campaigns
327
+ * Fix: Encoding issues with pepipost email sending
328
+
329
  **5.3.6 (09.03.2022)**
330
 
331
  * New: Added support for fallback value for NAME and FIRSTNAME keywords