Email Subscribers & Newsletters - Version 4.4.2

Version Description

Download this release

Release Info

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

Code changes from version 4.4.1.1 to 4.4.2

Files changed (58) hide show
  1. email-subscribers.php +123 -9
  2. lite/admin/class-email-subscribers-admin.php +80 -8
  3. lite/admin/css/email-subscribers-admin.css +1 -1
  4. lite/admin/dist/images/bfcm-2019.png +0 -0
  5. lite/admin/dist/images/bfcm-last-2019.png +0 -0
  6. lite/admin/dist/images/cf7-sync.png +0 -0
  7. lite/admin/dist/images/edd-sync.png +0 -0
  8. lite/admin/dist/images/email-marketing-mastery.png +0 -0
  9. lite/admin/dist/images/email-subscribers-pricing.png +0 -0
  10. lite/admin/dist/images/envelope.png +0 -0
  11. lite/admin/dist/images/es-captcha-2.png +0 -0
  12. lite/admin/dist/images/es-comments.png +0 -0
  13. lite/admin/dist/images/es-ig-integration.png +0 -0
  14. lite/admin/dist/images/es-logo-128x128.png +0 -0
  15. lite/admin/dist/images/es-logo-64x64.png +0 -0
  16. lite/admin/dist/images/es-rm-integration.png +0 -0
  17. lite/admin/dist/images/es-smtp-label.png +0 -0
  18. lite/admin/dist/images/es-smtp.png +0 -0
  19. lite/admin/dist/images/give-sync.png +0 -0
  20. lite/admin/dist/images/icegram-engage-more-subscribers-and-visitors.png +0 -0
  21. lite/admin/dist/images/icegram-engage-optimize-results.png +0 -0
  22. lite/admin/dist/images/icegram-engage-visitors-person-flow.png +0 -0
  23. lite/admin/dist/images/icon-64.png +0 -0
  24. lite/admin/dist/images/ninja-forms-sync.png +0 -0
  25. lite/admin/dist/images/optin_form_1.png +0 -0
  26. lite/admin/dist/images/optin_form_2.png +0 -0
  27. lite/admin/dist/images/pepipost.png +0 -0
  28. lite/admin/dist/images/phpmail.png +0 -0
  29. lite/admin/dist/images/pricing.png +0 -0
  30. lite/admin/dist/images/starter-tmpl.png +0 -0
  31. lite/admin/dist/images/woocommerce-sync.png +0 -0
  32. lite/admin/dist/images/wpforms-sync.png +0 -0
  33. lite/admin/dist/images/wpmail.png +0 -0
  34. lite/admin/dist/main.css +1 -1
  35. lite/admin/js/email-subscribers-admin.js +3 -1
  36. lite/admin/partials/dashboard.php +1 -9
  37. lite/admin/partials/help.php +191 -123
  38. lite/includes/class-email-subscribers.php +12 -6
  39. lite/includes/class-es-common.php +24 -0
  40. lite/includes/class-es-install.php +11 -0
  41. lite/includes/classes/class-es-campaigns-table.php +2 -0
  42. lite/includes/classes/class-es-contacts-table.php +3 -1
  43. lite/includes/classes/class-es-newsletters.php +22 -9
  44. lite/includes/classes/class-es-reports-data.php +8 -3
  45. lite/includes/db/class-es-db-contacts.php +75 -2
  46. lite/includes/db/class-es-db-lists-contacts.php +9 -43
  47. lite/includes/es-core-functions.php +0 -1
  48. lite/includes/feedback.php +2 -2
  49. lite/includes/feedback/class-ig-feedback.php +15 -13
  50. lite/includes/feedback/class-ig-tracker.php +4 -4
  51. lite/includes/upgrade/es-update-functions.php +36 -2
  52. lite/includes/workflows/actions/class-es-action-delete-contact.php +7 -15
  53. lite/includes/workflows/actions/class-es-action-update-contact.php +25 -1
  54. lite/includes/workflows/class-es-workflow-datetime.php +4 -4
  55. lite/includes/workflows/class-es-workflow-time-helper.php +1 -1
  56. lite/includes/workflows/class-es-workflow.php +3 -3
  57. readme.txt +12 -1
  58. webpack.config.js +3 -1
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.4.1.1
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
@@ -62,11 +62,18 @@ if ( ! version_compare( PHP_VERSION, IG_ES_MIN_PHP_VER, '>=' ) ) {
62
  * @since 4.3.0
63
  */
64
  if ( ! defined( 'IG_ES_FEEDBACK_TRACKER_VERSION' ) ) {
65
- define( 'IG_ES_FEEDBACK_TRACKER_VERSION', '1.2.0' );
66
  }
67
 
68
 
69
  global $ig_es_tracker;
 
 
 
 
 
 
 
70
  /* ***************************** Initial Compatibility Work (Start) ******************* */
71
 
72
  /* =========== Do not edit this code unless you know what you are doing ========= */
@@ -144,7 +151,7 @@ if ( $is_premium ) {
144
  /* ***************************** Initial Compatibility Work (End) ******************* */
145
 
146
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
147
- define( 'ES_PLUGIN_VERSION', '4.4.1.1' );
148
  }
149
 
150
  // Plugin Folder Path.
@@ -168,11 +175,26 @@ if ( ! function_exists( 'activate_email_subscribers' ) ) {
168
  /**
169
  * The code that runs during plugin activation.
170
  * This action is documented in includes/class-email-subscribers-activator.php
 
 
171
  */
172
- function activate_email_subscribers() {
 
 
 
173
  require_once ES_PLUGIN_DIR . 'lite/includes/class-email-subscribers-activator.php';
174
- Email_Subscribers_Activator::activate();
175
- add_option( 'email_subscribers_do_activation_redirect', true );
 
 
 
 
 
 
 
 
 
 
176
  }
177
  }
178
 
@@ -180,20 +202,112 @@ if ( ! function_exists( 'deactivate_email_subscribers' ) ) {
180
  /**
181
  * The code that runs during plugin deactivation.
182
  * This action is documented in includes/class-email-subscribers-deactivator.php
 
 
 
183
  */
184
- function deactivate_email_subscribers() {
 
185
  require_once ES_PLUGIN_DIR . 'lite/includes/class-email-subscribers-deactivator.php';
186
- Email_Subscribers_Deactivator::deactivate();
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  }
188
  }
189
 
190
  register_activation_hook( __FILE__, 'activate_email_subscribers' );
191
  register_deactivation_hook( __FILE__, 'deactivate_email_subscribers' );
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  add_action( 'admin_init', 'email_subscribers_redirect' );
194
 
195
  if ( ! function_exists( 'email_subscribers_redirect' ) ) {
196
  function email_subscribers_redirect() {
 
 
 
 
 
 
197
  if ( get_option( 'email_subscribers_do_activation_redirect', false ) ) {
198
  delete_option( 'email_subscribers_do_activation_redirect' );
199
  wp_redirect( 'admin.php?page=es_dashboard' );
@@ -239,4 +353,4 @@ if ( ! function_exists( 'ES' ) ) {
239
  }
240
 
241
  // Start ES
242
- ES()->run();
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.4.2
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
62
  * @since 4.3.0
63
  */
64
  if ( ! defined( 'IG_ES_FEEDBACK_TRACKER_VERSION' ) ) {
65
+ define( 'IG_ES_FEEDBACK_TRACKER_VERSION', '1.2.1' );
66
  }
67
 
68
 
69
  global $ig_es_tracker;
70
+
71
+ /**
72
+ * @since 4.4.2
73
+ */
74
+ global $wp_version;
75
+
76
+
77
  /* ***************************** Initial Compatibility Work (Start) ******************* */
78
 
79
  /* =========== Do not edit this code unless you know what you are doing ========= */
151
  /* ***************************** Initial Compatibility Work (End) ******************* */
152
 
153
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
154
+ define( 'ES_PLUGIN_VERSION', '4.4.2' );
155
  }
156
 
157
  // Plugin Folder Path.
175
  /**
176
  * The code that runs during plugin activation.
177
  * This action is documented in includes/class-email-subscribers-activator.php
178
+ *
179
+ * @param bool $network_wide Is plugin being activated on a network.
180
  */
181
+ function activate_email_subscribers( $network_wide ) {
182
+
183
+ global $wpdb;
184
+
185
  require_once ES_PLUGIN_DIR . 'lite/includes/class-email-subscribers-activator.php';
186
+
187
+ if ( is_multisite() && $network_wide ) {
188
+
189
+ // Get all active blogs in the network and activate plugin on each one
190
+ $blog_ids = $wpdb->get_col( sprintf( "SELECT blog_id FROM $wpdb->blogs WHERE deleted = %d", 0 ) );
191
+ foreach ( $blog_ids as $blog_id ) {
192
+ ig_es_activate_on_blog( $blog_id );
193
+ }
194
+ } else {
195
+ Email_Subscribers_Activator::activate();
196
+ add_option( 'email_subscribers_do_activation_redirect', true );
197
+ }
198
  }
199
  }
200
 
202
  /**
203
  * The code that runs during plugin deactivation.
204
  * This action is documented in includes/class-email-subscribers-deactivator.php
205
+ *
206
+ * @param bool $network_wide Is plugin being activated on a network.
207
+ *
208
  */
209
+ function deactivate_email_subscribers( $network_wide ) {
210
+
211
  require_once ES_PLUGIN_DIR . 'lite/includes/class-email-subscribers-deactivator.php';
212
+
213
+ if ( is_multisite() && $network_wide ) {
214
+
215
+ global $wpdb;
216
+
217
+ // Get all active blogs in the network.
218
+ $blog_ids = $wpdb->get_col( sprintf( "SELECT blog_id FROM $wpdb->blogs WHERE deleted = %d", 0 ) );
219
+ foreach ( $blog_ids as $blog_id ) {
220
+ // Run deactivation code on each one
221
+ ig_es_trigger_deactivation_in_multisite( $blog_id );
222
+ }
223
+ } else {
224
+ Email_Subscribers_Deactivator::deactivate();
225
+ }
226
  }
227
  }
228
 
229
  register_activation_hook( __FILE__, 'activate_email_subscribers' );
230
  register_deactivation_hook( __FILE__, 'deactivate_email_subscribers' );
231
 
232
+ /**
233
+ * Function to handle new blog(site) creation/activation in WP Multisite
234
+ *
235
+ * @param int $blog_id Blog ID of new site.
236
+ *
237
+ * @since 4.4.2
238
+ */
239
+ function ig_es_may_activate_on_blog( $blog_id ) {
240
+
241
+ // In WP > WP 5.1.0 WP_Site object is passed instead of blog_id.
242
+ if ( $blog_id instanceof WP_Site ) {
243
+ $blog_id = (int) $blog_id->blog_id;
244
+ }
245
+
246
+ if( empty( $blog_id ) || ! is_numeric( $blog_id ) ) {
247
+ return;
248
+ }
249
+
250
+ if ( ! function_exists( 'is_plugin_active_for_network' ) ) {
251
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
252
+ }
253
+
254
+ if ( is_plugin_active_for_network( 'email-subscribers/email-subscribers.php' ) ) {
255
+ ig_es_activate_on_blog( $blog_id );
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Function to trigger Email Subscribers' activation code for individual site/blog in a network.
261
+ *
262
+ * @param int $blog_id Blog ID of newly created site/blog.
263
+ *
264
+ * @since 4.4.2
265
+ */
266
+ function ig_es_activate_on_blog( $blog_id ) {
267
+ switch_to_blog( $blog_id );
268
+ Email_Subscribers_Activator::activate();
269
+ add_option( 'email_subscribers_do_activation_redirect', true );
270
+ restore_current_blog();
271
+ }
272
+
273
+ /**
274
+ * Function to trigger Email Subscribers' deactivation code for individual site in a network.
275
+ *
276
+ * @param int $blog_id Blog ID of newly created site/blog.
277
+ *
278
+ * @since 4.4.2
279
+ */
280
+ function ig_es_trigger_deactivation_in_multisite( $blog_id ) {
281
+ switch_to_blog( $blog_id );
282
+ Email_Subscribers_Deactivator::deactivate();
283
+ restore_current_blog();
284
+ }
285
+
286
+ if( version_compare( $wp_version, '5.1.0', '>' ) ) {
287
+ /**
288
+ * New action when a new site/blog created in WP Multisite > 5.1.0. Priority is lower to allow other options of site to be set before we initiate our activation process.
289
+ */
290
+ add_action( 'wp_initialize_site', 'ig_es_may_activate_on_blog', 99 );
291
+ } else {
292
+ /**
293
+ * Deprecated action when a new site/blog created in WP Multisite <= 5.1.0
294
+ */
295
+ add_action( 'wpmu_new_blog', 'ig_es_may_activate_on_blog' );
296
+ }
297
+
298
+ // This action gets triggered when super admin activates a single site/blog.
299
+ add_action( 'activate_blog', 'ig_es_may_activate_on_blog' );
300
+
301
  add_action( 'admin_init', 'email_subscribers_redirect' );
302
 
303
  if ( ! function_exists( 'email_subscribers_redirect' ) ) {
304
  function email_subscribers_redirect() {
305
+
306
+ // Check if it is multisite and the current user is in the network administrative interface. e.g. `/wp-admin/network/`
307
+ if( is_multisite() && is_network_admin() ) {
308
+ return;
309
+ }
310
+
311
  if ( get_option( 'email_subscribers_do_activation_redirect', false ) ) {
312
  delete_option( 'email_subscribers_do_activation_redirect' );
313
  wp_redirect( 'admin.php?page=es_dashboard' );
353
  }
354
 
355
  // Start ES
356
+ ES()->run();
lite/admin/class-email-subscribers-admin.php CHANGED
@@ -60,6 +60,7 @@ class Email_Subscribers_Admin {
60
  $this->version = $version;
61
 
62
  // Reorder ES Submenu
 
63
  add_filter( 'custom_menu_order', array( $this, 'submenu_order' ) );
64
 
65
  add_action( 'admin_menu', array( $this, 'email_subscribers_admin_menu' ) );
@@ -67,6 +68,7 @@ class Email_Subscribers_Admin {
67
  add_action( 'admin_footer', array( $this, 'remove_submenu' ) );
68
  add_action( 'wp_ajax_send_test_email', array( $this, 'send_test_email' ) );
69
  add_action( 'admin_init', array( $this, 'es_save_onboarding_skip' ) );
 
70
  }
71
 
72
  /**
@@ -104,10 +106,12 @@ class Email_Subscribers_Admin {
104
  wp_register_style( $this->email_subscribers . '-timepicker', plugin_dir_url( __FILE__ ) . 'css/jquery.timepicker.css' );
105
  wp_enqueue_style( $this->email_subscribers . '-timepicker' );
106
 
107
- $allowed_pages = array( 'es_campaigns', 'es_reports', 'es_lists', 'es_forms', 'es_dashboard', 'es_workflows', 'es_settings','go_to_icegram', 'es_subscribers' );
108
- if ( ! empty( $get_page ) && ( in_array( $get_page, $allowed_pages , true ) ) ) {
109
- wp_enqueue_style( 'ig-es-style', plugin_dir_url( __FILE__ ) . 'dist/main.css', array(), $this->version, 'all' );
110
- }
 
 
111
 
112
  }
113
 
@@ -180,7 +184,7 @@ class Email_Subscribers_Admin {
180
 
181
  if ( in_array( 'workflows', $accessible_sub_menus ) ) {
182
 
183
-
184
  // Add Workflows Submenu
185
  $hook = add_submenu_page( 'es_dashboard', __( 'Workflows', 'email-subscribers' ), __( 'Workflows', 'email-subscribers' ), 'edit_posts', 'es_workflows', array( $this, 'render_workflows' ) );
186
 
@@ -622,16 +626,84 @@ class Email_Subscribers_Admin {
622
  * @since 4.4.0
623
  */
624
  public function remove_other_admin_notices() {
 
625
 
626
  if ( ! ES()->is_es_admin_screen() ) {
627
  return;
628
  }
629
 
630
- $get_page = ig_es_get_request_data( 'page' );
 
 
 
 
 
 
631
 
632
- if ( ! empty( $get_page ) && 'es_dashboard' === $get_page ) {
633
- remove_all_actions( 'admin_notices' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
634
  }
635
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
636
  }
 
637
  }
60
  $this->version = $version;
61
 
62
  // Reorder ES Submenu
63
+
64
  add_filter( 'custom_menu_order', array( $this, 'submenu_order' ) );
65
 
66
  add_action( 'admin_menu', array( $this, 'email_subscribers_admin_menu' ) );
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
+
72
  }
73
 
74
  /**
106
  wp_register_style( $this->email_subscribers . '-timepicker', plugin_dir_url( __FILE__ ) . 'css/jquery.timepicker.css' );
107
  wp_enqueue_style( $this->email_subscribers . '-timepicker' );
108
 
109
+
110
+ $allowed_pages = array( 'es_campaigns', 'es_reports', 'es_lists', 'es_forms', 'es_dashboard', 'es_workflows', 'es_settings', 'go_to_icegram', 'es_subscribers', 'es_general_information' );
111
+ //if ( ! empty( $get_page ) && ( in_array( $get_page, $allowed_pages , true ) ) ) {
112
+ wp_enqueue_style( 'ig-es-style', plugin_dir_url( __FILE__ ) . 'dist/main.css', array(), $this->version, 'all' );
113
+ //}
114
+
115
 
116
  }
117
 
184
 
185
  if ( in_array( 'workflows', $accessible_sub_menus ) ) {
186
 
187
+
188
  // Add Workflows Submenu
189
  $hook = add_submenu_page( 'es_dashboard', __( 'Workflows', 'email-subscribers' ), __( 'Workflows', 'email-subscribers' ), 'edit_posts', 'es_workflows', array( $this, 'render_workflows' ) );
190
 
626
  * @since 4.4.0
627
  */
628
  public function remove_other_admin_notices() {
629
+ global $wp_filter;
630
 
631
  if ( ! ES()->is_es_admin_screen() ) {
632
  return;
633
  }
634
 
635
+ $es_display_notices = array(
636
+ 'connect_icegram_notification',
637
+ 'show_review_notice',
638
+ 'custom_admin_notice',
639
+ 'output_custom_notices',
640
+ 'ig_es_fail_php_version_notice',
641
+ );
642
 
643
+ // User admin notices
644
+ if ( ! empty( $wp_filter['user_admin_notices']->callbacks ) && is_array( $wp_filter['user_admin_notices']->callbacks ) ) {
645
+ foreach ( $wp_filter['user_admin_notices']->callbacks as $priority => $callbacks ) {
646
+ foreach ( $callbacks as $name => $details ) {
647
+
648
+ if ( is_object( $details['function'] ) && $details['function'] instanceof \Closure ) {
649
+ unset( $wp_filter['user_admin_notices']->callbacks[ $priority ][ $name ] );
650
+ continue;
651
+ }
652
+
653
+ if ( ! empty( $details['function'][0] ) && is_object( $details['function'][0] ) && count( $details['function'] ) == 2 ) {
654
+ $notice_callback_name = $details['function'][1];
655
+ if ( ! in_array( $notice_callback_name, $es_display_notices ) ) {
656
+ unset( $wp_filter['user_admin_notices']->callbacks[ $priority ][ $name ] );
657
+ }
658
+ }
659
+ }
660
+ }
661
  }
662
 
663
+ // Admin notices
664
+ if ( ! empty( $wp_filter['admin_notices']->callbacks ) && is_array( $wp_filter['admin_notices']->callbacks ) ) {
665
+ foreach ( $wp_filter['admin_notices']->callbacks as $priority => $callbacks ) {
666
+ foreach ( $callbacks as $name => $details ) {
667
+
668
+ if ( is_object( $details['function'] ) && $details['function'] instanceof \Closure ) {
669
+ unset( $wp_filter['admin_notices']->callbacks[ $priority ][ $name ] );
670
+ continue;
671
+ }
672
+
673
+ if ( ! empty( $details['function'][0] ) && is_object( $details['function'][0] ) && count( $details['function'] ) == 2 ) {
674
+ $notice_callback_name = $details['function'][1];
675
+ if ( ! in_array( $notice_callback_name, $es_display_notices ) ) {
676
+ unset( $wp_filter['admin_notices']->callbacks[ $priority ][ $name ] );
677
+ }
678
+ }
679
+ }
680
+ }
681
+ }
682
+
683
+ // All admin notices
684
+ if ( ! empty( $wp_filter['all_admin_notices']->callbacks ) && is_array( $wp_filter['all_admin_notices']->callbacks ) ) {
685
+ foreach ( $wp_filter['all_admin_notices']->callbacks as $priority => $callbacks ) {
686
+ foreach ( $callbacks as $name => $details ) {
687
+
688
+ if ( is_object( $details['function'] ) && $details['function'] instanceof \Closure ) {
689
+ unset( $wp_filter['all_admin_notices']->callbacks[ $priority ][ $name ] );
690
+ continue;
691
+ }
692
+
693
+ if ( ! empty( $details['function'][0] ) && is_object( $details['function'][0] ) && count( $details['function'] ) == 2 ) {
694
+ $notice_callback_name = $details['function'][1];
695
+ if ( ! in_array( $notice_callback_name, $es_display_notices ) ) {
696
+ unset( $wp_filter['all_admin_notices']->callbacks[ $priority ][ $name ] );
697
+ }
698
+ }
699
+ }
700
+ }
701
+ }
702
+
703
+ $get_page = ig_es_get_request_data( 'page' );
704
+ if ( ! empty( $get_page ) && 'es_dashboard' == $get_page ) {
705
+ remove_all_actions( 'admin_notices' );
706
+ }
707
  }
708
+
709
  }
lite/admin/css/email-subscribers-admin.css CHANGED
@@ -1727,7 +1727,7 @@ body.email-subscribers_page_es_workflows #post-body .postbox .inside {
1727
  opacity: 0.5;
1728
  }
1729
 
1730
- .email-subscribers_page_es_lists table.fixed, .email-subscribers_page_es_forms table.fixed, .email-subscribers_page_es_workflows table.fixed, .email-subscribers_page_es_subscribers table.fixed, .email-subscribers_page_es_reports table.fixed{
1731
  position: static;
1732
  }
1733
 
1727
  opacity: 0.5;
1728
  }
1729
 
1730
+ .email-subscribers_page_es_campaigns table.fixed, .email-subscribers_page_es_lists table.fixed, .email-subscribers_page_es_forms table.fixed, .email-subscribers_page_es_workflows table.fixed, .email-subscribers_page_es_subscribers table.fixed, .email-subscribers_page_es_reports table.fixed{
1731
  position: static;
1732
  }
1733
 
lite/admin/dist/images/bfcm-2019.png ADDED
Binary file
lite/admin/dist/images/bfcm-last-2019.png ADDED
Binary file
lite/admin/dist/images/cf7-sync.png ADDED
Binary file
lite/admin/dist/images/edd-sync.png ADDED
Binary file
lite/admin/dist/images/email-marketing-mastery.png ADDED
Binary file
lite/admin/dist/images/email-subscribers-pricing.png ADDED
Binary file
lite/admin/dist/images/envelope.png ADDED
Binary file
lite/admin/dist/images/es-captcha-2.png ADDED
Binary file
lite/admin/dist/images/es-comments.png ADDED
Binary file
lite/admin/dist/images/es-ig-integration.png ADDED
Binary file
lite/admin/dist/images/es-logo-128x128.png ADDED
Binary file
lite/admin/dist/images/es-logo-64x64.png ADDED
Binary file
lite/admin/dist/images/es-rm-integration.png ADDED
Binary file
lite/admin/dist/images/es-smtp-label.png ADDED
Binary file
lite/admin/dist/images/es-smtp.png ADDED
Binary file
lite/admin/dist/images/give-sync.png ADDED
Binary file
lite/admin/dist/images/icegram-engage-more-subscribers-and-visitors.png ADDED
Binary file
lite/admin/dist/images/icegram-engage-optimize-results.png ADDED
Binary file
lite/admin/dist/images/icegram-engage-visitors-person-flow.png ADDED
Binary file
lite/admin/dist/images/icon-64.png ADDED
Binary file
lite/admin/dist/images/ninja-forms-sync.png ADDED
Binary file
lite/admin/dist/images/optin_form_1.png ADDED
Binary file
lite/admin/dist/images/optin_form_2.png ADDED
Binary file
lite/admin/dist/images/pepipost.png ADDED
Binary file
lite/admin/dist/images/phpmail.png ADDED
Binary file
lite/admin/dist/images/pricing.png ADDED
Binary file
lite/admin/dist/images/starter-tmpl.png ADDED
Binary file
lite/admin/dist/images/woocommerce-sync.png ADDED
Binary file
lite/admin/dist/images/wpforms-sync.png ADDED
Binary file
lite/admin/dist/images/wpmail.png ADDED
Binary file
lite/admin/dist/main.css CHANGED
@@ -1 +1 @@
1
- /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none;padding:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #d2d6dc}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a0aec0}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-input::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-input::-moz-placeholder{color:#9fa6b2;opacity:1}.form-input::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-input::placeholder{color:#9fa6b2;opacity:1}.form-input:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-textarea::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-moz-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::placeholder{color:#9fa6b2;opacity:1}.form-textarea:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-multiselect:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;background-repeat:no-repeat;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem 2.5rem .5rem .75rem;font-size:1rem;line-height:1.5;background-position:right .5rem center;background-size:1.5em 1.5em}.form-select::-ms-expand{color:#9fa6b2;border:none}@media not print{.form-select::-ms-expand{display:none}}@media print and (-ms-high-contrast:active),print and (-ms-high-contrast:none){.form-select{padding-right:.75rem}}.form-select:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.25rem}.form-checkbox:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-checkbox::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-checkbox:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox:checked:focus{border-color:transparent}.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;border-radius:100%;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px}.form-radio:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-radio::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-radio:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-radio:checked:focus,.ig-es-primary-button{border-color:transparent}.ig-es-primary-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;padding:.5rem 1rem;background-color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:500;color:#fff;background-color:#5850ec;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-primary-button:hover{background-color:#6875f5}.ig-es-primary-button:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.ig-es-action.js-open .ig-es-action__header{background-color:#5850ec;color:#fff}.bg-white{background-color:#fff}.bg-green-100{background-color:#def7ec}.bg-indigo-500{background-color:#6875f5}.bg-indigo-600{background-color:#5850ec}.bg-indigo-800{background-color:#42389d}.hover\:bg-gray-50:hover{background-color:#f9fafb}.hover\:bg-gray-100:hover{background-color:#f4f5f7}.hover\:bg-indigo-500:hover{background-color:#6875f5}.focus\:bg-gray-50:focus{background-color:#f9fafb}.focus\:bg-gray-100:focus{background-color:#f4f5f7}.border-collapse{border-collapse:collapse}.border-transparent{border-color:transparent}.border-gray-100{border-color:#f4f5f7}.border-gray-200{border-color:#e5e7eb}.border-gray-300{border-color:#d2d6dc}.focus\:border-blue-300:focus{border-color:#a4cafe}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.border-0{border-width:0}.border{border-width:1px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.table{display:table}.table-cell{display:table-cell}.hidden{display:none}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.h-5{height:1.25rem}.h-20{height:5rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-none{line-height:1}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.ml-6{margin-left:1.5rem}.mr-1\.5{margin-right:.375rem}.-mr-1{margin-right:-.25rem}.max-w-7xl{max-width:80rem}.min-w-0{min-width:0}.opacity-0{opacity:0}.opacity-100{opacity:1}.focus\:outline-none:focus{outline:0}.overflow-hidden{overflow:hidden}.p-2{padding:.5rem}.p-3{padding:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pl-2{padding-left:.5rem}.pr-4{padding-right:1rem}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.right-0{right:0}.shadow-xs{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.05);box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.shadow{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-lg{-webkit-box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.focus\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45)}.focus\:shadow-outline-blue:focus{-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.text-left{text-align:left}.text-center{text-align:center}.text-white{color:#fff}.text-black{color:#000}.text-gray-400{color:#9fa6b2}.text-gray-500{color:#6b7280}.text-gray-600{color:#4b5563}.text-gray-700{color:#374151}.text-gray-900{color:#161e2e}.text-orange-400{color:#ff8a4c}.text-yellow-400{color:#e3a008}.text-green-400{color:#31c48d}.text-green-800{color:#03543f}.text-blue-700{color:#1a56db}.text-indigo-100{color:#e5edff}.text-indigo-400{color:#8da2fb}.text-indigo-500{color:#6875f5}.text-indigo-600{color:#5850ec}.hover\:text-white:hover{color:#fff}.hover\:text-gray-900:hover{color:#161e2e}.focus\:text-white:focus{color:#fff}.focus\:text-gray-900:focus{color:#161e2e}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-2xl{font-size:1.5rem}.italic{font-style:italic}.uppercase{text-transform:uppercase}.underline{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-5{width:1.25rem}.w-56{width:14rem}.w-1\/4{width:25%}.w-3\/5{width:60%}.w-11\/12{width:91.666667%}.w-full{width:100%}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.transition{-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform}.ease-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{-webkit-transition-duration:75ms;transition-duration:75ms}.duration-100{-webkit-transition-duration:.1s;transition-duration:.1s}.duration-150{-webkit-transition-duration:.15s;transition-duration:.15s}@media (min-width:640px){.sm\:rounded-md{border-radius:.375rem}.sm\:grid{display:grid}.sm\:leading-9{line-height:2.25rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.md\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.md\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.md\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.md\:mt-0{margin-top:0}.md\:ml-4{margin-left:1rem}.md\:pt-6{padding-top:1.5rem}.md\:text-base{font-size:1rem}}@media (min-width:1024px){.lg\:rounded-full{border-radius:9999px}.lg\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pt-2{padding-top:.5rem}.lg\:text-sm{font-size:.875rem}.lg\:text-lg{font-size:1.125rem}}
1
+ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none;padding:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #d2d6dc}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a0aec0}input::-moz-placeholder,textarea::-moz-placeholder{color:#a0aec0}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:#a0aec0}input::placeholder,textarea::placeholder{color:#a0aec0}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}a{color:#1c64f2}img{border-width:0}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-input::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-input::-moz-placeholder{color:#9fa6b2;opacity:1}.form-input::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-input::placeholder{color:#9fa6b2;opacity:1}.form-input:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-textarea::-webkit-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-moz-placeholder{color:#9fa6b2;opacity:1}.form-textarea::-ms-input-placeholder{color:#9fa6b2;opacity:1}.form-textarea::placeholder{color:#9fa6b2;opacity:1}.form-textarea:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-multiselect{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem .75rem;font-size:1rem;line-height:1.5}.form-multiselect:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='M7 7l3-3 3 3m0 6l-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;background-repeat:no-repeat;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.375rem;padding:.5rem 2.5rem .5rem .75rem;font-size:1rem;line-height:1.5;background-position:right .5rem center;background-size:1.5em 1.5em}.form-select::-ms-expand{color:#9fa6b2;border:none}@media not print{.form-select::-ms-expand{display:none}}@media print and (-ms-high-contrast:active),print and (-ms-high-contrast:none){.form-select{padding-right:.75rem}}.form-select:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px;border-radius:.25rem}.form-checkbox:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4a1 1 0 00-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-checkbox::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-checkbox:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-checkbox:checked:focus{border-color:transparent}.form-radio{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-ms-flex-negative:0;flex-shrink:0;border-radius:100%;height:1rem;width:1rem;color:#3f83f8;background-color:#fff;border-color:#d2d6dc;border-width:1px}.form-radio:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:50%;background-repeat:no-repeat}@media not print{.form-radio::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-radio:focus{outline:none;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45);border-color:#a4cafe}.form-radio:checked:focus,.ig-es-primary-button{border-color:transparent}.ig-es-primary-button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:.375rem;border-width:1px;padding:.5rem 1rem;background-color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:500;color:#fff;background-color:#5850ec;-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.ig-es-primary-button:hover{background-color:#6875f5}.ig-es-primary-button:focus{outline:0;-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.ig-es-action.js-open .ig-es-action__header{background-color:#5850ec;color:#fff}.bg-white{background-color:#fff}.bg-gray-200{background-color:#e5e7eb}.bg-green-100{background-color:#def7ec}.bg-green-600{background-color:#057a55}.bg-indigo-500{background-color:#6875f5}.bg-indigo-600{background-color:#5850ec}.bg-indigo-800{background-color:#42389d}.hover\:bg-gray-50:hover{background-color:#f9fafb}.hover\:bg-gray-100:hover{background-color:#f4f5f7}.hover\:bg-green-500:hover{background-color:#0e9f6e}.hover\:bg-indigo-500:hover{background-color:#6875f5}.focus\:bg-gray-50:focus{background-color:#f9fafb}.focus\:bg-gray-100:focus{background-color:#f4f5f7}.border-collapse{border-collapse:collapse}.border-transparent{border-color:transparent}.border-gray-100{border-color:#f4f5f7}.border-gray-200{border-color:#e5e7eb}.border-gray-300{border-color:#d2d6dc}.focus\:border-blue-300:focus{border-color:#a4cafe}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.border-dashed{border-style:dashed}.border-0{border-width:0}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.grid{display:grid}.table{display:table}.table-cell{display:table-cell}.hidden{display:none}.flex-row{-webkit-box-orient:horizontal;-ms-flex-direction:row;flex-direction:row}.flex-col,.flex-row{-webkit-box-direction:normal}.flex-col{-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column}.flex-wrap{-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.justify-start{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.flex-1{-webkit-box-flex:1;-ms-flex:1 1 0%;flex:1 1 0%}.flex-auto{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.flex-shrink-0{-ms-flex-negative:0;flex-shrink:0}.font-sans{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-15{height:3.75rem}.h-20{height:5rem}.h-48{height:12rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-none{line-height:1}.leading-snug{line-height:1.375}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.list-disc{list-style-type:disc}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.mx-8{margin-left:2rem;margin-right:2rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-0{margin-bottom:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-3{margin-top:.75rem}.mr-3{margin-right:.75rem}.mb-3{margin-bottom:.75rem}.ml-3{margin-left:.75rem}.mt-4{margin-top:1rem}.mr-4{margin-right:1rem}.mt-6{margin-top:1.5rem}.mr-6{margin-right:1.5rem}.mb-6{margin-bottom:1.5rem}.ml-6{margin-left:1.5rem}.mr-1\.5{margin-right:.375rem}.-mr-1{margin-right:-.25rem}.max-h-full{max-height:100%}.max-w-7xl{max-width:80rem}.min-w-0{min-width:0}.opacity-0{opacity:0}.opacity-100{opacity:1}.focus\:outline-none:focus{outline:0}.overflow-hidden{overflow:hidden}.p-2{padding:.5rem}.p-3{padding:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-4{padding-left:1rem;padding-right:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.pt-1{padding-top:.25rem}.pl-1{padding-left:.25rem}.pt-2{padding-top:.5rem}.pb-2{padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pr-4{padding-right:1rem}.pt-6{padding-top:1.5rem}.pb-6{padding-bottom:1.5rem}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.right-0{right:0}.shadow-xs{-webkit-box-shadow:0 0 0 1px rgba(0,0,0,.05);box-shadow:0 0 0 1px rgba(0,0,0,.05)}.shadow-sm{-webkit-box-shadow:0 1px 2px 0 rgba(0,0,0,.05);box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.shadow{-webkit-box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06);box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-lg{-webkit-box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05);box-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(0,0,0,.05)}.focus\:shadow-outline:focus{-webkit-box-shadow:0 0 0 3px rgba(118,169,250,.45);box-shadow:0 0 0 3px rgba(118,169,250,.45)}.focus\:shadow-outline-blue:focus{-webkit-box-shadow:0 0 0 3px rgba(164,202,254,.45);box-shadow:0 0 0 3px rgba(164,202,254,.45)}.text-left{text-align:left}.text-center{text-align:center}.text-white{color:#fff}.text-black{color:#000}.text-gray-400{color:#9fa6b2}.text-gray-500{color:#6b7280}.text-gray-600{color:#4b5563}.text-gray-700{color:#374151}.text-gray-900{color:#161e2e}.text-red-600{color:#e02424}.text-orange-400{color:#ff8a4c}.text-orange-500{color:#ff5a1f}.text-yellow-400{color:#e3a008}.text-green-400{color:#31c48d}.text-green-600{color:#057a55}.text-green-800{color:#03543f}.text-blue-500{color:#3f83f8}.text-blue-700{color:#1a56db}.text-indigo-100{color:#e5edff}.text-indigo-400{color:#8da2fb}.text-indigo-500{color:#6875f5}.text-indigo-600{color:#5850ec}.hover\:text-white:hover{color:#fff}.hover\:text-gray-900:hover{color:#161e2e}.hover\:text-blue-700:hover{color:#1a56db}.focus\:text-white:focus{color:#fff}.focus\:text-gray-900:focus{color:#161e2e}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-base{font-size:1rem}.text-lg{font-size:1.125rem}.text-2xl{font-size:1.5rem}.italic{font-style:italic}.uppercase{text-transform:uppercase}.underline{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-5{width:1.25rem}.w-56{width:14rem}.w-1\/3{width:33.333333%}.w-2\/3{width:66.666667%}.w-1\/4{width:25%}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-4\/12{width:33.333333%}.w-11\/12{width:91.666667%}.w-full{width:100%}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.transform{--transform-translate-x:0;--transform-translate-y:0;--transform-rotate:0;--transform-skew-x:0;--transform-skew-y:0;--transform-scale-x:1;--transform-scale-y:1;-webkit-transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));transform:translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y))}.origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.scale-95{--transform-scale-x:.95;--transform-scale-y:.95}.scale-100{--transform-scale-x:1;--transform-scale-y:1}.transition{-webkit-transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,-webkit-box-shadow,-webkit-transform}.ease-in{-webkit-transition-timing-function:cubic-bezier(.4,0,1,1);transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{-webkit-transition-timing-function:cubic-bezier(0,0,.2,1);transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{-webkit-transition-duration:75ms;transition-duration:75ms}.duration-100{-webkit-transition-duration:.1s;transition-duration:.1s}.duration-150{-webkit-transition-duration:.15s;transition-duration:.15s}@media (min-width:640px){.sm\:rounded-md{border-radius:.375rem}.sm\:grid{display:grid}.sm\:leading-9{line-height:2.25rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-2{padding-left:.5rem;padding-right:.5rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-2xl{font-size:1.5rem}.sm\:text-3xl{font-size:1.875rem}.sm\:truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:768px){.md\:flex{display:-webkit-box;display:-ms-flexbox;display:flex}.md\:items-start{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.md\:items-center{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.md\:justify-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.md\:mt-0{margin-top:0}.md\:ml-4{margin-left:1rem}.md\:pb-2{padding-bottom:.5rem}.md\:pr-4{padding-right:1rem}.md\:pt-6{padding-top:1.5rem}.md\:text-base{font-size:1rem}}@media (min-width:1024px){.lg\:rounded-full{border-radius:9999px}.lg\:inline-flex{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pt-2{padding-top:.5rem}.lg\:pb-2{padding-bottom:.5rem}.lg\:text-sm{font-size:.875rem}.lg\:text-lg{font-size:1.125rem}}@media (min-width:1280px){.xl\:pb-4{padding-bottom:1rem}}
lite/admin/js/email-subscribers-admin.js CHANGED
@@ -263,6 +263,8 @@
263
  //preview broadcast
264
  // ig_es_preview_broadcast
265
  jQuery(document).on('click', '#ig_es_preview_broadcast', function(e) {
 
 
266
  if (jQuery('.wp-editor-boradcast').val() !== '') {
267
  jQuery('.es-form').find('form').attr('target', '_blank');
268
  jQuery('.es-form').find('form').find('#es_broadcast_preview').val('preview');
@@ -285,4 +287,4 @@
285
 
286
  function checkDelete() {
287
  return confirm('Are you sure?');
288
- }
263
  //preview broadcast
264
  // ig_es_preview_broadcast
265
  jQuery(document).on('click', '#ig_es_preview_broadcast', function(e) {
266
+ // Trigger save event for content of wp_editor instances before processing it.
267
+ window.tinyMCE.triggerSave();
268
  if (jQuery('.wp-editor-boradcast').val() !== '') {
269
  jQuery('.es-form').find('form').attr('target', '_blank');
270
  jQuery('.es-form').find('form').find('#es_broadcast_preview').val('preview');
287
 
288
  function checkDelete() {
289
  return confirm('Are you sure?');
290
+ }
lite/admin/partials/dashboard.php CHANGED
@@ -46,14 +46,7 @@ $templates_url = admin_url( 'edit.php?post_type=es_template' );
46
  $settings_url = admin_url( 'admin.php?page=es_settings' );
47
  $facebook_url = 'https://www.facebook.com/groups/2298909487017349/';
48
 
49
- $topics = array(
50
- array( 'title' => __( 'Prevent Your Email From Landing In Spam', 'email_subscribers' ), 'link' => 'https://www.icegram.com/2bx5' ),
51
- array( 'title' => __( '8 Tips To Improve Email Open Rates', 'email_subscribers' ), 'link' => 'https://www.icegram.com/2bx6' ),
52
- array( 'title' => __( '<b>Email Subscribers Secret Club</b>', 'email_subscribers' ), 'link' => 'https://www.facebook.com/groups/2298909487017349/', 'label' => __( 'Join Now', 'email-subscribers' ), 'label_class' => 'bg-green-100 text-green-800' ),
53
- array( 'title' => __( 'Best Way To Keep Customers Engaged', 'email_subscribers' ), 'link' => 'https://www.icegram.com/ymrn' ),
54
- array( 'title' => __( 'Access Control', 'email_subscribers' ), 'link' => 'https://www.icegram.com/81z9' ),
55
- array( 'title' => __( 'Block Spammers Using Captcha', 'email_subscribers' ), 'link' => 'https://www.icegram.com/3jy4' ),
56
- );
57
 
58
  $topics_indexes = array_rand( $topics, 3 );
59
 
@@ -173,7 +166,6 @@ $topics_indexes = array_rand( $topics, 3 );
173
  <div class="flex-1 min-w-0">
174
  <div class="overflow-hidden">
175
  <ul>
176
-
177
  <?php foreach ( $topics_indexes as $index ) { ?>
178
  <li class="border-b border-gray-200">
179
  <a href="<?php echo $topics[ $index ]['link']; ?>" class="block hover:bg-gray-50 focus:outline-none focus:bg-gray-50 transition duration-150 ease-in-out" target="_blank">
46
  $settings_url = admin_url( 'admin.php?page=es_settings' );
47
  $facebook_url = 'https://www.facebook.com/groups/2298909487017349/';
48
 
49
+ $topics = ES_Common::get_useful_articles();
 
 
 
 
 
 
 
50
 
51
  $topics_indexes = array_rand( $topics, 3 );
52
 
166
  <div class="flex-1 min-w-0">
167
  <div class="overflow-hidden">
168
  <ul>
 
169
  <?php foreach ( $topics_indexes as $index ) { ?>
170
  <li class="border-b border-gray-200">
171
  <a href="<?php echo $topics[ $index ]['link']; ?>" class="block hover:bg-gray-50 focus:outline-none focus:bg-gray-50 transition duration-150 ease-in-out" target="_blank">
lite/admin/partials/help.php CHANGED
@@ -6,144 +6,212 @@ if ( ! defined( 'ABSPATH' ) ) {
6
  }
7
 
8
  ?>
9
- <div class="wrap">
10
- <h1><?php echo __( 'Help & Info', 'email-subscribers' ); ?></h1>
11
-
12
- <div class="help-info-content">
13
- <div class="left-blog">
14
- <div class="feature-overview">
15
- <h3><?php echo __( 'Feature Overview', 'email-subscribers' ); ?></h3>
16
- <ul>
17
- <li><?php echo __( 'Collect customer emails by adding a subscription box (Widget/Shortcode/PHP Code).', 'email-subscribers' ); ?></li>
18
- <li><?php echo __( 'Configure double Opt-In and Single Opt-In facility for subscribers.', 'email-subscribers' ); ?></li>
19
- <li><?php echo __( 'Send automatic welcome email to subscribers.', 'email-subscribers' ); ?></li>
20
- <li><?php echo __( 'Send new post notification emails to subscribers when new posts are published on your website.', 'email-subscribers' ); ?></li>
21
- <li><?php echo __( 'Send email notification to admin when a new user signs up.', 'email-subscribers' ); ?></li>
22
- <li><?php echo __( 'Automatically add Unsubscribe link in the email.', 'email-subscribers' ); ?></li>
23
- <li><?php echo __( 'Easily migrate subscribers from another app using Import & Export.', 'email-subscribers' ); ?></li>
24
- <li><?php echo __( 'Use HTML editor to create broadcast (Newsletters) and post notifications.', 'email-subscribers' ); ?></li>
25
- <li><?php echo __( 'Send broadcast to different lists.', 'email-subscribers' ); ?></li>
26
- <li><?php echo __( 'Get detailed sent email reports.', 'email-subscribers' ); ?></li>
27
- <li><?php echo __( 'Supports localization and internationalization.', 'email-subscribers' ); ?></li>
28
- </ul>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  </div>
30
  </div>
31
- <div class="right-blog">
32
 
33
- <?php if ( $enable_manual_update ) {
 
34
 
35
- $info = array(
36
- 'type' => 'info',
37
- 'center' => false,
38
- 'show_icon' => false
39
- );
40
 
41
- ob_start();
42
- ?>
43
 
44
- <div class="database-migration">
45
- <h3><?php echo __( 'Database Migration', 'email-subscribers' ); ?></h3>
46
-
47
- <p><?php echo __( 'If you found duplicate campaigns, lists, forms, reports after upgrading from Email Subscribers 3.5.x to 4.x and want to run the database migration again to fix this, please click the below <b>Run the updater</b> button.', 'email-subscribers' ); ?></p>
48
-
49
- <p><?php echo __( 'Once you click on <b>Run the updater</b> button, it will run the migration process from 3.5.x once again. So, if you have created new campaigns, forms or lists after migration to 4.x earlier, you will lose those data. So, make sure you have a backup with you.', 'email-subscribers' ); ?></p>
50
-
51
- <p class="submit">
52
- <a href="<?php echo esc_url( $update_url ); ?>" class="es-update-now button-primary"><?php echo __( 'Run the updater', 'email-subscribers' ); ?></a>
53
- </p>
54
 
 
 
 
 
 
 
 
55
  </div>
56
-
57
- <?php
58
- $content = ob_get_clean();
59
-
60
- ES_Common::prepare_information_box( $info, $content );
61
-
62
- } ?>
63
-
64
- <div class="subscribe-form">
65
- <h4><?php echo __( 'Additional form settings', 'email-subscribers' ); ?></h4>
66
- <ul>
67
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-redirect-subscribers-to-a-new-page-url-after-successful-sign-up/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How to Redirect Subscribers to a new page/url after successful sign up?', 'email-subscribers' ); ?></a></li>
68
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-add-captcha-in-subscribe-form-of-email-subscribers/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How to add captcha in Subscribe form of Email Subscribers?', 'email-subscribers' ); ?></a></li>
69
  </ul>
70
- </div>
71
- <div class="general-plugin-configuration">
72
- <h3><?php echo __( 'General Plugin Configuration', 'email-subscribers' ); ?></h3>
73
- <ul>
74
- <li><?php echo __( 'Modify ', 'email-subscribers' ); ?><a target="_blank" href="https://www.icegram.com/documentation/es-general-plugin-settings/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'default text, email contents',
75
- 'email-subscribers' ); ?></a><?php echo __( ' (like Confirmation, Welcome, Admin emails), Cron Settings and Assign User Roles', 'email-subscribers' ); ?></li>
76
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-does-sync-work/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How does Sync work?', 'email-subscribers' ); ?></a></li>
77
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-import-or-export-email-addresses/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How to Import or Export Email Addresses?', 'email-subscribers' ); ?></a></li>
78
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-add-update-existing-subscribers-group/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How to Add/Update Existing Subscribers List & Status?', 'email-subscribers' ); ?></a></li>
79
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-change-update-translate-any-texts-from-email-subscribers/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How to change/update/translate any texts from the plugin?', 'email-subscribers' ); ?></a></li>
80
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-add-unsubscribe-link-in-emails/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How to add Unsubscribe link in emails?', 'email-subscribers' ); ?></a></li>
81
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-check-sent-emails/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How to check sent emails?', 'email-subscribers' ); ?></a></li>
82
- </ul>
83
- </div>
84
  </div>
85
- </div>
86
 
87
- <div class="feature-section">
88
- <div class="feature-blog">
89
- <h3><?php echo __( 'Newsletters', 'email-subscribers' ); ?></h3>
90
- <ul>
91
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-create-and-send-newsletter-emails/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'Create and Send Newsletter Emails', 'email-subscribers' ); ?></a></li>
92
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-newsletters/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'Keywords in the Newsletters', 'email-subscribers' ); ?></a></li>
93
- </ul>
94
- </div>
95
- <div class="feature-blog">
96
- <h3><?php echo __( 'Cron Job Setup', 'email-subscribers' ); ?></h3>
97
- <ul>
98
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-schedule-cron-emails/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'What is Cron and how to Schedule Cron Emails?', 'email-subscribers' ); ?></a></li>
99
- <li><a target="_blank" href="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"><?php echo __( 'Schedule Cron Emails in cPanel', 'email-subscribers' ); ?></a></li>
100
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-schedule-cron-emails-in-parallels-plesk/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'Schedule Cron Emails in Parallels Plesk', 'email-subscribers' ); ?></a></li>
101
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-what-to-do-if-hosting-doesnt-support-cron-jobs/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'Hosting doesn’t support Cron Jobs?', 'email-subscribers' ); ?></a></li>
102
- </ul>
103
- </div>
104
- <div class="feature-blog">
105
- <h3><?php echo __( '[GDPR] Email Subscribers', 'email-subscribers' ); ?></h3>
106
- <ul>
107
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-gdpr-how-to-enable-consent-checkbox-in-the-subscription-form/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'How to enable consent checkbox in the subscribe form?', 'email-subscribers' ); ?></a></li>
108
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-gdpr-what-data-email-subscribers-stores-on-your-end/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'What data Email Subscribers stores on your end?', 'email-subscribers' ); ?></a></li>
109
- </ul>
110
- </div>
111
- <div class="feature-blog">
112
- <h3><?php echo __( 'Post Notifications', 'email-subscribers' ); ?></h3>
113
- <ul>
114
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-create-and-send-post-notification-emails-when-new-posts-are-published/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'Create and Send Post Notification Emails when new posts are published', 'email-subscribers' ); ?></a></li>
115
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-post-notifications/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'Keywords in the Post Notifications', 'email-subscribers' ); ?></a></li>
116
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-how-to-send-a-sample-new-post-notification-email-to-testgroup-myself/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'Send a test post notification email to myself/testgroup', 'email-subscribers' ); ?></a></li>
117
- </ul>
118
- </div>
119
- <div class="feature-blog">
120
- <h3><?php echo __( 'Troubleshooting Steps', 'email-subscribers' ); ?></h3>
121
  <ul>
122
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-subscribers-are-not-receiving-emails/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'Subscribers are not receiving Emails?', 'email-subscribers' ); ?></a></li>
123
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-css-help/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( 'CSS Help', 'email-subscribers' ); ?></a></li>
124
- <li><a target="_blank" href="https://www.icegram.com/documentation/es-faq/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page"><?php echo __( "FAQ's", 'email-subscribers' ); ?></a></li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  </ul>
126
  </div>
 
127
  </div>
128
- <div class="feature-section feature-section-last">
129
- <div class="feature-header"><h2><?php echo __( "Want to do more? Here's how..", 'email-subscribers' ); ?></h2></div>
130
- <div class="feature-blog-wrapper">
131
- <div class="feature-blog">
132
- <h3><?php echo __( 'Show your subscribe form inside attractive popups', 'email-subscribers' ); ?></h3>
133
- <img src="<?php echo plugin_dir_url( dirname( __FILE__ ) ); ?>/images/es-ig-integration.png" alt="feature-img">
134
- <p><?php echo __( "Don't limit your subscriber form to a widget. Embed it within popups, hello bars, slide-ins, sidebars, full screen popups etc.", 'email-subscribers' ); ?></p>
135
- <p><?php echo __( 'Using Email Subscribers you can achieve this easily with our <b>free</b> plugin <a target="_blank" class="es-cta" href="https://wordpress.org/plugins/icegram/">Icegram</a>', 'email-subscribers' ); ?></p>
136
- <p><?php echo __( "Icegram's beautiful designs instantly capture user attention and help increase sign-ups to your WordPress website.", 'email-subscribers' ); ?></p>
137
- <p><?php echo __( 'How to <a href="https://www.icegram.com/documentation/es-how-to-show-subscribe-form-inside-a-popup/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page" target="_blank">show subscribe form inside a popup</a>', 'email-subscribers' ); ?></p>
138
- </div>
139
- <div class="feature-blog">
140
- <h3><?php echo __( 'Get beautiful and elegant form styles', 'email-subscribers' ); ?></h3>
141
- <img src="<?php echo plugin_dir_url( dirname( __FILE__ ) ); ?>/images/es-rm-integration.png" alt="feature-img">
142
- <p><?php echo __( 'Email subscribers easily integrates with another <b>free</b> plugin <a class="es-cta" target="_blank" href="https://wordpress.org/plugins/icegram-rainmaker/">Rainmaker</a>', 'email-subscribers' ); ?></p>
143
- <p><?php echo __( 'Rainmaker extends the core features of Email Subscribers and provides elegant form styles.', 'email-subscribers' ); ?></p>
144
- <p><?php echo __( 'These styles are well designed and beautify your subscription form making it more appealing.', 'email-subscribers' ); ?></p>
145
- <p><?php echo __( 'How to <a href="https://www.icegram.com/documentation/es-how-to-use-rainmakers-form-in-email-subscribers/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page" target="_blank">add Rainmaker’s form in Email Subscribers</a>', 'email-subscribers' ); ?></p>
146
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
147
  </div>
148
  </div>
 
149
  </div>
6
  }
7
 
8
  ?>
9
+ <?php
10
+ global $ig_es_tracker, $ig_es_feedback;
11
+ $ig_install_url = admin_url( 'plugin-install.php?s=icegram&tab=search&type=term' );
12
+ $rainmaker_install_url = admin_url( 'plugin-install.php?s=rainmaker&tab=search&type=term' );
13
+ $smart_manager_install_url = admin_url( 'plugin-install.php?s=smart+manager&tab=search&type=term' );
14
+ $tlwp_install_url = admin_url( 'plugin-install.php?s=temporary+login+without+password&tab=search&type=term' );
15
+ $deactivate_link = admin_url( 'plugins.php' );
16
+ $icegram_plugin = 'icegram/icegram.php';
17
+ $rainmaker_plugin = 'icegram-rainmaker/icegram-rainmaker.php';
18
+ $smart_manager_plugin = 'smart-manager-for-wp-e-commerce/smart-manager';
19
+ $temporary_login = admin_url( 'plugin-install.php?s=temporary+login+without+password&tab=search&type=term' );
20
+ $active_plugins = $ig_es_tracker::get_active_plugins();
21
+ $inactive_plugins = $ig_es_tracker::get_inactive_plugins();
22
+ $all_plugins = $ig_es_tracker::get_plugins();
23
+
24
+ $contact_us_btn_class = "ig-feedback-button-{$ig_es_feedback->plugin}";
25
+
26
+ $plugins = array(
27
+ array(
28
+ 'title' => __( 'Icegram', 'email-subscribers' ),
29
+ 'logo' => 'https://ps.w.org/icegram/assets/icon-128x128.png',
30
+ 'desc' => __( 'The best WP popup plugin that creates a popup. Customize popup, target popups to show offers, email signups, social buttons, etc and increase conversions on your website.', 'email-subscribers' ),
31
+ 'name' => 'icegram/icegram.php',
32
+ 'install_url' => $ig_install_url,
33
+ 'plugin_url' => 'https://wordpress.org/plugins/icegram/',
34
+ ),
35
+ array(
36
+ 'title' => __( 'Rainmaker', 'email-subscribers' ),
37
+ 'logo' => 'https://ps.w.org/icegram-rainmaker/assets/icon-128x128.png',
38
+ 'desc' => __( 'Get readymade contact forms, email subscription forms and custom forms for your website. Choose from beautiful templates and get started within seconds', 'email-subscribers' ),
39
+ 'name' => 'icegram-rainmaker/icegram-rainmaker.php',
40
+ 'install_url' => $rainmaker_install_url,
41
+ 'plugin_url' => 'https://wordpress.org/plugins/icegram-rainmaker/',
42
+
43
+ ),
44
+
45
+ array(
46
+ 'title' => __( 'Smart Manager For WooCommerce', 'email-subscribers' ),
47
+ 'logo' => 'https://ps.w.org/smart-manager-for-wp-e-commerce/assets/icon-128x128.png',
48
+ 'desc' => __( 'The #1 and a powerful tool to manage stock, inventory from a single place. Super quick and super easy', 'email-subscribers' ),
49
+ 'name' => 'smart-manager-for-wp-e-commerce/smart-manager.php',
50
+ 'install_url' => $smart_manager_install_url,
51
+ 'plugin_url' => 'https://wordpress.org/plugins/smart-manager-for-wp-e-commerce/',
52
+ ),
53
+
54
+ array(
55
+ 'title' => __( 'Temporary Login Without Password', 'email-subscribers' ),
56
+ 'logo' => 'https://ps.w.org/temporary-login-without-password/assets/icon-128x128.png',
57
+ 'desc' => __( 'Create self-expiring, automatic login links for WordPress. Give them to developers when they ask for admin access to your site.', 'email-subscribers' ),
58
+ 'name' => 'temporary-login-without-password/temporary-login-without-password.php',
59
+ 'install_url' => $tlwp_install_url,
60
+ 'plugin_url' => 'https://wordpress.org/plugins/temporary-login-without-password/',
61
+ ),
62
+ );
63
+
64
+ $topics = ES_Common::get_useful_articles();
65
+
66
+ $topics_indexes = array_rand( $topics, 5 );
67
+
68
+ $articles = array(
69
+ array( 'title' => 'Create and Send Newsletter Emails', 'link' => 'https://www.icegram.com/documentation/es-how-to-create-and-send-newsletter-emails/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page', 'class' => 'font-medium text-blue-500 hover:text-blue-700' ),
70
+ array( 'title' => 'Schedule Cron Emails in cPanel', 'link' => 'https://www.icegram.com/documentation/es-how-to-schedule-cron-emails/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page', 'class' => 'font-medium text-blue-500 hover:text-blue-700' ),
71
+ array( 'title' => 'How to enable consent checkbox in the subscribe form?', 'link' => 'https://www.icegram.com/documentation/es-gdpr-how-to-enable-consent-checkbox-in-the-subscription-form/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page', 'class' => 'font-medium text-blue-500 hover:text-blue-700' ),
72
+ array( 'title' => 'What data Email Subscribers stores on your end?', 'link' => 'https://www.icegram.com/documentation/es-gdpr-what-data-email-subscribers-stores-on-your-end/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page', 'class' => 'font-medium text-blue-500 hover:text-blue-700' ),
73
+ array( 'title' => 'Create and Send Post Notification Emails when new posts are published', 'link' => 'https://www.icegram.com/documentation/es-how-to-create-and-send-post-notification-emails-when-new-posts-are-published/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page', 'class' => 'font-medium text-blue-500 hover:text-blue-700' ),
74
+ array( 'title' => 'Keywords in the Broadcast', 'link' => 'https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-newsletters/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page', 'class' => 'font-medium text-blue-500 hover:text-blue-700' ),
75
+ array( 'title' => 'Keywords in the Post Notifications', 'link' => 'https://www.icegram.com/documentation/es-what-are-the-available-keywords-in-the-post-notifications/?utm_source=es&utm_medium=in_app&utm_campaign=view_docs_help_page', 'class' => 'font-medium text-blue-500 hover:text-blue-700' ),
76
+ );
77
+
78
+ ?>
79
+ <h3 class="text-gray-700 font-medium text-2xl pl-2 my-3 "><?php _e( 'Help & Info', 'email-subscribers' ) ?></h3>
80
+ <div class="wrap font-sans">
81
+ <div class="container w-full flex flex-wrap border rounded-lg bg-white shadow ">
82
+ <div class="inline-block pl-2 border-r border-dashed px-2 w-4/12 ">
83
+ <div class="max-h-full" id="features_display">
84
+ <div class="mt-2 pt-6 pb-6 pl-2">
85
+ <ul class="mx-6 list-disc leading-relaxed">
86
+ <?php foreach ( $articles as $article ) { ?>
87
+ <li><a target="_blank" href="<?php echo $article['link']; ?>" class="<?php echo $article['class']; ?>"><?php echo $article['title']; ?></a></li>
88
+ <?php } ?>
89
+ </ul>
90
+ </div>
91
  </div>
92
  </div>
 
93
 
94
+ <div class="inline-block w-4/12 border-r border-dashed">
95
+ <?php if ( ES()->is_current_user_administrator() && $enable_manual_update ) { ?>
96
 
97
+ <div class="database-migration bg-gray-200 px-4 py-4">
98
+ <h3 class="mt-4 mb-6 text-center text-2xl font-medium text-gray-700"><?php echo __( 'Database Migration', 'email-subscribers' ); ?></h3>
 
 
 
99
 
100
+ <p class="py-2 px-2"><?php echo __( 'If you found duplicate campaigns, lists, forms, reports after upgrading from Email Subscribers 3.5.x to 4.x and want to run the database migration again to fix this, please click the below <b>Run the updater</b> button.', 'email-subscribers' ); ?></p>
 
101
 
102
+ <p class="py-2 px-2"><?php echo __( 'Once you click on <b>Run the updater</b> button, it will run the migration process from 3.5.x once again. So, if you have created new campaigns, forms or lists after migration to 4.x earlier, you will lose those data. So, make sure you have a backup with you.', 'email-subscribers' ); ?></p>
 
 
 
 
 
 
 
 
 
103
 
104
+ <div class="flex w-2/3 py-2 justify-start">
105
+ <span class="rounded-md shadow-sm ">
106
+ <a href="<?php echo esc_url( $update_url ); ?>"><button type="button"
107
+ class="inline-flex justify-center w-full rounded-md border border-transparent px-4 py-2 bg-white text-sm leading-5 font-medium text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:shadow-outline-blue transition ease-in-out duration-150"><?php echo __( 'Run the updater',
108
+ 'email-subscribers' ); ?> </button></a>
109
+ </span>
110
+ </div>
111
  </div>
112
+ <?php } else { ?>
113
+ <h3 class="mt-4 mb-6 text-center text-2xl font-medium text-gray-700"><?php _e( 'Get Help?', 'email-subscribers' ); ?></h3>
114
+ <ul class="mx-6 list-disc leading-relaxed">
115
+ <li>Install & Activate <a href="https://www.icegram.com/r7gg" target="_blank" class="text-indigo-600">Temporary Login Without Password</a> plugin</li>
116
+ <li>Create & Copy new Temporary Login link. <a href="https://www.icegram.com/r7gg" target="_blank" class="text-indigo-600">Learn why you should use this plugin</a></li>
117
+ <li>Click on <b>Contact US</b> button and let us know your queries along with Temporary Login Link </li>
 
 
 
 
 
 
 
118
  </ul>
119
+ <div class="flex w-2/3 py-2 justify-center <?php echo $contact_us_btn_class; ?>">
120
+ <span class="rounded-md shadow-sm">
121
+ <button type="button" class="inline-flex justify-center w-full rounded-md border border-transparent px-4 py-2 bg-white text-sm leading-5 font-medium text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:shadow-outline-blue transition ease-in-out duration-150"><?php echo __( 'Contact US',
122
+ 'email-subscribers' ); ?> </button>
123
+ </span>
124
+ </div>
125
+ <?php } ?>
 
 
 
 
 
 
 
126
  </div>
 
127
 
128
+ <div class="inline-block w-4/12 ">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  <ul>
130
+ <?php foreach ( $topics_indexes as $index ) { ?>
131
+ <li class="border-b border-gray-200">
132
+ <a href="<?php echo $topics[ $index ]['link']; ?>" class="block hover:bg-gray-50 focus:outline-none focus:bg-gray-50 transition duration-150 ease-in-out" target="_blank">
133
+
134
+ <div class="flex items-center md:justify-between px-2 py-2 sm:px-2">
135
+ <div class="text-sm leading-5 text-gray-900">
136
+ <?php echo $topics[ $index ]['title'];
137
+ if ( ! empty( $topics[ $index ]['label'] ) ) { ?>
138
+ <span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full <?php echo $topics[ $index ]['label_class'] ?>"><?php echo $topics[ $index ]['label']; ?></span>
139
+ <?php } ?>
140
+ </div>
141
+ <div>
142
+ <svg class="h-5 w-5 text-gray-400" fill="currentColor" viewBox="0 0 20 20">
143
+ <path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"></path>
144
+ </svg>
145
+ </div>
146
+ </div>
147
+ </a>
148
+ </li>
149
+ <?php } ?>
150
  </ul>
151
  </div>
152
+
153
  </div>
154
+
155
+
156
+ <div class="container w-full flex flex-wrap mt-4">
157
+ <div class="block mt-6">
158
+ <h3 class="text-gray-700 font-medium text-2xl "><?php _e( 'Other awesome plugins from same author', 'email_subscribers' ); ?></h3>
159
+ </div>
160
+ <div class="grid grid-cols-3 py-2 my-4 w-full">
161
+ <?php foreach ( $plugins as $plugin ) { ?>
162
+ <div class="flex flex-col mr-3 bg-white rounded-lg border shadow my-4">
163
+ <div class="flex h-48">
164
+ <div class="flex pl-1">
165
+ <div class="flex w-1/4 rounded">
166
+ <div class="flex flex-col h-6 w-full">
167
+ <div>
168
+ <img class="border-0 mx-auto my-4 h-15" src="<?php echo $plugin['logo']; ?>" alt="">
169
+ </div>
170
+ </div>
171
+ </div>
172
+ <div class="flex w-3/4 pt-2">
173
+ <div class="flex flex-col">
174
+ <div class="flex w-full">
175
+ <a href="<?php echo $plugin['plugin_url']; ?>" target="_blank"><h3 class="font-medium text-lg text-indigo-600 mt-2 pl-2 pb-2"><?php echo $plugin['title']; ?></h3></a>
176
+ </div>
177
+ <div class="flex w-full pl-2 leading-normal xl:pb-4 lg:pb-2 md:pb-2">
178
+ <h4 class="text-sm text-gray-700 pr-4 pt-1"><?php echo $plugin['desc']; ?></h4>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </div>
184
+ <div class="flex flex-row border-t mb-0">
185
+ <div class="flex w-2/3 py-5 px-3 text-sm"><?php _e( 'Status', 'email-subscribers' ); ?>:
186
+ <?php if ( in_array( $plugin['name'], $active_plugins ) ) { ?>
187
+ <span class="font-bold text-green-600">&nbsp;<?php _e( 'Active', 'email_subscribers' ); ?></span>
188
+ <?php } elseif ( in_array( $plugin['name'], $inactive_plugins ) ) { ?>
189
+ <span class="font-bold text-red-600">&nbsp;<?php _e( 'Inactive', 'email_subscribers' ); ?></span>
190
+ <?php } else { ?>
191
+ <span class="font-bold text-orange-500">&nbsp;<?php _e( 'Not Installed', 'email_subscribers' ); ?></span>
192
+ <?php } ?>
193
+ </div>
194
+ <div class="flex w-1/3 py-3 md:pr-4 justify-center">
195
+ <span class="rounded-md shadow-sm ">
196
+ <?php if ( ! in_array( $plugin['name'], $active_plugins ) ) { ?>
197
+ <a href="<?php echo $plugin['install_url']; ?>">
198
+ <?php }
199
+
200
+ if ( ! in_array( $plugin['name'], $all_plugins ) ) { ?>
201
+ <button type="button" class="inline-flex justify-center w-full rounded-md border border-transparent px-4 py-2 bg-white text-sm leading-5 font-medium text-white bg-green-600 hover:bg-green-500 focus:outline-none focus:shadow-outline-blue transition ease-in-out duration-150">
202
+ <?php _e( 'Install', 'email_subscribers' ); ?> </button>
203
+ <?php } elseif ( in_array( $plugin['name'], $inactive_plugins ) ) { ?>
204
+ <button type="button" class="inline-flex justify-center w-full rounded-md border border-transparent px-4 py-2 bg-white text-sm leading-5 font-medium text-white bg-indigo-600 hover:bg-indigo-500 focus:outline-none focus:shadow-outline-blue transition ease-in-out duration-150">
205
+ <?php _e( 'Activate', 'email_subscribers' ); ?> </button>
206
+ <?php } ?>
207
+ </a>
208
+ </span>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ <?php } ?>
213
+
214
  </div>
215
  </div>
216
+
217
  </div>
lite/includes/class-email-subscribers.php CHANGED
@@ -832,11 +832,10 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
832
  $this->loader->add_action( 'plugins_loaded', $plugin_admin, 'plugins_loaded' );
833
 
834
  $this->loader->add_filter( 'set-screen-option', $plugin_admin, 'save_screen_options', 20, 3 );
835
-
836
  $this->loader->add_action( 'wp_ajax_count_contacts_by_list', $plugin_admin, 'count_contacts_by_list' );
837
  $this->loader->add_action( 'wp_ajax_get_template_content', $plugin_admin, 'get_template_content' );
838
-
839
  $this->loader->add_action( 'in_admin_header', $plugin_admin, 'remove_other_admin_notices' );
 
840
  }
841
 
842
  /**
@@ -970,7 +969,6 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
970
  public function is_es_admin_screen( $screen_id = '' ) {
971
 
972
  $current_screen_id = $this->get_current_screen_id();
973
-
974
  // Check for specific admin screen id if passed.
975
  if ( ! empty( $screen_id ) ) {
976
  if ( $current_screen_id === $screen_id ) {
@@ -981,11 +979,9 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
981
  }
982
 
983
  $es_admin_screens = $this->get_es_admin_screens();
984
-
985
  if ( in_array( $current_screen_id, $es_admin_screens ) ) {
986
  return true;
987
  }
988
-
989
  return false;
990
  }
991
 
@@ -1009,6 +1005,17 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
1009
  return ( $current_screen ? $current_screen->id : '' );
1010
  }
1011
 
 
 
 
 
 
 
 
 
 
 
 
1012
  /**
1013
  * Register Widget Class
1014
  *
@@ -1102,7 +1109,6 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
1102
  $event_prefix = 'esstarter.';
1103
  }
1104
 
1105
-
1106
  $ig_es_feedback = new $ig_es_feedback_class( $name, $plugin, $plugin_abbr, $event_prefix, false );
1107
 
1108
  $ig_es_feedback->render_deactivate_feedback();
832
  $this->loader->add_action( 'plugins_loaded', $plugin_admin, 'plugins_loaded' );
833
 
834
  $this->loader->add_filter( 'set-screen-option', $plugin_admin, 'save_screen_options', 20, 3 );
 
835
  $this->loader->add_action( 'wp_ajax_count_contacts_by_list', $plugin_admin, 'count_contacts_by_list' );
836
  $this->loader->add_action( 'wp_ajax_get_template_content', $plugin_admin, 'get_template_content' );
 
837
  $this->loader->add_action( 'in_admin_header', $plugin_admin, 'remove_other_admin_notices' );
838
+
839
  }
840
 
841
  /**
969
  public function is_es_admin_screen( $screen_id = '' ) {
970
 
971
  $current_screen_id = $this->get_current_screen_id();
 
972
  // Check for specific admin screen id if passed.
973
  if ( ! empty( $screen_id ) ) {
974
  if ( $current_screen_id === $screen_id ) {
979
  }
980
 
981
  $es_admin_screens = $this->get_es_admin_screens();
 
982
  if ( in_array( $current_screen_id, $es_admin_screens ) ) {
983
  return true;
984
  }
 
985
  return false;
986
  }
987
 
1005
  return ( $current_screen ? $current_screen->id : '' );
1006
  }
1007
 
1008
+ /**
1009
+ * Check if the current user is admin
1010
+ *
1011
+ * @return bool
1012
+ *
1013
+ * @since 4.4.2
1014
+ */
1015
+ public function is_current_user_administrator() {
1016
+ return current_user_can('administrator');
1017
+ }
1018
+
1019
  /**
1020
  * Register Widget Class
1021
  *
1109
  $event_prefix = 'esstarter.';
1110
  }
1111
 
 
1112
  $ig_es_feedback = new $ig_es_feedback_class( $name, $plugin, $plugin_abbr, $event_prefix, false );
1113
 
1114
  $ig_es_feedback->render_deactivate_feedback();
lite/includes/class-es-common.php CHANGED
@@ -1232,4 +1232,28 @@ Class ES_Common {
1232
 
1233
  return substr( md5( uniqid() . uniqid() . wp_rand( $length, 64 ) ), 0, $length );
1234
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1235
  }
1232
 
1233
  return substr( md5( uniqid() . uniqid() . wp_rand( $length, 64 ) ), 0, $length );
1234
  }
1235
+
1236
+ /**
1237
+ * Get useful article links
1238
+ *
1239
+ * @return array
1240
+ *
1241
+ * @since 4.4.2
1242
+ */
1243
+ public static function get_useful_articles() {
1244
+
1245
+ $articles = array(
1246
+ array( 'title' => __( '8 Tips To Improve Email Open Rates', 'email_subscribers' ), 'link' => 'https://www.icegram.com/2bx5' ),
1247
+ array( 'title' => __( 'Prevent Your Email From Landing In Spam', 'email_subscribers' ), 'link' => 'https://www.icegram.com/2bx6' ),
1248
+ array( 'title' => __( '<b>Email Subscribers Secret Club</b>', 'email_subscribers' ), 'link' => 'https://www.facebook.com/groups/2298909487017349/', 'label' => __( 'Join Now', 'email-subscribers' ), 'label_class' => 'bg-green-100 text-green-800' ),
1249
+ array( 'title' => __( 'Best Way To Keep Customers Engaged', 'email_subscribers' ), 'link' => 'https://www.icegram.com/ymrn' ),
1250
+ array( 'title' => __( 'Access Control', 'email_subscribers' ), 'link' => 'https://www.icegram.com/81z9' ),
1251
+ array( 'title' => __( 'Prevent Spam Subscription Using Captcha', 'email_subscribers' ), 'link' => 'https://www.icegram.com/3jy4' ),
1252
+ array( 'title' => __( 'Email Subscribers PRO', 'email_subscribers' ), 'link' => 'https://www.icegram.com/er6r', 'label' => __( 'Lifetime', 'email-subscribers' ), 'label_class' => 'bg-green-100 text-green-800' )
1253
+ );
1254
+
1255
+ return $articles;
1256
+
1257
+ }
1258
+
1259
  }
lite/includes/class-es-install.php CHANGED
@@ -197,6 +197,11 @@ if ( ! class_exists( 'ES_Install' ) ) {
197
  'ig_es_update_441_create_tables',
198
  'ig_es_update_441_migrate_audience_sync_settings',
199
  'ig_es_update_441_db_version'
 
 
 
 
 
200
  )
201
 
202
  );
@@ -1643,6 +1648,7 @@ if ( ! class_exists( 'ES_Install' ) ) {
1643
  } else {
1644
  $file = $upload_dir['basedir'] . '/' . $filename;
1645
  }
 
1646
  file_put_contents( $file, $image_data );
1647
 
1648
  $wp_filetype = wp_check_filetype( $filename, null );
@@ -1725,11 +1731,16 @@ if ( ! class_exists( 'ES_Install' ) ) {
1725
  'administrator' => 'yes'
1726
  );
1727
 
 
 
 
 
1728
  $es_roles_default_permission['campaigns'] = $campaigns_permission;
1729
  $es_roles_default_permission['reports'] = $reports_permission;
1730
  $es_roles_default_permission['sequence'] = $sequence_permission;
1731
  $es_roles_default_permission['audience'] = $audience_permission;
1732
  $es_roles_default_permission['forms'] = $forms_permission;
 
1733
 
1734
  return $es_roles_default_permission;
1735
  }
197
  'ig_es_update_441_create_tables',
198
  'ig_es_update_441_migrate_audience_sync_settings',
199
  'ig_es_update_441_db_version'
200
+ ),
201
+
202
+ '4.4.2' => array(
203
+ 'ig_es_update_442_set_workflows_default_permission',
204
+ 'ig_es_update_442_db_version'
205
  )
206
 
207
  );
1648
  } else {
1649
  $file = $upload_dir['basedir'] . '/' . $filename;
1650
  }
1651
+
1652
  file_put_contents( $file, $image_data );
1653
 
1654
  $wp_filetype = wp_check_filetype( $filename, null );
1731
  'administrator' => 'yes'
1732
  );
1733
 
1734
+ $workflows_permission = array(
1735
+ 'administrator' => 'yes'
1736
+ );
1737
+
1738
  $es_roles_default_permission['campaigns'] = $campaigns_permission;
1739
  $es_roles_default_permission['reports'] = $reports_permission;
1740
  $es_roles_default_permission['sequence'] = $sequence_permission;
1741
  $es_roles_default_permission['audience'] = $audience_permission;
1742
  $es_roles_default_permission['forms'] = $forms_permission;
1743
+ $es_roles_default_permission['workflows'] = $workflows_permission;
1744
 
1745
  return $es_roles_default_permission;
1746
  }
lite/includes/classes/class-es-campaigns-table.php CHANGED
@@ -42,6 +42,7 @@ class ES_Campaigns_Table extends WP_List_Table {
42
  $this->db = new ES_DB_Campaigns();
43
 
44
  add_action( 'ig_es_campaign_deleted', array( $this, 'delete_child_campaigns' ), 10, 1 );
 
45
  }
46
 
47
  /**
@@ -79,6 +80,7 @@ class ES_Campaigns_Table extends WP_List_Table {
79
  $this->db->delete_campaigns( $child_campaign_ids );
80
  }
81
  }
 
82
 
83
  /**
84
  * Render Campaigns table
42
  $this->db = new ES_DB_Campaigns();
43
 
44
  add_action( 'ig_es_campaign_deleted', array( $this, 'delete_child_campaigns' ), 10, 1 );
45
+
46
  }
47
 
48
  /**
80
  $this->db->delete_campaigns( $child_campaign_ids );
81
  }
82
  }
83
+
84
 
85
  /**
86
  * Render Campaigns table
lite/includes/classes/class-es-contacts-table.php CHANGED
@@ -757,8 +757,10 @@ class ES_Contacts_Table extends WP_List_Table {
757
  // Show only 4 lists
758
  //$contact_lists_to_display = array_slice( $lists, 0, 4 );
759
  foreach ( $lists as $list_id => $status ) {
 
760
  if ( ! empty( $this->lists_id_name_map[ $list_id ] ) ) {
761
- $list_str .= '<span class="es_list_contact_status ' . strtolower( $status ) . '" title="' . ucwords( $status ) . '">' . $this->lists_id_name_map[ $list_id ] . '</span> ';
 
762
  }
763
  }
764
  }
757
  // Show only 4 lists
758
  //$contact_lists_to_display = array_slice( $lists, 0, 4 );
759
  foreach ( $lists as $list_id => $status ) {
760
+
761
  if ( ! empty( $this->lists_id_name_map[ $list_id ] ) ) {
762
+
763
+ $list_str .= '<span class="es_list_contact_status ' . strtolower( $status ) . '" title="' . ucwords( $status ) . '">' . $this->lists_id_name_map[ $list_id ] . '</span>';
764
  }
765
  }
766
  }
lite/includes/classes/class-es-newsletters.php CHANGED
@@ -57,7 +57,7 @@ class ES_Newsletters {
57
  $broadcast_data['list_ids'] = $list_id;
58
  $broadcast_data['status'] = 1;
59
  $meta = ! empty( $broadcast_data['meta'] ) ? $broadcast_data['meta'] : array();
60
- $meta['pre_header'] = $broadcast_data['pre_header'];
61
  $broadcast_data['meta'] = maybe_serialize( $meta );
62
  self::es_send_email_callback( $broadcast_data );
63
 
@@ -72,13 +72,13 @@ class ES_Newsletters {
72
 
73
  }
74
 
75
- $this->prepare_newsletter_settings_form();
76
  } elseif ( 'preview' === $preview ) {
77
  // $broadcast_data = ig_es_get_request_data( 'broadcast_data', array(), false );
78
  if ( empty( $broadcast_data['body'] ) ) {
79
  $message = __( 'Please add message content', 'email-subscribers' );
80
  ES_Common::show_message( $message, 'error' );
81
- $this->prepare_newsletter_settings_form();
82
  } else {
83
  //content validation
84
  $template_data['content'] = ! empty( $broadcast_data['body'] ) ? $broadcast_data['body'] : '';
@@ -90,12 +90,23 @@ class ES_Newsletters {
90
  }
91
  }
92
 
93
- public function prepare_newsletter_settings_form() {
 
 
 
 
 
 
 
94
  $newsletter_data = array();
95
  $templates = ES_Common::prepare_templates_dropdown_options( 'newsletter' );
96
  $lists = ES_Common::prepare_list_dropdown_options();
97
  $from_email = ES_Common::get_ig_option( 'from_email' );
98
 
 
 
 
 
99
  ?>
100
 
101
  <div class="wrap">
@@ -107,19 +118,21 @@ class ES_Newsletters {
107
  <form method="post" action="#">
108
  <div class="es_newsletters_settings_wrapper">
109
  <div class="es_campaign_name_wrapper ">
110
- <input placeholder="Add Broadcast name" type="text" class="es_newsletter_name" name="broadcast_data[name]" value="">
111
  <input id="ig_es_campaign_submit_button" class="es_primary_btn" type="submit" name="submit" value="Send Broadcast">
112
  <input type="hidden" name="submitted" value="submitted">
113
  </div>
114
  <div class="es_settings_left_pan">
115
  <div class="es_settings_field">
116
- <label><?php _e( 'From Email', 'email-subscribers' ) ?><br/><input type="email" name="broadcast_data[from_email]" value="<?php echo $from_email; ?>"/></label>
117
  </div>
118
  <div class="es_settings_field">
119
  <label><?php _e( 'Design template', 'email-subscribers' ) ?><br/><select name="broadcast_data[template_id]" id="base_template_id"><?php echo $templates ?></select></label>
120
  </div>
121
- <div class="es_settings_field"><label><?php _e( 'Subject', 'email-subscribers' ) ?><br/><input type="text" id="ig_es_broadcast_subject" name="broadcast_data[subject]" placeholder="<?php _e( 'New Broadcast', 'email-subscribers' ) ?>"/></label></div>
122
- <div class="es_settings_field"><label><?php _e( 'Pre Header', 'email-subscribers' ) ?><br/><input placeholder="<?php _e( 'Add Pre header', 'email-subscribers' ); ?>" type="text" name="broadcast_data[pre_header]"/></label></div>
 
 
123
  <div class="es_settings_field">
124
  <label><?php _e( 'Body', 'email-subscribers' ); ?></label>
125
  <?php
@@ -140,7 +153,7 @@ class ES_Newsletters {
140
  <div class="es_settings_right_pan">
141
  <div class="es_settings_field">
142
  <label><?php _e( 'Recipients', 'email-subscribers' ) ?><br/><select name="broadcast_data[list_ids]" id="ig_es_broadcast_list_ids"><?php echo $lists ?></select></label>
143
- <span class="helper" id="ig_es_total_contacts"></span>
144
  </div>
145
  <hr>
146
  <div class="es_settings_field">
57
  $broadcast_data['list_ids'] = $list_id;
58
  $broadcast_data['status'] = 1;
59
  $meta = ! empty( $broadcast_data['meta'] ) ? $broadcast_data['meta'] : array();
60
+ $meta['pre_header'] = ! empty( $broadcast_data['pre_header'] ) ? $broadcast_data['pre_header'] : '';
61
  $broadcast_data['meta'] = maybe_serialize( $meta );
62
  self::es_send_email_callback( $broadcast_data );
63
 
72
 
73
  }
74
 
75
+ $this->prepare_newsletter_settings_form( $broadcast_data );
76
  } elseif ( 'preview' === $preview ) {
77
  // $broadcast_data = ig_es_get_request_data( 'broadcast_data', array(), false );
78
  if ( empty( $broadcast_data['body'] ) ) {
79
  $message = __( 'Please add message content', 'email-subscribers' );
80
  ES_Common::show_message( $message, 'error' );
81
+ $this->prepare_newsletter_settings_form( $broadcast_data );
82
  } else {
83
  //content validation
84
  $template_data['content'] = ! empty( $broadcast_data['body'] ) ? $broadcast_data['body'] : '';
90
  }
91
  }
92
 
93
+ /**
94
+ * Method to display newsletter setting form
95
+ *
96
+ * @param array $broadcast_data Posted broadcast data
97
+ *
98
+ * @since 4.4.2 Added $broadcast_data param
99
+ */
100
+ public function prepare_newsletter_settings_form( $broadcast_data = array() ) {
101
  $newsletter_data = array();
102
  $templates = ES_Common::prepare_templates_dropdown_options( 'newsletter' );
103
  $lists = ES_Common::prepare_list_dropdown_options();
104
  $from_email = ES_Common::get_ig_option( 'from_email' );
105
 
106
+ $broadcast_name = ! empty( $broadcast_data['name'] ) ? $broadcast_data['name'] : '';
107
+ $broadcast_email = ! empty( $broadcast_data['from_email'] ) ? $broadcast_data['from_email'] : $from_email;
108
+ $broadcast_subject = ! empty( $broadcast_data['subject'] ) ? $broadcast_data['subject'] : '';
109
+ $broadcast_pre_header = ! empty( $broadcast_data['pre_header'] ) ? $broadcast_data['pre_header'] : '';
110
  ?>
111
 
112
  <div class="wrap">
118
  <form method="post" action="#">
119
  <div class="es_newsletters_settings_wrapper">
120
  <div class="es_campaign_name_wrapper ">
121
+ <input placeholder="Add Broadcast name" type="text" class="es_newsletter_name" name="broadcast_data[name]" value="<?php echo esc_attr( $broadcast_name ); ?>">
122
  <input id="ig_es_campaign_submit_button" class="es_primary_btn" type="submit" name="submit" value="Send Broadcast">
123
  <input type="hidden" name="submitted" value="submitted">
124
  </div>
125
  <div class="es_settings_left_pan">
126
  <div class="es_settings_field">
127
+ <label><?php _e( 'From Email', 'email-subscribers' ) ?><br/><input type="email" name="broadcast_data[from_email]" value="<?php echo esc_attr( $broadcast_email ); ?>"/></label>
128
  </div>
129
  <div class="es_settings_field">
130
  <label><?php _e( 'Design template', 'email-subscribers' ) ?><br/><select name="broadcast_data[template_id]" id="base_template_id"><?php echo $templates ?></select></label>
131
  </div>
132
+ <div class="es_settings_field"><label><?php _e( 'Subject', 'email-subscribers' ) ?>
133
+ <spam class="required">*</spam>
134
+ <br/><input type="text" id="ig_es_broadcast_subject" name="broadcast_data[subject]" placeholder="" value="<?php echo esc_attr( $broadcast_subject ); ?>"/></label></div>
135
+ <!-- <div class="es_settings_field"><label><?php _e( 'Pre Header', 'email-subscribers' ) ?><br/><input placeholder="<?php _e( 'Add Pre header', 'email-subscribers' ); ?>" type="text" name="broadcast_data[pre_header]" value="<?php echo esc_attr( $broadcast_pre_header ); ?>"/></label></div> -->
136
  <div class="es_settings_field">
137
  <label><?php _e( 'Body', 'email-subscribers' ); ?></label>
138
  <?php
153
  <div class="es_settings_right_pan">
154
  <div class="es_settings_field">
155
  <label><?php _e( 'Recipients', 'email-subscribers' ) ?><br/><select name="broadcast_data[list_ids]" id="ig_es_broadcast_list_ids"><?php echo $lists ?></select></label>
156
+ <span class="helper" id="ig_es_total_contacts"></span>
157
  </div>
158
  <hr>
159
  <div class="es_settings_field">
lite/includes/classes/class-es-reports-data.php CHANGED
@@ -121,16 +121,21 @@ if ( ! class_exists( 'ES_Reports_Data' ) ) {
121
  * @since 4.4.0
122
  */
123
  public static function get_contacts_growth( $days = 60 ) {
 
124
  $contacts = ES()->contacts_db->get_total_contacts_by_date();
125
 
 
 
126
  $data = array();
127
  for ( $i = $days; $i >= 0; $i -- ) {
128
  $date = date( "Y-m-d", strtotime( '-' . $i . ' days' ) );
129
 
130
- $data[ $date ] = 0;
131
- }
132
 
133
- $data = array_merge( $data, $contacts );
 
 
 
134
 
135
  return $data;
136
  }
121
  * @since 4.4.0
122
  */
123
  public static function get_contacts_growth( $days = 60 ) {
124
+
125
  $contacts = ES()->contacts_db->get_total_contacts_by_date();
126
 
127
+ $total = ES()->contacts_db->get_total_subscribed_contacts_before_days( $days );
128
+
129
  $data = array();
130
  for ( $i = $days; $i >= 0; $i -- ) {
131
  $date = date( "Y-m-d", strtotime( '-' . $i . ' days' ) );
132
 
133
+ $count = isset( $contacts[ $date ] ) ? $contacts[ $date ] : 0;
 
134
 
135
+ $total += $count;
136
+
137
+ $data[ $date ] = $total;
138
+ }
139
 
140
  return $data;
141
  }
lite/includes/db/class-es-db-contacts.php CHANGED
@@ -625,7 +625,7 @@ class ES_DB_Contacts extends ES_DB {
625
 
626
  }
627
 
628
- //Do import Lists Contacts
629
  if ( count( $lists_contacts ) > 0 ) {
630
  $list_name_id_map = ES()->lists_db->get_list_id_name_map( '', true );
631
  foreach ( $lists_contacts as $list_name => $contacts ) {
@@ -687,7 +687,7 @@ class ES_DB_Contacts extends ES_DB {
687
  public function get_total_contacts_by_date( $status = 'subscribed', $days = 60 ) {
688
 
689
  if ( $status === 'subscribed' ) {
690
- $results = ES()->lists_contacts_db->get_total_subscribed_contacts_by_date( $days );
691
  }
692
 
693
  return $results;
@@ -711,4 +711,77 @@ class ES_DB_Contacts extends ES_DB {
711
  return $this->get_column_by( 'id', 'wp_user_id', $user_id );
712
  }
713
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
714
  }
625
 
626
  }
627
 
628
+ // Do import Lists Contacts
629
  if ( count( $lists_contacts ) > 0 ) {
630
  $list_name_id_map = ES()->lists_db->get_list_id_name_map( '', true );
631
  foreach ( $lists_contacts as $list_name => $contacts ) {
687
  public function get_total_contacts_by_date( $status = 'subscribed', $days = 60 ) {
688
 
689
  if ( $status === 'subscribed' ) {
690
+ $results = $this->get_total_subscribed_contacts_by_date( $days );
691
  }
692
 
693
  return $results;
711
  return $this->get_column_by( 'id', 'wp_user_id', $user_id );
712
  }
713
 
714
+ /**
715
+ * Get total subscribed contacts by date
716
+ *
717
+ * @param string $status
718
+ * @param int $days
719
+ *
720
+ * @return array
721
+ *
722
+ * @since 4.4.2
723
+ */
724
+ public function get_total_subscribed_contacts_by_date( $days = 60 ) {
725
+ global $wpdb;
726
+
727
+ $columns = array( 'DATE(created_at) as date', 'count(DISTINCT(id)) as total' );
728
+ $where = "unsubscribed = %d";
729
+ $args[] = 0;
730
+
731
+ if ( 0 != $days ) {
732
+ $days = esc_sql( $days );
733
+ $where .= " AND created_at >= DATE_SUB(NOW(), INTERVAL %d DAY)";
734
+ $args[] = $days;
735
+ }
736
+
737
+ $group_by = ' GROUP BY DATE(created_at)';
738
+
739
+ $where .= $group_by;
740
+
741
+ $where = $wpdb->prepare( $where, $args );
742
+
743
+ $results = $this->get_columns_by_condition( $columns, $where );
744
+
745
+ $contacts = array();
746
+ if ( ! empty( $results ) ) {
747
+ foreach ( $results as $result ) {
748
+ $contacts[ $result['date'] ] = $result['total'];
749
+ }
750
+ }
751
+
752
+ return $contacts;
753
+ }
754
+
755
+ /**
756
+ * Get total subscribed contacts before $days
757
+ *
758
+ * @param int $days
759
+ *
760
+ * @return array
761
+ *
762
+ * @since 4.4.2
763
+ */
764
+ public function get_total_subscribed_contacts_before_days( $days = 60 ) {
765
+ global $wpdb;
766
+
767
+ $columns = array( 'count(DISTINCT(id)) as total' );
768
+ $where = "unsubscribed = %d";
769
+ $args[] = 0;
770
+
771
+ if ( 0 != $days ) {
772
+ $days = esc_sql( $days );
773
+ $where .= " AND created_at < DATE_SUB(NOW(), INTERVAL %d DAY)";
774
+ $args[] = $days;
775
+ }
776
+
777
+ $where = $wpdb->prepare( $where, $args );
778
+
779
+ $results = $this->get_columns_by_condition( $columns, $where );
780
+
781
+ $results = array_shift( $results );
782
+
783
+ return $results['total'];
784
+ }
785
+
786
+
787
  }
lite/includes/db/class-es-db-lists-contacts.php CHANGED
@@ -407,11 +407,17 @@ class ES_DB_Lists_Contacts extends ES_DB {
407
 
408
  $where = "email IN ($contacts_str)";
409
 
410
- $email_id_map = $this->get_columns_map( 'email', 'id', $where );
411
 
412
  foreach ( $contacts as $key => $contact ) {
413
- $status = 'subscribed';
414
- $optin_type = IG_SINGLE_OPTIN;
 
 
 
 
 
 
415
  if ( $contact['status'] === 'Single Opt In' ) {
416
  $optin_type = IG_SINGLE_OPTIN;
417
  } elseif ( $contact['status'] === 'Confirmed' ) {
@@ -931,45 +937,5 @@ class ES_DB_Lists_Contacts extends ES_DB {
931
  return $this->get_contacts( 'all' );
932
  }
933
 
934
- /**
935
- * Get total subscribed contacts by date
936
- *
937
- * @param string $status
938
- * @param int $days
939
- *
940
- * @return array
941
- *
942
- * @since 4.4.0
943
- */
944
- public function get_total_subscribed_contacts_by_date( $days = 60 ) {
945
- global $wpdb;
946
-
947
- $columns = array( 'DATE(subscribed_at) as date', 'count(DISTINCT(contact_id)) as total' );
948
- $where = "status = %s";
949
- $args[] = 'subscribed';
950
-
951
- if ( 0 != $days ) {
952
- $days = esc_sql( $days );
953
- $where .= " AND subscribed_at >= DATE_SUB(NOW(), INTERVAL %d DAY)";
954
- $args[] = $days;
955
- }
956
-
957
- $group_by = ' GROUP BY DATE(subscribed_at)';
958
-
959
- $where .= $group_by;
960
-
961
- $where = $wpdb->prepare( $where, $args );
962
-
963
- $results = $this->get_columns_by_condition( $columns, $where );
964
-
965
- $contacts = array();
966
- if ( ! empty( $results ) ) {
967
- foreach ( $results as $result ) {
968
- $contacts[ $result['date'] ] = $result['total'];
969
- }
970
- }
971
-
972
- return $contacts;
973
- }
974
 
975
  }
407
 
408
  $where = "email IN ($contacts_str)";
409
 
410
+ $email_id_map = ES()->contacts_db->get_columns_map( 'email', 'id', $where );
411
 
412
  foreach ( $contacts as $key => $contact ) {
413
+
414
+ if ( empty( $email_id_map[ $contact['email'] ] ) ) {
415
+ continue;
416
+ }
417
+
418
+ $contact[ $key ]['contact_id'] = $email_id_map[ $contact['email'] ];
419
+ $status = 'subscribed';
420
+ $optin_type = IG_SINGLE_OPTIN;
421
  if ( $contact['status'] === 'Single Opt In' ) {
422
  $optin_type = IG_SINGLE_OPTIN;
423
  } elseif ( $contact['status'] === 'Confirmed' ) {
937
  return $this->get_contacts( 'all' );
938
  }
939
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
940
 
941
  }
lite/includes/es-core-functions.php CHANGED
@@ -202,7 +202,6 @@ if ( ! function_exists( 'ig_es_get_data' ) ) {
202
  * @since 4.1.15
203
  */
204
  function ig_es_get_data( $array = array(), $var = '', $default = '', $clean = false ) {
205
-
206
  if ( ! empty( $var ) ) {
207
  $value = isset( $array[ $var ] ) ? wp_unslash( $array[ $var ] ) : $default;
208
  } else {
202
  * @since 4.1.15
203
  */
204
  function ig_es_get_data( $array = array(), $var = '', $default = '', $clean = false ) {
 
205
  if ( ! empty( $var ) ) {
206
  $value = isset( $array[ $var ] ) ? wp_unslash( $array[ $var ] ) : $default;
207
  } else {
lite/includes/feedback.php CHANGED
@@ -229,8 +229,8 @@ function ig_es_render_iges_merge_feedback() {
229
  'desc' => '<div><p class="mt-4">You use <a href="https://wordpress.org/plugins/email-subscribers" target="_blank"><b class="text-blue-700 font-semibold underline">Email Subscribers</b></a> to send email campaigns.</p><p class="mt-3">Would you like us to include onsite popups and action bars in the plugin as well? This way you can <b class="font-semibold">convert visitors to subscribers, drive traffic and run email marketing from a single plugin</b>.</p> <p class="mt-3">Why do we ask?</p> <p class="mt-3">Our <a class="text-blue-700 font-semibold underline" href="https://wordpress.org/plugins/icegram" target="_blank"><b>Icegram</b></a> plugin already does onsite campaigns. We are thinking of merging Icegram & Email Subscribers into a single plugin.</p> <p class="mt-3"><b class="font-semibold">Will a comprehensive ConvertKit / MailChimp like email + onsite campaign plugin be useful to you?</b></p> </div><p class="mt-3">',
230
  'poll_options' => array(
231
  'yes' => array( 'text' => '<b>' . __( 'Yes', 'email-subscribers' ) . '</b>', 'color' => 'green' ),
232
- 'no' => array( 'text' => '<b>' . __( 'No', 'email-subscribers' ) . '</b>', 'color' => 'red')
233
- ),
234
  'allow_multiple' => false,
235
  'position' => 'bottom-center',
236
  'width' => 400,
229
  'desc' => '<div><p class="mt-4">You use <a href="https://wordpress.org/plugins/email-subscribers" target="_blank"><b class="text-blue-700 font-semibold underline">Email Subscribers</b></a> to send email campaigns.</p><p class="mt-3">Would you like us to include onsite popups and action bars in the plugin as well? This way you can <b class="font-semibold">convert visitors to subscribers, drive traffic and run email marketing from a single plugin</b>.</p> <p class="mt-3">Why do we ask?</p> <p class="mt-3">Our <a class="text-blue-700 font-semibold underline" href="https://wordpress.org/plugins/icegram" target="_blank"><b>Icegram</b></a> plugin already does onsite campaigns. We are thinking of merging Icegram & Email Subscribers into a single plugin.</p> <p class="mt-3"><b class="font-semibold">Will a comprehensive ConvertKit / MailChimp like email + onsite campaign plugin be useful to you?</b></p> </div><p class="mt-3">',
230
  'poll_options' => array(
231
  'yes' => array( 'text' => '<b>' . __( 'Yes', 'email-subscribers' ) . '</b>', 'color' => 'green' ),
232
+ 'no' => array( 'text' => '<b>' . __( 'No', 'email-subscribers' ) . '</b>', 'color' => 'red' )
233
+ ),
234
  'allow_multiple' => false,
235
  'position' => 'bottom-center',
236
  'width' => 400,
lite/includes/feedback/class-ig-feedback.php CHANGED
@@ -4,21 +4,21 @@ if ( ! defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
- if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
8
  /**
9
  * IG Feedback
10
  *
11
  * The IG Feedback class adds functionality to get quick interactive feedback from users.
12
  * There are different types of feedabck widget like Stars, Emoji, Thubms Up/ Down, Number etc.
13
  *
14
- * @class IG_Feedback_V_1_2_0
15
  * @since 1.0.0
16
  * @copyright Copyright (c) 2019, Icegram
17
  * @license https://opensource.org/licenses/gpl-license GNU Public License
18
  * @author Icegram
19
  * @package feedback
20
  */
21
- class IG_Feedback_V_1_2_0 {
22
 
23
  /**
24
  * Version of Feedback Library
@@ -27,7 +27,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
27
  * @var string
28
  *
29
  */
30
- public $version = '1.2.0';
31
  /**
32
  * The API URL where we will send feedback data.
33
  *
@@ -403,7 +403,8 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
403
  'delay' => 3, // In Seconds
404
  'consent_text' => 'You are agree to our terms and condition',
405
  'email' => $this->get_contact_email(),
406
- 'name' => ''
 
407
  );
408
 
409
  $params = wp_parse_args( $params, $default_params );
@@ -636,9 +637,11 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
636
  <label class="ig-label"">Feedback</label><br/>
637
  <textarea name="feedback_data[details]" id="ig-feedback-data-message"></textarea>
638
  </p>
639
- <p>
640
- <input type="checkbox" name="feedback_data[collect_system_info]" checked="checked" id="ig-feedback-data-consent"/><?php echo $params['consent_text']; ?>
641
- </p>
 
 
642
  </form>
643
  </div>
644
 
@@ -696,12 +699,11 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
696
  }
697
  }
698
 
699
- var feedbackButtonID = 'ig-feedback-button-<?php echo $this->plugin; ?>';
700
-
701
- $('#wpwrap').append('<div class="ig-es-feedback-button" id="' + feedbackButtonID + '">Feedback</div>');
702
 
703
- $('#' + feedbackButtonID).on('click', function () {
704
 
 
705
  Swal.mixin({
706
  footer: '<?php echo $this->footer; ?>',
707
  position: '<?php echo $params['position']; ?>',
@@ -744,7 +746,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
744
  return;
745
  }
746
 
747
- var system_info = false;
748
  if (consent === 'checked') {
749
  system_info = true;
750
  }
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
+ if ( ! class_exists( 'IG_Feedback_V_1_2_1' ) ) {
8
  /**
9
  * IG Feedback
10
  *
11
  * The IG Feedback class adds functionality to get quick interactive feedback from users.
12
  * There are different types of feedabck widget like Stars, Emoji, Thubms Up/ Down, Number etc.
13
  *
14
+ * @class IG_Feedback_V_1_2_1
15
  * @since 1.0.0
16
  * @copyright Copyright (c) 2019, Icegram
17
  * @license https://opensource.org/licenses/gpl-license GNU Public License
18
  * @author Icegram
19
  * @package feedback
20
  */
21
+ class IG_Feedback_V_1_2_1 {
22
 
23
  /**
24
  * Version of Feedback Library
27
  * @var string
28
  *
29
  */
30
+ public $version = '1.2.1';
31
  /**
32
  * The API URL where we will send feedback data.
33
  *
403
  'delay' => 3, // In Seconds
404
  'consent_text' => 'You are agree to our terms and condition',
405
  'email' => $this->get_contact_email(),
406
+ 'name' => '',
407
+ 'consent' => false
408
  );
409
 
410
  $params = wp_parse_args( $params, $default_params );
637
  <label class="ig-label"">Feedback</label><br/>
638
  <textarea name="feedback_data[details]" id="ig-feedback-data-message"></textarea>
639
  </p>
640
+ <?php if ( isset( $params['consent'] ) && $params['consent'] === true ) { ?>
641
+ <p>
642
+ <input type="checkbox" name="feedback_data[collect_system_info]" checked="checked" id="ig-feedback-data-consent"/><?php echo $params['consent_text']; ?>
643
+ </p>
644
+ <?php } ?>
645
  </form>
646
  </div>
647
 
699
  }
700
  }
701
 
702
+ var feedbackButtonClass = 'ig-feedback-button-<?php echo $this->plugin; ?>';
 
 
703
 
704
+ $('#wpwrap').append('<div class="ig-es-feedback-button ' + feedbackButtonClass + '">Feedback</div>');
705
 
706
+ $('.' + feedbackButtonClass).on('click', function () {
707
  Swal.mixin({
708
  footer: '<?php echo $this->footer; ?>',
709
  position: '<?php echo $params['position']; ?>',
746
  return;
747
  }
748
 
749
+ var system_info = true;
750
  if (consent === 'checked') {
751
  system_info = true;
752
  }
lite/includes/feedback/class-ig-tracker.php CHANGED
@@ -4,15 +4,15 @@ if ( ! defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
- if ( ! class_exists( 'IG_Tracker_V_1_2_0' ) ) {
8
 
9
  /**
10
- * Class IG_Tracker_V_1_2_0
11
  *
12
  * Icegram tracker handler class is responsible for sending anonymous plugin
13
  * data to Icegram servers for users that actively allowed data tracking.
14
  *
15
- * @class IG_Tracker_V_1_2_0
16
  * @since 1.0.0
17
  *
18
  * @copyright Copyright (c) 2019, Icegram
@@ -20,7 +20,7 @@ if ( ! class_exists( 'IG_Tracker_V_1_2_0' ) ) {
20
  * @author Icegram
21
  * @package feedback
22
  */
23
- class IG_Tracker_V_1_2_0 {
24
 
25
  /**
26
  * Get Active, Inactive or all plugins info
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
+ if ( ! class_exists( 'IG_Tracker_V_1_2_1' ) ) {
8
 
9
  /**
10
+ * Class IG_Tracker_V_1_2_1
11
  *
12
  * Icegram tracker handler class is responsible for sending anonymous plugin
13
  * data to Icegram servers for users that actively allowed data tracking.
14
  *
15
+ * @class IG_Tracker_V_1_2_1
16
  * @since 1.0.0
17
  *
18
  * @copyright Copyright (c) 2019, Icegram
20
  * @author Icegram
21
  * @package feedback
22
  */
23
+ class IG_Tracker_V_1_2_1 {
24
 
25
  /**
26
  * Get Active, Inactive or all plugins info
lite/includes/upgrade/es-update-functions.php CHANGED
@@ -419,7 +419,10 @@ function ig_es_update_400_delete_tables() {
419
  $wpdb->prefix . 'ig_mailing_queue',
420
  $wpdb->prefix . 'ig_sending_queue',
421
  $wpdb->prefix . 'ig_queue',
422
- $wpdb->prefix . 'ig_actions'
 
 
 
423
  );
424
 
425
  foreach ( $tables_to_delete as $table ) {
@@ -1158,4 +1161,35 @@ function ig_es_update_441_migrate_audience_sync_settings() {
1158
  function ig_es_update_441_db_version() {
1159
  ES_Install::update_db_version( '4.4.1' );
1160
  }
1161
- /* --------------------- ES 4.4.1(End)--------------------------- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
419
  $wpdb->prefix . 'ig_mailing_queue',
420
  $wpdb->prefix . 'ig_sending_queue',
421
  $wpdb->prefix . 'ig_queue',
422
+ $wpdb->prefix . 'ig_actions',
423
+ $wpdb->prefix . 'ig_links',
424
+ $wpdb->prefix . 'ig_workflows',
425
+ $wpdb->prefix . 'ig_workflows_queue'
426
  );
427
 
428
  foreach ( $tables_to_delete as $table ) {
1161
  function ig_es_update_441_db_version() {
1162
  ES_Install::update_db_version( '4.4.1' );
1163
  }
1164
+ /* --------------------- ES 4.4.1(End)--------------------------- */
1165
+
1166
+
1167
+ /* --------------------- ES 4.4.2(Start)--------------------------- */
1168
+
1169
+ /**
1170
+ * Adding workflows user role permissions.
1171
+ *
1172
+ * @since 4.4.2
1173
+ */
1174
+ function ig_es_update_442_set_workflows_default_permission() {
1175
+ $user_role_permissions = get_option( 'ig_es_user_roles', false );
1176
+ if ( false === $user_role_permissions ) {
1177
+ update_option( 'ig_es_user_roles', ES_Install::get_default_permissions() );
1178
+ } else if( ! empty( $user_role_permissions ) && is_array( $user_role_permissions ) ) {
1179
+ $user_role_permissions['workflows'] = array(
1180
+ 'administrator' => 'yes'
1181
+ );
1182
+ update_option( 'ig_es_user_roles', $user_role_permissions );
1183
+ }
1184
+ }
1185
+
1186
+ /**
1187
+ * Update DB version
1188
+ *
1189
+ * @since 4.4.2
1190
+ */
1191
+ function ig_es_update_442_db_version() {
1192
+ ES_Install::update_db_version( '4.4.2' );
1193
+ }
1194
+
1195
+ /* --------------------- ES 4.4.2(End)--------------------------- */
lite/includes/workflows/actions/class-es-action-delete-contact.php CHANGED
@@ -47,28 +47,20 @@ class ES_Action_Delete_Contact extends ES_Workflow_Action {
47
  if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
48
  continue;
49
  }
50
- $data = $data_type->get_data( $data_item );
51
 
52
- $user_id = ! empty( $data['wp_user_id'] ) ? $data['wp_user_id'] : 0;
 
53
 
54
- if ( ! empty( $user_id ) ) {
55
- $user = get_user_by( 'ID', $user_id );
 
56
 
57
- if ( $user instanceof WP_User ) {
58
- $email = $user->user_email;
59
-
60
- $where = $wpdb->prepare( 'email = %s', $email );
61
- $contact_id = ES()->contacts_db->get_column_by_condition( 'id', $where );
62
-
63
- if ( $contact_id ) {
64
-
65
- ES()->contacts_db->delete_contacts_by_ids( $contact_id );
66
- }
67
  }
68
  }
69
  }
70
  }
71
-
72
  }
73
 
74
  }
47
  if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
48
  continue;
49
  }
 
50
 
51
+ $data = $data_type->get_data( $data_item );
52
+ $email = ! empty( $data['email'] ) ? $data['email'] : '';
53
 
54
+ if ( ! empty( $email ) ) {
55
+ $where = $wpdb->prepare( 'email = %s', $email );
56
+ $contact_id = ES()->contacts_db->get_column_by_condition( 'id', $where );
57
 
58
+ if ( $contact_id ) {
59
+ ES()->contacts_db->delete_contacts_by_ids( $contact_id );
 
 
 
 
 
 
 
 
60
  }
61
  }
62
  }
63
  }
 
64
  }
65
 
66
  }
lite/includes/workflows/actions/class-es-action-update-contact.php CHANGED
@@ -45,6 +45,7 @@ class ES_Action_Update_Contact extends ES_Workflow_Action {
45
  if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
46
  continue;
47
  }
 
48
  $data = $data_type->get_data( $data_item );
49
 
50
  $user_id = ! empty( $data['wp_user_id'] ) ? $data['wp_user_id'] : 0;
@@ -73,12 +74,35 @@ class ES_Action_Update_Contact extends ES_Workflow_Action {
73
  'email' => $user->user_email,
74
  'first_name' => $first_name,
75
  'last_name' => $last_name,
76
- 'wp_user_id' => $user->ID
77
  );
78
 
79
  ES()->contacts_db->update_contact( $es_contact_id, $contact );
80
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
 
 
82
  }
83
  }
84
  }
45
  if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
46
  continue;
47
  }
48
+
49
  $data = $data_type->get_data( $data_item );
50
 
51
  $user_id = ! empty( $data['wp_user_id'] ) ? $data['wp_user_id'] : 0;
74
  'email' => $user->user_email,
75
  'first_name' => $first_name,
76
  'last_name' => $last_name,
77
+ 'wp_user_id' => $user->ID,
78
  );
79
 
80
  ES()->contacts_db->update_contact( $es_contact_id, $contact );
81
  }
82
+ }
83
+ } else {
84
+
85
+ $email = ! empty( $data['email'] ) ? $data['email'] : '';
86
+ $es_contact_id = ES()->contacts_db->get_contact_id_by_email( $email );
87
+ if ( ! empty( $es_contact_id ) ) {
88
+ $first_name = ! empty( $data['first_name'] ) ? $data['first_name'] : '';
89
+ $last_name = ! empty( $data['last_name'] ) ? $data['last_name'] : '';
90
+
91
+ // Check if we are getting the name field.
92
+ if ( empty( $first_name ) && empty( $last_name ) && ! empty( $data['name'] ) ) {
93
+ $name = explode( ' ', $data['name'] );
94
+ $first_name = $name[0];
95
+ if ( isset( $name[1] ) ) {
96
+ $last_name = $name[1];
97
+ }
98
+ }
99
+ $contact = array(
100
+ 'email' => $email,
101
+ 'first_name' => $first_name,
102
+ 'last_name' => $last_name,
103
+ );
104
 
105
+ ES()->contacts_db->update_contact( $es_contact_id, $contact );
106
  }
107
  }
108
  }
lite/includes/workflows/class-es-workflow-datetime.php CHANGED
@@ -13,11 +13,11 @@ defined( 'ABSPATH' ) || exit;
13
  /**
14
  * Class for Workflow date time options
15
  *
16
- * @class ES_Worfklow_DateTime
17
  *
18
  * @since 4.4.1
19
  */
20
- class ES_Worfklow_DateTime extends DateTime {
21
 
22
  /**
23
  * Same as parent but forces UTC timezone if no timezone is supplied instead of using the PHP default.
@@ -37,7 +37,7 @@ class ES_Worfklow_DateTime extends DateTime {
37
 
38
 
39
  /**
40
- * Convert ES_Worfklow_DateTime from site timezone to UTC.
41
  *
42
  * Note this doesn't actually set the timezone property, it directly modifies the date.
43
  *
@@ -50,7 +50,7 @@ class ES_Worfklow_DateTime extends DateTime {
50
 
51
 
52
  /**
53
- * Convert ES_Worfklow_DateTime from UTC to the site timezone.
54
  *
55
  * Note this doesn't actually set the timezone property, it directly modifies the date.
56
  *
13
  /**
14
  * Class for Workflow date time options
15
  *
16
+ * @class ES_Workflow_DateTime
17
  *
18
  * @since 4.4.1
19
  */
20
+ class ES_Workflow_DateTime extends DateTime {
21
 
22
  /**
23
  * Same as parent but forces UTC timezone if no timezone is supplied instead of using the PHP default.
37
 
38
 
39
  /**
40
+ * Convert ES_Workflow_DateTime from site timezone to UTC.
41
  *
42
  * Note this doesn't actually set the timezone property, it directly modifies the date.
43
  *
50
 
51
 
52
  /**
53
+ * Convert ES_Workflow_DateTime from UTC to the site timezone.
54
  *
55
  * Note this doesn't actually set the timezone property, it directly modifies the date.
56
  *
lite/includes/workflows/class-es-workflow-time-helper.php CHANGED
@@ -43,7 +43,7 @@ class ES_Workflow_Time_Helper {
43
  /**
44
  * Convert local time to GMT time.
45
  *
46
- * @param \DateTime|ES_Worfklow_DateTime $datetime DateTime object.
47
  */
48
  public static function convert_to_gmt( $datetime ) {
49
  $datetime->modify( '-' . self::get_timezone_offset() * HOUR_IN_SECONDS . ' seconds' );
43
  /**
44
  * Convert local time to GMT time.
45
  *
46
+ * @param \DateTime|ES_Workflow_DateTime $datetime DateTime object.
47
  */
48
  public static function convert_to_gmt( $datetime ) {
49
  $datetime->modify( '-' . self::get_timezone_offset() * HOUR_IN_SECONDS . ' seconds' );
lite/includes/workflows/class-es-workflow.php CHANGED
@@ -525,7 +525,7 @@ class ES_Workflow {
525
  $scheduled_time_seconds_from_day_start = ES_Workflow_Time_Helper::calculate_seconds_from_day_start( $scheduled_time );
526
 
527
  // get minimum datetime before scheduling can happen, if no delay is set then this will be now
528
- $min_wait_datetime = new ES_Worfklow_DateTime();
529
  $min_wait_datetime->setTimestamp( $current_timestamp + $this->get_timing_delay() );
530
  $min_wait_time_seconds_from_day_start = ES_Workflow_Time_Helper::calculate_seconds_from_day_start( $min_wait_datetime );
531
 
@@ -549,7 +549,7 @@ class ES_Workflow {
549
  }
550
  }
551
 
552
- $scheduled_time = new ES_Worfklow_DateTime();
553
  $scheduled_time->setTimestamp( $min_wait_datetime->getTimestamp() );
554
  $scheduled_time->modify( "+$scheduled_time_seconds_from_day_start seconds" );
555
  $scheduled_time->convert_to_utc_time();
@@ -588,7 +588,7 @@ class ES_Workflow {
588
  return false;
589
  }
590
 
591
- $datetime = new ES_Worfklow_DateTime( $date );
592
  $datetime->setTime( isset( $time[0] ) ? $time[0] : 0, isset( $time[1] ) ? $time[1] : 0, 0 );
593
  $datetime->convert_to_utc_time();
594
 
525
  $scheduled_time_seconds_from_day_start = ES_Workflow_Time_Helper::calculate_seconds_from_day_start( $scheduled_time );
526
 
527
  // get minimum datetime before scheduling can happen, if no delay is set then this will be now
528
+ $min_wait_datetime = new ES_Workflow_DateTime();
529
  $min_wait_datetime->setTimestamp( $current_timestamp + $this->get_timing_delay() );
530
  $min_wait_time_seconds_from_day_start = ES_Workflow_Time_Helper::calculate_seconds_from_day_start( $min_wait_datetime );
531
 
549
  }
550
  }
551
 
552
+ $scheduled_time = new ES_Workflow_DateTime();
553
  $scheduled_time->setTimestamp( $min_wait_datetime->getTimestamp() );
554
  $scheduled_time->modify( "+$scheduled_time_seconds_from_day_start seconds" );
555
  $scheduled_time->convert_to_utc_time();
588
  return false;
589
  }
590
 
591
+ $datetime = new ES_Workflow_DateTime( $date );
592
  $datetime->setTime( isset( $time[0] ) ? $time[0] : 0, isset( $time[1] ) ? $time[1] : 0, 0 );
593
  $datetime->convert_to_utc_time();
594
 
readme.txt CHANGED
@@ -6,7 +6,7 @@ Tags: subscription, newsletter, email marketing, post notification, email newsle
6
  Requires at least: 3.9
7
  Tested up to: 5.3.2
8
  Requires PHP: 5.6
9
- Stable tag: 4.4.1.1
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
@@ -262,6 +262,17 @@ Refer [here](https://www.icegram.com/documentation/es-faq/).
262
 
263
  == Changelog ==
264
 
 
 
 
 
 
 
 
 
 
 
 
265
  **4.4.1.1 (12.03.2020)**
266
 
267
  * Update: Show warning message for minimum PHP compatibility version
6
  Requires at least: 3.9
7
  Tested up to: 5.3.2
8
  Requires PHP: 5.6
9
+ Stable tag: 4.4.2
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
262
 
263
  == Changelog ==
264
 
265
+ **4.4.2 (26.03.2020)**
266
+
267
+ * Update: Improve Help & Info page
268
+ * Update: Improve Active Contacts Growth based on cumulative contacts
269
+ * Fix: Migration issue
270
+ * Fix: Campaign was sent while previewing campaign
271
+ * Fix: Empty campaign body if any error occur
272
+ * Fix: Optimize images
273
+ * Fix: Campaigns list stick to bottom of the page
274
+ * Fix: PHP Warning during installation on multisite
275
+
276
  **4.4.1.1 (12.03.2020)**
277
 
278
  * Update: Show warning message for minimum PHP compatibility version
webpack.config.js CHANGED
@@ -100,18 +100,20 @@ const config = {
100
  }
101
  ]
102
  },
 
103
  resolve: {
104
  alias: {
105
  '@' : path.resolve('assets'),
106
  '@images': path.resolve('../images')
107
  }
108
  },
 
109
  plugins: [
110
  new MiniCssExtractPlugin({
111
  filename: `[name]${prefix}.css`,
112
  }),
113
  new CopyWebpackPlugin([{
114
- from: './assets/images/',
115
  to: 'images',
116
  ignore: [
117
  '.DS_Store'
100
  }
101
  ]
102
  },
103
+
104
  resolve: {
105
  alias: {
106
  '@' : path.resolve('assets'),
107
  '@images': path.resolve('../images')
108
  }
109
  },
110
+
111
  plugins: [
112
  new MiniCssExtractPlugin({
113
  filename: `[name]${prefix}.css`,
114
  }),
115
  new CopyWebpackPlugin([{
116
+ from: './lite/admin/images/',
117
  to: 'images',
118
  ignore: [
119
  '.DS_Store'