Email Subscribers & Newsletters - Version 5.0.3

Version Description

  • New: Send emails in customers timezone [PRO]
  • New: Tracking for workflows
  • Fix: UI fixes

=

Download this release

Release Info

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

Code changes from version 5.0.2 to 5.0.3

email-subscribers.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Email Subscribers & Newsletters
4
  * Plugin URI: https://www.icegram.com/
5
  * Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
6
- * Version: 5.0.2
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
@@ -187,7 +187,7 @@ if ( 'premium' === $ig_es_plan ) {
187
  /* ***************************** Initial Compatibility Work (End) ******************* */
188
 
189
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
190
- define( 'ES_PLUGIN_VERSION', '5.0.2' );
191
  }
192
 
193
  // Plugin Folder Path.
3
  * Plugin Name: Email Subscribers & Newsletters
4
  * Plugin URI: https://www.icegram.com/
5
  * Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
6
+ * Version: 5.0.3
7
  * Author: Icegram
8
  * Author URI: https://www.icegram.com/
9
  * Requires at least: 3.9
187
  /* ***************************** Initial Compatibility Work (End) ******************* */
188
 
189
  if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
190
+ define( 'ES_PLUGIN_VERSION', '5.0.3' );
191
  }
192
 
193
  // Plugin Folder Path.
lite/admin/class-email-subscribers-admin.php CHANGED
@@ -1237,7 +1237,7 @@ class Email_Subscribers_Admin {
1237
 
1238
  if ( ! empty( $report_id ) ) {
1239
 
1240
- if ( ! empty( $campaign_type ) && 'sequence_message' === $campaign_type ) {
1241
  $email_body = ES()->campaigns_db->get_campaign_by_id( $report_id );
1242
  } else {
1243
  $email_body = ES_DB_Mailing_Queue::get_mailing_queue_by_id( $report_id );
1237
 
1238
  if ( ! empty( $report_id ) ) {
1239
 
1240
+ if ( ! empty( $campaign_type ) && in_array( $campaign_type, array( 'sequence_message', 'workflow_email' ), true ) ) {
1241
  $email_body = ES()->campaigns_db->get_campaign_by_id( $report_id );
1242
  } else {
1243
  $email_body = ES_DB_Mailing_Queue::get_mailing_queue_by_id( $report_id );
lite/admin/css/email-subscribers-admin.css CHANGED
@@ -1600,6 +1600,10 @@ body[class*="_page_es_workflows"] #post-body .postbox .inside {
1600
  z-index: 999;
1601
  }
1602
 
 
 
 
 
1603
  /** Workflow CSS END */
1604
 
1605
  .frappe-chart .x.axis .line-vertical,
@@ -1692,7 +1696,6 @@ div.broadcast_side_content{
1692
  width: 30% ;
1693
  }
1694
  #ig_es_post_notification_list_ids+.select2-container{
1695
- position: absolute;
1696
  width: 75% !important;
1697
  }
1698
  .es-preview.broadcast-preview p {
@@ -2030,7 +2033,8 @@ div.broadcast_side_content{
2030
  margin-bottom: 0;
2031
  }
2032
 
2033
- .ig-es-conditions-value-fields .select2-container:not(.select2-container--focus) .select2-search--inline:not(:only-child) {
 
2034
  display: none;
2035
  }
2036
 
1600
  z-index: 999;
1601
  }
1602
 
1603
+ .ig-es-action__fields .ig-es-table__row[data-type="hidden"] {
1604
+ display: none;
1605
+ }
1606
+
1607
  /** Workflow CSS END */
1608
 
1609
  .frappe-chart .x.axis .line-vertical,
1696
  width: 30% ;
1697
  }
1698
  #ig_es_post_notification_list_ids+.select2-container{
 
1699
  width: 75% !important;
1700
  }
1701
  .es-preview.broadcast-preview p {
2033
  margin-bottom: 0;
2034
  }
2035
 
2036
+ .ig-es-conditions-value-fields .select2-container:not(.select2-container--focus) .select2-search--inline:not(:only-child),
2037
+ .ig-es-post-notification-form .select2-container:not(.select2-container--focus) .select2-search--inline:not(:only-child) {
2038
  display: none;
2039
  }
2040
 
lite/includes/class-email-subscribers.php CHANGED
@@ -320,13 +320,13 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
320
  }
321
  }
322
 
323
- if ( $show_offer ) {
324
- $args['url'] = 'https://www.icegram.com/';
325
- $args['include'] = ES_PLUGIN_DIR . 'lite/includes/notices/views/ig-es-bfcm-offer.php';
326
- ES_Admin_Notices::add_custom_notice( 'bfcm_offer_2021', $args );
327
- } else {
328
- ES_Admin_Notices::remove_notice( 'bfcm_offer_2021' );
329
- }
330
 
331
  $screen_id = $this->get_current_screen_id();
332
  // Don't show admin notices on Dashboard if onboarding is not yet completed.
@@ -836,6 +836,7 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
836
  'lite/includes/workflows/fields/class-es-select.php',
837
  'lite/includes/workflows/fields/class-es-checkbox.php',
838
  'lite/includes/workflows/fields/class-es-wp-editor.php',
 
839
 
840
  // Workflow Admin
841
  'lite/includes/workflows/admin/class-es-workflow-admin.php',
@@ -1996,6 +1997,8 @@ if ( ! class_exists( 'Email_Subscribers' ) ) {
1996
  if ( ! empty( $offer_name ) ) {
1997
  $current_utc_time = time();
1998
  $current_ist_time = $current_utc_time + ( 5.5 * HOUR_IN_SECONDS ); // Add IST offset to get IST time
 
 
1999
 
2000
  if ( 'bfcm' === $offer_name ) {
2001
  $offer_start_time = strtotime( '2021-11-24 12:00:00' ); // Offer start time in IST
320
  }
321
  }
322
 
323
+ // if ( $show_offer ) {
324
+ // $args['url'] = 'https://www.icegram.com/';
325
+ // $args['include'] = ES_PLUGIN_DIR . 'lite/includes/notices/views/ig-es-bfcm-offer.php';
326
+ // ES_Admin_Notices::add_custom_notice( 'bfcm_offer_2021', $args );
327
+ // } else {
328
+ // ES_Admin_Notices::remove_notice( 'bfcm_offer_2021' );
329
+ // }
330
 
331
  $screen_id = $this->get_current_screen_id();
332
  // Don't show admin notices on Dashboard if onboarding is not yet completed.
836
  'lite/includes/workflows/fields/class-es-select.php',
837
  'lite/includes/workflows/fields/class-es-checkbox.php',
838
  'lite/includes/workflows/fields/class-es-wp-editor.php',
839
+ 'lite/includes/workflows/fields/class-es-hidden-field.php',
840
 
841
  // Workflow Admin
842
  'lite/includes/workflows/admin/class-es-workflow-admin.php',
1997
  if ( ! empty( $offer_name ) ) {
1998
  $current_utc_time = time();
1999
  $current_ist_time = $current_utc_time + ( 5.5 * HOUR_IN_SECONDS ); // Add IST offset to get IST time
2000
+ $offer_start_time = 0;
2001
+ $offer_end_time = 0;
2002
 
2003
  if ( 'bfcm' === $offer_name ) {
2004
  $offer_start_time = strtotime( '2021-11-24 12:00:00' ); // Offer start time in IST
lite/includes/class-es-install.php CHANGED
@@ -279,6 +279,12 @@ if ( ! class_exists( 'ES_Install' ) ) {
279
  'ig_es_update_501_migrate_notifications_into_workflows',
280
  'ig_es_update_501_db_version',
281
  ),
 
 
 
 
 
 
282
  );
283
 
284
  /**
@@ -954,6 +960,7 @@ if ( ! class_exists( 'ES_Install' ) ) {
954
  ),
955
  'ig_es_blocked_domains' => array( 'default' => 'mail.ru' ),
956
  'ig_es_disable_wp_cron' => array( 'default' => 'no' ),
 
957
  'ig_es_track_email_opens' => array( 'default' => 'yes' ),
958
  'ig_es_show_opt_in_consent' => array( 'default' => 'yes' ),
959
  'ig_es_opt_in_consent_text' => array( 'default' => 'Subscribe to our email updates as well.' ),
@@ -1065,6 +1072,7 @@ if ( ! class_exists( 'ES_Install' ) ) {
1065
  `ip_address` varchar(50) DEFAULT NULL,
1066
  `country_code` varchar(50) DEFAULT NULL,
1067
  `bounce_status` enum('0','1','2') NOT NULL DEFAULT '0',
 
1068
  `form_id` int(10) NOT NULL DEFAULT '0',
1069
  `status` varchar(10) DEFAULT NULL,
1070
  `unsubscribed` tinyint(1) NOT NULL DEFAULT '0',
@@ -1168,6 +1176,7 @@ if ( ! class_exists( 'ES_Install' ) ) {
1168
  `status` varchar(50) DEFAULT NULL,
1169
  `links` longtext,
1170
  `opened` int(1) DEFAULT NULL,
 
1171
  `sent_at` datetime DEFAULT NULL,
1172
  `opened_at` datetime DEFAULT NULL,
1173
  PRIMARY KEY (id)
279
  'ig_es_update_501_migrate_notifications_into_workflows',
280
  'ig_es_update_501_db_version',
281
  ),
282
+ '5.0.3' => array(
283
+ 'ig_es_update_503_alter_contacts_table',
284
+ 'ig_es_update_503_alter_sending_queue_table',
285
+ 'ig_es_add_timezone_to_contacts_table',
286
+ 'ig_es_update_503_db_version',
287
+ ),
288
  );
289
 
290
  /**
960
  ),
961
  'ig_es_blocked_domains' => array( 'default' => 'mail.ru' ),
962
  'ig_es_disable_wp_cron' => array( 'default' => 'no' ),
963
+ 'ig_es_enable_sending_mails_in_customer_timezone' => array( 'default' => 'no' ),
964
  'ig_es_track_email_opens' => array( 'default' => 'yes' ),
965
  'ig_es_show_opt_in_consent' => array( 'default' => 'yes' ),
966
  'ig_es_opt_in_consent_text' => array( 'default' => 'Subscribe to our email updates as well.' ),
1072
  `ip_address` varchar(50) DEFAULT NULL,
1073
  `country_code` varchar(50) DEFAULT NULL,
1074
  `bounce_status` enum('0','1','2') NOT NULL DEFAULT '0',
1075
+ `timezone` varchar(255) NULL DEFAULT NULL,
1076
  `form_id` int(10) NOT NULL DEFAULT '0',
1077
  `status` varchar(10) DEFAULT NULL,
1078
  `unsubscribed` tinyint(1) NOT NULL DEFAULT '0',
1176
  `status` varchar(50) DEFAULT NULL,
1177
  `links` longtext,
1178
  `opened` int(1) DEFAULT NULL,
1179
+ `send_at` DATETIME NULL DEFAULT NULL,
1180
  `sent_at` datetime DEFAULT NULL,
1181
  `opened_at` datetime DEFAULT NULL,
1182
  PRIMARY KEY (id)
lite/includes/classes/class-es-campaign-report.php CHANGED
@@ -421,16 +421,30 @@ class ES_Campaign_Report extends ES_List_Table {
421
  if ( ! empty( $results ) ) {
422
  $date_format = get_option( 'date_format' );
423
  $time_format = get_option( 'time_format' );
 
424
  $format = $date_format . ' ' . $time_format;
425
  foreach ( $results as $notification_action ) {
426
 
427
  $contact_id = $notification_action['contact_id'];
 
 
 
 
 
 
 
 
 
 
 
 
 
428
 
429
  $view_activity_data[ $contact_id ] = array(
430
  'sr_no' => $sr_no++,
431
  'email' => $notification_action['email'],
432
- 'opened_at' => ! empty( $notification_action['opened_at'] ) ? ES_Common::convert_timestamp_to_date( $notification_action['opened_at'], $format ) : '',
433
- 'sent_at' => ! empty( $notification_action['sent_at'] ) ? ES_Common::convert_timestamp_to_date( $notification_action['sent_at'], $format ) : '',
434
  'status' => $notification_action['status'],
435
  'country_flag' => '',
436
  'device' => '',
421
  if ( ! empty( $results ) ) {
422
  $date_format = get_option( 'date_format' );
423
  $time_format = get_option( 'time_format' );
424
+ $gmt_offset = ig_es_get_gmt_offset( true );
425
  $format = $date_format . ' ' . $time_format;
426
  foreach ( $results as $notification_action ) {
427
 
428
  $contact_id = $notification_action['contact_id'];
429
+ $sent_at = '';
430
+ if ( ! empty( $notification_action['sent_at'] ) ) {
431
+ $sent_timestamp = (int) $notification_action['sent_at'];
432
+ $sent_timestamp += $gmt_offset;
433
+ $sent_at = ES_Common::convert_timestamp_to_date( $sent_timestamp, $format );
434
+ }
435
+
436
+ $opened_at = '';
437
+ if ( ! empty( $notification_action['opened_at'] ) ) {
438
+ $opened_timestamp = (int) $notification_action['opened_at'];
439
+ $opened_timestamp += $gmt_offset;
440
+ $opened_at = ES_Common::convert_timestamp_to_date( $opened_timestamp, $format );
441
+ }
442
 
443
  $view_activity_data[ $contact_id ] = array(
444
  'sr_no' => $sr_no++,
445
  'email' => $notification_action['email'],
446
+ 'opened_at' => $opened_at,
447
+ 'sent_at' => $sent_at,
448
  'status' => $notification_action['status'],
449
  'country_flag' => '',
450
  'device' => '',
lite/includes/classes/class-es-campaigns-table.php CHANGED
@@ -223,6 +223,7 @@ class ES_Campaigns_Table extends ES_List_Table {
223
  $add_where_clause = true;
224
 
225
  $query[] = "( deleted_at IS NULL OR deleted_at = '0000-00-00 00:00:00' )";
 
226
 
227
  if ( ! empty( $search ) ) {
228
  $query[] = ' name LIKE %s ';
@@ -435,7 +436,11 @@ class ES_Campaigns_Table extends ES_List_Table {
435
 
436
  $slug = ( in_array( $item['type'], array( 'post_notification', 'post_digest' ) ) ) ? esc_attr( 'es_notifications' ) : 'es_' . $item['type'];
437
 
438
- $actions ['edit'] = '<a href="?page=' . esc_attr( $slug ) . '&action=edit&list=' . absint( $item['id'] ) . '&_wpnonce=' . $nonce . '" class="text-indigo-600">' . esc_html__( 'Edit', 'email-subscribers' ) . '</a>';
 
 
 
 
439
 
440
  if ( in_array( $type, array( 'post_notification', 'post_digest' ) ) ) {
441
  // Add reports link if there are any reports related to the post notification.
@@ -443,7 +448,7 @@ class ES_Campaigns_Table extends ES_List_Table {
443
 
444
  $actions['report'] = '<a href="?page=' . esc_attr( 'es_reports' ) . '&campaign_id=' . esc_attr( $item['id'] ) . '" class="text-indigo-600">' . esc_html__( 'Report', 'email-subscribers' ) . '</a>';
445
  }
446
- } elseif ( 'sequence' === $type ) {
447
 
448
  $actions['report'] = '<a href="?page=' . esc_attr( 'es_reports' ) . '&campaign_id=' . esc_attr( $item['id'] ) . '" class="text-indigo-600">' . esc_html__( 'Report', 'email-subscribers' ) . '</a>';
449
  }
@@ -485,7 +490,9 @@ class ES_Campaigns_Table extends ES_List_Table {
485
  $actions = apply_filters( 'ig_es_campaign_actions', $actions, $item );
486
  }
487
 
488
- $actions['delete'] = '<a href="?page=' . esc_attr( 'es_campaigns' ) . '&action=delete&list=' . absint( $item['id'] ) . '&_wpnonce=' . $nonce . '" onclick="return checkDelete()">' . esc_html__( 'Delete', 'email-subscribers' ) . '</a>';
 
 
489
 
490
  $title .= $this->row_actions( $actions );
491
 
223
  $add_where_clause = true;
224
 
225
  $query[] = "( deleted_at IS NULL OR deleted_at = '0000-00-00 00:00:00' )";
226
+ $query[] = ' type != "workflow_email"';
227
 
228
  if ( ! empty( $search ) ) {
229
  $query[] = ' name LIKE %s ';
436
 
437
  $slug = ( in_array( $item['type'], array( 'post_notification', 'post_digest' ) ) ) ? esc_attr( 'es_notifications' ) : 'es_' . $item['type'];
438
 
439
+ if ( 'workflow' === $type ) {
440
+ $actions ['edit'] = '<a href="?page=es_workflows&action=edit&id=' . absint( $item['parent_id'] ) . '&_wpnonce=' . $nonce . '" class="text-indigo-600">' . esc_html__( 'Edit', 'email-subscribers' ) . '</a>';
441
+ } else {
442
+ $actions ['edit'] = '<a href="?page=' . esc_attr( $slug ) . '&action=edit&list=' . absint( $item['id'] ) . '&_wpnonce=' . $nonce . '" class="text-indigo-600">' . esc_html__( 'Edit', 'email-subscribers' ) . '</a>';
443
+ }
444
 
445
  if ( in_array( $type, array( 'post_notification', 'post_digest' ) ) ) {
446
  // Add reports link if there are any reports related to the post notification.
448
 
449
  $actions['report'] = '<a href="?page=' . esc_attr( 'es_reports' ) . '&campaign_id=' . esc_attr( $item['id'] ) . '" class="text-indigo-600">' . esc_html__( 'Report', 'email-subscribers' ) . '</a>';
450
  }
451
+ } elseif ( in_array( $type, array( 'sequence', 'workflow' ), true ) ) {
452
 
453
  $actions['report'] = '<a href="?page=' . esc_attr( 'es_reports' ) . '&campaign_id=' . esc_attr( $item['id'] ) . '" class="text-indigo-600">' . esc_html__( 'Report', 'email-subscribers' ) . '</a>';
454
  }
490
  $actions = apply_filters( 'ig_es_campaign_actions', $actions, $item );
491
  }
492
 
493
+ if ( 'workflow' !== $item['type'] ) {
494
+ $actions['delete'] = '<a href="?page=' . esc_attr( 'es_campaigns' ) . '&action=delete&list=' . absint( $item['id'] ) . '&_wpnonce=' . $nonce . '" onclick="return checkDelete()">' . esc_html__( 'Delete', 'email-subscribers' ) . '</a>';
495
+ }
496
 
497
  $title .= $this->row_actions( $actions );
498
 
lite/includes/classes/class-es-geolocation.php CHANGED
@@ -73,6 +73,29 @@ class ES_Geolocation {
73
  return $geolocation;
74
  }
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  /**
77
  * Use APIs to Geolocate the user.
78
  *
@@ -110,13 +133,16 @@ class ES_Geolocation {
110
  case 'ipinfo.io':
111
  $data = json_decode( $response['body'] );
112
  $country_code = isset( $data->country ) ? $data->country : '';
 
113
  break;
114
  case 'ip-api.com':
115
  $data = json_decode( $response['body'] );
116
  $country_code = isset( $data->countryCode ) ? $data->countryCode : ''; // @codingStandardsIgnoreLine
 
117
  break;
118
  default:
119
  $country_code = apply_filters( 'ig_es_geolocation_geoip_response_' . $service_name, '', $response['body'] );
 
120
  break;
121
  }
122
 
@@ -124,6 +150,7 @@ class ES_Geolocation {
124
 
125
  if ( $country_code ) {
126
  $geo_ip_data['country_code'] = $country_code;
 
127
  break;
128
  }
129
  }
@@ -140,8 +167,10 @@ class ES_Geolocation {
140
  if ( ! is_wp_error( $response ) && $response['body'] ) {
141
  $data = json_decode( $response['body'] );
142
  $country_code = isset( $data->country_code ) ? $data->country_code : '';
 
143
  if ( $country_code ) {
144
  $geo_ip_data['country_code'] = $country_code;
 
145
  }
146
  }
147
  }
73
  return $geolocation;
74
  }
75
 
76
+ /**
77
+ * Convert the String TimeZone to seconds
78
+ *
79
+ * @param $timezone
80
+ *
81
+ * @return string
82
+ */
83
+ public static function convert_timezone_to_seconds( $timezone ) {
84
+ if ( empty( $timezone ) ) {
85
+ return '+0:00';
86
+ }
87
+ try {
88
+ $current = timezone_open( $timezone );
89
+ $utcTime = new DateTime( 'now', new DateTimeZone( 'UTC' ) );
90
+ $offset_in_secs = $current->getOffset( $utcTime );
91
+ $hours_and_sec = gmdate( 'H:i', abs( $offset_in_secs ) );
92
+
93
+ return stripos( $offset_in_secs, '-' ) === false ? "+{$hours_and_sec}" : "-{$hours_and_sec}";
94
+ } catch ( Exception $exception ) {
95
+ return '+0:00';
96
+ }
97
+ }
98
+
99
  /**
100
  * Use APIs to Geolocate the user.
101
  *
133
  case 'ipinfo.io':
134
  $data = json_decode( $response['body'] );
135
  $country_code = isset( $data->country ) ? $data->country : '';
136
+ $timezone = isset( $data->timezone ) ? self::convert_timezone_to_seconds( $data->timezone ) : '+0:00';
137
  break;
138
  case 'ip-api.com':
139
  $data = json_decode( $response['body'] );
140
  $country_code = isset( $data->countryCode ) ? $data->countryCode : ''; // @codingStandardsIgnoreLine
141
+ $timezone = isset( $data->timezone ) ? self::convert_timezone_to_seconds( $data->timezone ) : '+0:00';
142
  break;
143
  default:
144
  $country_code = apply_filters( 'ig_es_geolocation_geoip_response_' . $service_name, '', $response['body'] );
145
+ $timezone = apply_filters( 'ig_es_geolocation_geoip_timezone_response_' . $service_name, '', $response['body'] );
146
  break;
147
  }
148
 
150
 
151
  if ( $country_code ) {
152
  $geo_ip_data['country_code'] = $country_code;
153
+ $geo_ip_data['timezone'] = $timezone;
154
  break;
155
  }
156
  }
167
  if ( ! is_wp_error( $response ) && $response['body'] ) {
168
  $data = json_decode( $response['body'] );
169
  $country_code = isset( $data->country_code ) ? $data->country_code : '';
170
+ $timezone = isset( $data->timezone ) ? self::convert_timezone_to_seconds( $data->timezone ) : '+0:00';
171
  if ( $country_code ) {
172
  $geo_ip_data['country_code'] = $country_code;
173
+ $geo_ip_data['timezone'] = $timezone;
174
  }
175
  }
176
  }
lite/includes/classes/class-es-mailer.php CHANGED
@@ -641,7 +641,7 @@ if ( ! class_exists( 'ES_Mailer' ) ) {
641
  * In case of sequence message campaign, fetch contact-email mapping from contacts table, since sending_queue table isn't used to store sequence campaign data.
642
  * TODO: Please check need for using sending_queue table for other campaigns type. If it is not required, then we can remove it for other campaigns types as well.
643
  */
644
- if ( 'sequence_message' === $campaign_type ) {
645
  $this->email_id_map = ES()->contacts_db->get_email_id_map( $emails );
646
  } else {
647
  // If the campaign isn't a sequence message, then we can fetch contact-email mapping data from sending_queue table
641
  * In case of sequence message campaign, fetch contact-email mapping from contacts table, since sending_queue table isn't used to store sequence campaign data.
642
  * TODO: Please check need for using sending_queue table for other campaigns type. If it is not required, then we can remove it for other campaigns types as well.
643
  */
644
+ if ( in_array( $campaign_type, array( 'sequence_message', 'workflow_email' ), true ) ) {
645
  $this->email_id_map = ES()->contacts_db->get_email_id_map( $emails );
646
  } else {
647
  // If the campaign isn't a sequence message, then we can fetch contact-email mapping data from sending_queue table
lite/includes/classes/class-es-newsletters.php CHANGED
@@ -942,7 +942,7 @@ class ES_Newsletters {
942
  $campaign = ES()->campaigns_db->get( $campaign_id );
943
  if ( ! empty( $campaign ) ) {
944
  $campaign_type = $campaign['type'];
945
- if ( 'newsletter' === $campaign_type ) {
946
  $campaign_meta = maybe_unserialize( $campaign['meta'] );
947
  $is_track_email_opens = ! empty( $campaign_meta['enable_open_tracking'] ) ? $campaign_meta['enable_open_tracking'] : $is_track_email_opens;
948
  }
942
  $campaign = ES()->campaigns_db->get( $campaign_id );
943
  if ( ! empty( $campaign ) ) {
944
  $campaign_type = $campaign['type'];
945
+ if ( in_array( $campaign_type, array( 'newsletter', 'workflow_email' ), true ) ) {
946
  $campaign_meta = maybe_unserialize( $campaign['meta'] );
947
  $is_track_email_opens = ! empty( $campaign_meta['enable_open_tracking'] ) ? $campaign_meta['enable_open_tracking'] : $is_track_email_opens;
948
  }
lite/includes/classes/class-es-post-notifications.php CHANGED
@@ -314,7 +314,7 @@ class ES_Post_Notifications_Table {
314
  </div>
315
 
316
  <div class="bg-white shadow-md rounded-lg mt-8">
317
- <form class="ml-5 mr-4 text-left pt-4 mt-2 item-center" method="post" action="admin.php?page=es_notifications&action=<?php echo esc_attr( $action ); ?>&list=<?php echo esc_attr( $id ); ?>&_wpnonce=<?php echo esc_attr( $nonce ); ?>">
318
 
319
  <table class="max-w-full form-table">
320
  <tbody>
314
  </div>
315
 
316
  <div class="bg-white shadow-md rounded-lg mt-8">
317
+ <form id="ig-es-post-notification-form" class="ml-5 mr-4 text-left pt-4 mt-2 item-center" method="post" action="admin.php?page=es_notifications&action=<?php echo esc_attr( $action ); ?>&list=<?php echo esc_attr( $id ); ?>&_wpnonce=<?php echo esc_attr( $nonce ); ?>">
318
 
319
  <table class="max-w-full form-table">
320
  <tbody>
lite/includes/classes/class-es-reports-table.php CHANGED
@@ -32,7 +32,7 @@ class ES_Reports_Table extends ES_List_Table {
32
  $campaign_type = ES()->campaigns_db->get_campaign_type_by_id( $campaign_id );
33
  }
34
 
35
- $campaign_types = array( 'sequence', 'sequence_message' );
36
  // Only if it is sequence then control will transfer to Sequence Reports class.
37
  if ( ! empty( $campaign_type ) && in_array( $campaign_type, $campaign_types, true ) ) {
38
  if ( ES()->is_pro() ) {
32
  $campaign_type = ES()->campaigns_db->get_campaign_type_by_id( $campaign_id );
33
  }
34
 
35
+ $campaign_types = array( 'sequence', 'sequence_message', 'workflow', 'workflow_email' );
36
  // Only if it is sequence then control will transfer to Sequence Reports class.
37
  if ( ! empty( $campaign_type ) && in_array( $campaign_type, $campaign_types, true ) ) {
38
  if ( ES()->is_pro() ) {
lite/includes/db/class-es-db-contacts.php CHANGED
@@ -77,6 +77,7 @@ class ES_DB_Contacts extends ES_DB {
77
  'is_webmail' => '%d',
78
  'is_deliverable' => '%d',
79
  'is_sendsafely' => '%d',
 
80
  'meta' => '%s',
81
  );
82
 
77
  'is_webmail' => '%d',
78
  'is_deliverable' => '%d',
79
  'is_sendsafely' => '%d',
80
+ 'timezone' => '%s',
81
  'meta' => '%s',
82
  );
83
 
lite/includes/db/class-es-db-sending-queue.php CHANGED
@@ -51,11 +51,11 @@ class ES_DB_Sending_Queue {
51
  }
52
 
53
  public static function get_emails_to_be_sent_by_hash( $guid, $limit ) {
54
- global $wpdb;
55
-
56
- $subscribers = $wpdb->get_results(
57
- $wpdb->prepare(
58
- "SELECT * FROM {$wpdb->prefix}ig_sending_queue WHERE status = %s AND mailing_queue_hash = %s ORDER BY id LIMIT 0, %d",
59
  array(
60
  'In Queue',
61
  $guid,
@@ -322,14 +322,19 @@ class ES_DB_Sending_Queue {
322
  'return_sql' => true, // This flag will return the required sql query
323
  'orderby' => array( 'id' ),
324
  );
325
- $schedule_base_time = current_time('mysql', true);
 
 
 
326
  if ( ! empty( $campaign ) && ! empty( $campaign['meta'] ) ) {
327
  $campaign_meta = maybe_unserialize( $campaign['meta'] );
328
  if ( ! empty( $campaign_meta['list_conditions'] ) ) {
329
  $args['conditions'] = $campaign_meta['list_conditions'];
330
  }
331
- if ( isset( $campaign_meta['scheduling_option'] ) && isset( $campaign_meta['date'] ) && 'schedule_later' == $campaign_meta['scheduling_option'] ) {
332
- $schedule_base_time = $campaign_meta['date'];
 
 
333
  }
334
  }
335
  $query = new IG_ES_Subscribers_Query();
@@ -346,6 +351,21 @@ class ES_DB_Sending_Queue {
346
  $queue_opened_at,
347
  );
348
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  $total_contacts_added = $wpbd->query(
350
  $wpbd->prepare(
351
  "INSERT INTO `{$wpbd->prefix}ig_sending_queue`
@@ -360,7 +380,8 @@ class ES_DB_Sending_Queue {
360
  `links`,
361
  `opened`,
362
  `sent_at`,
363
- `opened_at`
 
364
  )
365
  SELECT
366
  %d AS `mailing_queue_id`,
@@ -373,7 +394,8 @@ class ES_DB_Sending_Queue {
373
  %s AS `links`,
374
  %d AS `opened`,
375
  %s AS `sent_at`,
376
- %s AS `opened_at`
 
377
  FROM `{$wpbd->prefix}ig_contacts` AS `ig_contacts`
378
  WHERE id IN ( " . $sql_query . ')
379
  GROUP BY `ig_contacts`.`email`',
51
  }
52
 
53
  public static function get_emails_to_be_sent_by_hash( $guid, $limit ) {
54
+ global $wpbd;
55
+ $where = apply_filters( 'ig_es_get_emails_to_be_sent_by_hash_condition', 'AND 1=1' );
56
+ $subscribers = $wpbd->get_results(
57
+ $wpbd->prepare(
58
+ "SELECT * FROM {$wpbd->prefix}ig_sending_queue WHERE status = %s AND mailing_queue_hash = %s $where ORDER BY id LIMIT 0, %d",
59
  array(
60
  'In Queue',
61
  $guid,
322
  'return_sql' => true, // This flag will return the required sql query
323
  'orderby' => array( 'id' ),
324
  );
325
+ $schedule_base_time = current_time( 'mysql' );
326
+ $scheduled_utc_time = current_time( 'mysql', true );
327
+ $current_utc_time = current_time( 'mysql', true );
328
+ $send_immediately = true;
329
  if ( ! empty( $campaign ) && ! empty( $campaign['meta'] ) ) {
330
  $campaign_meta = maybe_unserialize( $campaign['meta'] );
331
  if ( ! empty( $campaign_meta['list_conditions'] ) ) {
332
  $args['conditions'] = $campaign_meta['list_conditions'];
333
  }
334
+ if ( isset( $campaign_meta['scheduling_option'] ) && isset( $campaign_meta['date'] ) && isset( $campaign_meta['es_schedule_date'] ) && isset( $campaign_meta['es_schedule_time'] ) && 'schedule_later' == $campaign_meta['scheduling_option'] ) {
335
+ $schedule_base_time = gmdate( 'Y-m-d G:i:s', strtotime( "{$campaign_meta['es_schedule_date']} {$campaign_meta['es_schedule_time']}" ) );
336
+ $scheduled_utc_time = $campaign_meta['date'];
337
+ $send_immediately = false;
338
  }
339
  }
340
  $query = new IG_ES_Subscribers_Query();
351
  $queue_opened_at,
352
  );
353
 
354
+ if ($send_immediately) {
355
+ $send_at_query = $wpbd->prepare('%s AS `send_at`', array($current_utc_time));
356
+ } else {
357
+ $send_at_query = $wpbd->prepare("
358
+ CASE
359
+ WHEN `timezone` IS null THEN %s
360
+ ELSE
361
+ CASE
362
+ WHEN CONVERT_TZ(%s,`timezone`,'+0:00') < %s THEN DATE_ADD(CONVERT_TZ(%s,`timezone`,'+0:00'), INTERVAL 86400 SECOND)
363
+ ELSE CONVERT_TZ(%s,`timezone`,'+0:00')
364
+ END
365
+ END AS `send_at`
366
+ ", array($scheduled_utc_time,$schedule_base_time,$current_utc_time,$schedule_base_time,$schedule_base_time));
367
+ }
368
+
369
  $total_contacts_added = $wpbd->query(
370
  $wpbd->prepare(
371
  "INSERT INTO `{$wpbd->prefix}ig_sending_queue`
380
  `links`,
381
  `opened`,
382
  `sent_at`,
383
+ `opened_at`,
384
+ `send_at`
385
  )
386
  SELECT
387
  %d AS `mailing_queue_id`,
394
  %s AS `links`,
395
  %d AS `opened`,
396
  %s AS `sent_at`,
397
+ %s AS `opened_at`,
398
+ {$send_at_query}
399
  FROM `{$wpbd->prefix}ig_contacts` AS `ig_contacts`
400
  WHERE id IN ( " . $sql_query . ')
401
  GROUP BY `ig_contacts`.`email`',
lite/includes/upgrade/es-update-functions.php CHANGED
@@ -1677,3 +1677,58 @@ function ig_es_update_501_db_version() {
1677
  }
1678
 
1679
  /* --------------------- ES 5.0.1(End)--------------------------- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1677
  }
1678
 
1679
  /* --------------------- ES 5.0.1(End)--------------------------- */
1680
+
1681
+ /* --------------------- ES 5.0.3(Start)--------------------------- */
1682
+
1683
+ /**
1684
+ * Add send_at column in sending queue table
1685
+ *
1686
+ * @since 5.0.3
1687
+ */
1688
+ function ig_es_update_503_alter_sending_queue_table() {
1689
+ global $wpdb;
1690
+
1691
+ $cols = $wpdb->get_col( "SHOW COLUMNS FROM {$wpdb->prefix}ig_sending_queue" );
1692
+
1693
+ if ( ! in_array( 'send_at', $cols, true ) ) {
1694
+ $wpdb->query(
1695
+ "ALTER TABLE {$wpdb->prefix}ig_sending_queue ADD COLUMN `send_at` DATETIME NULL DEFAULT NULL AFTER `opened`"
1696
+ );
1697
+ }
1698
+ }
1699
+
1700
+ /**
1701
+ * Add timezone column in contacts table
1702
+ *
1703
+ * @since 5.0.3
1704
+ */
1705
+ function ig_es_update_503_alter_contacts_table() {
1706
+ global $wpdb;
1707
+
1708
+ $cols = $wpdb->get_col( "SHOW COLUMNS FROM {$wpdb->prefix}ig_contacts" );
1709
+
1710
+ if ( ! in_array( 'timezone', $cols, true ) ) {
1711
+ $wpdb->query(
1712
+ "ALTER TABLE {$wpdb->prefix}ig_contacts ADD COLUMN `timezone` VARCHAR(255) NULL DEFAULT NULL AFTER `bounce_status`"
1713
+ );
1714
+ }
1715
+ }
1716
+
1717
+ /**
1718
+ * Add timezone based on the contacts ip_address
1719
+ *
1720
+ * @since 5.0.3
1721
+ */
1722
+ function ig_es_add_timezone_to_contacts_table() {
1723
+ IG_ES_Background_Process_Helper::add_action_scheduler_task( 'ig_es_add_country_code_to_audience' );
1724
+ }
1725
+
1726
+ /**
1727
+ * Update DB version
1728
+ *
1729
+ * @since 5.0.3
1730
+ */
1731
+ function ig_es_update_503_db_version() {
1732
+ ES_Install::update_db_version( '5.0.3' );
1733
+ }
1734
+ /* --------------------- ES 5.0.3(End)--------------------------- */
lite/includes/workflows/actions/class-es-action-add-to-list.php CHANGED
@@ -11,6 +11,7 @@ if ( ! defined( 'ABSPATH' ) ) {
11
  exit;
12
  }
13
 
 
14
  /**
15
  * Class to add contact to the selected list
16
  *
@@ -18,164 +19,166 @@ if ( ! defined( 'ABSPATH' ) ) {
18
  *
19
  * @since 4.4.1
20
  */
21
- class ES_Action_Add_To_List extends ES_Workflow_Action {
22
-
23
- /**
24
- * Load action admin details.
25
- *
26
- * @since 4.4.1
27
- */
28
- public function load_admin_details() {
29
- $this->title = __( 'Add to list', 'email-subscribers' );
30
- $this->group = __( 'List', 'email-subscribers' );
31
- }
32
 
33
- /**
34
- * Load action fields
35
- *
36
- * @since 4.4.1
37
- */
38
- public function load_fields() {
39
-
40
- $lists = ES()->lists_db->get_list_id_name_map();
41
-
42
- $list_field = new ES_Select();
43
- $list_field->set_name( 'ig-es-list' );
44
- $list_field->set_title( __( 'Select List', 'email-subscribers' ) );
45
- $list_field->set_options( $lists );
46
- $list_field->set_required();
47
- $this->add_field( $list_field );
48
- }
49
 
50
- /**
51
- * Called when an action should be run
52
- *
53
- * @since 4.4.1
54
- */
55
- public function run() {
56
 
57
- $list_id = $this->get_option( 'ig-es-list' );
58
 
59
- if ( ! $list_id ) {
60
- return;
61
- }
62
 
63
- $raw_data = $this->workflow->data_layer()->get_raw_data();
64
- if ( ! empty( $raw_data ) ) {
65
- foreach ( $raw_data as $data_type_id => $data_item ) {
66
- $data_type = ES_Workflow_Data_Types::get( $data_type_id );
67
- if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
68
- continue;
69
- }
70
- $data = array();
71
- if ( is_callable( array( $data_type, 'get_data' ) ) ) {
72
- $data = $data_type->get_data( $data_item );
73
- }
74
- if ( ! empty( $data['email'] ) ) {
75
- $this->add_contact( $list_id, $data );
 
76
  }
77
  }
78
- }
79
-
80
- }
81
 
82
- /**
83
- * Add contact data to given list
84
- *
85
- * @param int $list_id List id to add the contact's data.
86
- * @param array $data Contact's data.
87
- */
88
- public function add_contact( $list_id = 0, $data = array() ) {
89
-
90
- // Don't know where to add contact? please find it first.
91
- if ( empty( $list_id ) ) {
92
- return;
93
  }
94
 
95
- // Email not found? Say good bye.
96
- if ( empty( $data['email'] ) || ! filter_var( $data['email'], FILTER_VALIDATE_EMAIL ) ) {
97
- return;
98
- }
 
 
 
 
 
 
 
 
99
 
100
- // Source not set? Say bye.
101
- if ( empty( $data['source'] ) ) {
102
- return;
103
- }
104
 
105
- $email = trim( $data['email'] );
106
- $source = trim( $data['source'] );
107
- $status = ! empty( $data['status'] ) ? trim( $data['status'] ) : 'verified';
108
- $wp_user_id = ! empty( $data['wp_user_id'] ) ? trim( $data['wp_user_id'] ) : 0;
109
-
110
- // If first name is set, get the first name and last name from $data.
111
- // Else prepare the first name and last name from $data['name'] field or $data['email'] field.
112
- if ( ! empty( $data['first_name'] ) ) {
113
- $first_name = $data['first_name'];
114
- $last_name = ! empty( $data['last_name'] ) ? $data['last_name'] : '';
115
- } else {
116
- $name = ! empty( $data['name'] ) ? trim( $data['name'] ) : '';
117
-
118
- $first_name = '';
119
- $last_name = '';
120
- if ( ! empty( $name ) ) {
121
- $name_parts = ES_Common::prepare_first_name_last_name( $name );
122
- $first_name = $name_parts['first_name'];
123
- $last_name = $name_parts['last_name'];
124
  }
125
- }
126
 
127
- $guid = ES_Common::generate_guid();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
- $contact_data = array(
130
- 'first_name' => $first_name,
131
- 'last_name' => $last_name,
132
- 'email' => $email,
133
- 'source' => $source,
134
- 'status' => $status,
135
- 'hash' => $guid,
136
- 'created_at' => ig_get_current_date_time(),
137
- 'wp_user_id' => $wp_user_id,
138
- );
139
 
140
- do_action( 'ig_es_add_contact', $contact_data, $list_id );
141
- }
 
 
 
 
 
 
 
 
142
 
143
- /**
144
- * Create contact list from product
145
- *
146
- * @param WC_Product $product Product object.
147
- *
148
- * @return int $list_id List ID.
149
- *
150
- * @since 4.4.3
151
- */
152
- public function create_list_from_product( $product ) {
153
 
154
- $list_id = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
 
156
- if ( ! ( $product instanceof WC_Product ) ) {
157
- return $list_id;
158
- }
159
 
160
- $product_name = $product->get_name();
161
- $product_sku = $product->get_sku();
162
 
163
- $list_name = $product_name;
 
 
 
 
164
 
165
- if ( empty( $product_sku ) ) {
166
- $list_slug = $product_name;
167
- } else {
168
- $list_slug = $product_sku;
169
- }
 
170
 
171
- $list = ES()->lists_db->get_list_by_slug( $list_slug );
172
- if ( ! empty( $list ) ) {
173
- $list_id = $list['id'];
174
- } else {
175
- $list_id = ES()->lists_db->add_list( $list_name, $list_slug );
176
  }
177
 
178
- return $list_id;
179
  }
180
 
181
  }
11
  exit;
12
  }
13
 
14
+ if ( ! class_exists( 'ES_Action_Add_To_List' ) ) {
15
  /**
16
  * Class to add contact to the selected list
17
  *
19
  *
20
  * @since 4.4.1
21
  */
22
+ class ES_Action_Add_To_List extends ES_Workflow_Action {
23
+
24
+ /**
25
+ * Load action admin details.
26
+ *
27
+ * @since 4.4.1
28
+ */
29
+ public function load_admin_details() {
30
+ $this->title = __( 'Add to list', 'email-subscribers' );
31
+ $this->group = __( 'List', 'email-subscribers' );
32
+ }
33
 
34
+ /**
35
+ * Load action fields
36
+ *
37
+ * @since 4.4.1
38
+ */
39
+ public function load_fields() {
40
+
41
+ $lists = ES()->lists_db->get_list_id_name_map();
42
+
43
+ $list_field = new ES_Select();
44
+ $list_field->set_name( 'ig-es-list' );
45
+ $list_field->set_title( __( 'Select List', 'email-subscribers' ) );
46
+ $list_field->set_options( $lists );
47
+ $list_field->set_required();
48
+ $this->add_field( $list_field );
49
+ }
50
 
51
+ /**
52
+ * Called when an action should be run
53
+ *
54
+ * @since 4.4.1
55
+ */
56
+ public function run() {
57
 
58
+ $list_id = $this->get_option( 'ig-es-list' );
59
 
60
+ if ( ! $list_id ) {
61
+ return;
62
+ }
63
 
64
+ $raw_data = $this->workflow->data_layer()->get_raw_data();
65
+ if ( ! empty( $raw_data ) ) {
66
+ foreach ( $raw_data as $data_type_id => $data_item ) {
67
+ $data_type = ES_Workflow_Data_Types::get( $data_type_id );
68
+ if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
69
+ continue;
70
+ }
71
+ $data = array();
72
+ if ( is_callable( array( $data_type, 'get_data' ) ) ) {
73
+ $data = $data_type->get_data( $data_item );
74
+ }
75
+ if ( ! empty( $data['email'] ) ) {
76
+ $this->add_contact( $list_id, $data );
77
+ }
78
  }
79
  }
 
 
 
80
 
 
 
 
 
 
 
 
 
 
 
 
81
  }
82
 
83
+ /**
84
+ * Add contact data to given list
85
+ *
86
+ * @param int $list_id List id to add the contact's data.
87
+ * @param array $data Contact's data.
88
+ */
89
+ public function add_contact( $list_id = 0, $data = array() ) {
90
+
91
+ // Don't know where to add contact? please find it first.
92
+ if ( empty( $list_id ) ) {
93
+ return;
94
+ }
95
 
96
+ // Email not found? Say good bye.
97
+ if ( empty( $data['email'] ) || ! filter_var( $data['email'], FILTER_VALIDATE_EMAIL ) ) {
98
+ return;
99
+ }
100
 
101
+ // Source not set? Say bye.
102
+ if ( empty( $data['source'] ) ) {
103
+ return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  }
 
105
 
106
+ $email = trim( $data['email'] );
107
+ $source = trim( $data['source'] );
108
+ $status = ! empty( $data['status'] ) ? trim( $data['status'] ) : 'verified';
109
+ $wp_user_id = ! empty( $data['wp_user_id'] ) ? trim( $data['wp_user_id'] ) : 0;
110
+
111
+ // If first name is set, get the first name and last name from $data.
112
+ // Else prepare the first name and last name from $data['name'] field or $data['email'] field.
113
+ if ( ! empty( $data['first_name'] ) ) {
114
+ $first_name = $data['first_name'];
115
+ $last_name = ! empty( $data['last_name'] ) ? $data['last_name'] : '';
116
+ } else {
117
+ $name = ! empty( $data['name'] ) ? trim( $data['name'] ) : '';
118
+
119
+ $first_name = '';
120
+ $last_name = '';
121
+ if ( ! empty( $name ) ) {
122
+ $name_parts = ES_Common::prepare_first_name_last_name( $name );
123
+ $first_name = $name_parts['first_name'];
124
+ $last_name = $name_parts['last_name'];
125
+ }
126
+ }
127
 
128
+ $guid = ES_Common::generate_guid();
 
 
 
 
 
 
 
 
 
129
 
130
+ $contact_data = array(
131
+ 'first_name' => $first_name,
132
+ 'last_name' => $last_name,
133
+ 'email' => $email,
134
+ 'source' => $source,
135
+ 'status' => $status,
136
+ 'hash' => $guid,
137
+ 'created_at' => ig_get_current_date_time(),
138
+ 'wp_user_id' => $wp_user_id,
139
+ );
140
 
141
+ do_action( 'ig_es_add_contact', $contact_data, $list_id );
142
+ }
 
 
 
 
 
 
 
 
143
 
144
+ /**
145
+ * Create contact list from product
146
+ *
147
+ * @param WC_Product $product Product object.
148
+ *
149
+ * @return int $list_id List ID.
150
+ *
151
+ * @since 4.4.3
152
+ */
153
+ public function create_list_from_product( $product ) {
154
+
155
+ $list_id = 0;
156
+
157
+ if ( ! ( $product instanceof WC_Product ) ) {
158
+ return $list_id;
159
+ }
160
 
161
+ $product_name = $product->get_name();
162
+ $product_sku = $product->get_sku();
 
163
 
164
+ $list_name = $product_name;
 
165
 
166
+ if ( empty( $product_sku ) ) {
167
+ $list_slug = $product_name;
168
+ } else {
169
+ $list_slug = $product_sku;
170
+ }
171
 
172
+ $list = ES()->lists_db->get_list_by_slug( $list_slug );
173
+ if ( ! empty( $list ) ) {
174
+ $list_id = $list['id'];
175
+ } else {
176
+ $list_id = ES()->lists_db->add_list( $list_name, $list_slug );
177
+ }
178
 
179
+ return $list_id;
 
 
 
 
180
  }
181
 
 
182
  }
183
 
184
  }
lite/includes/workflows/actions/class-es-action-delete-contact.php CHANGED
@@ -11,6 +11,7 @@ if ( ! defined( 'ABSPATH' ) ) {
11
  exit;
12
  }
13
 
 
14
  /**
15
  * Class to add contact to the selected list
16
  *
@@ -18,52 +19,53 @@ if ( ! defined( 'ABSPATH' ) ) {
18
  *
19
  * @since 4.4.1
20
  */
21
- class ES_Action_Delete_Contact extends ES_Workflow_Action {
22
 
23
- /**
24
- * Load action admin details.
25
- *
26
- * @since 4.4.1
27
- */
28
- public function load_admin_details() {
29
- $this->title = __( 'Delete Contact', 'email-subscribers' );
30
- $this->group = __( 'Contact', 'email-subscribers' );
31
- }
32
 
33
- /**
34
- * Called when an action should be run
35
- *
36
- * @since 4.4.1
37
- */
38
- public function run() {
39
 
40
- global $wpdb;
41
 
42
- $raw_data = $this->workflow->data_layer()->get_raw_data();
43
- if ( ! empty( $raw_data ) ) {
44
- foreach ( $raw_data as $data_type_id => $data_item ) {
45
- $data_type = ES_Workflow_Data_Types::get( $data_type_id );
46
- if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
47
- continue;
48
- }
49
 
50
- $data = array();
51
- if ( is_callable( array( $data_type, 'get_data' ) ) ) {
52
- $data = $data_type->get_data( $data_item );
53
- }
54
 
55
- $email = ! empty( $data['email'] ) ? $data['email'] : '';
56
 
57
- if ( ! empty( $email ) ) {
58
- $where = $wpdb->prepare( 'email = %s', $email );
59
- $contact_id = ES()->contacts_db->get_column_by_condition( 'id', $where );
60
 
61
- if ( $contact_id ) {
62
- ES()->contacts_db->delete_contacts_by_ids( $contact_id );
 
63
  }
64
  }
65
  }
66
  }
67
- }
68
 
 
69
  }
11
  exit;
12
  }
13
 
14
+ if ( ! class_exists( 'ES_Action_Delete_Contact' ) ) {
15
  /**
16
  * Class to add contact to the selected list
17
  *
19
  *
20
  * @since 4.4.1
21
  */
22
+ class ES_Action_Delete_Contact extends ES_Workflow_Action {
23
 
24
+ /**
25
+ * Load action admin details.
26
+ *
27
+ * @since 4.4.1
28
+ */
29
+ public function load_admin_details() {
30
+ $this->title = __( 'Delete Contact', 'email-subscribers' );
31
+ $this->group = __( 'Contact', 'email-subscribers' );
32
+ }
33
 
34
+ /**
35
+ * Called when an action should be run
36
+ *
37
+ * @since 4.4.1
38
+ */
39
+ public function run() {
40
 
41
+ global $wpdb;
42
 
43
+ $raw_data = $this->workflow->data_layer()->get_raw_data();
44
+ if ( ! empty( $raw_data ) ) {
45
+ foreach ( $raw_data as $data_type_id => $data_item ) {
46
+ $data_type = ES_Workflow_Data_Types::get( $data_type_id );
47
+ if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
48
+ continue;
49
+ }
50
 
51
+ $data = array();
52
+ if ( is_callable( array( $data_type, 'get_data' ) ) ) {
53
+ $data = $data_type->get_data( $data_item );
54
+ }
55
 
56
+ $email = ! empty( $data['email'] ) ? $data['email'] : '';
57
 
58
+ if ( ! empty( $email ) ) {
59
+ $where = $wpdb->prepare( 'email = %s', $email );
60
+ $contact_id = ES()->contacts_db->get_column_by_condition( 'id', $where );
61
 
62
+ if ( $contact_id ) {
63
+ ES()->contacts_db->delete_contacts_by_ids( $contact_id );
64
+ }
65
  }
66
  }
67
  }
68
  }
 
69
 
70
+ }
71
  }
lite/includes/workflows/actions/class-es-action-send-email.php CHANGED
@@ -18,106 +18,128 @@ if ( ! defined( 'ABSPATH' ) ) {
18
  *
19
  * @since 4.5.3
20
  */
21
- class ES_Action_Send_Email extends ES_Action_Send_Email_Abstract {
22
 
23
- /**
24
- * Load action admin details.
25
- *
26
- * @since 4.5.3
27
- */
28
- public function load_admin_details() {
29
- $this->group = __( 'Email', 'email-subscribers' );
30
- $this->title = __( 'Send Email', 'email-subscribers' );
31
- }
32
-
33
- /**
34
- * Load action fields
35
- *
36
- * @since 4.5.3
37
- */
38
- public function load_fields() {
39
- parent::load_fields();
40
-
41
- $email_content = new ES_WP_Editor();
42
- $email_content->set_name( 'ig-es-email-content' );
43
- $email_content->set_title( __( 'Email Content', 'email-subscribers' ) );
44
- $email_content->set_required();
45
-
46
- $this->add_field( $email_content );
47
- }
48
-
49
- /**
50
- * Called when an action should be run
51
- *
52
- * @since 4.5.3
53
- */
54
- public function run() {
55
-
56
- $recipients = $this->get_option( 'ig-es-send-to', true );
57
- $email_content = $this->get_option( 'ig-es-email-content', true, true );
58
- $subject = $this->get_option( 'ig-es-email-subject', true );
59
-
60
- $recipients = explode(',', $recipients );
61
- $recipients = array_map( 'trim', $recipients );
62
-
63
- // Check if we have all required data to send the email.
64
- if ( empty( $recipients ) || empty( $email_content ) || empty( $subject ) ) {
65
- return;
66
  }
67
-
68
- // Replace line breaks with paragraphs in email body.
69
- $email_content = wpautop( $email_content );
70
-
71
- $raw_data = $this->workflow->data_layer()->get_raw_data();
72
- $trigger_name = $this->workflow->get_trigger_name();
73
- if ( ! empty( $raw_data ) ) {
74
- foreach ( $raw_data as $data_type_id => $data_item ) {
75
- $data_type = ES_Workflow_Data_Types::get( $data_type_id );
76
- if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
77
- continue;
78
- }
79
-
80
- $data = array();
81
- if ( method_exists( $data_type, 'get_data' ) ) {
82
- $data = $data_type->get_data( $data_item );
83
-
84
- if ( ! empty( $data['email'] ) ) {
85
- foreach ( $recipients as $index => $recipient_email ) {
86
- // Replace placeholder tags with the got data from the triggerred event.
87
- $recipients[$index] = str_replace( '{{EMAIL}}', $data['email'], $recipient_email );
88
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
- if ( 'ig_es_user_subscribed' === $trigger_name ) {
91
- $email_content = str_replace( '{{EMAIL}}', $data['email'], $email_content );
92
- $email_content = str_replace( '{{NAME}}', $data['name'], $email_content );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  }
94
  }
95
-
96
- if ( 'campaign' === $data_type_id && ! empty( $data['notification_guid'] ) ) {
97
- $notification = ES_DB_Mailing_Queue::get_notification_by_hash( $data['notification_guid'] );
98
- $subject = str_replace( '{{SUBJECT}}', $notification['subject'], $subject );
99
- $email_count = $notification['count'];
100
- $campaign_subject = $notification['subject'];
101
- $cron_date = gmdate( 'Y-m-d H:i:s' );
102
- $cron_local_date = get_date_from_gmt( $cron_date ); // Convert from GMT to local date/time based on WordPress time zone setting.
103
- $cron_date = ES_Common::convert_date_to_wp_date( $cron_local_date ); // Get formatted date from WordPress date/time settings.
104
-
105
- $email_content = str_replace( '{{DATE}}', $cron_date, $email_content );
106
- $email_content = str_replace( '{{COUNT}}', $email_count, $email_content );
107
- $email_content = str_replace( '{{SUBJECT}}', $campaign_subject, $email_content );
108
- }
109
  }
 
 
110
 
 
111
  }
112
-
113
-
114
-
115
- $es_mailer = ES()->mailer;
116
-
117
- $es_mailer->add_unsubscribe_link = false;
118
- $es_mailer->add_tracking_pixel = false;
119
-
120
- $es_mailer->send( $subject, $email_content, $recipients, $data );
121
- }
122
- }
123
- }
18
  *
19
  * @since 4.5.3
20
  */
 
21
 
22
+ if ( ! class_exists( 'ES_Action_Send_Email' ) ) {
23
+ class ES_Action_Send_Email extends ES_Action_Send_Email_Abstract {
24
+
25
+ /**
26
+ * Load action admin details.
27
+ *
28
+ * @since 4.5.3
29
+ */
30
+ public function load_admin_details() {
31
+ $this->group = __( 'Email', 'email-subscribers' );
32
+ $this->title = __( 'Send Email', 'email-subscribers' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  }
34
+
35
+ /**
36
+ * Load action fields
37
+ *
38
+ * @since 4.5.3
39
+ */
40
+ public function load_fields() {
41
+ parent::load_fields();
42
+
43
+ $email_content = new ES_WP_Editor();
44
+ $email_content->set_name( 'ig-es-email-content' );
45
+ $email_content->set_title( __( 'Email Content', 'email-subscribers' ) );
46
+ $email_content->set_required();
47
+
48
+ $this->add_field( $email_content );
49
+
50
+ $tracking_field = new ES_Checkbox();
51
+ $tracking_field->set_name( 'ig-es-email-tracking-enabled' );
52
+ $tracking_field->set_title( __( 'Track opens and clicks', 'email-subscribers' ) );
53
+ $tracking_field->add_classes( 'form-checkbox text-indigo-600' );
54
+ $tracking_field->default_to_checked = false;
55
+ $this->add_field( $tracking_field );
56
+
57
+ $tracking_campaign_id = new ES_Hidden_Field();
58
+ $tracking_campaign_id->set_name( 'ig-es-tracking-campaign-id' );
59
+ $this->add_field( $tracking_campaign_id );
60
+ }
61
+
62
+ /**
63
+ * Called when an action should be run
64
+ *
65
+ * @since 4.5.3
66
+ */
67
+ public function run() {
68
+
69
+ $recipients = $this->get_option( 'ig-es-send-to', true );
70
+ $email_content = $this->get_option( 'ig-es-email-content', true, true );
71
+ $subject = $this->get_option( 'ig-es-email-subject', true );
72
+ $tracking_enabled = $this->get_option( 'ig-es-email-tracking-enabled', false );
73
+ $tracking_campaign_id = $this->get_option( 'ig-es-tracking-campaign-id', false );
74
+
75
+ $recipients = explode(',', $recipients );
76
+ $recipients = array_map( 'trim', $recipients );
77
+
78
+ // Check if we have all required data to send the email.
79
+ if ( empty( $recipients ) || empty( $email_content ) || empty( $subject ) ) {
80
+ return;
81
+ }
82
+
83
+ // Replace line breaks with paragraphs in email body.
84
+ $email_content = wpautop( $email_content );
85
+
86
+ $raw_data = $this->workflow->data_layer()->get_raw_data();
87
+ $trigger_name = $this->workflow->get_trigger_name();
88
+ if ( ! empty( $raw_data ) ) {
89
+ foreach ( $raw_data as $data_type_id => $data_item ) {
90
+ $data_type = ES_Workflow_Data_Types::get( $data_type_id );
91
+ if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
92
+ continue;
93
+ }
94
+
95
+ $data = array();
96
+ if ( method_exists( $data_type, 'get_data' ) ) {
97
+ $data = $data_type->get_data( $data_item );
98
 
99
+ if ( ! empty( $data['email'] ) ) {
100
+ foreach ( $recipients as $index => $recipient_email ) {
101
+ // Replace placeholder tags with the got data from the triggerred event.
102
+ $recipients[$index] = str_replace( '{{EMAIL}}', $data['email'], $recipient_email );
103
+ }
104
+
105
+ if ( 'ig_es_user_subscribed' === $trigger_name ) {
106
+ $email_content = str_replace( '{{EMAIL}}', $data['email'], $email_content );
107
+ $email_content = str_replace( '{{NAME}}', $data['name'], $email_content );
108
+ }
109
+ }
110
+
111
+ if ( 'campaign' === $data_type_id && ! empty( $data['notification_guid'] ) ) {
112
+ $notification = ES_DB_Mailing_Queue::get_notification_by_hash( $data['notification_guid'] );
113
+ $subject = str_replace( '{{SUBJECT}}', $notification['subject'], $subject );
114
+ $email_count = $notification['count'];
115
+ $campaign_subject = $notification['subject'];
116
+ $cron_date = gmdate( 'Y-m-d H:i:s' );
117
+ $cron_local_date = get_date_from_gmt( $cron_date ); // Convert from GMT to local date/time based on WordPress time zone setting.
118
+ $cron_date = ES_Common::convert_date_to_wp_date( $cron_local_date ); // Get formatted date from WordPress date/time settings.
119
+
120
+ $email_content = str_replace( '{{DATE}}', $cron_date, $email_content );
121
+ $email_content = str_replace( '{{COUNT}}', $email_count, $email_content );
122
+ $email_content = str_replace( '{{SUBJECT}}', $campaign_subject, $email_content );
123
  }
124
  }
125
+
126
+ }
127
+
128
+
129
+
130
+ $es_mailer = ES()->mailer;
131
+
132
+ if ( $tracking_enabled ) {
133
+ $data['campaign_id'] = $tracking_campaign_id;
134
+ $es_mailer->add_tracking_pixel = true;
135
+ } else {
136
+ $es_mailer->add_tracking_pixel = false;
 
 
137
  }
138
+
139
+ $es_mailer->add_unsubscribe_link = false;
140
 
141
+ $es_mailer->send( $subject, $email_content, $recipients, $data );
142
  }
143
+ }
144
+ }
145
+ }
 
 
 
 
 
 
 
 
 
lite/includes/workflows/actions/class-es-action-update-contact.php CHANGED
@@ -11,105 +11,107 @@ if ( ! defined( 'ABSPATH' ) ) {
11
  exit;
12
  }
13
 
14
- /**
15
- * Class to add contact to the selected list
16
- *
17
- * @class ES_Action_Update_Contact
18
- *
19
- * @since 4.4.1
20
- */
21
- class ES_Action_Update_Contact extends ES_Workflow_Action {
22
-
23
  /**
24
- * Load action admin details.
25
  *
26
- * @since 4.4.1
27
- */
28
- public function load_admin_details() {
29
- $this->title = __( 'Update Contact', 'email-subscribers' );
30
- $this->group = __( 'Contact', 'email-subscribers' );
31
- }
32
-
33
- /**
34
- * Called when an action should be run
35
  *
36
  * @since 4.4.1
37
  */
38
- public function run() {
39
-
40
- $raw_data = $this->workflow->data_layer()->get_raw_data();
41
- if ( ! empty( $raw_data ) ) {
42
- foreach ( $raw_data as $data_type_id => $data_item ) {
43
- $data_type = ES_Workflow_Data_Types::get( $data_type_id );
44
- if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
45
- continue;
46
- }
 
 
47
 
48
- $data = array();
49
- if ( is_callable( array( $data_type, 'get_data' ) ) ) {
50
- $data = $data_type->get_data( $data_item );
51
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
- $user_id = ! empty( $data['wp_user_id'] ) ? $data['wp_user_id'] : 0;
54
 
55
- if ( ! empty( $user_id ) ) {
56
 
57
- $user = get_user_by( 'ID', $user_id );
58
 
59
- if ( $user instanceof WP_User ) {
60
- // Check if user exist with this email.
61
- $es_contact_id = ES()->contacts_db->get_contact_id_by_wp_user_id( $user_id );
62
- if ( ! $es_contact_id ) {
63
- $es_contact_id = ES()->contacts_db->get_contact_id_by_email( $user->user_email );
64
- }
65
 
66
- if ( ! empty( $es_contact_id ) ) {
67
 
68
- $first_name = get_user_meta( $user_id, 'first_name', true );
69
- $last_name = get_user_meta( $user_id, 'last_name', true );
70
 
71
- if ( empty( $first_name ) && empty( $last_name ) ) {
72
- $first_name = $user->display_name;
 
 
 
 
 
 
 
 
 
 
73
  }
 
 
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  $contact = array(
76
- 'email' => $user->user_email,
77
  'first_name' => $first_name,
78
  'last_name' => $last_name,
79
- 'wp_user_id' => $user->ID,
80
  );
81
 
82
  ES()->contacts_db->update_contact( $es_contact_id, $contact );
83
  }
84
  }
85
- } else {
86
-
87
- $email = ! empty( $data['email'] ) ? $data['email'] : '';
88
- $es_contact_id = ES()->contacts_db->get_contact_id_by_email( $email );
89
- if ( ! empty( $es_contact_id ) ) {
90
- $first_name = ! empty( $data['first_name'] ) ? $data['first_name'] : '';
91
- $last_name = ! empty( $data['last_name'] ) ? $data['last_name'] : '';
92
-
93
- // Check if we are getting the name field.
94
- if ( empty( $first_name ) && empty( $last_name ) && ! empty( $data['name'] ) ) {
95
- $name = explode( ' ', $data['name'] );
96
- $first_name = $name[0];
97
- if ( isset( $name[1] ) ) {
98
- $last_name = $name[1];
99
- }
100
- }
101
- $contact = array(
102
- 'email' => $email,
103
- 'first_name' => $first_name,
104
- 'last_name' => $last_name,
105
- );
106
-
107
- ES()->contacts_db->update_contact( $es_contact_id, $contact );
108
- }
109
  }
110
  }
 
111
  }
112
 
113
  }
114
-
115
  }
11
  exit;
12
  }
13
 
14
+ if ( ! class_exists( 'ES_Action_Update_Contact' ) ) {
 
 
 
 
 
 
 
 
15
  /**
16
+ * Class to add contact to the selected list
17
  *
18
+ * @class ES_Action_Update_Contact
 
 
 
 
 
 
 
 
19
  *
20
  * @since 4.4.1
21
  */
22
+ class ES_Action_Update_Contact extends ES_Workflow_Action {
23
+
24
+ /**
25
+ * Load action admin details.
26
+ *
27
+ * @since 4.4.1
28
+ */
29
+ public function load_admin_details() {
30
+ $this->title = __( 'Update Contact', 'email-subscribers' );
31
+ $this->group = __( 'Contact', 'email-subscribers' );
32
+ }
33
 
34
+ /**
35
+ * Called when an action should be run
36
+ *
37
+ * @since 4.4.1
38
+ */
39
+ public function run() {
40
+
41
+ $raw_data = $this->workflow->data_layer()->get_raw_data();
42
+ if ( ! empty( $raw_data ) ) {
43
+ foreach ( $raw_data as $data_type_id => $data_item ) {
44
+ $data_type = ES_Workflow_Data_Types::get( $data_type_id );
45
+ if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
46
+ continue;
47
+ }
48
+
49
+ $data = array();
50
+ if ( is_callable( array( $data_type, 'get_data' ) ) ) {
51
+ $data = $data_type->get_data( $data_item );
52
+ }
53
 
54
+ $user_id = ! empty( $data['wp_user_id'] ) ? $data['wp_user_id'] : 0;
55
 
56
+ if ( ! empty( $user_id ) ) {
57
 
58
+ $user = get_user_by( 'ID', $user_id );
59
 
60
+ if ( $user instanceof WP_User ) {
61
+ // Check if user exist with this email.
62
+ $es_contact_id = ES()->contacts_db->get_contact_id_by_wp_user_id( $user_id );
63
+ if ( ! $es_contact_id ) {
64
+ $es_contact_id = ES()->contacts_db->get_contact_id_by_email( $user->user_email );
65
+ }
66
 
67
+ if ( ! empty( $es_contact_id ) ) {
68
 
69
+ $first_name = get_user_meta( $user_id, 'first_name', true );
70
+ $last_name = get_user_meta( $user_id, 'last_name', true );
71
 
72
+ if ( empty( $first_name ) && empty( $last_name ) ) {
73
+ $first_name = $user->display_name;
74
+ }
75
+
76
+ $contact = array(
77
+ 'email' => $user->user_email,
78
+ 'first_name' => $first_name,
79
+ 'last_name' => $last_name,
80
+ 'wp_user_id' => $user->ID,
81
+ );
82
+
83
+ ES()->contacts_db->update_contact( $es_contact_id, $contact );
84
  }
85
+ }
86
+ } else {
87
 
88
+ $email = ! empty( $data['email'] ) ? $data['email'] : '';
89
+ $es_contact_id = ES()->contacts_db->get_contact_id_by_email( $email );
90
+ if ( ! empty( $es_contact_id ) ) {
91
+ $first_name = ! empty( $data['first_name'] ) ? $data['first_name'] : '';
92
+ $last_name = ! empty( $data['last_name'] ) ? $data['last_name'] : '';
93
+
94
+ // Check if we are getting the name field.
95
+ if ( empty( $first_name ) && empty( $last_name ) && ! empty( $data['name'] ) ) {
96
+ $name = explode( ' ', $data['name'] );
97
+ $first_name = $name[0];
98
+ if ( isset( $name[1] ) ) {
99
+ $last_name = $name[1];
100
+ }
101
+ }
102
  $contact = array(
103
+ 'email' => $email,
104
  'first_name' => $first_name,
105
  'last_name' => $last_name,
 
106
  );
107
 
108
  ES()->contacts_db->update_contact( $es_contact_id, $contact );
109
  }
110
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  }
112
  }
113
+
114
  }
115
 
116
  }
 
117
  }
lite/includes/workflows/admin/class-es-workflow-admin-edit.php CHANGED
@@ -527,6 +527,30 @@ class ES_Workflow_Admin_Edit {
527
 
528
  if ( $workflow_id ) {
529
  do_action( 'ig_es_workflow_updated', $workflow_id, $workflow_data );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
530
  }
531
 
532
  return $workflow_id;
@@ -561,4 +585,121 @@ class ES_Workflow_Admin_Edit {
561
  public static function extract_array_option_value( $option, $posted, $default = array() ) {
562
  return isset( $posted['workflow_options'][ $option ] ) ? ES_Clean::recursive( $posted['workflow_options'][ $option ] ) : $default;
563
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
564
  }
527
 
528
  if ( $workflow_id ) {
529
  do_action( 'ig_es_workflow_updated', $workflow_id, $workflow_data );
530
+
531
+ if ( ! empty( $actions ) ) {
532
+ foreach ( $actions as $action_index => $action ) {
533
+ $action_name = $action['action_name'];
534
+ if ( 'ig_es_send_email' === $action_name ) {
535
+ $email_tracking_enabled = isset( $action['ig-es-email-tracking-enabled'] );
536
+ $tracking_campaign_id = $action['ig-es-tracking-campaign-id'];
537
+ $parent_campaign_id = self::get_workflow_campaign_id( $workflow_id );
538
+ if ( empty( $parent_campaign_id ) ) {
539
+ $parent_campaign_id = self::create_workflow_campaign( $workflow_id, $workflow_title );
540
+ }
541
+ if ( empty( $tracking_campaign_id ) ) {
542
+ $tracking_campaign_id = self::create_tracking_campaign( $parent_campaign_id, $action );
543
+
544
+ $actions[$action_index]['ig-es-tracking-campaign-id'] = $tracking_campaign_id;
545
+ } else {
546
+ self::update_tracking_campaign( $tracking_campaign_id, $action );
547
+ }
548
+
549
+ }
550
+ }
551
+ $workflow_data['actions'] = maybe_serialize( $actions );
552
+ ES()->workflows_db->update_workflow( $workflow_id, $workflow_data );
553
+ }
554
  }
555
 
556
  return $workflow_id;
585
  public static function extract_array_option_value( $option, $posted, $default = array() ) {
586
  return isset( $posted['workflow_options'][ $option ] ) ? ES_Clean::recursive( $posted['workflow_options'][ $option ] ) : $default;
587
  }
588
+
589
+ /**
590
+ * Create tracking campaign for workflow send email action
591
+ *
592
+ * @since 4.5.3
593
+ *
594
+ * @param int $workflow_id Wordkfow ID
595
+ * @param array $action Action.
596
+ *
597
+ * @return int $tracking_campaign_id Created tracking campaign ID.
598
+ */
599
+ public static function get_workflow_campaign_id( $workflow_id ) {
600
+ $campaign_id = 0;
601
+ $parent_id = $workflow_id;
602
+ $campaigns = ES()->campaigns_db->get_campaign_by_parent_id( $parent_id );
603
+
604
+ if ( ! empty( $campaigns ) ) {
605
+ $campaign = array_shift( $campaigns );
606
+ $campaign_id = $campaign['id'];
607
+ }
608
+
609
+ return $campaign_id;
610
+ }
611
+
612
+ /**
613
+ * Create parent campaign for workflow
614
+ *
615
+ * @since 4.5.3
616
+ *
617
+ * @param string $workflow_title Wordkfow title
618
+ *
619
+ * @return int $tracking_campaign_id Created tracking campaign ID.
620
+ */
621
+ public static function create_workflow_campaign( $workflow_id, $workflow_title ) {
622
+ $campaign_name = ! empty( $workflow_title ) ? $workflow_title : '';
623
+ $campaign_slug = ! empty( $campaign_name ) ? sanitize_title( $campaign_name ) : '';
624
+ $campaign_type = 'workflow';
625
+ $campaign_status = 1;
626
+ $parent_id = $workflow_id;
627
+ $parent_type = 'workflow';
628
+
629
+ $campaing_data = array(
630
+ 'name' => $campaign_name,
631
+ 'slug' => $campaign_slug,
632
+ 'type' => $campaign_type,
633
+ 'status' => $campaign_status,
634
+ 'parent_id' => $parent_id,
635
+ 'parent_type' => $parent_type,
636
+ );
637
+
638
+ $campaign_id = ES()->campaigns_db->save_campaign( $campaing_data );
639
+
640
+ return $campaign_id;
641
+ }
642
+
643
+ /**
644
+ * Create child campaign for individual workflow send email action
645
+ *
646
+ * @since 4.5.3
647
+ *
648
+ * @param int $parent_campaign_id Parent campaign ID
649
+ * @param array $action Action.
650
+ *
651
+ * @return int $tracking_campaign_id Created tracking campaign ID.
652
+ */
653
+ public static function create_tracking_campaign( $parent_campaign_id, $action ) {
654
+ $campaign_name = ! empty( $action['ig-es-email-subject'] ) ? $action['ig-es-email-subject'] : '';
655
+ $campaign_body = ! empty( $action['ig-es-email-content'] ) ? $action['ig-es-email-content'] : '';
656
+ $campaign_slug = ! empty( $campaign_name ) ? sanitize_title( $campaign_name ) : '';
657
+ $campaign_type = 'workflow_email';
658
+ $parent_type = 'workflow';
659
+ $campaign_status = 1;
660
+ $campaign_meta = array(
661
+ 'enable_open_tracking' => ! empty( $action['ig-es-email-tracking-enabled'] ) ? 'yes' : 'no',
662
+ 'enable_link_tracking' => ! empty( $action['ig-es-email-tracking-enabled'] ) ? 'yes' : 'no',
663
+ );
664
+
665
+ $campaing_data = array(
666
+ 'name' => $campaign_name,
667
+ 'subject' => $campaign_name,
668
+ 'body' => $campaign_body,
669
+ 'slug' => $campaign_slug,
670
+ 'type' => $campaign_type,
671
+ 'status' => $campaign_status,
672
+ 'parent_id' => $parent_campaign_id,
673
+ 'parent_type' => $parent_type,
674
+ 'meta' => maybe_serialize( $campaign_meta ),
675
+ );
676
+
677
+ $campaign_id = ES()->campaigns_db->save_campaign( $campaing_data );
678
+ return $campaign_id;
679
+ }
680
+
681
+ /**
682
+ * Update child campaign for individual workflow send email action
683
+ *
684
+ * @since 4.5.3
685
+ *
686
+ * @param int $campaign_id Campaign ID
687
+ * @param array $action Action.
688
+ *
689
+ * @return boolean $updated Created tracking campaign ID.
690
+ */
691
+ public static function update_tracking_campaign( $campaign_id, $action ) {
692
+
693
+ $campaign_meta = array(
694
+ 'enable_open_tracking' => ! empty( $action['ig-es-email-tracking-enabled'] ) ? 'yes' : 'no',
695
+ 'enable_link_tracking' => ! empty( $action['ig-es-email-tracking-enabled'] ) ? 'yes' : 'no',
696
+ );
697
+
698
+ $campaing_data = array(
699
+ 'meta' => maybe_serialize( $campaign_meta ),
700
+ );
701
+
702
+ $updated = ES()->campaigns_db->update( $campaign_id, $campaing_data );
703
+ return $updated;
704
+ }
705
  }
lite/includes/workflows/class-es-workflow.php CHANGED
@@ -1125,4 +1125,27 @@ class ES_Workflow {
1125
  }
1126
  return '';
1127
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1128
  }
1125
  }
1126
  return '';
1127
  }
1128
+
1129
+ /**
1130
+ * Get campaign id used
1131
+ *
1132
+ * @since 4.7.6
1133
+ *
1134
+ * @return string $edit_url Workflow edit URL
1135
+ */
1136
+ public function get_campaign_id() {
1137
+
1138
+ $id = $this->get_id();
1139
+ $edit_url = admin_url( 'admin.php?page=es_workflows' );
1140
+
1141
+ $edit_url = add_query_arg(
1142
+ array(
1143
+ 'id' => $id,
1144
+ 'action' => 'edit',
1145
+ ),
1146
+ $edit_url
1147
+ );
1148
+
1149
+ return $edit_url;
1150
+ }
1151
  }
lite/includes/workflows/fields/class-es-hidden-field.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Email Subscribers' text field
4
+ *
5
+ * @since 5.0.2
6
+ * @version 1.0
7
+ * @package Email Subscribers
8
+ */
9
+
10
+ if ( ! defined( 'ABSPATH' ) ) {
11
+ exit;
12
+ }
13
+
14
+ /**
15
+ * Class for text field
16
+ *
17
+ * @class ES_Hidden_Field
18
+ */
19
+ class ES_Hidden_Field extends ES_Field {
20
+
21
+ /**
22
+ * Input name
23
+ *
24
+ * @since 5.0.2
25
+ *
26
+ * @var string
27
+ */
28
+ protected $name = 'hidden_input';
29
+
30
+ /**
31
+ * Input type
32
+ *
33
+ * @since 5.0.2
34
+ *
35
+ * @var string
36
+ */
37
+ protected $type = 'hidden';
38
+
39
+ /**
40
+ * Is multiple
41
+ *
42
+ * @since 5.0.2
43
+ *
44
+ * @var boolean
45
+ */
46
+ public $multiple = false;
47
+
48
+ /**
49
+ * Define whether HTML entities should be decoded before the field is rendered.
50
+ *
51
+ * @since 5.0.2
52
+ *
53
+ * @var bool
54
+ */
55
+ public $decode_html_entities_before_render = true;
56
+
57
+
58
+ /**
59
+ * Constructor
60
+ *
61
+ * @since 5.0.2
62
+ */
63
+ public function __construct() {
64
+ parent::__construct();
65
+ }
66
+
67
+
68
+ /**
69
+ * Set multiple
70
+ *
71
+ * @since 5.0.2
72
+ *
73
+ * @param bool $multi Flag for multiple field.
74
+ *
75
+ * @return $this
76
+ */
77
+ public function set_multiple( $multi = true ) {
78
+ $this->multiple = $multi;
79
+ return $this;
80
+ }
81
+
82
+ /**
83
+ * Output the field HTML.
84
+ *
85
+ * @since 5.0.2
86
+ *
87
+ * @param string $value Field value.
88
+ */
89
+ public function render( $value ) {
90
+ if ( $this->decode_html_entities_before_render ) {
91
+ $value = html_entity_decode( $value );
92
+ }
93
+ ?>
94
+ <input type="<?php echo esc_attr( $this->get_type() ); ?>"
95
+ name="<?php echo esc_attr( $this->get_full_name() ); ?><?php echo $this->multiple ? '[]' : ''; ?>"
96
+ value="<?php echo esc_attr( $value ); ?>"
97
+ class="<?php echo esc_attr( $this->get_classes() ); ?>"
98
+ placeholder="<?php echo esc_attr( $this->get_placeholder() ); ?>"
99
+ <?php $this->output_extra_attrs(); ?>
100
+ <?php echo ( $this->get_required() ? 'required' : '' ); ?>
101
+ >
102
+ <?php
103
+ }
104
+ }
lite/language.php CHANGED
@@ -942,6 +942,7 @@ __( 'Select List', 'email-subscribers' ),
942
  __( 'Delete Contact', 'email-subscribers' ),
943
  __( 'Send Email', 'email-subscribers' ),
944
  __( 'Email Content', 'email-subscribers' ),
 
945
  __( 'Update Contact', 'email-subscribers' ),
946
  __( 'Variable not found.', 'email-subscribers' ),
947
  __( ' Add New Workflow', 'email-subscribers' ),
@@ -1129,8 +1130,9 @@ __( 'Show More', 'email-subscribers' ),
1129
  __( 'Clicks', 'email-subscribers' ),
1130
  __( 'Filter Report', 'email-subscribers' ),
1131
  __( 'Not Opened', 'email-subscribers' ),
 
 
1132
  __( 'No Reports available.', 'email-subscribers' ),
1133
- __( 'Sequence Message', 'email-subscribers' ),
1134
  __( 'Total Contacts', 'email-subscribers' ),
1135
  __( 'Weekly Report from Email Subscribers', 'email-subscribers' ),
1136
  __( 'Your emails are not relevant to me', 'email-subscribers' ),
942
  __( 'Delete Contact', 'email-subscribers' ),
943
  __( 'Send Email', 'email-subscribers' ),
944
  __( 'Email Content', 'email-subscribers' ),
945
+ __( 'Track opens and clicks', 'email-subscribers' ),
946
  __( 'Update Contact', 'email-subscribers' ),
947
  __( 'Variable not found.', 'email-subscribers' ),
948
  __( ' Add New Workflow', 'email-subscribers' ),
1130
  __( 'Clicks', 'email-subscribers' ),
1131
  __( 'Filter Report', 'email-subscribers' ),
1132
  __( 'Not Opened', 'email-subscribers' ),
1133
+ __( 'Enable sending mails in customer timezone?', 'email-subscribers' ),
1134
+ __( 'Enable this option if you want Email Subscribers to send emails in the customer\'s timezone.', 'email-subscribers' ),
1135
  __( 'No Reports available.', 'email-subscribers' ),
 
1136
  __( 'Total Contacts', 'email-subscribers' ),
1137
  __( 'Weekly Report from Email Subscribers', 'email-subscribers' ),
1138
  __( 'Your emails are not relevant to me', 'email-subscribers' ),
lite/languages/email-subscribers.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the Email Subscribers & Newsletters plugin.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Email Subscribers & Newsletters 5.0.2\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/email-subscribers\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "POT-Creation-Date: 2021-11-19T12:40:10+01:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: email-subscribers\n"
@@ -29,7 +29,7 @@ msgstr ""
29
 
30
  #. Author of the plugin
31
  #: lite/admin/partials/help.php:28
32
- #: lite/includes/class-email-subscribers.php:1557
33
  msgid "Icegram"
34
  msgstr ""
35
 
@@ -68,7 +68,7 @@ msgid "Please add a broadcast subject before saving."
68
  msgstr ""
69
 
70
  #: lite/admin/class-email-subscribers-admin.php:171
71
- #: pro/pro-class-email-subscribers.php:524
72
  msgid "Please add email body."
73
  msgstr ""
74
 
@@ -193,7 +193,7 @@ msgstr ""
193
  #: lite/admin/partials/dashboard.php:107
194
  #: lite/includes/classes/class-es-contacts-table.php:214
195
  #: lite/includes/pro-features.php:160
196
- #: starter/starter-class-email-subscribers.php:646
197
  msgid "Audience"
198
  msgstr ""
199
 
@@ -210,7 +210,7 @@ msgstr ""
210
  #: lite/includes/classes/class-es-forms-table.php:40
211
  #: lite/includes/classes/class-es-forms-table.php:93
212
  #: lite/includes/pro-features.php:161
213
- #: starter/starter-class-email-subscribers.php:647
214
  msgid "Forms"
215
  msgstr ""
216
 
@@ -220,7 +220,7 @@ msgstr ""
220
  #: lite/includes/classes/class-es-newsletters.php:245
221
  #: lite/includes/pro-features.php:162
222
  #: pro/partials/es-dashboard.php:8
223
- #: starter/starter-class-email-subscribers.php:648
224
  msgid "Campaigns"
225
  msgstr ""
226
 
@@ -229,7 +229,7 @@ msgid "Post Notifications"
229
  msgstr ""
230
 
231
  #: lite/admin/class-email-subscribers-admin.php:314
232
- #: lite/includes/classes/class-es-campaigns-table.php:362
233
  #: lite/includes/classes/class-es-newsletters.php:254
234
  #: lite/includes/classes/class-es-reports-data.php:360
235
  #: lite/includes/classes/class-es-reports-table.php:161
@@ -252,7 +252,7 @@ msgstr ""
252
  #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:229
253
  #: lite/includes/workflows/class-es-workflows-table.php:53
254
  #: lite/includes/workflows/class-es-workflows-table.php:169
255
- #: starter/starter-class-email-subscribers.php:651
256
  msgid "Workflows"
257
  msgstr ""
258
 
@@ -266,7 +266,7 @@ msgstr ""
266
  #: pro/classes/class-es-pro-sequence-report.php:21
267
  #: pro/classes/class-es-pro-sequence-report.php:44
268
  #: pro/classes/class-es-pro-sequence-report.php:77
269
- #: starter/starter-class-email-subscribers.php:649
270
  msgid "Reports"
271
  msgstr ""
272
 
@@ -291,7 +291,7 @@ msgstr ""
291
 
292
  #: lite/admin/class-email-subscribers-admin.php:1292
293
  #: lite/includes/class-email-subscribers-activator.php:61
294
- #: lite/includes/class-email-subscribers.php:1554
295
  #: lite/includes/classes/class-es-form-widget.php:11
296
  #: lite/includes/classes/class-es-old-widget.php:13
297
  #: lite/includes/classes/class-es-old-widget.php:15
@@ -478,11 +478,11 @@ msgstr ""
478
  #: lite/includes/pro-features.php:974
479
  #: lite/includes/pro-features.php:1505
480
  #: lite/includes/workflows/actions/abstracts/class-ig-es-action-send-email-abstract.php:29
481
- #: lite/includes/workflows/actions/class-es-action-send-email.php:29
482
  #: lite/public/partials/class-es-shortcode.php:169
483
  #: pro/classes/class-es-pro-campaign-rules.php:35
484
- #: pro/pro-class-email-subscribers.php:853
485
- #: pro/pro-class-email-subscribers.php:2090
486
  msgid "Email"
487
  msgstr ""
488
 
@@ -642,39 +642,40 @@ msgstr ""
642
  msgid "Unable to create %1$s and %2$s list."
643
  msgstr ""
644
 
645
- #: lite/admin/class-ig-es-onboarding.php:608
 
646
  msgid "Add to %s list when someone registers"
647
  msgstr ""
648
 
649
- #: lite/admin/class-ig-es-onboarding.php:730
650
  msgid "Please accept terms & condition"
651
  msgstr ""
652
 
653
  #. translators: Active sidebar name.
654
- #: lite/admin/class-ig-es-onboarding.php:788
655
  msgid "Adding the form to \"%s\" sidebar, so you can show it on the site"
656
  msgstr ""
657
 
658
  #. translators: Active sidebar name.
659
- #: lite/admin/class-ig-es-onboarding.php:791
660
  msgid "Unable to add form widget to \"%s\" sidebar. Widget may already exists."
661
  msgstr ""
662
 
663
  #. translators: Active sidebar name.
664
- #: lite/admin/class-ig-es-onboarding.php:796
665
  msgid "Unable to add form widget to \"%s\" sidebar. No subscription form found."
666
  msgstr ""
667
 
668
- #: lite/admin/class-ig-es-onboarding.php:848
669
  #: lite/admin/class-ig-es-onboarding.php:849
 
670
  msgid "Welcome To Email Subscribers"
671
  msgstr ""
672
 
673
- #: lite/admin/class-ig-es-onboarding.php:1027
674
  msgid "Seems like your server is not setup correctly to send emails. Please confirm if you're getting any other emails from within WordPress"
675
  msgstr ""
676
 
677
- #: lite/admin/class-ig-es-onboarding.php:1153
678
  msgid "New Post Published - {{POSTTITLE}}"
679
  msgstr ""
680
 
@@ -871,7 +872,7 @@ msgstr ""
871
 
872
  #: lite/admin/partials/help.php:237
873
  #: lite/includes/classes/class-es-campaign-report.php:190
874
- #: lite/includes/classes/class-es-campaigns-table.php:630
875
  #: lite/includes/classes/class-es-export-subscribers.php:341
876
  #: lite/includes/classes/class-es-import-subscribers.php:666
877
  #: lite/includes/classes/class-es-import-subscribers.php:1183
@@ -885,7 +886,7 @@ msgstr ""
885
  #: lite/includes/class-es-common.php:425
886
  #: lite/includes/class-es-common.php:1791
887
  #: lite/includes/class-es-common.php:2223
888
- #: lite/includes/classes/class-es-campaigns-table.php:314
889
  #: lite/includes/workflows/admin/views/meta-box-save.php:28
890
  #: pro/classes/class-es-pro-reports-data.php:193
891
  #: pro/classes/class-es-pro-sequence-report.php:239
@@ -1187,16 +1188,16 @@ msgid "OK, I Got it!"
1187
  msgstr ""
1188
 
1189
  #. translators: 1: Error message 2: File name 3: Line number
1190
- #: lite/includes/class-email-subscribers.php:1305
1191
  msgid "%1$s in %2$s on line %3$s"
1192
  msgstr ""
1193
 
1194
- #: lite/includes/class-email-subscribers.php:1567
1195
  msgid "Icegram WC"
1196
  msgstr ""
1197
 
1198
  #. translators: %1$s - constant that was used
1199
- #: lite/includes/class-email-subscribers.php:1976
1200
  msgid "Value was set using constant %1$s"
1201
  msgstr ""
1202
 
@@ -1333,15 +1334,15 @@ msgid "All Types"
1333
  msgstr ""
1334
 
1335
  #: lite/includes/class-es-common.php:1787
1336
- #: lite/includes/classes/class-es-campaigns-table.php:568
1337
  msgid "Draft"
1338
  msgstr ""
1339
 
1340
  #: lite/includes/class-es-common.php:1788
1341
  #: lite/includes/class-es-common.php:2214
1342
  #: lite/includes/classes/class-es-campaign-report.php:237
1343
- #: lite/includes/classes/class-es-campaigns-table.php:549
1344
- #: lite/includes/classes/class-es-campaigns-table.php:587
1345
  #: lite/includes/classes/class-es-reports-table.php:200
1346
  #: lite/includes/classes/class-es-reports-table.php:571
1347
  #: pro/classes/class-es-pro-reports-data.php:186
@@ -1349,9 +1350,9 @@ msgid "Sending"
1349
  msgstr ""
1350
 
1351
  #: lite/includes/class-es-common.php:1789
1352
- #: lite/includes/classes/class-es-campaigns-table.php:315
1353
- #: lite/includes/classes/class-es-campaigns-table.php:542
1354
- #: lite/includes/classes/class-es-campaigns-table.php:578
1355
  #: lite/includes/classes/class-es-reports-table.php:216
1356
  #: lite/includes/workflows/admin/views/meta-box-timing.php:36
1357
  msgid "Scheduled"
@@ -1360,8 +1361,8 @@ msgstr ""
1360
  #: lite/includes/class-es-common.php:1790
1361
  #: lite/includes/class-es-common.php:2194
1362
  #: lite/includes/classes/class-es-campaign-report.php:221
1363
- #: lite/includes/classes/class-es-campaigns-table.php:556
1364
- #: lite/includes/classes/class-es-campaigns-table.php:605
1365
  #: lite/includes/classes/class-es-reports-table.php:191
1366
  #: lite/includes/pro-features.php:1139
1367
  #: lite/includes/pro-features.php:1186
@@ -1371,7 +1372,7 @@ msgid "Sent"
1371
  msgstr ""
1372
 
1373
  #: lite/includes/class-es-common.php:1815
1374
- #: lite/includes/classes/class-es-campaigns-table.php:690
1375
  #: lite/includes/classes/class-es-contacts-table.php:1152
1376
  msgid "All Statuses"
1377
  msgstr ""
@@ -1423,11 +1424,11 @@ msgstr ""
1423
  #: lite/includes/pro-features.php:1066
1424
  #: lite/includes/workflows/admin/views/meta-box-timing.php:82
1425
  #: lite/includes/workflows/fields/class-es-date.php:31
1426
- #: pro/pro-class-email-subscribers.php:801
1427
  msgid "Date"
1428
  msgstr ""
1429
 
1430
- #: lite/includes/class-es-install.php:965
1431
  #: lite/includes/upgrade/es-update-functions.php:752
1432
  msgid "Your subscription was successful! Kindly check your mailbox and confirm your subscription. If you don't see the email within a few minutes, check the spam/junk folder."
1433
  msgstr ""
@@ -1458,7 +1459,7 @@ msgstr ""
1458
 
1459
  #: lite/includes/classes/class-es-admin-settings.php:202
1460
  #: lite/includes/classes/class-es-admin-settings.php:205
1461
- #: lite/includes/classes/class-es-campaigns-table.php:625
1462
  #: lite/includes/classes/class-es-forms-table.php:413
1463
  #: lite/includes/classes/class-es-forms-table.php:920
1464
  #: lite/includes/classes/class-es-lists-table.php:569
@@ -1746,9 +1747,9 @@ msgid "Click %1$shere%2$s to go to workflows."
1746
  msgstr ""
1747
 
1748
  #: lite/includes/classes/class-es-campaign-report.php:16
1749
- #: lite/includes/classes/class-es-campaigns-table.php:444
1750
- #: lite/includes/classes/class-es-campaigns-table.php:448
1751
- #: lite/includes/classes/class-es-campaigns-table.php:479
1752
  #: lite/includes/classes/class-es-reports-table.php:16
1753
  #: lite/includes/pro-features.php:1131
1754
  #: pro/classes/class-es-pro-reports-data.php:154
@@ -1783,7 +1784,7 @@ msgstr ""
1783
  msgid "Opened"
1784
  msgstr ""
1785
 
1786
- #: lite/includes/classes/class-es-campaign-report.php:457
1787
  msgid "Campaign Analytics"
1788
  msgstr ""
1789
 
@@ -1822,39 +1823,40 @@ msgstr ""
1822
  msgid "Notification Added Successfully!"
1823
  msgstr ""
1824
 
1825
- #: lite/includes/classes/class-es-campaigns-table.php:298
1826
  msgid "No Campaigns Found."
1827
  msgstr ""
1828
 
1829
- #: lite/includes/classes/class-es-campaigns-table.php:313
1830
  msgid "In Active"
1831
  msgstr ""
1832
 
1833
- #: lite/includes/classes/class-es-campaigns-table.php:316
1834
  msgid "Queued"
1835
  msgstr ""
1836
 
1837
- #: lite/includes/classes/class-es-campaigns-table.php:317
1838
- #: lite/includes/classes/class-es-campaigns-table.php:596
1839
  #: lite/includes/classes/class-es-reports-table.php:208
1840
  msgid "Paused"
1841
  msgstr ""
1842
 
1843
- #: lite/includes/classes/class-es-campaigns-table.php:318
1844
  msgid "Finished"
1845
  msgstr ""
1846
 
1847
- #: lite/includes/classes/class-es-campaigns-table.php:374
1848
  msgid "All"
1849
  msgstr ""
1850
 
1851
- #: lite/includes/classes/class-es-campaigns-table.php:376
1852
- #: starter/starter-class-email-subscribers.php:389
1853
  msgid "None"
1854
  msgstr ""
1855
 
1856
- #: lite/includes/classes/class-es-campaigns-table.php:438
1857
- #: lite/includes/classes/class-es-campaigns-table.php:465
 
1858
  #: lite/includes/classes/class-es-contacts-table.php:1045
1859
  #: lite/includes/classes/class-es-forms-table.php:903
1860
  #: lite/includes/classes/class-es-lists-table.php:547
@@ -1864,7 +1866,7 @@ msgstr ""
1864
  msgid "Edit"
1865
  msgstr ""
1866
 
1867
- #: lite/includes/classes/class-es-campaigns-table.php:488
1868
  #: lite/includes/classes/class-es-contacts-table.php:1047
1869
  #: lite/includes/classes/class-es-contacts-table.php:1118
1870
  #: lite/includes/classes/class-es-forms-table.php:905
@@ -1881,7 +1883,7 @@ msgstr ""
1881
  msgid "Delete"
1882
  msgstr ""
1883
 
1884
- #: lite/includes/classes/class-es-campaigns-table.php:626
1885
  #: lite/includes/classes/class-es-reports-table.php:280
1886
  #: pro/classes/class-es-pro-custom-fields-table.php:393
1887
  #: pro/classes/class-es-pro-custom-fields-table.php:458
@@ -1889,52 +1891,52 @@ msgstr ""
1889
  msgid "Type"
1890
  msgstr ""
1891
 
1892
- #: lite/includes/classes/class-es-campaigns-table.php:627
1893
  #: lite/includes/classes/class-es-contacts-table.php:848
1894
  #: lite/includes/classes/class-es-contacts-table.php:1084
1895
  msgid "List(s)"
1896
  msgstr ""
1897
 
1898
- #: lite/includes/classes/class-es-campaigns-table.php:628
1899
  msgid "Categories"
1900
  msgstr ""
1901
 
1902
- #: lite/includes/classes/class-es-campaigns-table.php:629
1903
  #: lite/includes/classes/class-es-contacts-table.php:1085
1904
  #: lite/includes/classes/class-es-forms-table.php:923
1905
  #: lite/includes/classes/class-es-lists-table.php:575
1906
  msgid "Created"
1907
  msgstr ""
1908
 
1909
- #: lite/includes/classes/class-es-campaigns-table.php:682
1910
  msgid "Search Campaigns"
1911
  msgstr ""
1912
 
1913
- #: lite/includes/classes/class-es-campaigns-table.php:699
1914
  #: lite/includes/classes/class-es-reports-table.php:582
1915
  msgid "All Type"
1916
  msgstr ""
1917
 
1918
- #: lite/includes/classes/class-es-campaigns-table.php:747
1919
  msgid "You are not allowed to delete campaign."
1920
  msgstr ""
1921
 
1922
- #: lite/includes/classes/class-es-campaigns-table.php:752
1923
  msgid "Campaign deleted successfully!"
1924
  msgstr ""
1925
 
1926
- #: lite/includes/classes/class-es-campaigns-table.php:773
1927
  msgid "Campaign(s) deleted successfully!"
1928
  msgstr ""
1929
 
1930
- #: lite/includes/classes/class-es-campaigns-table.php:777
1931
  msgid "Please select campaign(s) to delete."
1932
  msgstr ""
1933
 
1934
  #: lite/includes/classes/class-es-contacts-table.php:70
1935
  #: lite/includes/classes/class-es-contacts-table.php:1083
1936
- #: lite/includes/workflows/actions/class-es-action-delete-contact.php:30
1937
- #: lite/includes/workflows/actions/class-es-action-update-contact.php:30
1938
  msgid "Contact"
1939
  msgstr ""
1940
 
@@ -2042,7 +2044,7 @@ msgstr ""
2042
 
2043
  #: lite/includes/classes/class-es-contacts-table.php:808
2044
  #: lite/includes/pro-features.php:980
2045
- #: pro/pro-class-email-subscribers.php:857
2046
  msgid "Enter email"
2047
  msgstr ""
2048
 
@@ -2089,7 +2091,7 @@ msgid "Move to list"
2089
  msgstr ""
2090
 
2091
  #: lite/includes/classes/class-es-contacts-table.php:1120
2092
- #: lite/includes/workflows/actions/class-es-action-add-to-list.php:29
2093
  msgid "Add to list"
2094
  msgstr ""
2095
 
@@ -2253,7 +2255,7 @@ msgstr ""
2253
  #: lite/includes/classes/class-es-import-subscribers.php:658
2254
  #: lite/includes/classes/class-es-import-subscribers.php:1049
2255
  #: lite/includes/classes/class-es-import-subscribers.php:1181
2256
- #: pro/pro-class-email-subscribers.php:2091
2257
  msgid "First Name"
2258
  msgstr ""
2259
 
@@ -2262,14 +2264,14 @@ msgstr ""
2262
  #: lite/includes/classes/class-es-import-subscribers.php:659
2263
  #: lite/includes/classes/class-es-import-subscribers.php:1054
2264
  #: lite/includes/classes/class-es-import-subscribers.php:1182
2265
- #: pro/pro-class-email-subscribers.php:2092
2266
  msgid "Last Name"
2267
  msgstr ""
2268
 
2269
  #: lite/includes/classes/class-es-export-subscribers.php:340
2270
  #: lite/includes/classes/class-es-lists-table.php:33
2271
  #: lite/includes/compatibilities/elementor/actions/class-es-ig-form-action.php:51
2272
- #: lite/includes/workflows/actions/class-es-action-add-to-list.php:30
2273
  #: pro/workflows/actions/class-es-action-move-to-list.php:30
2274
  #: pro/workflows/actions/class-es-action-remove-from-list.php:28
2275
  msgid "List"
@@ -3220,7 +3222,7 @@ msgstr ""
3220
 
3221
  #. translators: 1: Page 2: Duplicate action 3: Campaign id 4: Wp nonce
3222
  #: lite/includes/classes/class-es-templates-table.php:203
3223
- #: pro/pro-class-email-subscribers.php:1499
3224
  msgid "Duplicate"
3225
  msgstr ""
3226
 
@@ -3240,13 +3242,13 @@ msgstr ""
3240
 
3241
  #: lite/includes/classes/class-es-widget.php:50
3242
  #: lite/includes/feedback.php:231
3243
- #: starter/starter-class-email-subscribers.php:417
3244
  msgid "Yes"
3245
  msgstr ""
3246
 
3247
  #: lite/includes/classes/class-es-widget.php:51
3248
  #: lite/includes/feedback.php:235
3249
- #: starter/starter-class-email-subscribers.php:417
3250
  msgid "No"
3251
  msgstr ""
3252
 
@@ -3449,32 +3451,32 @@ msgid "Customize user roles permissions with "
3449
  msgstr ""
3450
 
3451
  #: lite/includes/pro-features.php:155
3452
- #: starter/starter-class-email-subscribers.php:641
3453
  msgid "You can allow different user roles access to different operations within Email Subscribers plugin. Please select which roles should have what access below."
3454
  msgstr ""
3455
 
3456
  #: lite/includes/pro-features.php:159
3457
- #: starter/starter-class-email-subscribers.php:645
3458
  msgid "Roles"
3459
  msgstr ""
3460
 
3461
  #: lite/includes/pro-features.php:164
3462
- #: starter/starter-class-email-subscribers.php:650
3463
  msgid "Sequences"
3464
  msgstr ""
3465
 
3466
  #: lite/includes/pro-features.php:224
3467
- #: starter/starter-class-email-subscribers.php:615
3468
  msgid "Access Control"
3469
  msgstr ""
3470
 
3471
  #: lite/includes/pro-features.php:252
3472
- #: pro/pro-class-email-subscribers.php:904
3473
  msgid "Track clicks"
3474
  msgstr ""
3475
 
3476
  #: lite/includes/pro-features.php:253
3477
- #: pro/pro-class-email-subscribers.php:905
3478
  msgid "Do you want to track when people click links in your emails? (We recommend keeping it enabled)"
3479
  msgstr ""
3480
 
@@ -3492,27 +3494,27 @@ msgid "Allow user to select list(s) while unsubscribing"
3492
  msgstr ""
3493
 
3494
  #: lite/includes/pro-features.php:267
3495
- #: starter/starter-class-email-subscribers.php:527
3496
  msgid "Enabling this will let users unsubscribe from multiple lists at once. (We recommend keeping it enabled)"
3497
  msgstr ""
3498
 
3499
  #: lite/includes/pro-features.php:277
3500
- #: starter/starter-class-email-subscribers.php:499
3501
  msgid "Nudge people to subscribe while leaving a comment or placing an order?"
3502
  msgstr ""
3503
 
3504
  #: lite/includes/pro-features.php:278
3505
- #: starter/starter-class-email-subscribers.php:500
3506
  msgid "Adds a checkbox to subscribe when people post a comment or checkout (if you&rsquo;re using WooCommerce)."
3507
  msgstr ""
3508
 
3509
  #: lite/includes/pro-features.php:283
3510
- #: starter/starter-class-email-subscribers.php:505
3511
  msgid "(toggle to enable this)"
3512
  msgstr ""
3513
 
3514
  #: lite/includes/pro-features.php:291
3515
- #: starter/starter-class-email-subscribers.php:512
3516
  msgid "Opt-in consent message text"
3517
  msgstr ""
3518
 
@@ -3521,17 +3523,17 @@ msgid "Subscribe to our email updates as well."
3521
  msgstr ""
3522
 
3523
  #: lite/includes/pro-features.php:295
3524
- #: starter/starter-class-email-subscribers.php:516
3525
  msgid "Opt-in consent text"
3526
  msgstr ""
3527
 
3528
  #: lite/includes/pro-features.php:339
3529
- #: starter/starter-class-email-subscribers.php:462
3530
  msgid "Block known attackers"
3531
  msgstr ""
3532
 
3533
  #: lite/includes/pro-features.php:340
3534
- #: starter/starter-class-email-subscribers.php:463
3535
  msgid "Stop spam bot attacker domains from signing up. Icegram maintains a blacklist of such attackers and enabling this option will keep the blacklist updated."
3536
  msgstr ""
3537
 
@@ -3545,27 +3547,27 @@ msgid "Secure your list from known spam bot attacker domains, fake email address
3545
  msgstr ""
3546
 
3547
  #: lite/includes/pro-features.php:353
3548
- #: starter/starter-class-email-subscribers.php:470
3549
  msgid "Block temporary / fake emails"
3550
  msgstr ""
3551
 
3552
  #: lite/includes/pro-features.php:354
3553
- #: starter/starter-class-email-subscribers.php:471
3554
  msgid "Plenty of sites provide disposable / fake / temporary email addresses. People use them when they don't want to give you their real email. Block such emails to keep your list clean. Turning this on will update the blacklist automatically."
3555
  msgstr ""
3556
 
3557
  #: lite/includes/pro-features.php:365
3558
- #: starter/starter-class-email-subscribers.php:479
3559
  msgid "Enable Captcha"
3560
  msgstr ""
3561
 
3562
  #: lite/includes/pro-features.php:366
3563
- #: starter/starter-class-email-subscribers.php:480
3564
  msgid "Prevent bot signups even further. Set default captcha option for new subscription forms."
3565
  msgstr ""
3566
 
3567
  #: lite/includes/pro-features.php:390
3568
- #: pro/pro-class-email-subscribers.php:913
3569
  msgid "Track IP address"
3570
  msgstr ""
3571
 
@@ -3774,7 +3776,7 @@ msgid "Get a gatekeeper like %1$sCaptcha%2$s and prevent bot signups from your s
3774
  msgstr ""
3775
 
3776
  #: lite/includes/pro-features.php:865
3777
- #: starter/starter-class-email-subscribers.php:1228
3778
  msgid "Show a captcha to protect from bot signups."
3779
  msgstr ""
3780
 
@@ -3823,7 +3825,7 @@ msgid "Reduce the possibility to land in spam with PRO"
3823
  msgstr ""
3824
 
3825
  #: lite/includes/pro-features.php:1007
3826
- #: pro/pro-class-email-subscribers.php:741
3827
  msgid "Link tracking"
3828
  msgstr ""
3829
 
@@ -3832,23 +3834,23 @@ msgid "Get spam score"
3832
  msgstr ""
3833
 
3834
  #: lite/includes/pro-features.php:1056
3835
- #: pro/pro-class-email-subscribers.php:785
3836
  msgid "Send options"
3837
  msgstr ""
3838
 
3839
  #: lite/includes/pro-features.php:1059
3840
- #: pro/pro-class-email-subscribers.php:788
3841
  msgid "Schedule for later"
3842
  msgstr ""
3843
 
3844
  #: lite/includes/pro-features.php:1075
3845
  #: lite/includes/workflows/fields/class-es-time.php:64
3846
- #: pro/pro-class-email-subscribers.php:812
3847
  msgid "Time"
3848
  msgstr ""
3849
 
3850
  #: lite/includes/pro-features.php:1085
3851
- #: pro/pro-class-email-subscribers.php:823
3852
  msgid "Local Time: "
3853
  msgstr ""
3854
 
@@ -3973,12 +3975,12 @@ msgid "Mobile"
3973
  msgstr ""
3974
 
3975
  #: lite/includes/pro-features.php:1612
3976
- #: pro/pro-class-email-subscribers.php:1700
3977
  msgid "Add Attachments"
3978
  msgstr ""
3979
 
3980
  #: lite/includes/pro-features.php:1642
3981
- #: pro/pro-class-email-subscribers.php:1785
3982
  msgid "Import existing WordPress users"
3983
  msgstr ""
3984
 
@@ -4065,25 +4067,29 @@ msgstr ""
4065
  msgid "Email subject"
4066
  msgstr ""
4067
 
4068
- #: lite/includes/workflows/actions/class-es-action-add-to-list.php:44
4069
  #: pro/workflows/actions/class-es-action-move-to-list.php:44
4070
  #: pro/workflows/actions/class-es-action-remove-from-list.php:42
4071
  msgid "Select List"
4072
  msgstr ""
4073
 
4074
- #: lite/includes/workflows/actions/class-es-action-delete-contact.php:29
4075
  msgid "Delete Contact"
4076
  msgstr ""
4077
 
4078
- #: lite/includes/workflows/actions/class-es-action-send-email.php:30
4079
  msgid "Send Email"
4080
  msgstr ""
4081
 
4082
- #: lite/includes/workflows/actions/class-es-action-send-email.php:43
4083
  msgid "Email Content"
4084
  msgstr ""
4085
 
4086
- #: lite/includes/workflows/actions/class-es-action-update-contact.php:29
 
 
 
 
4087
  msgid "Update Contact"
4088
  msgstr ""
4089
 
@@ -4446,7 +4452,7 @@ msgid "Send welcome email when someone subscribes"
4446
  msgstr ""
4447
 
4448
  #: lite/includes/workflows/db/class-es-db-workflows.php:580
4449
- #: pro/pro-class-email-subscribers.php:2412
4450
  msgid "Send confirmation email"
4451
  msgstr ""
4452
 
@@ -4527,7 +4533,6 @@ msgid "User Subscribed"
4527
  msgstr ""
4528
 
4529
  #: lite/includes/workflows/triggers/class-es-trigger-user-subscribed.php:31
4530
- #: lite/includes/workflows/triggers/class-es-trigger-user-unconfirmed.php:31
4531
  msgid "Fires when someone subscribes."
4532
  msgstr ""
4533
 
@@ -4540,6 +4545,10 @@ msgstr ""
4540
  msgid "User Unconfirmed"
4541
  msgstr ""
4542
 
 
 
 
 
4543
  #: lite/includes/workflows/triggers/class-es-trigger-user-updated.php:30
4544
  msgid "User Updated"
4545
  msgstr ""
@@ -4565,7 +4574,7 @@ msgid "Sorry, we couldn't find you. Please contact admin."
4565
  msgstr ""
4566
 
4567
  #: lite/public/class-email-subscribers-public.php:435
4568
- #: starter/starter-class-email-subscribers.php:904
4569
  msgid "is subscribed to our mailing list(s)."
4570
  msgstr ""
4571
 
@@ -4578,7 +4587,7 @@ msgid "You will be unsubscribed from receiving all future emails sent from us."
4578
  msgstr ""
4579
 
4580
  #: lite/public/class-email-subscribers-public.php:450
4581
- #: starter/starter-class-email-subscribers.php:928
4582
  msgid "Unsubscribe"
4583
  msgstr ""
4584
 
@@ -4599,7 +4608,7 @@ msgid "Total Emails In Queue"
4599
  msgstr ""
4600
 
4601
  #: lite/public/partials/cron-message.php:43
4602
- #: pro/pro-class-email-subscribers.php:831
4603
  msgid "Send Now"
4604
  msgstr ""
4605
 
@@ -4677,7 +4686,7 @@ msgstr ""
4677
 
4678
  #: pro/classes/class-es-pro-custom-fields-table.php:40
4679
  #: pro/classes/class-es-pro-custom-fields-table.php:92
4680
- #: pro/pro-class-email-subscribers.php:389
4681
  msgid "Custom Fields"
4682
  msgstr ""
4683
 
@@ -4765,7 +4774,7 @@ msgid "Recipient(s): "
4765
  msgstr ""
4766
 
4767
  #: pro/classes/class-es-pro-reports-data.php:261
4768
- #: pro/pro-class-email-subscribers.php:1235
4769
  msgid "Clicked"
4770
  msgstr ""
4771
 
@@ -4844,12 +4853,16 @@ msgstr ""
4844
  msgid "Not Opened"
4845
  msgstr ""
4846
 
4847
- #: pro/classes/class-es-pro-sequence-report.php:201
4848
- msgid "No Reports available."
4849
  msgstr ""
4850
 
4851
- #: pro/classes/class-es-pro-sequence-report.php:220
4852
- msgid "Sequence Message"
 
 
 
 
4853
  msgstr ""
4854
 
4855
  #: pro/classes/class-es-pro-sequence-report.php:302
@@ -5020,220 +5033,220 @@ msgstr ""
5020
  msgid "Lost"
5021
  msgstr ""
5022
 
5023
- #: pro/pro-class-email-subscribers.php:199
5024
  msgid "Your cart has been restored."
5025
  msgstr ""
5026
 
5027
- #: pro/pro-class-email-subscribers.php:202
5028
  msgid "Your cart could not be restored, it may have expired."
5029
  msgstr ""
5030
 
5031
- #: pro/pro-class-email-subscribers.php:385
5032
  #: pro/pro-class-post-digest.php:25
5033
  msgid "Sequence"
5034
  msgstr ""
5035
 
5036
- #: pro/pro-class-email-subscribers.php:523
5037
  msgid "Please enter an email address."
5038
  msgstr ""
5039
 
5040
- #: pro/pro-class-email-subscribers.php:525
5041
  msgid "Add Attachment"
5042
  msgstr ""
5043
 
5044
  #. translators: %s: Attachmen max file size.
5045
- #: pro/pro-class-email-subscribers.php:527
5046
  msgid "Please attach a file having size lower than %s."
5047
  msgstr ""
5048
 
5049
- #: pro/pro-class-email-subscribers.php:528
5050
  msgid "Are you sure you want to delete this?"
5051
  msgstr ""
5052
 
5053
- #: pro/pro-class-email-subscribers.php:529
5054
- #: pro/pro-class-email-subscribers.php:1976
5055
  msgid "Checking your orders..."
5056
  msgstr ""
5057
 
5058
- #: pro/pro-class-email-subscribers.php:653
5059
  msgid "Clean My List"
5060
  msgstr ""
5061
 
5062
- #: pro/pro-class-email-subscribers.php:654
5063
  msgid "List cleanup is in progress..."
5064
  msgstr ""
5065
 
5066
- #: pro/pro-class-email-subscribers.php:655
5067
  msgid "List cleanup completed successfully."
5068
  msgstr ""
5069
 
5070
- #: pro/pro-class-email-subscribers.php:672
5071
  msgid "Email status"
5072
  msgstr ""
5073
 
5074
- #: pro/pro-class-email-subscribers.php:673
5075
  msgid "Last opened at"
5076
  msgstr ""
5077
 
5078
- #: pro/pro-class-email-subscribers.php:869
5079
  msgid "Select page"
5080
  msgstr ""
5081
 
5082
- #: pro/pro-class-email-subscribers.php:882
5083
  msgid "Subscriber will be redirected to selected page (by default, homepage) once they click on unsubscribe link from the email."
5084
  msgstr ""
5085
 
5086
- #: pro/pro-class-email-subscribers.php:895
5087
  msgid "Subscriber will be redirected to selected page (by default, homepage) once they click on email confirmation link from the double opt-in (confirmation) email."
5088
  msgstr ""
5089
 
5090
- #: pro/pro-class-email-subscribers.php:928
5091
  msgid "Weekly summary"
5092
  msgstr ""
5093
 
5094
- #: pro/pro-class-email-subscribers.php:933
5095
  msgid "Enable?"
5096
  msgstr ""
5097
 
5098
- #: pro/pro-class-email-subscribers.php:940
5099
  msgid "When our automated weekly email should be sent out?"
5100
  msgstr ""
5101
 
5102
- #: pro/pro-class-email-subscribers.php:949
5103
  msgid "In which time we need to send our weekly summary?"
5104
  msgstr ""
5105
 
5106
- #: pro/pro-class-email-subscribers.php:975
5107
  msgid "Access Key ID"
5108
  msgstr ""
5109
 
5110
- #: pro/pro-class-email-subscribers.php:988
5111
  msgid "Secret Access Key"
5112
  msgstr ""
5113
 
5114
- #: pro/pro-class-email-subscribers.php:1002
5115
  msgid "Closest Region"
5116
  msgstr ""
5117
 
5118
- #: pro/pro-class-email-subscribers.php:1004
5119
  msgid "To decrease network latency between your site and Amazon SES and speed up email sending, select the Amazon SES API region which is closest to where your website is hosted."
5120
  msgstr ""
5121
 
5122
- #: pro/pro-class-email-subscribers.php:1031
5123
  msgid "Private API Key"
5124
  msgstr ""
5125
 
5126
- #: pro/pro-class-email-subscribers.php:1045
5127
  msgid "Domain Name"
5128
  msgstr ""
5129
 
5130
- #: pro/pro-class-email-subscribers.php:1056
5131
- #: pro/pro-class-email-subscribers.php:1131
5132
  msgid "United States"
5133
  msgstr ""
5134
 
5135
- #: pro/pro-class-email-subscribers.php:1057
5136
- #: pro/pro-class-email-subscribers.php:1132
5137
  msgid "Europe"
5138
  msgstr ""
5139
 
5140
- #: pro/pro-class-email-subscribers.php:1063
5141
- #: pro/pro-class-email-subscribers.php:1138
5142
  msgid "Region"
5143
  msgstr ""
5144
 
5145
- #: pro/pro-class-email-subscribers.php:1067
5146
  msgid "mailgun.com"
5147
  msgstr ""
5148
 
5149
- #: pro/pro-class-email-subscribers.php:1093
5150
- #: pro/pro-class-email-subscribers.php:1120
5151
  msgid "API Key"
5152
  msgstr ""
5153
 
5154
- #: pro/pro-class-email-subscribers.php:1140
5155
  msgid "Define which endpoint you want to use for sending messages. If you are operating under EU laws, you may be required to use EU region."
5156
  msgstr ""
5157
 
5158
- #: pro/pro-class-email-subscribers.php:1165
5159
  msgid "API token"
5160
  msgstr ""
5161
 
5162
- #: pro/pro-class-email-subscribers.php:1520
5163
  msgid "You are not allowed to duplicate campaign."
5164
  msgstr ""
5165
 
5166
- #: pro/pro-class-email-subscribers.php:1535
5167
  msgid "Campaign duplicated !"
5168
  msgstr ""
5169
 
5170
- #: pro/pro-class-email-subscribers.php:1804
5171
  msgid "Import WordPress users with following roles"
5172
  msgstr ""
5173
 
5174
- #: pro/pro-class-email-subscribers.php:1857
5175
- #: pro/pro-class-email-subscribers.php:1983
5176
  msgid "Proceed "
5177
  msgstr ""
5178
 
5179
- #: pro/pro-class-email-subscribers.php:1893
5180
  msgid "Import from WooCommerce orders"
5181
  msgstr ""
5182
 
5183
- #: pro/pro-class-email-subscribers.php:1918
5184
  msgid "Select order statuses"
5185
  msgstr ""
5186
 
5187
- #: pro/pro-class-email-subscribers.php:1966
5188
  msgid "Orders should contain these products"
5189
  msgstr ""
5190
 
5191
- #: pro/pro-class-email-subscribers.php:1971
5192
  msgid "Search products..."
5193
  msgstr ""
5194
 
5195
  #. translators: 1. Processed orders count. 2. Total orders count. 3. Matched orders count.
5196
- #: pro/pro-class-email-subscribers.php:2199
5197
  msgid "Currently %1$s of %2$s orders checked. Found %3$s matching orders."
5198
  msgstr ""
5199
 
5200
- #: pro/pro-class-email-subscribers.php:2210
5201
  msgid "We can't find any matching orders in your store."
5202
  msgstr ""
5203
 
5204
- #: pro/pro-class-email-subscribers.php:2223
5205
  msgid "Total Opened"
5206
  msgstr ""
5207
 
5208
- #: pro/pro-class-email-subscribers.php:2274
5209
  msgid "How to configure Mailgun to send emails in the Email Subscribers plugin?"
5210
  msgstr ""
5211
 
5212
- #: pro/pro-class-email-subscribers.php:2304
5213
  msgid "How to configure SendGrid to send emails in the Email Subscribers plugin?"
5214
  msgstr ""
5215
 
5216
- #: pro/pro-class-email-subscribers.php:2334
5217
  msgid "How to configure Sparkpost to send emails in the Email Subscribers plugin?"
5218
  msgstr ""
5219
 
5220
- #: pro/pro-class-email-subscribers.php:2363
5221
  msgid "How to configure Amazon SES to send emails in the Email Subscribers plugin?"
5222
  msgstr ""
5223
 
5224
- #: pro/pro-class-email-subscribers.php:2392
5225
  msgid "How to configure Postmark to send emails in the Email Subscribers plugin?"
5226
  msgstr ""
5227
 
5228
- #: pro/pro-class-email-subscribers.php:2427
5229
  msgid "Confirmation emails queued successfully and will be sent shortly."
5230
  msgstr ""
5231
 
5232
- #: pro/pro-class-email-subscribers.php:2435
5233
  msgid "No contacts found. May be they are already queued or there isn't any unconfirmed contact in your selection."
5234
  msgstr ""
5235
 
5236
- #: pro/pro-class-email-subscribers.php:2438
5237
  msgid "Failed to queue confirmation emails. Please try again later."
5238
  msgstr ""
5239
 
@@ -5686,75 +5699,75 @@ msgstr ""
5686
  msgid "Are You a Human?"
5687
  msgstr ""
5688
 
5689
- #: starter/starter-class-email-subscribers.php:313
5690
  msgid "No Thanks"
5691
  msgstr ""
5692
 
5693
- #: starter/starter-class-email-subscribers.php:314
5694
  msgid "You won't receive further emails from us, thank you!"
5695
  msgstr ""
5696
 
5697
- #: starter/starter-class-email-subscribers.php:380
5698
  msgid "SMTP Host"
5699
  msgstr ""
5700
 
5701
- #: starter/starter-class-email-subscribers.php:389
5702
  msgid "SSL"
5703
  msgstr ""
5704
 
5705
- #: starter/starter-class-email-subscribers.php:389
5706
  msgid "TLS"
5707
  msgstr ""
5708
 
5709
- #: starter/starter-class-email-subscribers.php:394
5710
  msgid "Encryption"
5711
  msgstr ""
5712
 
5713
- #: starter/starter-class-email-subscribers.php:408
5714
  msgid "SMTP Port"
5715
  msgstr ""
5716
 
5717
- #: starter/starter-class-email-subscribers.php:422
5718
  msgid "Authentication"
5719
  msgstr ""
5720
 
5721
- #: starter/starter-class-email-subscribers.php:436
5722
  msgid "SMTP Username"
5723
  msgstr ""
5724
 
5725
- #: starter/starter-class-email-subscribers.php:450
5726
  msgid "SMTP Password"
5727
  msgstr ""
5728
 
5729
- #: starter/starter-class-email-subscribers.php:526
5730
  msgid "Allow user to select list(s) while unsubscribe"
5731
  msgstr ""
5732
 
5733
- #: starter/starter-class-email-subscribers.php:809
5734
  msgid "Please select a list to unsubscribe"
5735
  msgstr ""
5736
 
5737
- #: starter/starter-class-email-subscribers.php:913
5738
  msgid "Unsubscribe from below mailing list(s)"
5739
  msgstr ""
5740
 
5741
- #: starter/starter-class-email-subscribers.php:914
5742
  msgid "Unsubscribe from all the lists"
5743
  msgstr ""
5744
 
5745
- #: starter/starter-class-email-subscribers.php:1323
5746
  msgid "Pause"
5747
  msgstr ""
5748
 
5749
- #: starter/starter-class-email-subscribers.php:1331
5750
  msgid "Resume"
5751
  msgstr ""
5752
 
5753
- #: starter/starter-class-email-subscribers.php:1355
5754
  msgid "Pause campaign"
5755
  msgstr ""
5756
 
5757
- #: starter/starter-class-email-subscribers.php:1364
5758
  msgid "Resume campaign"
5759
  msgstr ""
5760
 
2
  # This file is distributed under the same license as the Email Subscribers & Newsletters plugin.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Email Subscribers & Newsletters 5.0.3\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/email-subscribers\n"
7
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
  "Language-Team: LANGUAGE <LL@li.org>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "POT-Creation-Date: 2021-12-02T05:56:59+01:00\n"
13
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
14
  "X-Generator: WP-CLI 2.4.0\n"
15
  "X-Domain: email-subscribers\n"
29
 
30
  #. Author of the plugin
31
  #: lite/admin/partials/help.php:28
32
+ #: lite/includes/class-email-subscribers.php:1558
33
  msgid "Icegram"
34
  msgstr ""
35
 
68
  msgstr ""
69
 
70
  #: lite/admin/class-email-subscribers-admin.php:171
71
+ #: pro/pro-class-email-subscribers.php:562
72
  msgid "Please add email body."
73
  msgstr ""
74
 
193
  #: lite/admin/partials/dashboard.php:107
194
  #: lite/includes/classes/class-es-contacts-table.php:214
195
  #: lite/includes/pro-features.php:160
196
+ #: starter/starter-class-email-subscribers.php:649
197
  msgid "Audience"
198
  msgstr ""
199
 
210
  #: lite/includes/classes/class-es-forms-table.php:40
211
  #: lite/includes/classes/class-es-forms-table.php:93
212
  #: lite/includes/pro-features.php:161
213
+ #: starter/starter-class-email-subscribers.php:650
214
  msgid "Forms"
215
  msgstr ""
216
 
220
  #: lite/includes/classes/class-es-newsletters.php:245
221
  #: lite/includes/pro-features.php:162
222
  #: pro/partials/es-dashboard.php:8
223
+ #: starter/starter-class-email-subscribers.php:651
224
  msgid "Campaigns"
225
  msgstr ""
226
 
229
  msgstr ""
230
 
231
  #: lite/admin/class-email-subscribers-admin.php:314
232
+ #: lite/includes/classes/class-es-campaigns-table.php:363
233
  #: lite/includes/classes/class-es-newsletters.php:254
234
  #: lite/includes/classes/class-es-reports-data.php:360
235
  #: lite/includes/classes/class-es-reports-table.php:161
252
  #: lite/includes/workflows/admin/class-es-workflow-admin-edit.php:229
253
  #: lite/includes/workflows/class-es-workflows-table.php:53
254
  #: lite/includes/workflows/class-es-workflows-table.php:169
255
+ #: starter/starter-class-email-subscribers.php:654
256
  msgid "Workflows"
257
  msgstr ""
258
 
266
  #: pro/classes/class-es-pro-sequence-report.php:21
267
  #: pro/classes/class-es-pro-sequence-report.php:44
268
  #: pro/classes/class-es-pro-sequence-report.php:77
269
+ #: starter/starter-class-email-subscribers.php:652
270
  msgid "Reports"
271
  msgstr ""
272
 
291
 
292
  #: lite/admin/class-email-subscribers-admin.php:1292
293
  #: lite/includes/class-email-subscribers-activator.php:61
294
+ #: lite/includes/class-email-subscribers.php:1555
295
  #: lite/includes/classes/class-es-form-widget.php:11
296
  #: lite/includes/classes/class-es-old-widget.php:13
297
  #: lite/includes/classes/class-es-old-widget.php:15
478
  #: lite/includes/pro-features.php:974
479
  #: lite/includes/pro-features.php:1505
480
  #: lite/includes/workflows/actions/abstracts/class-ig-es-action-send-email-abstract.php:29
481
+ #: lite/includes/workflows/actions/class-es-action-send-email.php:31
482
  #: lite/public/partials/class-es-shortcode.php:169
483
  #: pro/classes/class-es-pro-campaign-rules.php:35
484
+ #: pro/pro-class-email-subscribers.php:912
485
+ #: pro/pro-class-email-subscribers.php:2223
486
  msgid "Email"
487
  msgstr ""
488
 
642
  msgid "Unable to create %1$s and %2$s list."
643
  msgstr ""
644
 
645
+ #. translators: Main list name
646
+ #: lite/admin/class-ig-es-onboarding.php:609
647
  msgid "Add to %s list when someone registers"
648
  msgstr ""
649
 
650
+ #: lite/admin/class-ig-es-onboarding.php:731
651
  msgid "Please accept terms & condition"
652
  msgstr ""
653
 
654
  #. translators: Active sidebar name.
655
+ #: lite/admin/class-ig-es-onboarding.php:789
656
  msgid "Adding the form to \"%s\" sidebar, so you can show it on the site"
657
  msgstr ""
658
 
659
  #. translators: Active sidebar name.
660
+ #: lite/admin/class-ig-es-onboarding.php:792
661
  msgid "Unable to add form widget to \"%s\" sidebar. Widget may already exists."
662
  msgstr ""
663
 
664
  #. translators: Active sidebar name.
665
+ #: lite/admin/class-ig-es-onboarding.php:797
666
  msgid "Unable to add form widget to \"%s\" sidebar. No subscription form found."
667
  msgstr ""
668
 
 
669
  #: lite/admin/class-ig-es-onboarding.php:849
670
+ #: lite/admin/class-ig-es-onboarding.php:850
671
  msgid "Welcome To Email Subscribers"
672
  msgstr ""
673
 
674
+ #: lite/admin/class-ig-es-onboarding.php:1028
675
  msgid "Seems like your server is not setup correctly to send emails. Please confirm if you're getting any other emails from within WordPress"
676
  msgstr ""
677
 
678
+ #: lite/admin/class-ig-es-onboarding.php:1154
679
  msgid "New Post Published - {{POSTTITLE}}"
680
  msgstr ""
681
 
872
 
873
  #: lite/admin/partials/help.php:237
874
  #: lite/includes/classes/class-es-campaign-report.php:190
875
+ #: lite/includes/classes/class-es-campaigns-table.php:637
876
  #: lite/includes/classes/class-es-export-subscribers.php:341
877
  #: lite/includes/classes/class-es-import-subscribers.php:666
878
  #: lite/includes/classes/class-es-import-subscribers.php:1183
886
  #: lite/includes/class-es-common.php:425
887
  #: lite/includes/class-es-common.php:1791
888
  #: lite/includes/class-es-common.php:2223
889
+ #: lite/includes/classes/class-es-campaigns-table.php:315
890
  #: lite/includes/workflows/admin/views/meta-box-save.php:28
891
  #: pro/classes/class-es-pro-reports-data.php:193
892
  #: pro/classes/class-es-pro-sequence-report.php:239
1188
  msgstr ""
1189
 
1190
  #. translators: 1: Error message 2: File name 3: Line number
1191
+ #: lite/includes/class-email-subscribers.php:1306
1192
  msgid "%1$s in %2$s on line %3$s"
1193
  msgstr ""
1194
 
1195
+ #: lite/includes/class-email-subscribers.php:1568
1196
  msgid "Icegram WC"
1197
  msgstr ""
1198
 
1199
  #. translators: %1$s - constant that was used
1200
+ #: lite/includes/class-email-subscribers.php:1977
1201
  msgid "Value was set using constant %1$s"
1202
  msgstr ""
1203
 
1334
  msgstr ""
1335
 
1336
  #: lite/includes/class-es-common.php:1787
1337
+ #: lite/includes/classes/class-es-campaigns-table.php:575
1338
  msgid "Draft"
1339
  msgstr ""
1340
 
1341
  #: lite/includes/class-es-common.php:1788
1342
  #: lite/includes/class-es-common.php:2214
1343
  #: lite/includes/classes/class-es-campaign-report.php:237
1344
+ #: lite/includes/classes/class-es-campaigns-table.php:556
1345
+ #: lite/includes/classes/class-es-campaigns-table.php:594
1346
  #: lite/includes/classes/class-es-reports-table.php:200
1347
  #: lite/includes/classes/class-es-reports-table.php:571
1348
  #: pro/classes/class-es-pro-reports-data.php:186
1350
  msgstr ""
1351
 
1352
  #: lite/includes/class-es-common.php:1789
1353
+ #: lite/includes/classes/class-es-campaigns-table.php:316
1354
+ #: lite/includes/classes/class-es-campaigns-table.php:549
1355
+ #: lite/includes/classes/class-es-campaigns-table.php:585
1356
  #: lite/includes/classes/class-es-reports-table.php:216
1357
  #: lite/includes/workflows/admin/views/meta-box-timing.php:36
1358
  msgid "Scheduled"
1361
  #: lite/includes/class-es-common.php:1790
1362
  #: lite/includes/class-es-common.php:2194
1363
  #: lite/includes/classes/class-es-campaign-report.php:221
1364
+ #: lite/includes/classes/class-es-campaigns-table.php:563
1365
+ #: lite/includes/classes/class-es-campaigns-table.php:612
1366
  #: lite/includes/classes/class-es-reports-table.php:191
1367
  #: lite/includes/pro-features.php:1139
1368
  #: lite/includes/pro-features.php:1186
1372
  msgstr ""
1373
 
1374
  #: lite/includes/class-es-common.php:1815
1375
+ #: lite/includes/classes/class-es-campaigns-table.php:697
1376
  #: lite/includes/classes/class-es-contacts-table.php:1152
1377
  msgid "All Statuses"
1378
  msgstr ""
1424
  #: lite/includes/pro-features.php:1066
1425
  #: lite/includes/workflows/admin/views/meta-box-timing.php:82
1426
  #: lite/includes/workflows/fields/class-es-date.php:31
1427
+ #: pro/pro-class-email-subscribers.php:849
1428
  msgid "Date"
1429
  msgstr ""
1430
 
1431
+ #: lite/includes/class-es-install.php:972
1432
  #: lite/includes/upgrade/es-update-functions.php:752
1433
  msgid "Your subscription was successful! Kindly check your mailbox and confirm your subscription. If you don't see the email within a few minutes, check the spam/junk folder."
1434
  msgstr ""
1459
 
1460
  #: lite/includes/classes/class-es-admin-settings.php:202
1461
  #: lite/includes/classes/class-es-admin-settings.php:205
1462
+ #: lite/includes/classes/class-es-campaigns-table.php:632
1463
  #: lite/includes/classes/class-es-forms-table.php:413
1464
  #: lite/includes/classes/class-es-forms-table.php:920
1465
  #: lite/includes/classes/class-es-lists-table.php:569
1747
  msgstr ""
1748
 
1749
  #: lite/includes/classes/class-es-campaign-report.php:16
1750
+ #: lite/includes/classes/class-es-campaigns-table.php:449
1751
+ #: lite/includes/classes/class-es-campaigns-table.php:453
1752
+ #: lite/includes/classes/class-es-campaigns-table.php:484
1753
  #: lite/includes/classes/class-es-reports-table.php:16
1754
  #: lite/includes/pro-features.php:1131
1755
  #: pro/classes/class-es-pro-reports-data.php:154
1784
  msgid "Opened"
1785
  msgstr ""
1786
 
1787
+ #: lite/includes/classes/class-es-campaign-report.php:471
1788
  msgid "Campaign Analytics"
1789
  msgstr ""
1790
 
1823
  msgid "Notification Added Successfully!"
1824
  msgstr ""
1825
 
1826
+ #: lite/includes/classes/class-es-campaigns-table.php:299
1827
  msgid "No Campaigns Found."
1828
  msgstr ""
1829
 
1830
+ #: lite/includes/classes/class-es-campaigns-table.php:314
1831
  msgid "In Active"
1832
  msgstr ""
1833
 
1834
+ #: lite/includes/classes/class-es-campaigns-table.php:317
1835
  msgid "Queued"
1836
  msgstr ""
1837
 
1838
+ #: lite/includes/classes/class-es-campaigns-table.php:318
1839
+ #: lite/includes/classes/class-es-campaigns-table.php:603
1840
  #: lite/includes/classes/class-es-reports-table.php:208
1841
  msgid "Paused"
1842
  msgstr ""
1843
 
1844
+ #: lite/includes/classes/class-es-campaigns-table.php:319
1845
  msgid "Finished"
1846
  msgstr ""
1847
 
1848
+ #: lite/includes/classes/class-es-campaigns-table.php:375
1849
  msgid "All"
1850
  msgstr ""
1851
 
1852
+ #: lite/includes/classes/class-es-campaigns-table.php:377
1853
+ #: starter/starter-class-email-subscribers.php:392
1854
  msgid "None"
1855
  msgstr ""
1856
 
1857
+ #: lite/includes/classes/class-es-campaigns-table.php:440
1858
+ #: lite/includes/classes/class-es-campaigns-table.php:442
1859
+ #: lite/includes/classes/class-es-campaigns-table.php:470
1860
  #: lite/includes/classes/class-es-contacts-table.php:1045
1861
  #: lite/includes/classes/class-es-forms-table.php:903
1862
  #: lite/includes/classes/class-es-lists-table.php:547
1866
  msgid "Edit"
1867
  msgstr ""
1868
 
1869
+ #: lite/includes/classes/class-es-campaigns-table.php:494
1870
  #: lite/includes/classes/class-es-contacts-table.php:1047
1871
  #: lite/includes/classes/class-es-contacts-table.php:1118
1872
  #: lite/includes/classes/class-es-forms-table.php:905
1883
  msgid "Delete"
1884
  msgstr ""
1885
 
1886
+ #: lite/includes/classes/class-es-campaigns-table.php:633
1887
  #: lite/includes/classes/class-es-reports-table.php:280
1888
  #: pro/classes/class-es-pro-custom-fields-table.php:393
1889
  #: pro/classes/class-es-pro-custom-fields-table.php:458
1891
  msgid "Type"
1892
  msgstr ""
1893
 
1894
+ #: lite/includes/classes/class-es-campaigns-table.php:634
1895
  #: lite/includes/classes/class-es-contacts-table.php:848
1896
  #: lite/includes/classes/class-es-contacts-table.php:1084
1897
  msgid "List(s)"
1898
  msgstr ""
1899
 
1900
+ #: lite/includes/classes/class-es-campaigns-table.php:635
1901
  msgid "Categories"
1902
  msgstr ""
1903
 
1904
+ #: lite/includes/classes/class-es-campaigns-table.php:636
1905
  #: lite/includes/classes/class-es-contacts-table.php:1085
1906
  #: lite/includes/classes/class-es-forms-table.php:923
1907
  #: lite/includes/classes/class-es-lists-table.php:575
1908
  msgid "Created"
1909
  msgstr ""
1910
 
1911
+ #: lite/includes/classes/class-es-campaigns-table.php:689
1912
  msgid "Search Campaigns"
1913
  msgstr ""
1914
 
1915
+ #: lite/includes/classes/class-es-campaigns-table.php:706
1916
  #: lite/includes/classes/class-es-reports-table.php:582
1917
  msgid "All Type"
1918
  msgstr ""
1919
 
1920
+ #: lite/includes/classes/class-es-campaigns-table.php:754
1921
  msgid "You are not allowed to delete campaign."
1922
  msgstr ""
1923
 
1924
+ #: lite/includes/classes/class-es-campaigns-table.php:759
1925
  msgid "Campaign deleted successfully!"
1926
  msgstr ""
1927
 
1928
+ #: lite/includes/classes/class-es-campaigns-table.php:780
1929
  msgid "Campaign(s) deleted successfully!"
1930
  msgstr ""
1931
 
1932
+ #: lite/includes/classes/class-es-campaigns-table.php:784
1933
  msgid "Please select campaign(s) to delete."
1934
  msgstr ""
1935
 
1936
  #: lite/includes/classes/class-es-contacts-table.php:70
1937
  #: lite/includes/classes/class-es-contacts-table.php:1083
1938
+ #: lite/includes/workflows/actions/class-es-action-delete-contact.php:31
1939
+ #: lite/includes/workflows/actions/class-es-action-update-contact.php:31
1940
  msgid "Contact"
1941
  msgstr ""
1942
 
2044
 
2045
  #: lite/includes/classes/class-es-contacts-table.php:808
2046
  #: lite/includes/pro-features.php:980
2047
+ #: pro/pro-class-email-subscribers.php:918
2048
  msgid "Enter email"
2049
  msgstr ""
2050
 
2091
  msgstr ""
2092
 
2093
  #: lite/includes/classes/class-es-contacts-table.php:1120
2094
+ #: lite/includes/workflows/actions/class-es-action-add-to-list.php:30
2095
  msgid "Add to list"
2096
  msgstr ""
2097
 
2255
  #: lite/includes/classes/class-es-import-subscribers.php:658
2256
  #: lite/includes/classes/class-es-import-subscribers.php:1049
2257
  #: lite/includes/classes/class-es-import-subscribers.php:1181
2258
+ #: pro/pro-class-email-subscribers.php:2224
2259
  msgid "First Name"
2260
  msgstr ""
2261
 
2264
  #: lite/includes/classes/class-es-import-subscribers.php:659
2265
  #: lite/includes/classes/class-es-import-subscribers.php:1054
2266
  #: lite/includes/classes/class-es-import-subscribers.php:1182
2267
+ #: pro/pro-class-email-subscribers.php:2225
2268
  msgid "Last Name"
2269
  msgstr ""
2270
 
2271
  #: lite/includes/classes/class-es-export-subscribers.php:340
2272
  #: lite/includes/classes/class-es-lists-table.php:33
2273
  #: lite/includes/compatibilities/elementor/actions/class-es-ig-form-action.php:51
2274
+ #: lite/includes/workflows/actions/class-es-action-add-to-list.php:31
2275
  #: pro/workflows/actions/class-es-action-move-to-list.php:30
2276
  #: pro/workflows/actions/class-es-action-remove-from-list.php:28
2277
  msgid "List"
3222
 
3223
  #. translators: 1: Page 2: Duplicate action 3: Campaign id 4: Wp nonce
3224
  #: lite/includes/classes/class-es-templates-table.php:203
3225
+ #: pro/pro-class-email-subscribers.php:1563
3226
  msgid "Duplicate"
3227
  msgstr ""
3228
 
3242
 
3243
  #: lite/includes/classes/class-es-widget.php:50
3244
  #: lite/includes/feedback.php:231
3245
+ #: starter/starter-class-email-subscribers.php:420
3246
  msgid "Yes"
3247
  msgstr ""
3248
 
3249
  #: lite/includes/classes/class-es-widget.php:51
3250
  #: lite/includes/feedback.php:235
3251
+ #: starter/starter-class-email-subscribers.php:420
3252
  msgid "No"
3253
  msgstr ""
3254
 
3451
  msgstr ""
3452
 
3453
  #: lite/includes/pro-features.php:155
3454
+ #: starter/starter-class-email-subscribers.php:644
3455
  msgid "You can allow different user roles access to different operations within Email Subscribers plugin. Please select which roles should have what access below."
3456
  msgstr ""
3457
 
3458
  #: lite/includes/pro-features.php:159
3459
+ #: starter/starter-class-email-subscribers.php:648
3460
  msgid "Roles"
3461
  msgstr ""
3462
 
3463
  #: lite/includes/pro-features.php:164
3464
+ #: starter/starter-class-email-subscribers.php:653
3465
  msgid "Sequences"
3466
  msgstr ""
3467
 
3468
  #: lite/includes/pro-features.php:224
3469
+ #: starter/starter-class-email-subscribers.php:618
3470
  msgid "Access Control"
3471
  msgstr ""
3472
 
3473
  #: lite/includes/pro-features.php:252
3474
+ #: pro/pro-class-email-subscribers.php:965
3475
  msgid "Track clicks"
3476
  msgstr ""
3477
 
3478
  #: lite/includes/pro-features.php:253
3479
+ #: pro/pro-class-email-subscribers.php:966
3480
  msgid "Do you want to track when people click links in your emails? (We recommend keeping it enabled)"
3481
  msgstr ""
3482
 
3494
  msgstr ""
3495
 
3496
  #: lite/includes/pro-features.php:267
3497
+ #: starter/starter-class-email-subscribers.php:530
3498
  msgid "Enabling this will let users unsubscribe from multiple lists at once. (We recommend keeping it enabled)"
3499
  msgstr ""
3500
 
3501
  #: lite/includes/pro-features.php:277
3502
+ #: starter/starter-class-email-subscribers.php:502
3503
  msgid "Nudge people to subscribe while leaving a comment or placing an order?"
3504
  msgstr ""
3505
 
3506
  #: lite/includes/pro-features.php:278
3507
+ #: starter/starter-class-email-subscribers.php:503
3508
  msgid "Adds a checkbox to subscribe when people post a comment or checkout (if you&rsquo;re using WooCommerce)."
3509
  msgstr ""
3510
 
3511
  #: lite/includes/pro-features.php:283
3512
+ #: starter/starter-class-email-subscribers.php:508
3513
  msgid "(toggle to enable this)"
3514
  msgstr ""
3515
 
3516
  #: lite/includes/pro-features.php:291
3517
+ #: starter/starter-class-email-subscribers.php:515
3518
  msgid "Opt-in consent message text"
3519
  msgstr ""
3520
 
3523
  msgstr ""
3524
 
3525
  #: lite/includes/pro-features.php:295
3526
+ #: starter/starter-class-email-subscribers.php:519
3527
  msgid "Opt-in consent text"
3528
  msgstr ""
3529
 
3530
  #: lite/includes/pro-features.php:339
3531
+ #: starter/starter-class-email-subscribers.php:465
3532
  msgid "Block known attackers"
3533
  msgstr ""
3534
 
3535
  #: lite/includes/pro-features.php:340
3536
+ #: starter/starter-class-email-subscribers.php:466
3537
  msgid "Stop spam bot attacker domains from signing up. Icegram maintains a blacklist of such attackers and enabling this option will keep the blacklist updated."
3538
  msgstr ""
3539
 
3547
  msgstr ""
3548
 
3549
  #: lite/includes/pro-features.php:353
3550
+ #: starter/starter-class-email-subscribers.php:473
3551
  msgid "Block temporary / fake emails"
3552
  msgstr ""
3553
 
3554
  #: lite/includes/pro-features.php:354
3555
+ #: starter/starter-class-email-subscribers.php:474
3556
  msgid "Plenty of sites provide disposable / fake / temporary email addresses. People use them when they don't want to give you their real email. Block such emails to keep your list clean. Turning this on will update the blacklist automatically."
3557
  msgstr ""
3558
 
3559
  #: lite/includes/pro-features.php:365
3560
+ #: starter/starter-class-email-subscribers.php:482
3561
  msgid "Enable Captcha"
3562
  msgstr ""
3563
 
3564
  #: lite/includes/pro-features.php:366
3565
+ #: starter/starter-class-email-subscribers.php:483
3566
  msgid "Prevent bot signups even further. Set default captcha option for new subscription forms."
3567
  msgstr ""
3568
 
3569
  #: lite/includes/pro-features.php:390
3570
+ #: pro/pro-class-email-subscribers.php:974
3571
  msgid "Track IP address"
3572
  msgstr ""
3573
 
3776
  msgstr ""
3777
 
3778
  #: lite/includes/pro-features.php:865
3779
+ #: starter/starter-class-email-subscribers.php:1231
3780
  msgid "Show a captcha to protect from bot signups."
3781
  msgstr ""
3782
 
3825
  msgstr ""
3826
 
3827
  #: lite/includes/pro-features.php:1007
3828
+ #: pro/pro-class-email-subscribers.php:784
3829
  msgid "Link tracking"
3830
  msgstr ""
3831
 
3834
  msgstr ""
3835
 
3836
  #: lite/includes/pro-features.php:1056
3837
+ #: pro/pro-class-email-subscribers.php:830
3838
  msgid "Send options"
3839
  msgstr ""
3840
 
3841
  #: lite/includes/pro-features.php:1059
3842
+ #: pro/pro-class-email-subscribers.php:835
3843
  msgid "Schedule for later"
3844
  msgstr ""
3845
 
3846
  #: lite/includes/pro-features.php:1075
3847
  #: lite/includes/workflows/fields/class-es-time.php:64
3848
+ #: pro/pro-class-email-subscribers.php:863
3849
  msgid "Time"
3850
  msgstr ""
3851
 
3852
  #: lite/includes/pro-features.php:1085
3853
+ #: pro/pro-class-email-subscribers.php:878
3854
  msgid "Local Time: "
3855
  msgstr ""
3856
 
3975
  msgstr ""
3976
 
3977
  #: lite/includes/pro-features.php:1612
3978
+ #: pro/pro-class-email-subscribers.php:1777
3979
  msgid "Add Attachments"
3980
  msgstr ""
3981
 
3982
  #: lite/includes/pro-features.php:1642
3983
+ #: pro/pro-class-email-subscribers.php:1896
3984
  msgid "Import existing WordPress users"
3985
  msgstr ""
3986
 
4067
  msgid "Email subject"
4068
  msgstr ""
4069
 
4070
+ #: lite/includes/workflows/actions/class-es-action-add-to-list.php:45
4071
  #: pro/workflows/actions/class-es-action-move-to-list.php:44
4072
  #: pro/workflows/actions/class-es-action-remove-from-list.php:42
4073
  msgid "Select List"
4074
  msgstr ""
4075
 
4076
+ #: lite/includes/workflows/actions/class-es-action-delete-contact.php:30
4077
  msgid "Delete Contact"
4078
  msgstr ""
4079
 
4080
+ #: lite/includes/workflows/actions/class-es-action-send-email.php:32
4081
  msgid "Send Email"
4082
  msgstr ""
4083
 
4084
+ #: lite/includes/workflows/actions/class-es-action-send-email.php:45
4085
  msgid "Email Content"
4086
  msgstr ""
4087
 
4088
+ #: lite/includes/workflows/actions/class-es-action-send-email.php:52
4089
+ msgid "Track opens and clicks"
4090
+ msgstr ""
4091
+
4092
+ #: lite/includes/workflows/actions/class-es-action-update-contact.php:30
4093
  msgid "Update Contact"
4094
  msgstr ""
4095
 
4452
  msgstr ""
4453
 
4454
  #: lite/includes/workflows/db/class-es-db-workflows.php:580
4455
+ #: pro/pro-class-email-subscribers.php:2559
4456
  msgid "Send confirmation email"
4457
  msgstr ""
4458
 
4533
  msgstr ""
4534
 
4535
  #: lite/includes/workflows/triggers/class-es-trigger-user-subscribed.php:31
 
4536
  msgid "Fires when someone subscribes."
4537
  msgstr ""
4538
 
4545
  msgid "User Unconfirmed"
4546
  msgstr ""
4547
 
4548
+ #: lite/includes/workflows/triggers/class-es-trigger-user-unconfirmed.php:31
4549
+ msgid "Fires when someone submit subscriber form."
4550
+ msgstr ""
4551
+
4552
  #: lite/includes/workflows/triggers/class-es-trigger-user-updated.php:30
4553
  msgid "User Updated"
4554
  msgstr ""
4574
  msgstr ""
4575
 
4576
  #: lite/public/class-email-subscribers-public.php:435
4577
+ #: starter/starter-class-email-subscribers.php:907
4578
  msgid "is subscribed to our mailing list(s)."
4579
  msgstr ""
4580
 
4587
  msgstr ""
4588
 
4589
  #: lite/public/class-email-subscribers-public.php:450
4590
+ #: starter/starter-class-email-subscribers.php:931
4591
  msgid "Unsubscribe"
4592
  msgstr ""
4593
 
4608
  msgstr ""
4609
 
4610
  #: lite/public/partials/cron-message.php:43
4611
+ #: pro/pro-class-email-subscribers.php:889
4612
  msgid "Send Now"
4613
  msgstr ""
4614
 
4686
 
4687
  #: pro/classes/class-es-pro-custom-fields-table.php:40
4688
  #: pro/classes/class-es-pro-custom-fields-table.php:92
4689
+ #: pro/pro-class-email-subscribers.php:421
4690
  msgid "Custom Fields"
4691
  msgstr ""
4692
 
4774
  msgstr ""
4775
 
4776
  #: pro/classes/class-es-pro-reports-data.php:261
4777
+ #: pro/pro-class-email-subscribers.php:1296
4778
  msgid "Clicked"
4779
  msgstr ""
4780
 
4853
  msgid "Not Opened"
4854
  msgstr ""
4855
 
4856
+ #: pro/classes/class-es-pro-send-mail-in-customer-timezone.php:49
4857
+ msgid "Enable sending mails in customer timezone?"
4858
  msgstr ""
4859
 
4860
+ #: pro/classes/class-es-pro-send-mail-in-customer-timezone.php:50
4861
+ msgid "Enable this option if you want Email Subscribers to send emails in the customer's timezone."
4862
+ msgstr ""
4863
+
4864
+ #: pro/classes/class-es-pro-sequence-report.php:201
4865
+ msgid "No Reports available."
4866
  msgstr ""
4867
 
4868
  #: pro/classes/class-es-pro-sequence-report.php:302
5033
  msgid "Lost"
5034
  msgstr ""
5035
 
5036
+ #: pro/pro-class-email-subscribers.php:220
5037
  msgid "Your cart has been restored."
5038
  msgstr ""
5039
 
5040
+ #: pro/pro-class-email-subscribers.php:223
5041
  msgid "Your cart could not be restored, it may have expired."
5042
  msgstr ""
5043
 
5044
+ #: pro/pro-class-email-subscribers.php:414
5045
  #: pro/pro-class-post-digest.php:25
5046
  msgid "Sequence"
5047
  msgstr ""
5048
 
5049
+ #: pro/pro-class-email-subscribers.php:561
5050
  msgid "Please enter an email address."
5051
  msgstr ""
5052
 
5053
+ #: pro/pro-class-email-subscribers.php:563
5054
  msgid "Add Attachment"
5055
  msgstr ""
5056
 
5057
  #. translators: %s: Attachmen max file size.
5058
+ #: pro/pro-class-email-subscribers.php:565
5059
  msgid "Please attach a file having size lower than %s."
5060
  msgstr ""
5061
 
5062
+ #: pro/pro-class-email-subscribers.php:566
5063
  msgid "Are you sure you want to delete this?"
5064
  msgstr ""
5065
 
5066
+ #: pro/pro-class-email-subscribers.php:567
5067
+ #: pro/pro-class-email-subscribers.php:2106
5068
  msgid "Checking your orders..."
5069
  msgstr ""
5070
 
5071
+ #: pro/pro-class-email-subscribers.php:692
5072
  msgid "Clean My List"
5073
  msgstr ""
5074
 
5075
+ #: pro/pro-class-email-subscribers.php:693
5076
  msgid "List cleanup is in progress..."
5077
  msgstr ""
5078
 
5079
+ #: pro/pro-class-email-subscribers.php:694
5080
  msgid "List cleanup completed successfully."
5081
  msgstr ""
5082
 
5083
+ #: pro/pro-class-email-subscribers.php:712
5084
  msgid "Email status"
5085
  msgstr ""
5086
 
5087
+ #: pro/pro-class-email-subscribers.php:713
5088
  msgid "Last opened at"
5089
  msgstr ""
5090
 
5091
+ #: pro/pro-class-email-subscribers.php:930
5092
  msgid "Select page"
5093
  msgstr ""
5094
 
5095
+ #: pro/pro-class-email-subscribers.php:943
5096
  msgid "Subscriber will be redirected to selected page (by default, homepage) once they click on unsubscribe link from the email."
5097
  msgstr ""
5098
 
5099
+ #: pro/pro-class-email-subscribers.php:956
5100
  msgid "Subscriber will be redirected to selected page (by default, homepage) once they click on email confirmation link from the double opt-in (confirmation) email."
5101
  msgstr ""
5102
 
5103
+ #: pro/pro-class-email-subscribers.php:989
5104
  msgid "Weekly summary"
5105
  msgstr ""
5106
 
5107
+ #: pro/pro-class-email-subscribers.php:994
5108
  msgid "Enable?"
5109
  msgstr ""
5110
 
5111
+ #: pro/pro-class-email-subscribers.php:1001
5112
  msgid "When our automated weekly email should be sent out?"
5113
  msgstr ""
5114
 
5115
+ #: pro/pro-class-email-subscribers.php:1010
5116
  msgid "In which time we need to send our weekly summary?"
5117
  msgstr ""
5118
 
5119
+ #: pro/pro-class-email-subscribers.php:1036
5120
  msgid "Access Key ID"
5121
  msgstr ""
5122
 
5123
+ #: pro/pro-class-email-subscribers.php:1049
5124
  msgid "Secret Access Key"
5125
  msgstr ""
5126
 
5127
+ #: pro/pro-class-email-subscribers.php:1063
5128
  msgid "Closest Region"
5129
  msgstr ""
5130
 
5131
+ #: pro/pro-class-email-subscribers.php:1065
5132
  msgid "To decrease network latency between your site and Amazon SES and speed up email sending, select the Amazon SES API region which is closest to where your website is hosted."
5133
  msgstr ""
5134
 
5135
+ #: pro/pro-class-email-subscribers.php:1092
5136
  msgid "Private API Key"
5137
  msgstr ""
5138
 
5139
+ #: pro/pro-class-email-subscribers.php:1106
5140
  msgid "Domain Name"
5141
  msgstr ""
5142
 
5143
+ #: pro/pro-class-email-subscribers.php:1117
5144
+ #: pro/pro-class-email-subscribers.php:1192
5145
  msgid "United States"
5146
  msgstr ""
5147
 
5148
+ #: pro/pro-class-email-subscribers.php:1118
5149
+ #: pro/pro-class-email-subscribers.php:1193
5150
  msgid "Europe"
5151
  msgstr ""
5152
 
5153
+ #: pro/pro-class-email-subscribers.php:1124
5154
+ #: pro/pro-class-email-subscribers.php:1199
5155
  msgid "Region"
5156
  msgstr ""
5157
 
5158
+ #: pro/pro-class-email-subscribers.php:1128
5159
  msgid "mailgun.com"
5160
  msgstr ""
5161
 
5162
+ #: pro/pro-class-email-subscribers.php:1154
5163
+ #: pro/pro-class-email-subscribers.php:1181
5164
  msgid "API Key"
5165
  msgstr ""
5166
 
5167
+ #: pro/pro-class-email-subscribers.php:1201
5168
  msgid "Define which endpoint you want to use for sending messages. If you are operating under EU laws, you may be required to use EU region."
5169
  msgstr ""
5170
 
5171
+ #: pro/pro-class-email-subscribers.php:1226
5172
  msgid "API token"
5173
  msgstr ""
5174
 
5175
+ #: pro/pro-class-email-subscribers.php:1585
5176
  msgid "You are not allowed to duplicate campaign."
5177
  msgstr ""
5178
 
5179
+ #: pro/pro-class-email-subscribers.php:1600
5180
  msgid "Campaign duplicated !"
5181
  msgstr ""
5182
 
5183
+ #: pro/pro-class-email-subscribers.php:1915
5184
  msgid "Import WordPress users with following roles"
5185
  msgstr ""
5186
 
5187
+ #: pro/pro-class-email-subscribers.php:1973
5188
+ #: pro/pro-class-email-subscribers.php:2113
5189
  msgid "Proceed "
5190
  msgstr ""
5191
 
5192
+ #: pro/pro-class-email-subscribers.php:2015
5193
  msgid "Import from WooCommerce orders"
5194
  msgstr ""
5195
 
5196
+ #: pro/pro-class-email-subscribers.php:2040
5197
  msgid "Select order statuses"
5198
  msgstr ""
5199
 
5200
+ #: pro/pro-class-email-subscribers.php:2094
5201
  msgid "Orders should contain these products"
5202
  msgstr ""
5203
 
5204
+ #: pro/pro-class-email-subscribers.php:2100
5205
  msgid "Search products..."
5206
  msgstr ""
5207
 
5208
  #. translators: 1. Processed orders count. 2. Total orders count. 3. Matched orders count.
5209
+ #: pro/pro-class-email-subscribers.php:2332
5210
  msgid "Currently %1$s of %2$s orders checked. Found %3$s matching orders."
5211
  msgstr ""
5212
 
5213
+ #: pro/pro-class-email-subscribers.php:2343
5214
  msgid "We can't find any matching orders in your store."
5215
  msgstr ""
5216
 
5217
+ #: pro/pro-class-email-subscribers.php:2356
5218
  msgid "Total Opened"
5219
  msgstr ""
5220
 
5221
+ #: pro/pro-class-email-subscribers.php:2409
5222
  msgid "How to configure Mailgun to send emails in the Email Subscribers plugin?"
5223
  msgstr ""
5224
 
5225
+ #: pro/pro-class-email-subscribers.php:2441
5226
  msgid "How to configure SendGrid to send emails in the Email Subscribers plugin?"
5227
  msgstr ""
5228
 
5229
+ #: pro/pro-class-email-subscribers.php:2473
5230
  msgid "How to configure Sparkpost to send emails in the Email Subscribers plugin?"
5231
  msgstr ""
5232
 
5233
+ #: pro/pro-class-email-subscribers.php:2505
5234
  msgid "How to configure Amazon SES to send emails in the Email Subscribers plugin?"
5235
  msgstr ""
5236
 
5237
+ #: pro/pro-class-email-subscribers.php:2537
5238
  msgid "How to configure Postmark to send emails in the Email Subscribers plugin?"
5239
  msgstr ""
5240
 
5241
+ #: pro/pro-class-email-subscribers.php:2574
5242
  msgid "Confirmation emails queued successfully and will be sent shortly."
5243
  msgstr ""
5244
 
5245
+ #: pro/pro-class-email-subscribers.php:2582
5246
  msgid "No contacts found. May be they are already queued or there isn't any unconfirmed contact in your selection."
5247
  msgstr ""
5248
 
5249
+ #: pro/pro-class-email-subscribers.php:2585
5250
  msgid "Failed to queue confirmation emails. Please try again later."
5251
  msgstr ""
5252
 
5699
  msgid "Are You a Human?"
5700
  msgstr ""
5701
 
5702
+ #: starter/starter-class-email-subscribers.php:316
5703
  msgid "No Thanks"
5704
  msgstr ""
5705
 
5706
+ #: starter/starter-class-email-subscribers.php:317
5707
  msgid "You won't receive further emails from us, thank you!"
5708
  msgstr ""
5709
 
5710
+ #: starter/starter-class-email-subscribers.php:383
5711
  msgid "SMTP Host"
5712
  msgstr ""
5713
 
5714
+ #: starter/starter-class-email-subscribers.php:392
5715
  msgid "SSL"
5716
  msgstr ""
5717
 
5718
+ #: starter/starter-class-email-subscribers.php:392
5719
  msgid "TLS"
5720
  msgstr ""
5721
 
5722
+ #: starter/starter-class-email-subscribers.php:397
5723
  msgid "Encryption"
5724
  msgstr ""
5725
 
5726
+ #: starter/starter-class-email-subscribers.php:411
5727
  msgid "SMTP Port"
5728
  msgstr ""
5729
 
5730
+ #: starter/starter-class-email-subscribers.php:425
5731
  msgid "Authentication"
5732
  msgstr ""
5733
 
5734
+ #: starter/starter-class-email-subscribers.php:439
5735
  msgid "SMTP Username"
5736
  msgstr ""
5737
 
5738
+ #: starter/starter-class-email-subscribers.php:453
5739
  msgid "SMTP Password"
5740
  msgstr ""
5741
 
5742
+ #: starter/starter-class-email-subscribers.php:529
5743
  msgid "Allow user to select list(s) while unsubscribe"
5744
  msgstr ""
5745
 
5746
+ #: starter/starter-class-email-subscribers.php:812
5747
  msgid "Please select a list to unsubscribe"
5748
  msgstr ""
5749
 
5750
+ #: starter/starter-class-email-subscribers.php:916
5751
  msgid "Unsubscribe from below mailing list(s)"
5752
  msgstr ""
5753
 
5754
+ #: starter/starter-class-email-subscribers.php:917
5755
  msgid "Unsubscribe from all the lists"
5756
  msgstr ""
5757
 
5758
+ #: starter/starter-class-email-subscribers.php:1326
5759
  msgid "Pause"
5760
  msgstr ""
5761
 
5762
+ #: starter/starter-class-email-subscribers.php:1334
5763
  msgid "Resume"
5764
  msgstr ""
5765
 
5766
+ #: starter/starter-class-email-subscribers.php:1358
5767
  msgid "Pause campaign"
5768
  msgstr ""
5769
 
5770
+ #: starter/starter-class-email-subscribers.php:1367
5771
  msgid "Resume campaign"
5772
  msgstr ""
5773
 
readme.txt CHANGED
@@ -6,7 +6,7 @@ Tags: email marketing, subscription, autoresponder, post notification, welcome e
6
  Requires at least: 3.9
7
  Tested up to: 5.8.1
8
  Requires PHP: 5.6
9
- Stable tag: 5.0.2
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
@@ -310,13 +310,20 @@ Refer [here](https://www.icegram.com/documentation/es-faq/).
310
 
311
  == Upgrade Notice ==
312
 
313
- = 5.0.2 =
314
 
315
- * Fix: Incorrect placeholder values in emails
316
- * Fix: Unable to send campaigns
 
317
 
318
  == Changelog ==
319
 
 
 
 
 
 
 
320
  **5.0.2 (19.11.2021)**
321
 
322
  * Fix: Incorrect placeholder values in emails
6
  Requires at least: 3.9
7
  Tested up to: 5.8.1
8
  Requires PHP: 5.6
9
+ Stable tag: 5.0.3
10
  License: GPLv3
11
  License URI: http://www.gnu.org/licenses
12
 
310
 
311
  == Upgrade Notice ==
312
 
313
+ = 5.0.3 =
314
 
315
+ * New: Send emails in customers timezone [PRO]
316
+ * New: Tracking for workflows
317
+ * Fix: UI fixes
318
 
319
  == Changelog ==
320
 
321
+ **5.0.3 (02.12.2021)**
322
+
323
+ * New: Send emails in customers timezone [PRO]
324
+ * New: Tracking for workflows
325
+ * Fix: UI fixes
326
+
327
  **5.0.2 (19.11.2021)**
328
 
329
  * Fix: Incorrect placeholder values in emails