Email Subscribers & Newsletters - Version 4.0.16

Version Description

(23.04.2019) = * New : New keywords added : {{TOTAL-CONTACTC}} , {{SITEURL}}, {{SITENAME}} * New : Added option to enable/ disable WordPress Cron for Email Subscribers * New : Added option to enable/ disable email open tracking * Fix : Database error while sorting list * Fix : Incorrect viewed and sent dates in report details

Download this release

Release Info

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

Code changes from version 4.0.15 to 4.0.16

admin/class-email-subscribers-admin.php CHANGED
@@ -144,7 +144,6 @@ class Email_Subscribers_Admin {
144
  add_submenu_page( 'es_dashboard', __( 'Campaigns', 'email-subscribers' ), __( 'Campaigns', 'email-subscribers' ), 'edit_posts', 'es_campaigns', array( $this, 'load_campaigns' ) );
145
  add_submenu_page( 'es_dashboard', __( 'Settings', 'email-subscribers' ), __( 'Settings', 'email-subscribers' ), 'edit_posts', 'es_settings', array( $this, 'load_settings' ) );
146
  add_submenu_page( 'es_dashboard', __( 'Forms', 'email-subscribers' ), __( 'Forms', 'email-subscribers' ), 'edit_posts', 'es_forms', array( $this, 'load_forms' ) );
147
- add_submenu_page( 'es_dashboard', __( 'Tools', 'email-subscribers' ), __( 'Tools', 'email-subscribers' ), 'edit_posts', 'es_tools', array( $this, 'load_tools' ) );
148
  add_submenu_page( null, __( 'Template Preview', 'email-subscribers' ), __( 'Template Preview', 'email-subscribers' ), 'edit_posts', 'es_template_preview', array( $this, 'load_preview' ) );
149
  }
150
 
@@ -156,6 +155,7 @@ class Email_Subscribers_Admin {
156
  new ES_Import_Subscribers();
157
  ES_Info::get_instance();
158
  ES_Newsletters::get_instance();
 
159
  }
160
 
161
  // Function for Klawoo's Subscribe form on Help & Info page
@@ -247,11 +247,6 @@ class Email_Subscribers_Admin {
247
  $preview->es_template_preview_callback();
248
  }
249
 
250
- public function load_tools() {
251
- $tools = ES_Tools::get_instance();
252
- $tools->es_tools_settings_callback();
253
- }
254
-
255
  public function do_send( $data ) {
256
 
257
  $to_email = $data['to_email'];
144
  add_submenu_page( 'es_dashboard', __( 'Campaigns', 'email-subscribers' ), __( 'Campaigns', 'email-subscribers' ), 'edit_posts', 'es_campaigns', array( $this, 'load_campaigns' ) );
145
  add_submenu_page( 'es_dashboard', __( 'Settings', 'email-subscribers' ), __( 'Settings', 'email-subscribers' ), 'edit_posts', 'es_settings', array( $this, 'load_settings' ) );
146
  add_submenu_page( 'es_dashboard', __( 'Forms', 'email-subscribers' ), __( 'Forms', 'email-subscribers' ), 'edit_posts', 'es_forms', array( $this, 'load_forms' ) );
 
147
  add_submenu_page( null, __( 'Template Preview', 'email-subscribers' ), __( 'Template Preview', 'email-subscribers' ), 'edit_posts', 'es_template_preview', array( $this, 'load_preview' ) );
148
  }
149
 
155
  new ES_Import_Subscribers();
156
  ES_Info::get_instance();
157
  ES_Newsletters::get_instance();
158
+ ES_Tools::get_instance();
159
  }
160
 
161
  // Function for Klawoo's Subscribe form on Help & Info page
247
  $preview->es_template_preview_callback();
248
  }
249
 
 
 
 
 
 
250
  public function do_send( $data ) {
251
 
252
  $to_email = $data['to_email'];
admin/css/email-subscribers-admin.css CHANGED
@@ -1,19 +1,19 @@
1
- #email_tabs_form div#tabs {
2
  margin-top: 20px;
3
  padding: 0;
4
  }
5
 
6
- #email_tabs_form div#tabs div#menu-tab-listing {
7
  width: 20%;
8
  float: left;
9
  }
10
 
11
- #email_tabs_form div#tabs div#menu-tab-content {
12
  width: 75%;
13
  float: left;
14
  }
15
 
16
- #email_tabs_form div#tabs div#menu-tab-listing ul {
17
  width: 100%;
18
  display: block;
19
  background: #f3f6ff;
@@ -24,7 +24,7 @@
24
  border-bottom: 1px solid #CCC;
25
  }
26
 
27
- #email_tabs_form div#tabs div#menu-tab-listing ul li {
28
  width: 100%;
29
  display: block;
30
  border-radius: 0px;
@@ -34,20 +34,20 @@
34
  border-bottom: 1px solid #CCC;
35
  }
36
 
37
- #email_tabs_form div#tabs div#menu-tab-listing ul li a {
38
  padding: 20px 10px;
39
  width: 90%;
40
  font-size: 16px;
41
  }
42
 
43
- #email_tabs_form div#tabs div#menu-tab-content h1 {
44
  width: auto;
45
  display: block;
46
  border-bottom: 1px solid #CCC;
47
  padding: 15px 20px;
48
  }
49
 
50
- #email_tabs_form div#tabs div#menu-tab-content h2 {
51
  border-bottom: 1px solid #CCC;
52
  margin: 0px;
53
  padding: 10px 0;
@@ -263,11 +263,11 @@ div#post-body-content .meta-box-sortables .row-blog p.submit input#submit {
263
  background-color: #3ad01e;
264
  }
265
 
266
- #email_tabs_form div#tabs {
267
  clear: both;
268
  }
269
 
270
- #email_tabs_form div#tabs div#menu-tab-content h1 {
271
  padding: 14px;
272
  }
273
 
@@ -427,9 +427,9 @@ p.search-box.box-ma10 {
427
  box-shadow: 0 0 7px 0 rgba(0, 0, 0, .2);
428
  }
429
 
430
- .form-table th {
431
  width: 350px !important;
432
- }
433
 
434
  .es-ltr {
435
  width: 20em;
@@ -884,4 +884,14 @@ h5.es-badge {
884
 
885
  @keyframes beat{
886
  to { transform: scale(1.1); }
 
 
 
 
 
 
 
 
 
 
887
  }
1
+ #email_tabs_form div#es-settings-tabs {
2
  margin-top: 20px;
3
  padding: 0;
4
  }
5
 
6
+ #email_tabs_form div#es-settings-tabs div#menu-tab-listing {
7
  width: 20%;
8
  float: left;
9
  }
10
 
11
+ #email_tabs_form div#es-settings-tabs div#menu-tab-content {
12
  width: 75%;
13
  float: left;
14
  }
15
 
16
+ #email_tabs_form div#es-settings-tabs div#menu-tab-listing ul {
17
  width: 100%;
18
  display: block;
19
  background: #f3f6ff;
24
  border-bottom: 1px solid #CCC;
25
  }
26
 
27
+ #email_tabs_form div#es-settings-tabs div#menu-tab-listing ul li {
28
  width: 100%;
29
  display: block;
30
  border-radius: 0px;
34
  border-bottom: 1px solid #CCC;
35
  }
36
 
37
+ #email_tabs_form div#es-settings-tabs div#menu-tab-listing ul li a {
38
  padding: 20px 10px;
39
  width: 90%;
40
  font-size: 16px;
41
  }
42
 
43
+ #email_tabs_form div#es-settings-tabs div#menu-tab-content h1 {
44
  width: auto;
45
  display: block;
46
  border-bottom: 1px solid #CCC;
47
  padding: 15px 20px;
48
  }
49
 
50
+ #email_tabs_form div#es-settings-tabs div#menu-tab-content h2 {
51
  border-bottom: 1px solid #CCC;
52
  margin: 0px;
53
  padding: 10px 0;
263
  background-color: #3ad01e;
264
  }
265
 
266
+ #email_tabs_form div#es-settings-tabs {
267
  clear: both;
268
  }
269
 
270
+ #email_tabs_form div#es-settings-tabs div#menu-tab-content h1 {
271
  padding: 14px;
272
  }
273
 
427
  box-shadow: 0 0 7px 0 rgba(0, 0, 0, .2);
428
  }
429
 
430
+ /*.form-table th {
431
  width: 350px !important;
432
+ }*/
433
 
434
  .es-ltr {
435
  width: 20em;
884
 
885
  @keyframes beat{
886
  to { transform: scale(1.1); }
887
+ }
888
+
889
+ #es-test-email{
890
+ width: 60%;
891
+ margin-right: 0.7em;
892
+ }
893
+ .es_spinner_image_admin img{
894
+ height: 20px;
895
+ margin-left: 0.3em;
896
+ vertical-align: middle;
897
  }
admin/images/hot-cakes.png ADDED
Binary file
admin/js/email-subscribers-admin.js CHANGED
@@ -2,26 +2,26 @@
2
 
3
  $(document).ready(
4
  function () {
5
- $(document).on('change', '.es_visible', function() {
6
- if($('.es_visible:checked').length >= 1){
7
  $('.es_required').prop('disabled', false);
8
- }else{
9
  $('.es_required').prop('disabled', true);
10
  }
11
  });
12
  $('.es_visible').change();
13
 
14
- $('#tabs').tabs().addClass('ui-tabs-vertical ui-helper-clearfix');
15
 
16
- var defaultHeight = $('div#tabs div#menu-tab-content div#tabs-1').height() + 30;
17
- $('div#tabs div#menu-tab-listing ul').height(defaultHeight);
18
 
19
  // Set Tab Height
20
  $('.ui-tabs-anchor').click(function () {
21
  var tab = $(this).attr('href');
22
  $('#email_tabs_form').attr('action', tab);
23
- var tabHight = $('div#tabs div#menu-tab-content div' + tab).height() + 30;
24
- $('div#tabs div#menu-tab-listing ul').height(tabHight);
25
  });
26
 
27
  if (jQuery('.statusesselect').length) {
@@ -39,7 +39,7 @@
39
  // jQuery(".es-audience-view .bulkactions #bulk-action-selector-bottom").after(groupselect);
40
 
41
  jQuery("#bulk-action-selector-top").change(function () {
42
- if (jQuery('option:selected', this).attr('value') == 'bulk_list_update' || jQuery('option:selected', this).attr('value') == 'bulk_list_add' ) {
43
  jQuery('.groupsselect').eq(1).show();
44
  jQuery('.statusesselect').eq(1).hide();
45
  } else if (jQuery('option:selected', this).attr('value') == 'bulk_status_update') {
@@ -53,15 +53,47 @@
53
 
54
  jQuery('.es-audience-view .tablenav.bottom #bulk-action-selector-bottom').hide();
55
  jQuery('.es-audience-view .tablenav.bottom #doaction2').hide();
56
- jQuery(document).on( 'change', "#base_template_id", function(){
57
  var img = jQuery('option:selected', this).data('img')
58
  jQuery('.es-templ-img').html(img);
59
  });
60
 
61
- var removeSubmenu = [ 'ig-es-broadcast', 'ig-es-lists', 'ig-es-post-notifications' ];
62
- $.each(removeSubmenu, function(key, id) {
63
  $("#" + id).parent('a').parent('li').hide();
64
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  });
66
 
67
 
2
 
3
  $(document).ready(
4
  function () {
5
+ $(document).on('change', '.es_visible', function () {
6
+ if ($('.es_visible:checked').length >= 1) {
7
  $('.es_required').prop('disabled', false);
8
+ } else {
9
  $('.es_required').prop('disabled', true);
10
  }
11
  });
12
  $('.es_visible').change();
13
 
14
+ $('#es-settings-tabs').tabs().addClass('ui-tabs-vertical ui-helper-clearfix');
15
 
16
+ var defaultHeight = $('div#es-settings-tabs div#menu-tab-content div#tabs-1').height() + 30;
17
+ $('div#es-settings-tabs div#menu-tab-listing ul').height(defaultHeight);
18
 
19
  // Set Tab Height
20
  $('.ui-tabs-anchor').click(function () {
21
  var tab = $(this).attr('href');
22
  $('#email_tabs_form').attr('action', tab);
23
+ var tabHight = $('div#es-settings-tabs div#menu-tab-content div' + tab).height() + 30;
24
+ $('div#es-settings-tabs div#menu-tab-listing ul').height(tabHight);
25
  });
26
 
27
  if (jQuery('.statusesselect').length) {
39
  // jQuery(".es-audience-view .bulkactions #bulk-action-selector-bottom").after(groupselect);
40
 
41
  jQuery("#bulk-action-selector-top").change(function () {
42
+ if (jQuery('option:selected', this).attr('value') == 'bulk_list_update' || jQuery('option:selected', this).attr('value') == 'bulk_list_add') {
43
  jQuery('.groupsselect').eq(1).show();
44
  jQuery('.statusesselect').eq(1).hide();
45
  } else if (jQuery('option:selected', this).attr('value') == 'bulk_status_update') {
53
 
54
  jQuery('.es-audience-view .tablenav.bottom #bulk-action-selector-bottom').hide();
55
  jQuery('.es-audience-view .tablenav.bottom #doaction2').hide();
56
+ jQuery(document).on('change', "#base_template_id", function () {
57
  var img = jQuery('option:selected', this).data('img')
58
  jQuery('.es-templ-img').html(img);
59
  });
60
 
61
+ var removeSubmenu = ['ig-es-broadcast', 'ig-es-lists', 'ig-es-post-notifications'];
62
+ $.each(removeSubmenu, function (key, id) {
63
  $("#" + id).parent('a').parent('li').hide();
64
  });
65
+
66
+ //send test emails
67
+ $(document).on('click', '#es-send-test', function (e) {
68
+ e.preventDefault();
69
+ var test_email = $('#es-test-email').val();
70
+ var params = {};
71
+ params.es_test_email = test_email;
72
+ params.action = 'es_send_test_email';
73
+ if (test_email) {
74
+ $('#es-send-test').next('#spinner-image').show();
75
+ jQuery.ajax({
76
+ method: 'POST',
77
+ url: ajaxurl,
78
+ data: params,
79
+ dataType: 'json',
80
+ success: function (response) {
81
+ if (response && typeof response.status !== 'undefined' && response.status === "success") {
82
+ $('#es-send-test').parent().find('.helper').html('<span style="color:green">' + response.message + '</span>');
83
+ }
84
+
85
+ $('#es-send-test').next('#spinner-image').hide();
86
+ },
87
+
88
+ error: function(err) {
89
+ $('#es-send-test').next('#spinner-image').hide();
90
+ }
91
+ });
92
+ } else {
93
+ confirm('Add test email ');
94
+ }
95
+
96
+ });
97
  });
98
 
99
 
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: 4.0.15
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
@@ -24,7 +24,7 @@ if ( ! defined( 'WPINC' ) ) {
24
  * Define constants
25
  */
26
  define( 'ES_PLUGIN_DIR', dirname( __FILE__ ) );
27
- define( 'ES_PLUGIN_VERSION', '4.0.15' );
28
  define( 'ES_PLUGIN_BASE_NAME', plugin_basename( __FILE__ ) );
29
 
30
  if ( ! defined( 'ES_PLUGIN_FILE' ) ) {
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: 4.0.16
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
24
  * Define constants
25
  */
26
  define( 'ES_PLUGIN_DIR', dirname( __FILE__ ) );
27
+ define( 'ES_PLUGIN_VERSION', '4.0.16' );
28
  define( 'ES_PLUGIN_BASE_NAME', plugin_basename( __FILE__ ) );
29
 
30
  if ( ! defined( 'ES_PLUGIN_FILE' ) ) {
includes/admin/class-es-admin-settings.php CHANGED
@@ -52,6 +52,10 @@ class ES_Admin_Settings {
52
  if ( 'submitted' === $submitted && 'ig-es-save-admin-settings' === $submit_action ) {
53
  $options = $_POST;
54
  $options = apply_filters( 'ig_es_before_save_settings', $options );
 
 
 
 
55
  foreach ( $options as $key => $value ) {
56
  if ( substr( $key, 0, 6 ) === 'ig_es_' ) {
57
  update_option( $key, stripslashes( $value ) );
@@ -67,11 +71,11 @@ class ES_Admin_Settings {
67
 
68
  <div class="wrap essettings">
69
  <h1 class="wp-heading-inline">Settings</h1>
70
- <form action="#" method="post" id="email_tabs_form" class="ig-settings-form rcorners">
71
 
72
  <?php settings_fields( 'email_subscribers_settings' ); ?>
73
 
74
- <div id="tabs">
75
  <div id="menu-tab-listing" class="">
76
  <ul class="main-tab-nav">
77
  <li class="ig-menu-tab"><a href="#tabs-1"><i class="dashicons dashicons-admin-generic"></i>&nbsp;<?php echo __( 'General', 'email-subscribers' ); ?></a></li>
@@ -172,7 +176,7 @@ class ES_Admin_Settings {
172
  'default' => ''
173
  ),
174
 
175
- 'ig_es_post_image_size' => array(
176
  'id' => 'ig_es_post_image_size',
177
  'name' => __( 'Image Size', 'email-subscribers' ),
178
  'type' => 'select',
@@ -181,6 +185,14 @@ class ES_Admin_Settings {
181
  'default' => 'full'
182
  ),
183
 
 
 
 
 
 
 
 
 
184
  //'ig_es_unsubscribe_link' => array( 'type' => 'text', 'options' => false, 'placeholder' => '', 'readonly' => 'readonly', 'supplemental' => '', 'default' => '', 'id' => 'ig_es_unsubscribe_link', 'name' => __( 'Unsubscribe Link', 'email-subscribers' ), 'desc' => '', ),
185
  'ig_es_unsubscribe_link_content' => array(
186
  'type' => 'textarea',
@@ -423,7 +435,7 @@ class ES_Admin_Settings {
423
  ),
424
 
425
  'email_sending' => array(
426
- 'ig_es_cronurl' => array(
427
  'type' => 'text',
428
  'placeholder' => '',
429
  'supplemental' => '',
@@ -434,6 +446,15 @@ class ES_Admin_Settings {
434
  'desc' => __( sprintf( __( "You need to visit this URL to send email notifications. Know <a href='%s' target='_blank'>how to run this in background</a>", 'email-subscribers' ),
435
  "https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-cpanel/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page" ) )
436
  ),
 
 
 
 
 
 
 
 
 
437
 
438
  'ig_es_hourly_email_send_limit' => array(
439
  'type' => 'text',
@@ -445,6 +466,16 @@ class ES_Admin_Settings {
445
  'desc' => __( 'Total emails your host can send in an hour.', 'email-subscribers' )
446
  ),
447
 
 
 
 
 
 
 
 
 
 
 
448
  ),
449
 
450
  'security_settings' => array(
@@ -479,6 +510,7 @@ class ES_Admin_Settings {
479
  $type = ! empty( $arguments['type'] ) ? $arguments['type'] : '';
480
  $placeholder = ! empty( $arguments['placeholder'] ) ? $arguments['placeholder'] : '';
481
  $readonly = ! empty( $arguments['readonly'] ) ? $arguments['readonly'] : '';
 
482
 
483
  // Check which type of field we want
484
  switch ( $arguments['type'] ) {
@@ -512,6 +544,9 @@ class ES_Admin_Settings {
512
  $field_html = sprintf( '<select name="%1$s" id="%1$s">%2$s</select>', $uid, $options_markup );
513
  }
514
  break;
 
 
 
515
  }
516
 
517
  $field_html .= '<br />';
52
  if ( 'submitted' === $submitted && 'ig-es-save-admin-settings' === $submit_action ) {
53
  $options = $_POST;
54
  $options = apply_filters( 'ig_es_before_save_settings', $options );
55
+
56
+ $options['ig_es_disable_wp_cron'] = isset( $options['ig_es_disable_wp_cron'] ) ? $options['ig_es_disable_wp_cron'] : 'no';
57
+ $options['ig_es_track_email_opens'] = isset( $options['ig_es_track_email_opens'] ) ? $options['ig_es_track_email_opens'] : 'no';
58
+
59
  foreach ( $options as $key => $value ) {
60
  if ( substr( $key, 0, 6 ) === 'ig_es_' ) {
61
  update_option( $key, stripslashes( $value ) );
71
 
72
  <div class="wrap essettings">
73
  <h1 class="wp-heading-inline">Settings</h1>
74
+ <form action="" method="post" id="email_tabs_form" class="ig-settings-form rcorners">
75
 
76
  <?php settings_fields( 'email_subscribers_settings' ); ?>
77
 
78
+ <div id="es-settings-tabs">
79
  <div id="menu-tab-listing" class="">
80
  <ul class="main-tab-nav">
81
  <li class="ig-menu-tab"><a href="#tabs-1"><i class="dashicons dashicons-admin-generic"></i>&nbsp;<?php echo __( 'General', 'email-subscribers' ); ?></a></li>
176
  'default' => ''
177
  ),
178
 
179
+ 'ig_es_post_image_size' => array(
180
  'id' => 'ig_es_post_image_size',
181
  'name' => __( 'Image Size', 'email-subscribers' ),
182
  'type' => 'select',
185
  'default' => 'full'
186
  ),
187
 
188
+ 'ig_es_track_email_opens' => array(
189
+ 'id' => 'ig_es_track_email_opens',
190
+ 'name' => __( 'Track Opens', 'email-subscribers' ),
191
+ 'type' => 'checkbox',
192
+ 'desc' => __( 'Check this if you want to track email opening.', 'email-subscribers' ),
193
+ 'default' => 'yes'
194
+ ),
195
+
196
  //'ig_es_unsubscribe_link' => array( 'type' => 'text', 'options' => false, 'placeholder' => '', 'readonly' => 'readonly', 'supplemental' => '', 'default' => '', 'id' => 'ig_es_unsubscribe_link', 'name' => __( 'Unsubscribe Link', 'email-subscribers' ), 'desc' => '', ),
197
  'ig_es_unsubscribe_link_content' => array(
198
  'type' => 'textarea',
435
  ),
436
 
437
  'email_sending' => array(
438
+ 'ig_es_cronurl' => array(
439
  'type' => 'text',
440
  'placeholder' => '',
441
  'supplemental' => '',
446
  'desc' => __( sprintf( __( "You need to visit this URL to send email notifications. Know <a href='%s' target='_blank'>how to run this in background</a>", 'email-subscribers' ),
447
  "https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-cpanel/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page" ) )
448
  ),
449
+ 'ig_es_disable_wp_cron' => array(
450
+ 'type' => 'checkbox',
451
+ 'placeholder' => '',
452
+ 'supplemental' => '',
453
+ 'default' => 'no',
454
+ 'id' => 'ig_es_disable_wp_cron',
455
+ 'name' => __( 'Disable WordPress Cron', 'email-subscribers' ),
456
+ 'desc' => __( 'Check this if you do not want Email Subscribers to use WP cron for sending emails', 'email-subscribers' )
457
+ ),
458
 
459
  'ig_es_hourly_email_send_limit' => array(
460
  'type' => 'text',
466
  'desc' => __( 'Total emails your host can send in an hour.', 'email-subscribers' )
467
  ),
468
 
469
+ 'ig_es_test_send_email' => array(
470
+ 'type' => 'html',
471
+ 'html' => '<input id="es-test-email" type="email"/><input type="submit" name="submit" id="es-send-test" class="button button-primary" value="Send Email"><span class="es_spinner_image_admin" id="spinner-image" style="display:none"><img src="'.EMAIL_SUBSCRIBERS_URL. '/public/images/spinner.gif'.'"/></span>',
472
+ 'placeholder' => '',
473
+ 'supplemental' => '',
474
+ 'default' => '',
475
+ 'id' => 'ig_es_test_send_email',
476
+ 'name' => __( 'Send Test Email', 'email-subscribers' ),
477
+ 'desc' => __( 'Enter email address to send test email.', 'email-subscribers' )
478
+ )
479
  ),
480
 
481
  'security_settings' => array(
510
  $type = ! empty( $arguments['type'] ) ? $arguments['type'] : '';
511
  $placeholder = ! empty( $arguments['placeholder'] ) ? $arguments['placeholder'] : '';
512
  $readonly = ! empty( $arguments['readonly'] ) ? $arguments['readonly'] : '';
513
+ $html = ! empty( $arguments['html'] ) ? $arguments['html'] : '';
514
 
515
  // Check which type of field we want
516
  switch ( $arguments['type'] ) {
544
  $field_html = sprintf( '<select name="%1$s" id="%1$s">%2$s</select>', $uid, $options_markup );
545
  }
546
  break;
547
+ case 'html' :
548
+ $field_html = $html;
549
+ default;
550
  }
551
 
552
  $field_html .= '<br />';
includes/admin/class-es-campaigns-table.php CHANGED
@@ -446,6 +446,6 @@ class ES_Campaigns_Table extends WP_List_Table {
446
 
447
  }
448
 
449
- add_action( 'admin_menu', function () {
450
- ES_Campaigns_Table::get_instance();
451
- } );
446
 
447
  }
448
 
449
+ // add_action( 'admin_menu', function () {
450
+ // ES_Campaigns_Table::get_instance();
451
+ // } );
includes/admin/class-es-cron.php CHANGED
@@ -27,6 +27,9 @@ class ES_Cron {
27
  $es_request = Email_Subscribers::get_request( 'es' );
28
  }
29
 
 
 
 
30
  $self = ! empty( $_REQUEST['self'] ) ? $_REQUEST['self'] : 0;
31
 
32
  if ( 'cron' === $es_request ) {
@@ -255,6 +258,3 @@ class ES_Cron {
255
 
256
  }
257
 
258
- add_action( 'init', function () {
259
- new ES_Cron();
260
- } );
27
  $es_request = Email_Subscribers::get_request( 'es' );
28
  }
29
 
30
+ $ig_es_disable_wp_cron = get_option( 'ig_es_disable_wp_cron', 'no');
31
+ if( $is_wp_cron && 'yes' === $ig_es_disable_wp_cron ) return;
32
+
33
  $self = ! empty( $_REQUEST['self'] ) ? $_REQUEST['self'] : 0;
34
 
35
  if ( 'cron' === $es_request ) {
258
 
259
  }
260
 
 
 
 
includes/admin/class-es-forms-table.php CHANGED
@@ -776,6 +776,6 @@ class ES_Forms_Table extends WP_List_Table {
776
  }
777
  }
778
 
779
- add_action( 'admin_menu', function () {
780
- ES_Forms_Table::get_instance();
781
- } );
776
  }
777
  }
778
 
779
+ // add_action( 'admin_menu', function () {
780
+ // ES_Forms_Table::get_instance();
781
+ // } );
includes/admin/class-es-handle-subscription.php CHANGED
@@ -401,8 +401,3 @@ class ES_Handle_Subscription {
401
  }
402
 
403
  }
404
-
405
-
406
- add_action( 'init', function () {
407
- new ES_Handle_Subscription();
408
- } );
401
  }
402
 
403
  }
 
 
 
 
 
includes/admin/class-es-import-subscribers.php CHANGED
@@ -63,7 +63,6 @@ class ES_Import_Subscribers {
63
  while ( ( $data = fgetcsv( $handle ) ) !== false ) {
64
 
65
  $data = array_combine( $headers, $data );
66
-
67
  $name = isset( $data['Name'] ) ? trim( $data['Name'] ) : '';
68
  $email = isset( $data['Email'] ) ? trim( $data['Email'] ) : '';
69
 
63
  while ( ( $data = fgetcsv( $handle ) ) !== false ) {
64
 
65
  $data = array_combine( $headers, $data );
 
66
  $name = isset( $data['Name'] ) ? trim( $data['Name'] ) : '';
67
  $email = isset( $data['Email'] ) ? trim( $data['Email'] ) : '';
68
 
includes/admin/class-es-lists-table.php CHANGED
@@ -303,13 +303,12 @@ class ES_Lists_Table extends WP_List_Table {
303
  // Prepare Order by clause
304
  $order_by_clause = '';
305
  $order = ! empty( $order ) ? ' ' . esc_sql( $order ) : ' DESC';
306
- //$order_by_clause = ' ORDER BY ' . esc_sql( 'created_at' ) . ' ' . $order;
307
- $order_by_clause = ! empty( $order_by ) ? $order_by_clause . ' , ' . esc_sql( $order_by ) . ' ' . $order : $order_by_clause;
308
 
309
  $sql .= $order_by_clause;
310
  $sql .= " LIMIT $per_page";
311
  $sql .= ' OFFSET ' . ( $page_number - 1 ) * $per_page;
312
-
313
  $result = $wpdb->get_results( $sql, 'ARRAY_A' );
314
 
315
  } else {
303
  // Prepare Order by clause
304
  $order_by_clause = '';
305
  $order = ! empty( $order ) ? ' ' . esc_sql( $order ) : ' DESC';
306
+ $order_by_clause = ' ORDER BY ' . esc_sql( 'created_at' ) . ' ' . $order;
307
+ $order_by_clause = ! empty( $order_by) ? $order_by_clause . ' , ' . esc_sql( $order_by ) . ' ' . $order : $order_by_clause;
308
 
309
  $sql .= $order_by_clause;
310
  $sql .= " LIMIT $per_page";
311
  $sql .= ' OFFSET ' . ( $page_number - 1 ) * $per_page;
 
312
  $result = $wpdb->get_results( $sql, 'ARRAY_A' );
313
 
314
  } else {
includes/admin/class-es-reports-table.php CHANGED
@@ -150,9 +150,9 @@ class ES_Reports_Table extends WP_List_Table {
150
  <td align="left"><?php echo $i; ?></td>
151
  <td><?php echo $email['email']; ?></td>
152
  <td><span style="color:#03a025;font-weight:bold;"><?php echo $email['status']; ?></span></td>
153
- <td><?php echo $email['sent_at']; ?></td>
154
  <td><span><?php echo ( ! empty( $email['opened'] ) && $email['opened'] == 1 ) ? _e('Viewed', 'email-subscribers') : '<i title="'.__('Not yet viewed', 'email-subscribers').'" class="dashicons dashicons-es dashicons-minus">' ?></span></td>
155
- <td><?php echo $email['opened_at']; ?></td>
156
  </tr>
157
 
158
  <?php
150
  <td align="left"><?php echo $i; ?></td>
151
  <td><?php echo $email['email']; ?></td>
152
  <td><span style="color:#03a025;font-weight:bold;"><?php echo $email['status']; ?></span></td>
153
+ <td><?php echo ig_es_format_date_time( $email['sent_at'] ); ?></td>
154
  <td><span><?php echo ( ! empty( $email['opened'] ) && $email['opened'] == 1 ) ? _e('Viewed', 'email-subscribers') : '<i title="'.__('Not yet viewed', 'email-subscribers').'" class="dashicons dashicons-es dashicons-minus">' ?></span></td>
155
+ <td><?php echo ig_es_format_date_time( $email['opened_at'] ); ?></td>
156
  </tr>
157
 
158
  <?php
includes/admin/class-es-tools.php CHANGED
@@ -20,158 +20,30 @@ class ES_Tools {
20
 
21
  // class constructor
22
  public function __construct() {
23
- add_filter( 'set-screen-option', [ __CLASS__, 'set_screen' ], 10, 3 );
24
- add_action( 'admin_init', array( $this, 'setup_sections' ) );
25
- add_action( 'admin_init', array( $this, 'email_tools_settings_fields' ) );
26
  }
27
 
28
- public static function set_screen( $status, $option, $value ) {
29
- return $value;
30
- }
31
-
32
- public function plugin_menu() {
33
- $tool_title = __( 'Tools', 'email-subscribers' );
34
- $hook = add_submenu_page(
35
- 'es_dashboard', $tool_title, $tool_title, get_option( 'es_roles_sendmail', true ), 'es_tools', [ $this, 'es_tools_settings_callback' ]
36
- );
37
-
38
- }
39
-
40
- public function es_tools_settings_callback() {
41
-
42
- $submitted = Email_Subscribers::get_request( 'submitted' );
43
-
44
-
45
- if ( 'submitted' === $submitted ) {
46
-
47
- $es_test_email = Email_Subscribers::get_request( 'es_test_email' );
48
-
49
- if ( empty( $es_test_email ) ) {
50
- $message = __( 'Please add email', 'email-subscribers' );
51
- $status = 'error';
52
- } else {
53
- $data = array(
54
- 'es_test_email' => $es_test_email,
55
- );
56
- //Todo:: handle errors;
57
- $email_response = self::es_send_test_email_callback( $data );
58
- $message = __( 'Email has been sent. Please check your inbox', 'email-subscribers' );
59
- $status = 'success';
60
- }
61
-
62
- $this->show_message( $message, $status );
63
- }
64
-
65
- $this->prepare_tools_settings_form();
66
-
67
-
68
- }
69
-
70
- public function prepare_tools_settings_form() {
71
-
72
- ?>
73
-
74
- <div class="wrap">
75
- <form method="post" action="#">
76
- <?php settings_fields( 'es_tools_settings' ); ?>
77
- <?php do_settings_sections( 'tools_settings' ); ?>
78
- <div class="email-tools">
79
- <input type="submit" id="" name="es_send_email" value="<?php _e( 'Send Email', 'email-subscribers' ) ?>" class="button button-primary">
80
- <input type="hidden" name="submitted" value="submitted">
81
- </div>
82
- </form>
83
- </div>
84
-
85
- <?php
86
-
87
- }
88
-
89
- public function setup_sections() {
90
- add_settings_section( 'tools_settings', __( 'Tools', 'email-subscribers' ), array( $this, 'email_tools_settings_callback' ), 'tools_settings' );
91
- }
92
-
93
- public function email_tools_settings_callback( $arguments ) {
94
-
95
- ?>
96
- <!--<div class="email-tools">
97
- <input type="button" id="es_send_email" name="es_send_email" value="Send Email" class="button button-primary">
98
- </div>-->
99
- <?php
100
-
101
- }
102
-
103
- public function email_tools_settings_fields() {
104
-
105
- $fields = array(
106
- array(
107
- 'uid' => 'es_test_email',
108
- 'label' => __( 'Send a Test Email', 'email-subscribers' ),
109
- 'section' => 'tools_settings',
110
- 'type' => 'email',
111
- 'options' => '',
112
- 'placeholder' => '',
113
- 'helper' => '',
114
- 'supplemental' => '',
115
- 'default' => ''
116
- ),
117
- );
118
- $fields = apply_filters( 'email_tools_fields', $fields );
119
- foreach ( $fields as $field ) {
120
- add_settings_field( $field['uid'], $field['label'], array( $this, 'field_callback' ), $field['section'], $field['section'], $field );
121
- register_setting( 'es_tools_settings', $field['uid'] );
122
- }
123
-
124
- }
125
-
126
- public function field_callback( $arguments ) {
127
- $value = get_option( $arguments['uid'] ); // Get the current value, if there is one
128
- if ( ! $value ) { // If no value exists
129
- $value = $arguments['default']; // Set to our default
130
- }
131
-
132
- // Check which type of field we want
133
- switch ( $arguments['type'] ) {
134
- case 'text': // If it is a text field
135
- printf( '<input name="%1$s" id="%1$s" type="%2$s" placeholder="%3$s" value="%4$s" />', $arguments['uid'], $arguments['type'], $arguments['placeholder'], $value );
136
- break;
137
- case 'email':
138
- printf( '<input name="%1$s" id="%1$s" type="%2$s" placeholder="%3$s" value="%4$s" />', $arguments['uid'], $arguments['type'], $arguments['placeholder'], $value );
139
- break;
140
- }
141
-
142
- // If there is help text
143
- if ( $helper = $arguments['helper'] ) {
144
- printf( '<span class="helper"> %s</span>', $helper ); // Show it
145
- }
146
-
147
- // If there is supplemental text
148
- if ( $supplimental = $arguments['supplemental'] ) {
149
- printf( '<p class="description">%s</p>', $supplimental ); // Show it
150
- }
151
- }
152
-
153
- public static function es_send_test_email_callback( $data ) {
154
-
155
- $email = ! empty( $data['es_test_email'] ) ? $data['es_test_email'] : '';
156
  $email_response = '';
157
-
158
  if ( ! empty( $email ) ) {
159
  $subject = 'Email Subscribers: ' . sprintf( esc_html__( 'Test email to %s', 'email-subscribers' ), $email );
160
  $content = self::get_email_message();
161
  $email_response = ES_Mailer::send( $email, $subject, $content );
 
 
 
 
 
 
 
162
  }
163
 
164
- return $email_response;
 
165
  }
166
 
167
- public function show_message( $message = '', $status = 'success' ) {
168
-
169
- $class = 'notice notice-success is-dismissible';
170
- if ( 'error' === $status ) {
171
- $class = 'notice notice-error is-dismissible';
172
- }
173
- echo "<div class='{$class}'><p>{$message}</p></div>";
174
- }
175
 
176
  public static function get_instance() {
177
  if ( ! isset( self::$instance ) ) {
@@ -186,17 +58,17 @@ class ES_Tools {
186
  ?>
187
 
188
  <html>
189
- <head></head>
190
- <body>
191
- <p>Congrats, test email was sent successfully!</p>
192
 
193
- <p>Thank you for trying out Email Subscribers. We are on a mission to make the best Email Marketing Automation plugin for WordPress.</p>
194
 
195
- <p>If you find this plugin useful, please consider giving us <a href="https://wordpress.org/support/plugin/email-subscribers/reviews/?filter=5">5 stars review</a> on WordPress!</p>
196
 
197
- <p>Nirav Mehta</p>
198
- <p>Founder, <a href="https://www.icegram.com/">Icegram</a></p>
199
- </body>
200
  </html>
201
 
202
  <?php
@@ -207,8 +79,5 @@ class ES_Tools {
207
  }
208
  }
209
 
210
- add_action( 'admin_menu', function () {
211
- ES_Tools::get_instance();
212
- } );
213
 
214
  ?>
20
 
21
  // class constructor
22
  public function __construct() {
23
+ add_action( 'wp_ajax_es_send_test_email', array( $this, 'es_send_test_email_callback' ) );
 
 
24
  }
25
 
26
+ public static function es_send_test_email_callback() {
27
+ $email = ! empty( $_REQUEST['es_test_email'] ) ? $_REQUEST['es_test_email'] : '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  $email_response = '';
29
+ $response = array();
30
  if ( ! empty( $email ) ) {
31
  $subject = 'Email Subscribers: ' . sprintf( esc_html__( 'Test email to %s', 'email-subscribers' ), $email );
32
  $content = self::get_email_message();
33
  $email_response = ES_Mailer::send( $email, $subject, $content );
34
+ if ( $email_response ) {
35
+ $response['message'] = __( 'Email has been sent. Please check your inbox', 'email-subscribers' );
36
+ $response['status'] = 'success';
37
+ } else {
38
+ $response['message'] = __( 'Something went wrong', 'email-subscribers' );
39
+ $response['status'] = 'error';
40
+ }
41
  }
42
 
43
+ echo json_encode( $response );
44
+ exit;
45
  }
46
 
 
 
 
 
 
 
 
 
47
 
48
  public static function get_instance() {
49
  if ( ! isset( self::$instance ) ) {
58
  ?>
59
 
60
  <html>
61
+ <head></head>
62
+ <body>
63
+ <p>Congrats, test email was sent successfully!</p>
64
 
65
+ <p>Thank you for trying out Email Subscribers. We are on a mission to make the best Email Marketing Automation plugin for WordPress.</p>
66
 
67
+ <p>If you find this plugin useful, please consider giving us <a href="https://wordpress.org/support/plugin/email-subscribers/reviews/?filter=5">5 stars review</a> on WordPress!</p>
68
 
69
+ <p>Nirav Mehta</p>
70
+ <p>Founder, <a href="https://www.icegram.com/">Icegram</a></p>
71
+ </body>
72
  </html>
73
 
74
  <?php
79
  }
80
  }
81
 
 
 
 
82
 
83
  ?>
includes/class-email-subscribers.php CHANGED
@@ -214,41 +214,48 @@ class Email_Subscribers {
214
  <?php
215
  $admin_notice_1_option = get_option( 'ig_es_admin_notice_1_option', 'no' );
216
  $admin_notice_1_hide_option = get_option( 'ig_es_admin_notice_1_hide_option', 'no' );
 
 
217
  $es_admin_notice_1_start = strtotime( "2019-04-17" );
218
  $es_admin_notice_1_end = strtotime( "2019-04-27" );
219
- if ( ( $es_current_date >= $es_admin_notice_1_start ) && ( $es_current_date <= $es_admin_notice_1_end ) && 'yes' !== $admin_notice_1_option && 'yes' !== $admin_notice_1_hide_option ) {
220
- $starter_banner_hide_18 = get_option( 'ig_es_admin_notice_1_hide_option', false );
221
- if ( $starter_banner_hide_18 ) {
222
- echo "<div class='notice es-admin-notices'><strong>" . __( "🤗 Insane Launch Offer: ", 'email-subscribers' ) . "</strong>" . __( 'Email Subscribers Starter Plan ',
223
- 'email-subscribers' ) . "<a href='?es_dismiss_admin_notice=1&option_name=admin_notice_1_option'>[" . __( "Click to claim limited time offer" ) . "]<a href='?es_dismiss_admin_notice=1&option_name=admin_notice_1_hide_option' style='float:right; font-size:0.8em;' > " . __( "Dissmiss", 'email-subscribers' ) . " </a></div>";
 
 
 
 
 
 
 
 
 
 
 
224
  }
225
- $image_url = EMAIL_SUBSCRIBERS_URL . "/admin/images/reliable-email-marketing-for-bloggers.png";
226
- echo '<a href="?es_dismiss_admin_notice=1&option_name=admin_notice_1_option">
227
- <div class="es-starter-banner"><img src="' . $image_url . '"/></div></a>
228
- <div class="es-starter-hide"><a href="?es_dismiss_admin_notice=1&option_name=admin_notice_1_hide_option" class="es-stater-banner-hide"href="#">' . __( 'Hide This', 'email-subscribers' ) . '</a></div>';
229
  }
230
  //17th-27th :End
231
  //28th-29th
232
- $admin_notice_2_option = get_option( 'ig_es_admin_notice_2_option', 'no' );
233
  $admin_notice_2_hide_option = get_option( 'ig_es_admin_notice_2_hide_option', 'no' );
234
  $es_admin_notice_2_start = strtotime( "2019-04-28" );
235
  $es_admin_notice_2_end = strtotime( "2019-04-29" );
236
  if ( ( $es_current_date >= $es_admin_notice_2_start ) && ( $es_current_date <= $es_admin_notice_2_end ) && 'yes' !== $admin_notice_2_option && 'yes' !== $admin_notice_2_hide_option ) {
237
- //echo "<div class='notice es-admin-notices'><strong>⏳[". __(' Last 2 days', 'email-subscribers') . " ]</strong>".__('Fix your biggest email marketing problems with Email Subscribers Starter Plan.', 'email-subscribers')." <a href='?es_dismiss_admin_notice=1&option_name=admin_notice_2_option'>[".__('Click here for more', 'email-subscribers')."]</a><a href='?es_dismiss_admin_notice=1&option_name=admin_notice_2_hide_option' style='float:right; font-size:0.8em;' > ".__("Dissmiss", 'email-subscribers')." </a></div>";
238
  $image_url = EMAIL_SUBSCRIBERS_URL . "/admin/images/dont-miss-opportunity.png";
239
- echo '<a href="?es_dismiss_admin_notice=1&option_name=admin_notice_2_option">
240
  <div class="es-starter-banner"><img style="box-shadow:none" src="' . $image_url . '"/></div></a>
241
  <div class="es-starter-hide"><a href="?es_dismiss_admin_notice=1&option_name=admin_notice_2_hide_option" class="es-stater-banner-hide"href="#">' . __( 'Hide This', 'email-subscribers' ) . '</a></div>';
242
  }
243
  //30th
244
- $admin_notice_3_option = get_option( 'ig_es_admin_notice_3_option', 'no' );
245
  $admin_notice_3_hide_option = get_option( 'ig_es_admin_notice_3_hide_option', 'no' );
246
  $es_admin_notice_3_start = strtotime( "2019-04-30" );
247
  $es_admin_notice_3_end = strtotime( "2019-05-1" );
248
  if ( ( $es_current_date >= $es_admin_notice_3_start ) && ( $es_current_date < $es_admin_notice_3_end ) && 'yes' !== $admin_notice_3_option && 'yes' !== $admin_notice_3_hide_option ) {
249
- //echo "<div class='notice es-admin-notices'><strong>[". __(' LAST DAY TODAY', 'email-subscribers') . " ]</strong> ". __('You will regret if you miss this. Solve your burning email marketing problems today. ', 'email-subscribers')."<a href='?es_dismiss_admin_notice=1&option_name=admin_notice_3_option'>[".__('Click to learn more', 'email-subscribers')."]</a><a href='?es_dismiss_admin_notice=1&option_name=admin_notice_3_hide_option' style='float:right; font-size:0.8em;' >".__("Dissmiss", 'email-subscribers')."</a></div>";
250
  $image_url = EMAIL_SUBSCRIBERS_URL . "/admin/images/what-are-you-waiting-for.png";
251
- echo '<a href="?es_dismiss_admin_notice=1&option_name=admin_notice_3_option">
252
  <div class="es-starter-banner"><img src="' . $image_url . '"/></div></a>
253
  <div class="es-starter-hide"><a href="?es_dismiss_admin_notice=1&option_name=admin_notice_3_hide_option" class="es-stater-banner-hide"href="#">' . __( 'Hide This', 'email-subscribers' ) . '</a></div>';
254
  }
@@ -259,8 +266,8 @@ class Email_Subscribers {
259
  if ( isset( $_GET['es_dismiss_admin_notice'] ) && $_GET['es_dismiss_admin_notice'] == '1' && isset( $_GET['option_name'] ) ) {
260
  $option_name = sanitize_text_field( $_GET['option_name'] );
261
  update_option( 'ig_es_' . $option_name, 'yes' );
262
- if ( in_array( $option_name, array( 'starter_banner', 'admin_notice_1_option', 'admin_notice_2_option', 'admin_notice_3_option' ) ) ) {
263
- header( "Location: https://www.icegram.com/email-subscribers-starter/?utm_source=in_app&utm_medium=es_banner&utm_campaign=" . $option_name );
264
  exit();
265
  } else {
266
  $referer = wp_get_referer();
214
  <?php
215
  $admin_notice_1_option = get_option( 'ig_es_admin_notice_1_option', 'no' );
216
  $admin_notice_1_hide_option = get_option( 'ig_es_admin_notice_1_hide_option', 'no' );
217
+ $hot_cakes_option = get_option( 'ig_es_hot_cakes_option', 'no' );
218
+ $hot_cakes_hide_option = get_option( 'ig_es_hot_cakes_hide_option', 'no' );
219
  $es_admin_notice_1_start = strtotime( "2019-04-17" );
220
  $es_admin_notice_1_end = strtotime( "2019-04-27" );
221
+ if ( ( $es_current_date >= $es_admin_notice_1_start ) && ( $es_current_date <= $es_admin_notice_1_end ) ) {
222
+ if( 'yes' !== $admin_notice_1_option && 'yes' !== $admin_notice_1_hide_option ){
223
+ $starter_banner_hide_18 = get_option( 'ig_es_admin_notice_1_hide_option', false );
224
+ if ( $starter_banner_hide_18 ) {
225
+ echo "<div class='notice es-admin-notices'><strong>" . __( "🤗 Insane Launch Offer: ", 'email-subscribers' ) . "</strong>" . __( 'Email Subscribers Starter Plan ',
226
+ 'email-subscribers' ) . "<a href='?es_dismiss_admin_notice=1&option_name=admin_notice_1_option'>[" . __( "Click to claim limited time offer" ) . "]<a href='?es_dismiss_admin_notice=1&option_name=admin_notice_1_hide_option' style='float:right; font-size:0.8em;' > " . __( "Dissmiss", 'email-subscribers' ) . " </a></div>";
227
+ }
228
+ $image_url = EMAIL_SUBSCRIBERS_URL . "/admin/images/reliable-email-marketing-for-bloggers.png";
229
+ echo '<a href="?es_dismiss_admin_notice=1&option_name=admin_notice_1_option">
230
+ <div class="es-starter-banner"><img src="' . $image_url . '"/></div></a>
231
+ <div class="es-starter-hide"><a href="?es_dismiss_admin_notice=1&option_name=admin_notice_1_hide_option" class="es-stater-banner-hide"href="#">' . __( 'Hide This', 'email-subscribers' ) . '</a></div>';
232
+ }else if( ( 'yes' === $admin_notice_1_option || 'yes' === $admin_notice_1_hide_option ) && 'yes' !== $hot_cakes_option && 'yes' !== $hot_cakes_hide_option ){
233
+ $image_url = EMAIL_SUBSCRIBERS_URL . "/admin/images/hot-cakes.png";
234
+ echo '<a href="?es_dismiss_admin_notice=1&option_name=hot_cakes_option">
235
+ <div class="es-starter-banner"><img src="' . $image_url . '"/></div></a>
236
+ <div class="es-starter-hide"><a href="?es_dismiss_admin_notice=1&option_name=hot_cakes_hide_option" class="es-stater-banner-hide"href="#">' . __( 'Hide This', 'email-subscribers' ) . '</a></div>';
237
  }
 
 
 
 
238
  }
239
  //17th-27th :End
240
  //28th-29th
241
+ $admin_notice_2_option = get_option( 'ig_es_starter_campaign_28_29', 'no' );
242
  $admin_notice_2_hide_option = get_option( 'ig_es_admin_notice_2_hide_option', 'no' );
243
  $es_admin_notice_2_start = strtotime( "2019-04-28" );
244
  $es_admin_notice_2_end = strtotime( "2019-04-29" );
245
  if ( ( $es_current_date >= $es_admin_notice_2_start ) && ( $es_current_date <= $es_admin_notice_2_end ) && 'yes' !== $admin_notice_2_option && 'yes' !== $admin_notice_2_hide_option ) {
 
246
  $image_url = EMAIL_SUBSCRIBERS_URL . "/admin/images/dont-miss-opportunity.png";
247
+ echo '<a href="?es_dismiss_admin_notice=1&option_name=starter_campaign_28_29">
248
  <div class="es-starter-banner"><img style="box-shadow:none" src="' . $image_url . '"/></div></a>
249
  <div class="es-starter-hide"><a href="?es_dismiss_admin_notice=1&option_name=admin_notice_2_hide_option" class="es-stater-banner-hide"href="#">' . __( 'Hide This', 'email-subscribers' ) . '</a></div>';
250
  }
251
  //30th
252
+ $admin_notice_3_option = get_option( 'ig_es_starter_campaign_30', 'no' );
253
  $admin_notice_3_hide_option = get_option( 'ig_es_admin_notice_3_hide_option', 'no' );
254
  $es_admin_notice_3_start = strtotime( "2019-04-30" );
255
  $es_admin_notice_3_end = strtotime( "2019-05-1" );
256
  if ( ( $es_current_date >= $es_admin_notice_3_start ) && ( $es_current_date < $es_admin_notice_3_end ) && 'yes' !== $admin_notice_3_option && 'yes' !== $admin_notice_3_hide_option ) {
 
257
  $image_url = EMAIL_SUBSCRIBERS_URL . "/admin/images/what-are-you-waiting-for.png";
258
+ echo '<a href="?es_dismiss_admin_notice=1&option_name=starter_campaign_30">
259
  <div class="es-starter-banner"><img src="' . $image_url . '"/></div></a>
260
  <div class="es-starter-hide"><a href="?es_dismiss_admin_notice=1&option_name=admin_notice_3_hide_option" class="es-stater-banner-hide"href="#">' . __( 'Hide This', 'email-subscribers' ) . '</a></div>';
261
  }
266
  if ( isset( $_GET['es_dismiss_admin_notice'] ) && $_GET['es_dismiss_admin_notice'] == '1' && isset( $_GET['option_name'] ) ) {
267
  $option_name = sanitize_text_field( $_GET['option_name'] );
268
  update_option( 'ig_es_' . $option_name, 'yes' );
269
+ if ( in_array( $option_name, array( 'starter_banner', 'admin_notice_1_option', 'starter_campaign_28_29', 'starter_campaign_30', 'hot_cakes_option' ) ) ) {
270
+ header( "Location: https://www.icegram.com/email-subscribers-starter/?utm_source=".$option_name."&utm_medium=in_app=&utm_campaign=starter_launch");
271
  exit();
272
  } else {
273
  $referer = wp_get_referer();
includes/class-es-common.php CHANGED
@@ -68,6 +68,15 @@ Class ES_Common {
68
  $data['tmpl_id'] = $tmpl_id;
69
  $data = apply_filters( 'es_after_process_template_body', $data );
70
  $content = $data['content'];
 
 
 
 
 
 
 
 
 
71
 
72
  return $content;
73
  }
68
  $data['tmpl_id'] = $tmpl_id;
69
  $data = apply_filters( 'es_after_process_template_body', $data );
70
  $content = $data['content'];
71
+ //total contacts
72
+ $total_contacts = ES_DB_Contacts::count_active_subscribers_by_list_id();
73
+ $content = str_replace( "{{TOTAL-CONTACTS}}", $total_contacts, $content );
74
+ //blog title
75
+ $blog_name = get_option( 'blogname' );
76
+ $content = str_replace( "{{SITENAME}}", $blog_name, $content );
77
+ // site url
78
+ $site_url = home_url( '/' );
79
+ $content = str_replace( "{{SITEURL}}", $site_url, $content );
80
 
81
  return $content;
82
  }
includes/class-es-install.php CHANGED
@@ -249,6 +249,7 @@ class ES_Install {
249
  // Check if we are not already running this routine.
250
  if ( 'yes' === get_transient( 'ig_es_updating' ) ) {
251
  self::$logger->info( '********* Update is already running..... ****** ' );
 
252
  return;
253
  }
254
 
@@ -280,7 +281,7 @@ class ES_Install {
280
  }
281
 
282
  public static function update_db_version( $version = null ) {
283
- update_option('ig_es_db_version', is_null( $version ) ? ES_PLUGIN_VERSION : $version);
284
  }
285
 
286
  private static function create_options() {
@@ -369,9 +370,10 @@ class ES_Install {
369
  'ig_es_set_widget' => array( 'default' => '', 'old_option' => '' ),
370
  'ig_es_sync_wp_users' => array( 'default' => '', 'old_option' => 'ig_es_sync_wp_users' ),
371
  'ig_es_blocked_domains' => array( 'default' => 'mail.ru' ),
 
 
372
  );
373
 
374
-
375
  return $options;
376
  }
377
 
249
  // Check if we are not already running this routine.
250
  if ( 'yes' === get_transient( 'ig_es_updating' ) ) {
251
  self::$logger->info( '********* Update is already running..... ****** ' );
252
+
253
  return;
254
  }
255
 
281
  }
282
 
283
  public static function update_db_version( $version = null ) {
284
+ update_option( 'ig_es_db_version', is_null( $version ) ? ES_PLUGIN_VERSION : $version );
285
  }
286
 
287
  private static function create_options() {
370
  'ig_es_set_widget' => array( 'default' => '', 'old_option' => '' ),
371
  'ig_es_sync_wp_users' => array( 'default' => '', 'old_option' => 'ig_es_sync_wp_users' ),
372
  'ig_es_blocked_domains' => array( 'default' => 'mail.ru' ),
373
+ 'ig_es_disable_wp_cron' => array( 'default' => 'no' ),
374
+ 'ig_es_track_email_opens' => array( 'default' => 'yes' ),
375
  );
376
 
 
377
  return $options;
378
  }
379
 
includes/class-es-mailer.php CHANGED
@@ -63,6 +63,7 @@ class ES_Mailer {
63
  public static function prepare_email( $content = '', $data = array() ) {
64
 
65
  $blog_name = get_option( 'blogname' );
 
66
 
67
  $name = isset( $data['name'] ) ? $data['name'] : '';
68
  $email = isset( $data['email'] ) ? $data['email'] : '';
@@ -73,6 +74,7 @@ class ES_Mailer {
73
  $content = str_replace( "{{GROUP}}", $list_name, $content );
74
  $content = str_replace( "{{LIST}}", $list_name, $content );
75
  $content = str_replace( "{{SITENAME}}", $blog_name, $content );
 
76
 
77
 
78
  $content = nl2br( $content );
@@ -109,8 +111,9 @@ class ES_Mailer {
109
 
110
  public static function prepare_welcome_email( $data ) {
111
 
112
- $blog_name = get_option( 'blogname' );
113
- $content = stripslashes( get_option( 'ig_es_welcome_email_content', '' ) );
 
114
 
115
  $name = isset( $data['name'] ) ? $data['name'] : '';
116
  $email = isset( $data['email'] ) ? $data['email'] : '';
@@ -129,6 +132,8 @@ class ES_Mailer {
129
  $content = str_replace( "{{LIST}}", $list_name, $content );
130
  $content = str_replace( "{{UNSUBSCRIBE-LINK}}", $unsubscribe_link, $content );
131
  $content = str_replace( "{{LINK}}", $unsubscribe_link, $content );
 
 
132
  $content = nl2br( $content );
133
 
134
  return $content;
@@ -138,6 +143,7 @@ class ES_Mailer {
138
  public static function prepare_double_optin_email( $data ) {
139
 
140
  $blog_name = get_option( 'blogname' );
 
141
  $content = stripslashes( get_option( 'ig_es_confirmation_mail_content', '' ) );
142
 
143
 
@@ -148,13 +154,14 @@ class ES_Mailer {
148
  $email = isset( $data['email'] ) ? $data['email'] : '';
149
  $name = isset( $data['name'] ) ? $data['name'] : '';
150
 
151
- $subscribe_link = self::prepare_link('subscribe', $db_id, $email, $guid);
152
 
153
  $content = str_replace( "{{NAME}}", $name, $content );
154
  $content = str_replace( "{{EMAIL}}", $email, $content );
155
  $content = str_replace( "{{LINK}}", $subscribe_link, $content );
156
  $content = str_replace( "{{SITENAME}}", $blog_name, $content );
157
  $content = str_replace( "{{SUBSCRIBE-LINK}}", $subscribe_link, $content );
 
158
 
159
  $content = nl2br( $content );
160
 
@@ -189,9 +196,15 @@ class ES_Mailer {
189
 
190
  $unsubscribe_link = self::prepare_link( 'unsubscribe', $dbid, $email, $contact_guid );
191
  $unsubtext = self::get_unsubscribe_text( $unsubscribe_link );
192
- $viewstslink = self::get_view_tracking_image( $guid, $email );
193
 
194
- $template_content = $template_content . $unsubtext . $viewstslink;
 
 
 
 
 
 
 
195
 
196
  return $template_content;
197
  }
@@ -204,7 +217,7 @@ class ES_Mailer {
204
 
205
  $link = add_query_arg( 'es', $link_type, site_url( '/' ) );
206
 
207
- $link = $link .'&db={{DBID}}&email={{EMAIL}}&guid={{GUID}}';
208
  $link = str_replace( "{{DBID}}", $dbid, $link );
209
  $link = str_replace( "{{EMAIL}}", $email, $link );
210
  $link = str_replace( "{{GUID}}", $guid, $link );
63
  public static function prepare_email( $content = '', $data = array() ) {
64
 
65
  $blog_name = get_option( 'blogname' );
66
+ $site_url = home_url( '/' );
67
 
68
  $name = isset( $data['name'] ) ? $data['name'] : '';
69
  $email = isset( $data['email'] ) ? $data['email'] : '';
74
  $content = str_replace( "{{GROUP}}", $list_name, $content );
75
  $content = str_replace( "{{LIST}}", $list_name, $content );
76
  $content = str_replace( "{{SITENAME}}", $blog_name, $content );
77
+ $content = str_replace( "{{SITEURL}}", $site_url, $content );
78
 
79
 
80
  $content = nl2br( $content );
111
 
112
  public static function prepare_welcome_email( $data ) {
113
 
114
+ $blog_name = get_option( 'blogname' );
115
+ $total_contacts = ES_DB_Contacts::count_active_subscribers_by_list_id();
116
+ $content = stripslashes( get_option( 'ig_es_welcome_email_content', '' ) );
117
 
118
  $name = isset( $data['name'] ) ? $data['name'] : '';
119
  $email = isset( $data['email'] ) ? $data['email'] : '';
132
  $content = str_replace( "{{LIST}}", $list_name, $content );
133
  $content = str_replace( "{{UNSUBSCRIBE-LINK}}", $unsubscribe_link, $content );
134
  $content = str_replace( "{{LINK}}", $unsubscribe_link, $content );
135
+ $content = str_replace( "{{TOTAL-CONTACTS}}", $total_contacts, $content );
136
+
137
  $content = nl2br( $content );
138
 
139
  return $content;
143
  public static function prepare_double_optin_email( $data ) {
144
 
145
  $blog_name = get_option( 'blogname' );
146
+ $total_contacts = ES_DB_Contacts::count_active_subscribers_by_list_id();
147
  $content = stripslashes( get_option( 'ig_es_confirmation_mail_content', '' ) );
148
 
149
 
154
  $email = isset( $data['email'] ) ? $data['email'] : '';
155
  $name = isset( $data['name'] ) ? $data['name'] : '';
156
 
157
+ $subscribe_link = self::prepare_link( 'subscribe', $db_id, $email, $guid );
158
 
159
  $content = str_replace( "{{NAME}}", $name, $content );
160
  $content = str_replace( "{{EMAIL}}", $email, $content );
161
  $content = str_replace( "{{LINK}}", $subscribe_link, $content );
162
  $content = str_replace( "{{SITENAME}}", $blog_name, $content );
163
  $content = str_replace( "{{SUBSCRIBE-LINK}}", $subscribe_link, $content );
164
+ $content = str_replace( "{{TOTAL-CONTACTS}}", $total_contacts, $content );
165
 
166
  $content = nl2br( $content );
167
 
196
 
197
  $unsubscribe_link = self::prepare_link( 'unsubscribe', $dbid, $email, $contact_guid );
198
  $unsubtext = self::get_unsubscribe_text( $unsubscribe_link );
 
199
 
200
+ $is_track_email_opens = get_option( 'ig_es_track_email_opens', 'yes' );
201
+
202
+ $email_tracking_image = '';
203
+ if ( 'yes' === $is_track_email_opens ) {
204
+ $email_tracking_image = self::get_view_tracking_image( $guid, $email );
205
+ }
206
+
207
+ $template_content = $template_content . $unsubtext . $email_tracking_image;
208
 
209
  return $template_content;
210
  }
217
 
218
  $link = add_query_arg( 'es', $link_type, site_url( '/' ) );
219
 
220
+ $link = $link . '&db={{DBID}}&email={{EMAIL}}&guid={{GUID}}';
221
  $link = str_replace( "{{DBID}}", $dbid, $link );
222
  $link = str_replace( "{{EMAIL}}", $email, $link );
223
  $link = str_replace( "{{GUID}}", $guid, $link );
public/class-email-subscribers-public.php CHANGED
@@ -129,6 +129,10 @@ class Email_Subscribers_Public {
129
 
130
  global $wpdb;
131
 
 
 
 
 
132
  $option = ! empty( $_REQUEST['es'] ) ? $_REQUEST['es'] : '';
133
  $db_id = ! empty( $_REQUEST['db'] ) ? $_REQUEST['db'] : '';
134
  $email = ! empty( $_REQUEST['email'] ) ? $_REQUEST['email'] : '';
129
 
130
  global $wpdb;
131
 
132
+ //initialize
133
+ new ES_Cron();
134
+ new ES_Handle_Subscription();
135
+
136
  $option = ! empty( $_REQUEST['es'] ) ? $_REQUEST['es'] : '';
137
  $db_id = ! empty( $_REQUEST['db'] ) ? $_REQUEST['db'] : '';
138
  $email = ! empty( $_REQUEST['email'] ) ? $_REQUEST['email'] : '';
readme.txt CHANGED
@@ -5,7 +5,7 @@ Author URI: https://www.icegram.com/
5
  Tags: subscription, newsletter, email marketing, post notification, email newsletter form, email signup, email widget, newsletter signup, subscribe, subscription form, bulk emails, signup form, list builder, lead generation, welcome email, contacts
6
  Requires at least: 3.9
7
  Tested up to: 5.1.1
8
- Stable tag: 4.0.15
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses
11
 
@@ -301,6 +301,14 @@ Use our free plugin [Email Subscribers - Group Selector](https://wordpress.org/p
301
 
302
  == Changelog ==
303
 
 
 
 
 
 
 
 
 
304
  = 4.0.15 (17.04.2019) =
305
  * Fix: Error with Gutenberg editor
306
  * Fix: Media Upload Error
5
  Tags: subscription, newsletter, email marketing, post notification, email newsletter form, email signup, email widget, newsletter signup, subscribe, subscription form, bulk emails, signup form, list builder, lead generation, welcome email, contacts
6
  Requires at least: 3.9
7
  Tested up to: 5.1.1
8
+ Stable tag: 4.0.16
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses
11
 
301
 
302
  == Changelog ==
303
 
304
+ = 4.0.16 (23.04.2019) =
305
+ * New : New keywords added : {{TOTAL-CONTACTC}} , {{SITEURL}}, {{SITENAME}}
306
+ * New : Added option to enable/ disable WordPress Cron for Email Subscribers
307
+ * New : Added option to enable/ disable email open tracking
308
+ * Fix : Database error while sorting list
309
+ * Fix : Incorrect viewed and sent dates in report details
310
+
311
+
312
  = 4.0.15 (17.04.2019) =
313
  * Fix: Error with Gutenberg editor
314
  * Fix: Media Upload Error