Email Subscribers & Newsletters - Version 4.1.6

Version Description

(01.07.2019) = * Update: Added sorting for name field in Audience tab * Fix: Warning: Illegal string offset 'es_registered' * Fix: Set list name blank in campaign list page * Fix: Contacts sort by email was not working.

Download this release

Release Info

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

Code changes from version 4.1.5 to 4.1.6

admin/class-email-subscribers-admin.php CHANGED
@@ -66,7 +66,6 @@ class Email_Subscribers_Admin {
66
  add_action( 'admin_menu', array( $this, 'email_subscribers_admin_menu' ) );
67
  add_action( 'wp_ajax_es_klawoo_subscribe', array( $this, 'klawoo_subscribe' ) );
68
  add_action( 'admin_footer', array( $this, 'remove_submenu' ) );
69
- add_action( 'edit_form_advanced', array( $this, 'add_spam_score_utm_link' ) );
70
  add_action( 'wp_ajax_send_test_email', array( $this, 'send_test_email' ) );
71
  add_action( 'admin_init', array( $this, 'es_save_onboarding_skip' ) );
72
 
@@ -359,8 +358,9 @@ class Email_Subscribers_Admin {
359
  $es_current_version = $es_plugin_data['Version'];
360
  $admin_email = get_option( 'admin_email' );
361
  $ig_es_4015_db_updated_at = get_option( 'ig_es_4015_db_updated_at', false );
 
362
  $onboarding_status = get_option( 'ig_es_onboarding_complete', 'no' );
363
- if ( ! $ig_es_4015_db_updated_at && 'yes' !== $onboarding_status ) {
364
  include plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/onboarding.php';
365
  } else {
366
  include plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/dashboard.php';
@@ -381,17 +381,7 @@ class Email_Subscribers_Admin {
381
  }
382
 
383
 
384
- public static function add_spam_score_utm_link() {
385
- global $post, $pagenow;
386
- if ( $post->post_type !== 'es_template' ) {
387
- return;
388
- }
389
- ?>
390
- <script>
391
- jQuery('#submitdiv').after('<div class="es_upsale"><a style="text-decoration:none;" target="_blank" href="https://www.icegram.com/documentation/how-ready-made-template-in-in-email-subscribers-look/?utm_source=in_app&utm_medium=es_template&utm_campaign=es_upsale"><img title="Get readymade templates" style="width:100%;border:0.3em #d46307 solid" src="<?php echo EMAIL_SUBSCRIBERS_URL?>/admin/images/starter-tmpl.png"/><p style="background: #d46307; color: #FFF; padding: 4px; width: 100%; text-align:center">Get readymade beautiful email templates</p></a></div>');
392
- </script>
393
- <?php
394
- }
395
 
396
  function send_test_email() {
397
  $message = array();
66
  add_action( 'admin_menu', array( $this, 'email_subscribers_admin_menu' ) );
67
  add_action( 'wp_ajax_es_klawoo_subscribe', array( $this, 'klawoo_subscribe' ) );
68
  add_action( 'admin_footer', array( $this, 'remove_submenu' ) );
 
69
  add_action( 'wp_ajax_send_test_email', array( $this, 'send_test_email' ) );
70
  add_action( 'admin_init', array( $this, 'es_save_onboarding_skip' ) );
71
 
358
  $es_current_version = $es_plugin_data['Version'];
359
  $admin_email = get_option( 'admin_email' );
360
  $ig_es_4015_db_updated_at = get_option( 'ig_es_4015_db_updated_at', false );
361
+ $is_sa_option_exists = get_option('current_sa_email_subscribers_db_version', false);
362
  $onboarding_status = get_option( 'ig_es_onboarding_complete', 'no' );
363
+ if ( ! $is_sa_option_exists && ! $ig_es_4015_db_updated_at && 'yes' !== $onboarding_status ) {
364
  include plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/onboarding.php';
365
  } else {
366
  include plugin_dir_path( dirname( __FILE__ ) ) . 'admin/partials/dashboard.php';
381
  }
382
 
383
 
384
+
 
 
 
 
 
 
 
 
 
 
385
 
386
  function send_test_email() {
387
  $message = array();
admin/js/email-subscribers-admin.js CHANGED
@@ -168,7 +168,7 @@
168
 
169
  // Broadcast Setttings
170
  // Get count by list
171
- $('#ig_es_send_broadcast_button').attr("disabled", true);
172
  $('#ig_es_broadcast_list_ids').change(function(){
173
  var selected_list_id = $(this).val();
174
 
@@ -191,9 +191,9 @@
191
  var total = response.total;
192
  $('#ig_es_total_contacts').text(response.total);
193
  if(total == 0 ) {
194
- $('#ig_es_send_broadcast_button').attr("disabled", true);
195
  } else {
196
- $('#ig_es_send_broadcast_button').attr("disabled", false);
197
  }
198
  }
199
  }
168
 
169
  // Broadcast Setttings
170
  // Get count by list
171
+ $('#ig_es_campaign_submit_button').attr("disabled", true);
172
  $('#ig_es_broadcast_list_ids').change(function(){
173
  var selected_list_id = $(this).val();
174
 
191
  var total = response.total;
192
  $('#ig_es_total_contacts').text(response.total);
193
  if(total == 0 ) {
194
+ $('#ig_es_campaign_submit_button').attr("disabled", true);
195
  } else {
196
+ $('#ig_es_campaign_submit_button').attr("disabled", false);
197
  }
198
  }
199
  }
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.1.5
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.1.5' );
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.1.6
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.1.6' );
28
  define( 'ES_PLUGIN_BASE_NAME', plugin_basename( __FILE__ ) );
29
 
30
  if ( ! defined( 'ES_PLUGIN_FILE' ) ) {
includes/admin/class-es-admin-settings.php CHANGED
@@ -309,7 +309,7 @@ class ES_Admin_Settings {
309
  'default' => '',
310
  'id' => 'ig_es_welcome_email_content',
311
  'name' => __( 'Content', 'email-subscribers' ),
312
- 'desc' => __( 'Available keywords. {{NAME}}, {{EMAIL}}, {{LIST}}, {{UNSUBSCRIBE-LINK}}', 'email-subscribers' ),
313
  ),
314
  )
315
  ),
@@ -338,7 +338,7 @@ class ES_Admin_Settings {
338
  'default' => '',
339
  'id' => 'ig_es_confirmation_mail_content',
340
  'name' => __( 'Content', 'email-subscribers' ),
341
- 'desc' => __( 'If Double Optin is set, contact will receive confirmation email with above content. You can use {{NAME}}, {{EMAIL}}, {{SUBSCRIBE-LINK}} keywords', 'email-subscribers' ),
342
  )
343
  )
344
  ),
309
  'default' => '',
310
  'id' => 'ig_es_welcome_email_content',
311
  'name' => __( 'Content', 'email-subscribers' ),
312
+ 'desc' => __( 'Available keywords. {{FIRSTNAME}}, {{LASTNAME}}, {{NAME}}, {{EMAIL}}, {{LIST}}, {{UNSUBSCRIBE-LINK}}', 'email-subscribers' ),
313
  ),
314
  )
315
  ),
338
  'default' => '',
339
  'id' => 'ig_es_confirmation_mail_content',
340
  'name' => __( 'Content', 'email-subscribers' ),
341
+ 'desc' => __( 'If Double Optin is set, contact will receive confirmation email with above content. You can use {{FIRSTNAME}}, {{LASTNAME}}, {{NAME}}, {{EMAIL}}, {{SUBSCRIBE-LINK}} keywords', 'email-subscribers' ),
342
  )
343
  )
344
  ),
includes/admin/class-es-cron.php CHANGED
@@ -133,6 +133,11 @@ class ES_Cron {
133
 
134
  if ( ! empty( $template ) ) {
135
  $subject = get_option( 'ig_es_cron_admin_email_subject', __( 'Campaign Sent!', 'email-subscribers' ) );
 
 
 
 
 
136
  $admin_emails = explode( ',', $admin_email_addresses );
137
  foreach ( $admin_emails as $admin_email ) {
138
  $admin_email = trim( $admin_email );
133
 
134
  if ( ! empty( $template ) ) {
135
  $subject = get_option( 'ig_es_cron_admin_email_subject', __( 'Campaign Sent!', 'email-subscribers' ) );
136
+ $notification = ES_DB_Mailing_Queue::get_notification_by_hash( $notification_guid );
137
+ if( isset( $notification['subject'] ) ){
138
+ $subject = str_replace( '{{SUBJECT}}', $notification['subject'], $subject );
139
+ }
140
+
141
  $admin_emails = explode( ',', $admin_email_addresses );
142
  foreach ( $admin_emails as $admin_email ) {
143
  $admin_email = trim( $admin_email );
includes/admin/class-es-handle-subscription.php CHANGED
@@ -299,20 +299,13 @@ class ES_Handle_Subscription {
299
  $es_response = array( 'status' => 'ERROR', 'message' => '' );
300
 
301
  if ( ! $this->from_rainmaker ) {
302
- //honey-pot validation
303
- //$hp_key = "esfpx_es_hp_" . wp_create_nonce( 'es_hp' );
304
- $data_keys = array_keys( $data );
305
- $hp_key = "esfpx_es_hp_";
306
- foreach ( $data_keys as $i => $key ) {
307
- if ( strpos( $key, $hp_key ) === 0 ) {
308
- if ( ! isset( $data[ $data_keys[ $i ] ] ) || ! empty( $data[ $data_keys[ $i ] ] ) ) {
309
- $es_response['message'] = 'es_unexpected_error_notice';
310
-
311
- return $es_response;
312
- }
313
- }
314
- }
315
 
 
 
 
 
 
 
316
  }
317
 
318
  $name = isset( $data['esfpx_name'] ) ? $data['esfpx_name'] : '';
299
  $es_response = array( 'status' => 'ERROR', 'message' => '' );
300
 
301
  if ( ! $this->from_rainmaker ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
302
 
303
+ // Honeypot validation
304
+ $hp_key = "esfpx_es_hp_" . wp_create_nonce( 'es_hp' );
305
+ if ( ! isset( $data[ $hp_key ] ) || ! empty( $data[ $hp_key ] ) ) {
306
+ $es_response['message'] = 'es_unexpected_error_notice';
307
+ return $es_response;
308
+ }
309
  }
310
 
311
  $name = isset( $data['esfpx_name'] ) ? $data['esfpx_name'] : '';
includes/admin/class-es-handle-sync-wp-user.php CHANGED
@@ -99,7 +99,7 @@ class ES_Handle_Sync_Wp_User {
99
  //get option
100
  $ig_es_sync_wp_users = get_option( 'ig_es_sync_wp_users', 'norecord' );
101
  $ig_es_sync_unserialized_data = maybe_unserialize( $ig_es_sync_wp_users );
102
- $ig_es_registered = $ig_es_sync_unserialized_data['es_registered'];
103
  if ( $ig_es_sync_wp_users != 'norecord' && 'YES' === $ig_es_registered ) {
104
  $list_id = $ig_es_sync_unserialized_data['es_registered_group'];
105
  //get user info
99
  //get option
100
  $ig_es_sync_wp_users = get_option( 'ig_es_sync_wp_users', 'norecord' );
101
  $ig_es_sync_unserialized_data = maybe_unserialize( $ig_es_sync_wp_users );
102
+ $ig_es_registered = ( $ig_es_sync_unserialized_data != 'norecord' ) ? $ig_es_sync_unserialized_data['es_registered'] : 'NO';
103
  if ( $ig_es_sync_wp_users != 'norecord' && 'YES' === $ig_es_registered ) {
104
  $list_id = $ig_es_sync_unserialized_data['es_registered_group'];
105
  //get user info
includes/admin/class-es-newsletters.php CHANGED
@@ -41,7 +41,6 @@ class ES_Newsletters {
41
  // $email_sent_type = __('Active', 'email-subscribers');
42
  $list_id = Email_Subscribers::get_request( 'ig_es_broadcast_list_ids' );
43
  $template_id = Email_Subscribers::get_request( 'ig_es_broadcast_base_template_id' );
44
-
45
  if ( empty( $template_id ) ) {
46
  $message = __( 'Please select template.', 'email-subscribers' );
47
  ES_Common::show_message( $message, 'error' );
@@ -63,29 +62,28 @@ class ES_Newsletters {
63
 
64
  ES_Common::show_message( $message, 'success' );
65
 
66
- // **************** Quick Feedback - Start ********************
67
  global $ig_es_feedback;
68
 
69
- if ( ! $ig_es_feedback->can_show_feedback_widget() ) {
70
- return;
71
- }
72
-
73
- $event = 'broadcast.created';
74
- if ( ! $ig_es_feedback->is_event_transient_set( $ig_es_feedback->event_prefix . $event ) ) {
75
-
76
- $params = array(
77
- 'type' => 'emoji',
78
- 'event' => $event,
79
- 'title' => "How's your experience sending broadcast?",
80
- 'position' => 'top-end',
81
- 'width' => 300,
82
- 'delay' => 2, // seconds
83
- 'confirmButtonText' => __( 'Send', 'email-subscribers' )
84
- );
85
-
86
- ES_Common::render_feedback_widget( $params );
87
  }
88
- // **************** Quick Feedback - End ********************
 
89
  }
90
 
91
  }
@@ -107,7 +105,7 @@ class ES_Newsletters {
107
  <?php settings_fields( 'es_newsletters_settings' ); ?>
108
  <?php do_settings_sections( 'newsletters_settings' ); ?>
109
  <div class="email-newsletters">
110
- <input type="submit" id="ig_es_send_broadcast_button" name="es_send_email" value="<?php _e( 'Send Broadcast', 'email-subscribers' ) ?>" class="button button-primary">
111
  <input type="hidden" name="submitted" value="submitted">
112
  </div>
113
  </form>
@@ -235,6 +233,8 @@ class ES_Newsletters {
235
  $data['type'] = 'newsletter';
236
  $data['name'] = get_the_title( $template_id );
237
  $data['slug'] = sanitize_title( $data['name'] );
 
 
238
 
239
  if ( ! empty( $template_id ) ) {
240
 
41
  // $email_sent_type = __('Active', 'email-subscribers');
42
  $list_id = Email_Subscribers::get_request( 'ig_es_broadcast_list_ids' );
43
  $template_id = Email_Subscribers::get_request( 'ig_es_broadcast_base_template_id' );
 
44
  if ( empty( $template_id ) ) {
45
  $message = __( 'Please select template.', 'email-subscribers' );
46
  ES_Common::show_message( $message, 'error' );
62
 
63
  ES_Common::show_message( $message, 'success' );
64
 
65
+ // **************** Quick Feedback - Start ********************/
66
  global $ig_es_feedback;
67
 
68
+ if ( $ig_es_feedback->can_show_feedback_widget() ) {
69
+
70
+ $event = 'broadcast.created';
71
+ if ( ! $ig_es_feedback->is_event_transient_set( $ig_es_feedback->event_prefix . $event ) ) {
72
+
73
+ $params = array(
74
+ 'type' => 'emoji',
75
+ 'event' => $event,
76
+ 'title' => "How's your experience sending broadcast?",
77
+ 'position' => 'top-end',
78
+ 'width' => 300,
79
+ 'delay' => 2, // seconds
80
+ 'confirmButtonText' => __( 'Send', 'email-subscribers' )
81
+ );
82
+ ES_Common::render_feedback_widget( $params );
83
+ }
 
 
84
  }
85
+
86
+ // **************** Quick Feedback - End ********************/
87
  }
88
 
89
  }
105
  <?php settings_fields( 'es_newsletters_settings' ); ?>
106
  <?php do_settings_sections( 'newsletters_settings' ); ?>
107
  <div class="email-newsletters">
108
+ <input type="submit" id="ig_es_campaign_submit_button" name="es_send_email" value="<?php _e( 'Send Broadcast', 'email-subscribers' ) ?>" class="button button-primary">
109
  <input type="hidden" name="submitted" value="submitted">
110
  </div>
111
  </form>
233
  $data['type'] = 'newsletter';
234
  $data['name'] = get_the_title( $template_id );
235
  $data['slug'] = sanitize_title( $data['name'] );
236
+ $data['list_ids'] = $list_id;
237
+ $data['base_template_id'] = $template_id;
238
 
239
  if ( ! empty( $template_id ) ) {
240
 
includes/admin/class-es-post-notifications.php CHANGED
@@ -247,7 +247,7 @@ class ES_Post_Notifications_Table {
247
  <p class="helper"><?php _e( 'Contacts from the selected list will be notified about new post notification.', 'email-subscribers' ); ?></p>
248
  </th>
249
  <td>
250
- <select name="list_id" id="list_id">
251
  <?php echo ES_Common::prepare_list_dropdown_options( $list_id ); ?>
252
  </select>
253
  </td>
@@ -314,7 +314,7 @@ class ES_Post_Notifications_Table {
314
  </table>
315
  <div class="row-blog">
316
  <div class="leftside">
317
- <?php echo get_submit_button(); ?>
318
  </div>
319
  </div>
320
  </form>
247
  <p class="helper"><?php _e( 'Contacts from the selected list will be notified about new post notification.', 'email-subscribers' ); ?></p>
248
  </th>
249
  <td>
250
+ <select name="list_id" id="ig_es_post_notification_list_ids">
251
  <?php echo ES_Common::prepare_list_dropdown_options( $list_id ); ?>
252
  </select>
253
  </td>
314
  </table>
315
  <div class="row-blog">
316
  <div class="leftside">
317
+ <p class="submit"><input type="submit" name="submit" id="ig_es_campaign_post_notification_submit_button" class="button button-primary button-large" value="Save Changes"></p>
318
  </div>
319
  </div>
320
  </form>
includes/admin/class-es-subscribers-table.php CHANGED
@@ -323,9 +323,8 @@ class ES_Subscribers_Table extends WP_List_Table {
323
  // Prepare Order by clause
324
  $order_by_clause = '';
325
  $order = ! empty( $order ) ? ' ' . esc_sql( $order ) : ' DESC';
326
- $order_by_clause = ' ORDER BY ' . esc_sql( 'created_at' ) . ' ' . $order;
327
- $order_by_clause = ! empty( $order_by ) ? $order_by_clause . ' , ' . esc_sql( $order_by ) . ' ' . $order : $order_by_clause;
328
-
329
  $sql .= $order_by_clause;
330
  $sql .= " LIMIT $per_page";
331
  $sql .= ' OFFSET ' . ( $page_number - 1 ) * $per_page;
@@ -620,7 +619,7 @@ class ES_Subscribers_Table extends WP_List_Table {
620
  */
621
  public function get_sortable_columns() {
622
  $sortable_columns = array(
623
- 'first_name' => array( 'first_name', true ),
624
  'email' => array( 'email', false ),
625
  // 'status' => array( 'status', false ),
626
  'created_at' => array( 'created_at', false )
323
  // Prepare Order by clause
324
  $order_by_clause = '';
325
  $order = ! empty( $order ) ? ' ' . esc_sql( $order ) : ' DESC';
326
+ $order_by_clause = ' ORDER BY ';
327
+ $order_by_clause = ! empty( $order_by ) ? $order_by_clause . ' ' . esc_sql( $order_by ) . ' ' . $order : $order_by_clause . esc_sql( 'created_at' ) . ' ' . $order;
 
328
  $sql .= $order_by_clause;
329
  $sql .= " LIMIT $per_page";
330
  $sql .= ' OFFSET ' . ( $page_number - 1 ) * $per_page;
619
  */
620
  public function get_sortable_columns() {
621
  $sortable_columns = array(
622
+ 'name' => array( 'first_name', true ),
623
  'email' => array( 'email', false ),
624
  // 'status' => array( 'status', false ),
625
  'created_at' => array( 'created_at', false )
includes/admin/class-es-templates-table.php CHANGED
@@ -45,11 +45,11 @@ class ES_Templates_Table {
45
  </p>
46
 
47
  <p id="post_notification">
48
- <a href="https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-post-notifications/?utm_source=es&amp;utm_medium=in_app&amp;utm_campaign=view_docs_help_page" target="_blank"><?php _e( 'Available Keywords', 'email-subscribers' ); ?></a> <?php _e( 'for Post Notification: ', 'email-subsribers' ); ?> {{NAME}}, {{EMAIL}},
49
  {{DATE}}, {{POSTTITLE}}, {{POSTIMAGE}}, {{POSTEXCERPT}}, {{POSTDESC}},
50
  {{POSTAUTHOR}}, {{POSTLINK}}, {{POSTLINK-WITHTITLE}}, {{POSTLINK-ONLY}}, {{POSTFULL}} </p>
51
  <p id="newsletter">
52
- <a href="https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-newsletters/?utm_source=es&amp;utm_medium=in_app&amp;utm_campaign=view_docs_help_page" target="_blank"><?php _e( 'Available Keywords', 'email-subscribers' ); ?></a> <?php _e( 'for Newsletter:', 'email-subscribers' ); ?> {{NAME}}, {{EMAIL}} </p>
53
  <?php
54
  }
55
 
45
  </p>
46
 
47
  <p id="post_notification">
48
+ <a href="https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-post-notifications/?utm_source=es&amp;utm_medium=in_app&amp;utm_campaign=view_docs_help_page" target="_blank"><?php _e( 'Available Keywords', 'email-subscribers' ); ?></a> <?php _e( 'for Post Notification: ', 'email-subsribers' ); ?> {{FIRSTNAME}}, {{LASTNAME}}, {{NAME}}, {{EMAIL}},
49
  {{DATE}}, {{POSTTITLE}}, {{POSTIMAGE}}, {{POSTEXCERPT}}, {{POSTDESC}},
50
  {{POSTAUTHOR}}, {{POSTLINK}}, {{POSTLINK-WITHTITLE}}, {{POSTLINK-ONLY}}, {{POSTFULL}} </p>
51
  <p id="newsletter">
52
+ <a href="https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-newsletters/?utm_source=es&amp;utm_medium=in_app&amp;utm_campaign=view_docs_help_page" target="_blank"><?php _e( 'Available Keywords', 'email-subscribers' ); ?></a> <?php _e( 'for Newsletter:', 'email-subscribers' ); ?> {{FIRSTNAME}}, {{LASTNAME}}, {{NAME}}, {{EMAIL}} </p>
53
  <?php
54
  }
55
 
includes/class-email-subscribers.php CHANGED
@@ -74,6 +74,8 @@ class Email_Subscribers {
74
  public function __construct() {
75
  global $ig_es_feedback, $ig_es_tracker;
76
 
 
 
77
  require_once plugin_dir_path( __FILE__ ) . 'class-email-subscribers-activator.php';
78
  require_once plugin_dir_path( __FILE__ ) . 'class-email-subscribers-deactivator.php';
79
 
@@ -86,14 +88,15 @@ class Email_Subscribers {
86
  $this->email_subscribers = 'email-subscribers';
87
 
88
  $this->define_constants();
89
- $this->load_dependencies();
90
  $this->set_locale();
91
  $this->define_admin_hooks();
92
  $this->define_public_hooks();
93
 
94
- $ig_es_tracker = 'IG_Tracker_V_1_0_4';
95
  if ( is_admin() ) {
96
- $ig_es_feedback = new IG_Feedback_V_1_0_4( 'Email Subscribers', 'email-subscribers', 'ig_es', 'esfree.', false );
 
97
  $ig_es_feedback->render_deactivate_feedback();
98
  }
99
 
@@ -147,7 +150,7 @@ class Email_Subscribers {
147
  $all_plugins = $ig_es_tracker::get_plugins();
148
  //get pro button
149
  if ( ! in_array( $es_premium, $all_plugins ) && is_admin() && ! in_array( $screen_id, array('toplevel_page_es_dashboard'), true ) ) {
150
- echo "<div class='notice es-floting-button'><i class='dashicons dashicons-es dashicons-awards'></i><a href='https://www.icegram.com/email-subscribers-starter/?utm_source=in_app&utm_medium=go_starter_floating_button&utm_campaign=es_upsale' target='_blank'>" .__('Get Starter Now!', 'email-subscribers') ."</a></div>";
151
  }
152
  //cron notice
153
  $notice_option = get_option( 'ig_es_wp_cron_notice' );
@@ -268,8 +271,9 @@ class Email_Subscribers {
268
  * @since 4.0
269
  * @access private
270
  */
271
- private function load_dependencies() {
272
 
 
273
  /**
274
  * The class responsible for orchestrating the actions and filters of the
275
  * core plugin.
@@ -346,8 +350,8 @@ class Email_Subscribers {
346
  'includes/pro-features.php',
347
 
348
  // Feedback
349
- 'includes/feedback/class-ig-tracker-v-1-0-4.php',
350
- 'includes/feedback/class-ig-feedback-v-1-0-4.php',
351
  'includes/feedback.php'
352
  );
353
 
74
  public function __construct() {
75
  global $ig_es_feedback, $ig_es_tracker;
76
 
77
+ $feedback_version = '1.0.5';
78
+
79
  require_once plugin_dir_path( __FILE__ ) . 'class-email-subscribers-activator.php';
80
  require_once plugin_dir_path( __FILE__ ) . 'class-email-subscribers-deactivator.php';
81
 
88
  $this->email_subscribers = 'email-subscribers';
89
 
90
  $this->define_constants();
91
+ $this->load_dependencies( $feedback_version );
92
  $this->set_locale();
93
  $this->define_admin_hooks();
94
  $this->define_public_hooks();
95
 
96
+ $ig_es_tracker = 'IG_Tracker_V_' . str_replace('.', '_', $feedback_version);
97
  if ( is_admin() ) {
98
+ $ig_es_feedback_class = 'IG_Feedback_V_' . str_replace('.', '_', $feedback_version);
99
+ $ig_es_feedback = new $ig_es_feedback_class( 'Email Subscribers', 'email-subscribers', 'ig_es', 'esfree.', false );
100
  $ig_es_feedback->render_deactivate_feedback();
101
  }
102
 
150
  $all_plugins = $ig_es_tracker::get_plugins();
151
  //get pro button
152
  if ( ! in_array( $es_premium, $all_plugins ) && is_admin() && ! in_array( $screen_id, array('toplevel_page_es_dashboard'), true ) ) {
153
+ echo "<div class='notice es-floting-button'><i class='dashicons dashicons-es dashicons-awards'></i> <a href='https://www.icegram.com/email-subscribers-pricing/?utm_source=in_app&utm_medium=get_starter_floating_button&utm_campaign=es_upsale' target='_blank'>" .__('Get Starter Now!', 'email-subscribers') ."</a></div>";
154
  }
155
  //cron notice
156
  $notice_option = get_option( 'ig_es_wp_cron_notice' );
271
  * @since 4.0
272
  * @access private
273
  */
274
+ private function load_dependencies( $feedback_version ) {
275
 
276
+ $feedback_version_for_file = str_replace('.', '-', $feedback_version);
277
  /**
278
  * The class responsible for orchestrating the actions and filters of the
279
  * core plugin.
350
  'includes/pro-features.php',
351
 
352
  // Feedback
353
+ 'includes/feedback/class-ig-tracker-v-' . $feedback_version_for_file . '.php',
354
+ 'includes/feedback/class-ig-feedback-v-' . $feedback_version_for_file . '.php',
355
  'includes/feedback.php'
356
  );
357
 
includes/class-es-install.php CHANGED
@@ -368,7 +368,7 @@ class ES_Install {
368
  'ig_es_enable_welcome_email' => array( 'default' => 'yes', 'old_option' => 'ig_es_welcomeemail', 'action' => 'convert_space_to_underscore' ),
369
  'ig_es_welcome_email_subject' => array( 'default' => $welcome_email_subject, 'old_option' => 'ig_es_welcomesubject' ),
370
  'ig_es_welcome_email_content' => array( 'default' => $welcome_email_content, 'old_option' => 'ig_es_welcomecontent' ),
371
- 'ig_es_enable_cron_admin_email' => array( 'default' => $cron_admin_email, 'old_option' => 'ig_es_enable_cron_adminmail' ),
372
  'ig_es_cron_admin_email' => array( 'default' => $cron_admin_email, 'old_option' => 'ig_es_cron_adminmail' ),
373
  'ig_es_cronurl' => array( 'default' => $cronurl, 'old_option' => 'ig_es_cronurl' ),
374
  'ig_es_hourly_email_send_limit' => array( 'default' => 300, 'old_option' => 'ig_es_cron_mailcount' ),
@@ -378,7 +378,7 @@ class ES_Install {
378
  'ig_es_optin_link' => array( 'default' => $optinlink, 'old_option' => 'ig_es_optinlink' ),
379
  'ig_es_unsubscribe_link_content' => array( 'default' => $unsubscribe_link_content, 'old_option' => 'ig_es_unsubcontent' ),
380
  'ig_es_email_type' => array( 'default' => 'wp_html_mail', 'old_option' => 'ig_es_emailtype', 'action' => 'convert_space_to_underscore' ),
381
- 'ig_es_notify_admin' => array( 'default' => 'no', 'old_option' => 'ig_es_notifyadmin', 'action' => 'convert_space_to_underscore' ),
382
  'ig_es_optin_type' => array( 'default' => 'double_opt_in', 'old_option' => 'ig_es_optintype', 'action' => 'convert_space_to_underscore' ),
383
  'ig_es_subscription_error_messsage' => array( 'default' => $subscription_error_messsage, 'old_option' => 'ig_es_suberror' ),
384
  'ig_es_subscription_success_message' => array( 'default' => "You have been successfully subscribed.", 'old_option' => 'ig_es_successmsg' ),
@@ -885,7 +885,7 @@ class ES_Install {
885
  'label' => 'Lists',
886
  'show' => false,
887
  'required' => true,
888
- 'values' => array($list_id)
889
  ),
890
 
891
  'position' => 3
@@ -906,7 +906,7 @@ class ES_Install {
906
  );
907
 
908
  $settings = array(
909
- 'lists' => array($list_id),
910
  'desc' => ''
911
  );
912
 
368
  'ig_es_enable_welcome_email' => array( 'default' => 'yes', 'old_option' => 'ig_es_welcomeemail', 'action' => 'convert_space_to_underscore' ),
369
  'ig_es_welcome_email_subject' => array( 'default' => $welcome_email_subject, 'old_option' => 'ig_es_welcomesubject' ),
370
  'ig_es_welcome_email_content' => array( 'default' => $welcome_email_content, 'old_option' => 'ig_es_welcomecontent' ),
371
+ 'ig_es_enable_cron_admin_email' => array( 'default' => 'yes', 'old_option' => 'ig_es_enable_cron_adminmail' ),
372
  'ig_es_cron_admin_email' => array( 'default' => $cron_admin_email, 'old_option' => 'ig_es_cron_adminmail' ),
373
  'ig_es_cronurl' => array( 'default' => $cronurl, 'old_option' => 'ig_es_cronurl' ),
374
  'ig_es_hourly_email_send_limit' => array( 'default' => 300, 'old_option' => 'ig_es_cron_mailcount' ),
378
  'ig_es_optin_link' => array( 'default' => $optinlink, 'old_option' => 'ig_es_optinlink' ),
379
  'ig_es_unsubscribe_link_content' => array( 'default' => $unsubscribe_link_content, 'old_option' => 'ig_es_unsubcontent' ),
380
  'ig_es_email_type' => array( 'default' => 'wp_html_mail', 'old_option' => 'ig_es_emailtype', 'action' => 'convert_space_to_underscore' ),
381
+ 'ig_es_notify_admin' => array( 'default' => 'yes', 'old_option' => 'ig_es_notifyadmin', 'action' => 'convert_space_to_underscore' ),
382
  'ig_es_optin_type' => array( 'default' => 'double_opt_in', 'old_option' => 'ig_es_optintype', 'action' => 'convert_space_to_underscore' ),
383
  'ig_es_subscription_error_messsage' => array( 'default' => $subscription_error_messsage, 'old_option' => 'ig_es_suberror' ),
384
  'ig_es_subscription_success_message' => array( 'default' => "You have been successfully subscribed.", 'old_option' => 'ig_es_successmsg' ),
885
  'label' => 'Lists',
886
  'show' => false,
887
  'required' => true,
888
+ 'values' => array( $list_id )
889
  ),
890
 
891
  'position' => 3
906
  );
907
 
908
  $settings = array(
909
+ 'lists' => array( $list_id ),
910
  'desc' => ''
911
  );
912
 
includes/feedback/{class-ig-feedback-v-1-0-4.php → class-ig-feedback-v-1-0-5.php} RENAMED
@@ -5,7 +5,7 @@
5
  * The IG Feedback class adds functionality to get quick interactive feedback from users.
6
  * There are different types of feedabck widget like Stars, Emoji, Thubms Up/ Down, Number etc.
7
  *
8
- * @class IG_Feedback_V_1_0_4
9
  * @package feedback
10
  * @copyright Copyright (c) 2019, Icegram
11
  * @license https://opensource.org/licenses/gpl-license GNU Public License
@@ -15,7 +15,7 @@
15
 
16
  defined( 'ABSPATH' ) || exit;
17
 
18
- if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
19
  /**
20
  * Icegram Deactivation Survey.
21
  *
@@ -27,7 +27,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
27
  * @license GPL-2.0+
28
  * @copyright Copyright (c) 2019
29
  */
30
- class IG_Feedback_V_1_0_4 {
31
 
32
  /**
33
  * The API URL where we will send feedback data.
@@ -586,7 +586,33 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
586
  var $deactivateLink = $('#the-list').find('[data-slug="<?php echo $this->plugin; ?>"] span.deactivate a'),
587
  $overlay = $('#ig-deactivate-survey-<?php echo $this->plugin; ?>'),
588
  $form = $overlay.find('form'),
589
- formOpen = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
590
  // Plugin listing table deactivate link.
591
  $deactivateLink.on('click', function (event) {
592
  event.preventDefault();
@@ -598,14 +624,30 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
598
  $form.on('change', 'input[type=radio]', function (event) {
599
  event.preventDefault();
600
  $form.find('input[type=text], .error').hide();
 
601
  $form.find('.ig-deactivate-survey-option').removeClass('selected');
602
  $(this).closest('.ig-deactivate-survey-option').addClass('selected').find('input[type=text]').show();
 
 
 
 
603
  });
604
  // Survey Skip & Deactivate.
605
  $form.on('click', '.ig-deactivate-survey-deactivate', function (event) {
606
  event.preventDefault();
607
  location.href = $deactivateLink.attr('href');
608
  });
 
 
 
 
 
 
 
 
 
 
 
609
  // Survey submit.
610
  $form.submit(function (event) {
611
  event.preventDefault();
@@ -614,6 +656,25 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
614
  return;
615
  }
616
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
617
  var data = {
618
  action: '<?php echo $this->ajax_action; ?>',
619
  feedback: {
@@ -631,7 +692,9 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
631
  plugin: '<?php echo $this->plugin; ?>',
632
  plugin_abbr: '<?php echo $this->plugin_abbr; ?>',
633
  is_dev_mode: '<?php echo $this->is_dev_mode; ?>',
634
- set_cookie: ''
 
 
635
  }
636
  };
637
 
@@ -708,6 +771,22 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
708
  margin: 0 0 18px 0;
709
  }
710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
711
  .ig-deactivate-survey-title span {
712
  color: #999;
713
  margin-right: 10px;
@@ -759,6 +838,8 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
759
  return;
760
  }
761
 
 
 
762
  $options = array(
763
  1 => array(
764
  'title' => esc_html__( 'I no longer need the plugin', 'email-subscribers' ),
@@ -802,6 +883,13 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_4' ) ) {
802
  </div>
803
  <?php endforeach; ?>
804
  </div>
 
 
 
 
 
 
 
805
  <div class="ig-deactivate-survey-footer">
806
  <button type="submit" class="ig-deactivate-survey-submit button button-primary button-large"><?php echo sprintf( esc_html__( 'Submit %s Deactivate', 'email-subscribers' ), '&amp;' ); ?></button>
807
  <a href="#" class="ig-deactivate-survey-deactivate"><?php echo sprintf( esc_html__( 'Skip %s Deactivate', 'email-subscribers' ), '&amp;' ); ?></a>
5
  * The IG Feedback class adds functionality to get quick interactive feedback from users.
6
  * There are different types of feedabck widget like Stars, Emoji, Thubms Up/ Down, Number etc.
7
  *
8
+ * @class IG_Feedback_V_1_0_5
9
  * @package feedback
10
  * @copyright Copyright (c) 2019, Icegram
11
  * @license https://opensource.org/licenses/gpl-license GNU Public License
15
 
16
  defined( 'ABSPATH' ) || exit;
17
 
18
+ if ( ! class_exists( 'IG_Feedback_V_1_0_5' ) ) {
19
  /**
20
  * Icegram Deactivation Survey.
21
  *
27
  * @license GPL-2.0+
28
  * @copyright Copyright (c) 2019
29
  */
30
+ class IG_Feedback_V_1_0_5 {
31
 
32
  /**
33
  * The API URL where we will send feedback data.
586
  var $deactivateLink = $('#the-list').find('[data-slug="<?php echo $this->plugin; ?>"] span.deactivate a'),
587
  $overlay = $('#ig-deactivate-survey-<?php echo $this->plugin; ?>'),
588
  $form = $overlay.find('form'),
589
+ formOpen = false,
590
+ consent = $('#ig-deactivate-survey-help-consent-<?php echo $this->plugin; ?>');
591
+
592
+ function togglePersonalInfoFields ( show ) {
593
+
594
+ if(show) {
595
+ $form.find('#ig-deactivate-survey-info-name').show();
596
+ $form.find('#ig-deactivate-survey-info-email-address').show();
597
+ $form.find('#ig-deactivate-survey-consent-additional-data').show();
598
+ } else {
599
+ $form.find('#ig-deactivate-survey-info-name').hide();
600
+ $form.find('#ig-deactivate-survey-info-email-address').hide();
601
+ $form.find('#ig-deactivate-survey-consent-additional-data').hide();
602
+ }
603
+
604
+ };
605
+
606
+
607
+ function validateEmail(email) {
608
+ var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
609
+ if (!emailReg.test(email)) {
610
+ return false;
611
+ } else {
612
+ return true;
613
+ }
614
+ };
615
+
616
  // Plugin listing table deactivate link.
617
  $deactivateLink.on('click', function (event) {
618
  event.preventDefault();
624
  $form.on('change', 'input[type=radio]', function (event) {
625
  event.preventDefault();
626
  $form.find('input[type=text], .error').hide();
627
+
628
  $form.find('.ig-deactivate-survey-option').removeClass('selected');
629
  $(this).closest('.ig-deactivate-survey-option').addClass('selected').find('input[type=text]').show();
630
+
631
+ if(consent.attr('checked') === 'checked') {
632
+ togglePersonalInfoFields(true);
633
+ }
634
  });
635
  // Survey Skip & Deactivate.
636
  $form.on('click', '.ig-deactivate-survey-deactivate', function (event) {
637
  event.preventDefault();
638
  location.href = $deactivateLink.attr('href');
639
  });
640
+
641
+ // Help Consent
642
+ togglePersonalInfoFields(false);
643
+ consent.on('click', function () {
644
+ if(consent.attr('checked') === 'checked') {
645
+ togglePersonalInfoFields(true);
646
+ } else {
647
+ togglePersonalInfoFields(false);
648
+ }
649
+ });
650
+
651
  // Survey submit.
652
  $form.submit(function (event) {
653
  event.preventDefault();
656
  return;
657
  }
658
 
659
+ var system_info = false;
660
+ var name = '';
661
+ var email = '';
662
+
663
+ if(consent.attr('checked') === 'checked') {
664
+ name = $('#ig-deactivate-survey-info-name').val();
665
+ email = $('#ig-deactivate-survey-info-email-address').val();
666
+ if(email === '' || !validateEmail(email)) {
667
+ alert('Please enter valid email');
668
+ return;
669
+ }
670
+ system_info = true;
671
+ }
672
+
673
+ var meta = {
674
+ name: name,
675
+ email: email
676
+ };
677
+
678
  var data = {
679
  action: '<?php echo $this->ajax_action; ?>',
680
  feedback: {
692
  plugin: '<?php echo $this->plugin; ?>',
693
  plugin_abbr: '<?php echo $this->plugin_abbr; ?>',
694
  is_dev_mode: '<?php echo $this->is_dev_mode; ?>',
695
+ set_cookie: '',
696
+ meta_info: meta,
697
+ system_info: system_info
698
  }
699
  };
700
 
771
  margin: 0 0 18px 0;
772
  }
773
 
774
+ .ig-deactivate-survey-options {
775
+ border-bottom: 1px solid #ddd;
776
+ padding: 0 0 18px 0;
777
+ margin: 0 0 18px 0;
778
+ }
779
+
780
+ .ig-deactivate-survey-info-data {
781
+ padding: 0 0 18px 0;
782
+ margin: 10px 10px 10px 30px;
783
+ }
784
+
785
+ .ig-deactivate-survey-info-name, .ig-deactivate-survey-info-email-address {
786
+ width: 230px;
787
+ margin: 10px;
788
+ }
789
+
790
  .ig-deactivate-survey-title span {
791
  color: #999;
792
  margin-right: 10px;
838
  return;
839
  }
840
 
841
+ $email = get_option('admin_email');
842
+
843
  $options = array(
844
  1 => array(
845
  'title' => esc_html__( 'I no longer need the plugin', 'email-subscribers' ),
883
  </div>
884
  <?php endforeach; ?>
885
  </div>
886
+ <div class="ig-deactivate-survey-help-consent">
887
+ <input id="ig-deactivate-survey-help-consent-<?php echo $this->plugin; ?>" class="ig-deactivate-survey-option-input" type="checkbox" name="code" data-option-slug="<?php echo $option['slug']; ?>"/><b>Yes, I give my consent to track plugin usage and contact me back to make this plugin works!</b>
888
+ </div>
889
+ <div class="ig-deactivate-survey-info-data">
890
+ <input type="text" class="ig-deactivate-survey-info-name" id="ig-deactivate-survey-info-name" placeholder="Enter Name" name="ig-deactivate-survey-info-name" value="" />
891
+ <input type="text" class="ig-deactivate-survey-info-email-address" id="ig-deactivate-survey-info-email-address" name="ig-deactivate-survey-info-email-address" value="<?php echo $email; ?>" />
892
+ </div>
893
  <div class="ig-deactivate-survey-footer">
894
  <button type="submit" class="ig-deactivate-survey-submit button button-primary button-large"><?php echo sprintf( esc_html__( 'Submit %s Deactivate', 'email-subscribers' ), '&amp;' ); ?></button>
895
  <a href="#" class="ig-deactivate-survey-deactivate"><?php echo sprintf( esc_html__( 'Skip %s Deactivate', 'email-subscribers' ), '&amp;' ); ?></a>
includes/feedback/{class-ig-tracker-v-1-0-4.php → class-ig-tracker-v-1-0-5.php} RENAMED
@@ -4,7 +4,7 @@ if ( ! defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
- if ( ! class_exists( 'IG_Tracker_V_1_0_4' ) ) {
8
 
9
  /**
10
  * Icegram tracker.
@@ -14,7 +14,7 @@ if ( ! class_exists( 'IG_Tracker_V_1_0_4' ) ) {
14
  *
15
  * @since 1.0.0
16
  */
17
- class IG_Tracker_V_1_0_4 {
18
 
19
  /**
20
  * Get Active, Inactive or all plugins info
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
+ if ( ! class_exists( 'IG_Tracker_V_1_0_5' ) ) {
8
 
9
  /**
10
  * Icegram tracker.
14
  *
15
  * @since 1.0.0
16
  */
17
+ class IG_Tracker_V_1_0_5 {
18
 
19
  /**
20
  * Get Active, Inactive or all plugins info
includes/pro-features.php CHANGED
@@ -8,6 +8,7 @@ add_filter( 'ig_es_sync_users_tabs', 'ig_es_add_sync_users_tabs', 11, 1 );
8
  add_action( 'ig_es_sync_users_tabs_comments', 'ig_es_add_comments_tab_settings' );
9
  add_action( 'ig_es_sync_users_tabs_woocommerce', 'ig_es_add_woocommerce_tab_settings' );
10
  add_action( 'ig_es_sync_users_tabs_cf7', 'ig_es_add_cf7_tab_settings' );
 
11
 
12
  function ig_es_add_upsale( $fields ) {
13
  global $ig_es_tracker;
@@ -181,5 +182,22 @@ function ig_es_add_cf7_tab_settings( $tab_options ) {
181
  <?php
182
  }
183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
 
185
 
8
  add_action( 'ig_es_sync_users_tabs_comments', 'ig_es_add_comments_tab_settings' );
9
  add_action( 'ig_es_sync_users_tabs_woocommerce', 'ig_es_add_woocommerce_tab_settings' );
10
  add_action( 'ig_es_sync_users_tabs_cf7', 'ig_es_add_cf7_tab_settings' );
11
+ add_action( 'edit_form_advanced', 'add_spam_score_utm_link' );
12
 
13
  function ig_es_add_upsale( $fields ) {
14
  global $ig_es_tracker;
182
  <?php
183
  }
184
 
185
+ function add_spam_score_utm_link() {
186
+ global $post, $pagenow, $ig_es_tracker;
187
+ if ( $post->post_type !== 'es_template' ) {
188
+ return;
189
+ }
190
+ $es_premium = 'email-subscribers-premium/email-subscribers-premium.php';
191
+ $all_plugins = $ig_es_tracker::get_plugins();
192
+
193
+ if ( ! in_array( $es_premium, $all_plugins ) ) {
194
+ ?>
195
+ <script>
196
+ jQuery('#submitdiv').after('<div class="es_upsale"><a style="text-decoration:none;" target="_blank" href="https://www.icegram.com/documentation/how-ready-made-template-in-in-email-subscribers-look/?utm_source=in_app&utm_medium=es_template&utm_campaign=es_upsale"><img title="Get readymade templates" style="width:100%;border:0.3em #d46307 solid" src="<?php echo EMAIL_SUBSCRIBERS_URL?>/admin/images/starter-tmpl.png"/><p style="background: #d46307; color: #FFF; padding: 4px; width: 100%; text-align:center">Get readymade beautiful email templates</p></a></div>');
197
+ </script>
198
+ <?php
199
+ }
200
+ }
201
+
202
 
203
 
public/partials/class-es-shortcode.php CHANGED
@@ -223,7 +223,7 @@ class ES_Shortcode {
223
  }
224
  $lists_html .= '<td>' . $status_span . '<label><input type="checkbox" name="lists[]" checked="checked" value="' . $list_id . '" />' . $list_name . '</label></td>';
225
  } else {
226
- $lists_html .= '<td><input type="checkbox" name="lists[]" value="' . $list_id . '" />' . $list_name . '</td>';
227
  }
228
  $i ++;
229
  }
223
  }
224
  $lists_html .= '<td>' . $status_span . '<label><input type="checkbox" name="lists[]" checked="checked" value="' . $list_id . '" />' . $list_name . '</label></td>';
225
  } else {
226
+ $lists_html .= '<td><label><input type="checkbox" name="lists[]" value="' . $list_id . '" />' . $list_name . '</label></td>';
227
  }
228
  $i ++;
229
  }
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.2.2
8
- Stable tag: 4.1.5
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses
11
 
@@ -304,6 +304,12 @@ Use our free plugin [Email Subscribers - Group Selector](https://wordpress.org/p
304
  9. Admin page - Settings Tab 4 - Security Settings
305
 
306
  == Changelog ==
 
 
 
 
 
 
307
  = 4.1.5 (20.06.2019) =
308
  * Update: Added "Opt-In Type" column in exported contacts lists
309
  * Update: Allow to send broadcast only if contacts are available in list
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.2.2
8
+ Stable tag: 4.1.6
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses
11
 
304
  9. Admin page - Settings Tab 4 - Security Settings
305
 
306
  == Changelog ==
307
+ = 4.1.6 (01.07.2019) =
308
+ * Update: Added sorting for name field in Audience tab
309
+ * Fix: Warning: Illegal string offset 'es_registered'
310
+ * Fix: Set list name blank in campaign list page
311
+ * Fix: Contacts sort by email was not working.
312
+
313
  = 4.1.5 (20.06.2019) =
314
  * Update: Added "Opt-In Type" column in exported contacts lists
315
  * Update: Allow to send broadcast only if contacts are available in list