Version Description
Download this release
Release Info
Developer | Icegram |
Plugin | Email Subscribers & Newsletters |
Version | 4.6.10 |
Comparing to | |
See all releases |
Code changes from version 4.6.9 to 4.6.10
- email-subscribers.php +5 -5
- lite/admin/class-ig-es-onboarding.php +1 -3
- lite/includes/classes/class-es-contacts-table.php +6 -14
- lite/includes/classes/class-es-cron.php +23 -2
- lite/includes/classes/class-es-handle-subscription.php +1 -1
- lite/includes/classes/class-es-reports-table.php +4 -2
- lite/includes/db/class-es-db-contacts.php +3 -4
- lite/includes/db/class-es-db-lists-contacts.php +1 -4
- lite/includes/es-backward.php +1 -1
- lite/includes/pro-features.php +18 -0
- lite/includes/workflows/abstracts/class-es-workflow-trigger.php +20 -0
- lite/includes/workflows/abstracts/class-ig-es-workflow-variable.php +2 -0
- lite/includes/workflows/actions/class-es-action-add-to-list.php +4 -2
- lite/includes/workflows/class-es-workflow-query.php +10 -6
- lite/includes/workflows/class-ig-es-replace-helper.php +2 -0
- lite/includes/workflows/class-ig-es-variables.php +1 -0
- lite/includes/workflows/class-ig-es-workflow-variable-parser.php +2 -2
- lite/includes/workflows/workflow-helper-functions.php +2 -1
- lite/public/class-email-subscribers-public.php +1 -1
- readme.txt +8 -2
email-subscribers.php
CHANGED
@@ -3,11 +3,11 @@
|
|
3 |
* Plugin Name: Email Subscribers & Newsletters
|
4 |
* Plugin URI: https://www.icegram.com/
|
5 |
* Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
|
6 |
-
* Version: 4.6.
|
7 |
* Author: Icegram
|
8 |
* Author URI: https://www.icegram.com/
|
9 |
* Requires at least: 3.9
|
10 |
-
* Tested up to: 5.6
|
11 |
* WC requires at least: 3.6.0
|
12 |
* WC tested up to: 4.9.2
|
13 |
* ES WOO: 7120515:9f4c7f8bb491260ef19edf9699db73e6
|
@@ -178,7 +178,7 @@ if ( 'premium' === $ig_es_plan ) {
|
|
178 |
/* ***************************** Initial Compatibility Work (End) ******************* */
|
179 |
|
180 |
if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
|
181 |
-
define( 'ES_PLUGIN_VERSION', '4.6.
|
182 |
}
|
183 |
|
184 |
// Plugin Folder Path.
|
@@ -249,7 +249,7 @@ if ( ! function_exists( 'activate_email_subscribers' ) ) {
|
|
249 |
if ( is_multisite() && $network_wide ) {
|
250 |
|
251 |
// Get all active blogs in the network and activate plugin on each one
|
252 |
-
$blog_ids = $wpdb->get_col(
|
253 |
foreach ( $blog_ids as $blog_id ) {
|
254 |
ig_es_activate_on_blog( $blog_id );
|
255 |
}
|
@@ -277,7 +277,7 @@ if ( ! function_exists( 'deactivate_email_subscribers' ) ) {
|
|
277 |
global $wpdb;
|
278 |
|
279 |
// Get all active blogs in the network.
|
280 |
-
$blog_ids = $wpdb->get_col(
|
281 |
foreach ( $blog_ids as $blog_id ) {
|
282 |
// Run deactivation code on each one
|
283 |
ig_es_trigger_deactivation_in_multisite( $blog_id );
|
3 |
* Plugin Name: Email Subscribers & Newsletters
|
4 |
* Plugin URI: https://www.icegram.com/
|
5 |
* Description: Add subscription forms on website, send HTML newsletters & automatically notify subscribers about new blog posts once it is published.
|
6 |
+
* Version: 4.6.10
|
7 |
* Author: Icegram
|
8 |
* Author URI: https://www.icegram.com/
|
9 |
* Requires at least: 3.9
|
10 |
+
* Tested up to: 5.6.1
|
11 |
* WC requires at least: 3.6.0
|
12 |
* WC tested up to: 4.9.2
|
13 |
* ES WOO: 7120515:9f4c7f8bb491260ef19edf9699db73e6
|
178 |
/* ***************************** Initial Compatibility Work (End) ******************* */
|
179 |
|
180 |
if ( ! defined( 'ES_PLUGIN_VERSION' ) ) {
|
181 |
+
define( 'ES_PLUGIN_VERSION', '4.6.10' );
|
182 |
}
|
183 |
|
184 |
// Plugin Folder Path.
|
249 |
if ( is_multisite() && $network_wide ) {
|
250 |
|
251 |
// Get all active blogs in the network and activate plugin on each one
|
252 |
+
$blog_ids = $wpdb->get_col( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE deleted = %d", 0 ) );
|
253 |
foreach ( $blog_ids as $blog_id ) {
|
254 |
ig_es_activate_on_blog( $blog_id );
|
255 |
}
|
277 |
global $wpdb;
|
278 |
|
279 |
// Get all active blogs in the network.
|
280 |
+
$blog_ids = $wpdb->get_col( $wpdb->prepare( "SELECT blog_id FROM $wpdb->blogs WHERE deleted = %d", 0 ) );
|
281 |
foreach ( $blog_ids as $blog_id ) {
|
282 |
// Run deactivation code on each one
|
283 |
ig_es_trigger_deactivation_in_multisite( $blog_id );
|
lite/admin/class-ig-es-onboarding.php
CHANGED
@@ -493,7 +493,6 @@ if ( ! class_exists( 'IG_ES_Onboarding' ) ) {
|
|
493 |
$admin_name = get_option( 'admin_email' );
|
494 |
$user = get_user_by( 'email', $admin_email );
|
495 |
$wp_user_id = 0;
|
496 |
-
$ip_address = ig_es_get_ip();
|
497 |
if ( $user instanceof WP_User ) {
|
498 |
$wp_user_id = $user->ID;
|
499 |
}
|
@@ -505,7 +504,6 @@ if ( ! class_exists( 'IG_ES_Onboarding' ) ) {
|
|
505 |
'last_name' => '',
|
506 |
'email' => $admin_email,
|
507 |
'source' => 'admin',
|
508 |
-
'ip_address' => $ip_address,
|
509 |
'form_id' => 0,
|
510 |
'status' => 'verified',
|
511 |
'unsubscribed' => 0,
|
@@ -522,7 +520,7 @@ if ( ! class_exists( 'IG_ES_Onboarding' ) ) {
|
|
522 |
'status' => 'subscribed',
|
523 |
'optin_type' => IG_SINGLE_OPTIN,
|
524 |
'subscribed_at' => ig_get_current_date_time(),
|
525 |
-
'subscribed_ip' =>
|
526 |
);
|
527 |
|
528 |
if ( ! empty( $default_list_id ) ) {
|
493 |
$admin_name = get_option( 'admin_email' );
|
494 |
$user = get_user_by( 'email', $admin_email );
|
495 |
$wp_user_id = 0;
|
|
|
496 |
if ( $user instanceof WP_User ) {
|
497 |
$wp_user_id = $user->ID;
|
498 |
}
|
504 |
'last_name' => '',
|
505 |
'email' => $admin_email,
|
506 |
'source' => 'admin',
|
|
|
507 |
'form_id' => 0,
|
508 |
'status' => 'verified',
|
509 |
'unsubscribed' => 0,
|
520 |
'status' => 'subscribed',
|
521 |
'optin_type' => IG_SINGLE_OPTIN,
|
522 |
'subscribed_at' => ig_get_current_date_time(),
|
523 |
+
'subscribed_ip' => '',
|
524 |
);
|
525 |
|
526 |
if ( ! empty( $default_list_id ) ) {
|
lite/includes/classes/class-es-contacts-table.php
CHANGED
@@ -873,15 +873,11 @@ class ES_Contacts_Table extends ES_List_Table {
|
|
873 |
return $this->get_lists_to_show( $item['id'] );
|
874 |
case 'created_at':
|
875 |
return ig_es_format_date_time( $item[ $column_name ] );
|
876 |
-
case 'ip':
|
877 |
-
$subscribed_ip = ! empty ( $item['ip_address'] ) ? $item['ip_address'] : '-';
|
878 |
|
879 |
-
return $subscribed_ip;
|
880 |
case 'first_name':
|
881 |
case 'email':
|
882 |
default:
|
883 |
$column_data = isset( $item[ $column_name ] ) ? $item[ $column_name ] : '-';
|
884 |
-
|
885 |
return apply_filters( 'ig_es_contact_column_data', $column_data, $column_name, $item, $this );
|
886 |
}
|
887 |
}
|
@@ -1025,17 +1021,13 @@ class ES_Contacts_Table extends ES_List_Table {
|
|
1025 |
*/
|
1026 |
public function get_columns() {
|
1027 |
$columns = array(
|
1028 |
-
'cb'
|
1029 |
-
'name'
|
1030 |
-
'email'
|
1031 |
-
'lists'
|
|
|
1032 |
);
|
1033 |
-
|
1034 |
-
if ( 'yes' === $can_track_ip ) {
|
1035 |
-
$columns['ip'] = __( 'IP', 'email-subscribers' );
|
1036 |
-
}
|
1037 |
-
$columns['created_at'] = __( 'Created', 'email-subscribers' );
|
1038 |
-
|
1039 |
return $columns;
|
1040 |
}
|
1041 |
|
873 |
return $this->get_lists_to_show( $item['id'] );
|
874 |
case 'created_at':
|
875 |
return ig_es_format_date_time( $item[ $column_name ] );
|
|
|
|
|
876 |
|
|
|
877 |
case 'first_name':
|
878 |
case 'email':
|
879 |
default:
|
880 |
$column_data = isset( $item[ $column_name ] ) ? $item[ $column_name ] : '-';
|
|
|
881 |
return apply_filters( 'ig_es_contact_column_data', $column_data, $column_name, $item, $this );
|
882 |
}
|
883 |
}
|
1021 |
*/
|
1022 |
public function get_columns() {
|
1023 |
$columns = array(
|
1024 |
+
'cb' => '<input type="checkbox"/>',
|
1025 |
+
'name' => __( 'Name', 'email-subscribers' ),
|
1026 |
+
'email' => __( 'Email', 'email-subscribers' ),
|
1027 |
+
'lists' => __( 'List(s)', 'email-subscribers' ),
|
1028 |
+
'created_at' => __( 'Created', 'email-subscribers' )
|
1029 |
);
|
1030 |
+
|
|
|
|
|
|
|
|
|
|
|
1031 |
return $columns;
|
1032 |
}
|
1033 |
|
lite/includes/classes/class-es-cron.php
CHANGED
@@ -118,6 +118,8 @@ class ES_Cron {
|
|
118 |
*/
|
119 |
public function schedule() {
|
120 |
|
|
|
|
|
121 |
// Add worker only once
|
122 |
if ( ! wp_next_scheduled( 'ig_es_cron_auto_responder' ) ) {
|
123 |
wp_schedule_event( floor( time() / 300 ) * 300 - 120, 'ig_es_cron_interval', 'ig_es_cron_auto_responder' );
|
@@ -127,10 +129,24 @@ class ES_Cron {
|
|
127 |
wp_schedule_event( floor( time() / 300 ) * 300, 'ig_es_cron_interval', 'ig_es_cron_worker' );
|
128 |
}
|
129 |
|
130 |
-
|
131 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
}
|
133 |
|
|
|
134 |
}
|
135 |
|
136 |
/**
|
@@ -249,6 +265,11 @@ class ES_Cron {
|
|
249 |
'display' => esc_html__( 'Two minutes', 'email-subscribers' ),
|
250 |
);
|
251 |
|
|
|
|
|
|
|
|
|
|
|
252 |
return $schedules;
|
253 |
}
|
254 |
|
118 |
*/
|
119 |
public function schedule() {
|
120 |
|
121 |
+
global $ig_es_tracker;
|
122 |
+
|
123 |
// Add worker only once
|
124 |
if ( ! wp_next_scheduled( 'ig_es_cron_auto_responder' ) ) {
|
125 |
wp_schedule_event( floor( time() / 300 ) * 300 - 120, 'ig_es_cron_interval', 'ig_es_cron_auto_responder' );
|
129 |
wp_schedule_event( floor( time() / 300 ) * 300, 'ig_es_cron_interval', 'ig_es_cron_worker' );
|
130 |
}
|
131 |
|
132 |
+
$is_woocommerce_active = $ig_es_tracker::is_plugin_activated( 'woocommerce/woocommerce.php' );
|
133 |
+
|
134 |
+
if ( $is_woocommerce_active && ES()->is_pro() ) {
|
135 |
+
|
136 |
+
if ( IG_ES_Abandoned_Cart_Options::is_cart_tracking_enabled() ) {
|
137 |
+
|
138 |
+
if ( ! wp_next_scheduled( 'ig_es_wc_abandoned_cart_worker' ) ) {
|
139 |
+
wp_schedule_event( floor( time() / 300 ) * 300, 'ig_es_two_minutes', 'ig_es_wc_abandoned_cart_worker' );
|
140 |
+
}
|
141 |
+
}
|
142 |
+
|
143 |
+
// Cron job to detect WooCommerce products which are on sale.
|
144 |
+
if ( ! wp_next_scheduled( 'ig_es_wc_products_on_sale_worker' ) ) {
|
145 |
+
wp_schedule_event( floor( time() / 300 ) * 300, 'ig_es_fifteen_minutes', 'ig_es_wc_products_on_sale_worker' );
|
146 |
+
}
|
147 |
}
|
148 |
|
149 |
+
|
150 |
}
|
151 |
|
152 |
/**
|
265 |
'display' => esc_html__( 'Two minutes', 'email-subscribers' ),
|
266 |
);
|
267 |
|
268 |
+
$schedules['ig_es_fifteen_minutes'] = array(
|
269 |
+
'interval' => 900,
|
270 |
+
'display' => esc_html__( 'Fifteen minutes', 'email-subscribers' ),
|
271 |
+
);
|
272 |
+
|
273 |
return $schedules;
|
274 |
}
|
275 |
|
lite/includes/classes/class-es-handle-subscription.php
CHANGED
@@ -275,7 +275,7 @@ if ( ! class_exists( 'ES_Handle_Subscription' ) ) {
|
|
275 |
'status' => $this->status,
|
276 |
'subscribed_at' => ( 'subscribed' === $this->status ) ? ig_get_current_date_time() : '',
|
277 |
'optin_type' => $optin_type,
|
278 |
-
'subscribed_ip' =>
|
279 |
);
|
280 |
|
281 |
ES()->lists_contacts_db->add_contact_to_lists( $list_contact_data, $this->list_ids );
|
275 |
'status' => $this->status,
|
276 |
'subscribed_at' => ( 'subscribed' === $this->status ) ? ig_get_current_date_time() : '',
|
277 |
'optin_type' => $optin_type,
|
278 |
+
'subscribed_ip' => '',
|
279 |
);
|
280 |
|
281 |
ES()->lists_contacts_db->add_contact_to_lists( $list_contact_data, $this->list_ids );
|
lite/includes/classes/class-es-reports-table.php
CHANGED
@@ -301,7 +301,7 @@ class ES_Reports_Table extends ES_List_Table {
|
|
301 |
*/
|
302 |
public function column_default( $item, $column_name ) {
|
303 |
global $wpdb;
|
304 |
-
|
305 |
switch ( $column_name ) {
|
306 |
case 'start_at':
|
307 |
case 'finish_at':
|
@@ -324,7 +324,9 @@ class ES_Reports_Table extends ES_List_Table {
|
|
324 |
case 'count':
|
325 |
return $item[ $column_name ];
|
326 |
default:
|
327 |
-
|
|
|
|
|
328 |
}
|
329 |
}
|
330 |
|
301 |
*/
|
302 |
public function column_default( $item, $column_name ) {
|
303 |
global $wpdb;
|
304 |
+
$item = apply_filters( 'es_add_additional_report_column_data', $item, $column_name );
|
305 |
switch ( $column_name ) {
|
306 |
case 'start_at':
|
307 |
case 'finish_at':
|
324 |
case 'count':
|
325 |
return $item[ $column_name ];
|
326 |
default:
|
327 |
+
$column_data = isset( $item[ $column_name ] ) ? $item[ $column_name ] : '-';
|
328 |
+
|
329 |
+
return $column_data;
|
330 |
}
|
331 |
}
|
332 |
|
lite/includes/db/class-es-db-contacts.php
CHANGED
@@ -937,15 +937,14 @@ class ES_DB_Contacts extends ES_DB {
|
|
937 |
*/
|
938 |
public function insert( $data, $type = '' ) {
|
939 |
$source = array( 'admin','import' );
|
940 |
-
$can_track_ip = apply_filters('ig_es_can_track_subscriber_ip', 'yes' );
|
941 |
|
942 |
-
if (
|
943 |
$data['ip_address'] = '';
|
944 |
$data['country_code'] = '';
|
945 |
} else {
|
946 |
if ( empty( $data['ip_address'] ) && ! in_array( $data['source'], $source ) ) {
|
947 |
-
|
948 |
-
|
949 |
}
|
950 |
}
|
951 |
return parent::insert( $data, $type );
|
937 |
*/
|
938 |
public function insert( $data, $type = '' ) {
|
939 |
$source = array( 'admin','import' );
|
|
|
940 |
|
941 |
+
if ( ! ES()->is_pro() ) {
|
942 |
$data['ip_address'] = '';
|
943 |
$data['country_code'] = '';
|
944 |
} else {
|
945 |
if ( empty( $data['ip_address'] ) && ! in_array( $data['source'], $source ) ) {
|
946 |
+
$data = apply_filters( 'ig_es_get_subscriber_ip', $data, 'ip_address' );
|
947 |
+
$data = apply_filters( 'ig_es_get_country_based_on_ip', $data );
|
948 |
}
|
949 |
}
|
950 |
return parent::insert( $data, $type );
|
lite/includes/db/class-es-db-lists-contacts.php
CHANGED
@@ -107,10 +107,7 @@ class ES_DB_Lists_Contacts extends ES_DB {
|
|
107 |
|
108 |
if ( is_array( $list_ids ) && count( $list_ids ) > 0 ) {
|
109 |
|
110 |
-
$
|
111 |
-
if ( 'no' === $can_track_ip && ES()->is_pro() ) {
|
112 |
-
$contact_data['subscribed_ip'] = '';
|
113 |
-
}
|
114 |
|
115 |
// Remove entry if it's already there in a list
|
116 |
$contact_id = ! empty( $contact_data['contact_id'] ) ? $contact_data['contact_id'] : 0;
|
107 |
|
108 |
if ( is_array( $list_ids ) && count( $list_ids ) > 0 ) {
|
109 |
|
110 |
+
$contact_data = apply_filters( 'ig_es_get_subscriber_ip', $contact_data, 'subscribed_ip' );
|
|
|
|
|
|
|
111 |
|
112 |
// Remove entry if it's already there in a list
|
113 |
$contact_id = ! empty( $contact_data['contact_id'] ) ? $contact_data['contact_id'] : 0;
|
lite/includes/es-backward.php
CHANGED
@@ -76,7 +76,7 @@ class es_cls_dbquery {
|
|
76 |
'status' => $status,
|
77 |
'optin_type' => $optin_type,
|
78 |
'subscribed_at' => ig_get_current_date_time(),
|
79 |
-
'subscribed_ip' =>
|
80 |
);
|
81 |
|
82 |
ES()->lists_contacts_db->add_contact_to_lists( $list_contact_data, $list_id );
|
76 |
'status' => $status,
|
77 |
'optin_type' => $optin_type,
|
78 |
'subscribed_at' => ig_get_current_date_time(),
|
79 |
+
'subscribed_ip' => '',
|
80 |
);
|
81 |
|
82 |
ES()->lists_contacts_db->add_contact_to_lists( $list_contact_data, $list_id );
|
lite/includes/pro-features.php
CHANGED
@@ -280,6 +280,24 @@ function ig_es_add_upsale( $fields ) {
|
|
280 |
|
281 |
}
|
282 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
283 |
return $fields;
|
284 |
}
|
285 |
|
280 |
|
281 |
}
|
282 |
|
283 |
+
if ( ES()->can_upsell_features( array( 'lite', 'starter', 'trial' ) ) ) {
|
284 |
+
$track_ip_address['ig_es_track_ip_address'] = array(
|
285 |
+
'id' => 'ig_es_track_ip_address_p',
|
286 |
+
'name' => __( 'Track IP address', 'email-subscribers' ),
|
287 |
+
'info' => __( 'Store IP address on subscription', 'email-subscribers' ),
|
288 |
+
'type' => 'checkbox',
|
289 |
+
'default' => 'no',
|
290 |
+
'is_premium' => true,
|
291 |
+
'link' => ES_Common::get_utm_tracking_url( array( 'utm_medium' => 'ip_tracking' ) ),
|
292 |
+
'disabled' => true,
|
293 |
+
/* translators: %s: Icegram Pricing page url with utm tracking */
|
294 |
+
'upgrade_title' => __( 'Track subscribers IP addresses with PRO', 'email-subscribers' ),
|
295 |
+
'upgrade_desc' => __( 'Enable IP tracking and get more information about your subscribers <b>eg.</b> which country your subscribers are from.', 'email-subscribers' ),
|
296 |
+
);
|
297 |
+
|
298 |
+
$fields['security_settings'] = array_merge( $fields['security_settings'], $track_ip_address );
|
299 |
+
}
|
300 |
+
|
301 |
return $fields;
|
302 |
}
|
303 |
|
lite/includes/workflows/abstracts/class-es-workflow-trigger.php
CHANGED
@@ -236,6 +236,26 @@ abstract class ES_Workflow_Trigger {
|
|
236 |
return $this->fields;
|
237 |
}
|
238 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
239 |
/**
|
240 |
* Get workflow ids registered to use this trigger
|
241 |
*
|
236 |
return $this->fields;
|
237 |
}
|
238 |
|
239 |
+
/**
|
240 |
+
* Check if there are active workflow for this trigger
|
241 |
+
*
|
242 |
+
* @return bool
|
243 |
+
*
|
244 |
+
* @since 4.6.10
|
245 |
+
*/
|
246 |
+
public function has_workflows() {
|
247 |
+
|
248 |
+
$workflow_query = new ES_Workflow_Query();
|
249 |
+
$workflow_query->set_triggers( $this->get_name() );
|
250 |
+
|
251 |
+
$workflows = $workflow_query->get_results();
|
252 |
+
if ( ! empty( $workflows ) ) {
|
253 |
+
return true;
|
254 |
+
}
|
255 |
+
|
256 |
+
return false;
|
257 |
+
}
|
258 |
+
|
259 |
/**
|
260 |
* Get workflow ids registered to use this trigger
|
261 |
*
|
lite/includes/workflows/abstracts/class-ig-es-workflow-variable.php
CHANGED
@@ -20,6 +20,7 @@ abstract class IG_ES_Workflow_Variable {
|
|
20 |
|
21 |
/**
|
22 |
* Variable description
|
|
|
23 |
* @var string
|
24 |
*/
|
25 |
protected $description;
|
@@ -92,6 +93,7 @@ abstract class IG_ES_Workflow_Variable {
|
|
92 |
|
93 |
/**
|
94 |
* Sets the name, data_type and data_field props
|
|
|
95 |
* @param $name
|
96 |
*/
|
97 |
public function setup( $name ) {
|
20 |
|
21 |
/**
|
22 |
* Variable description
|
23 |
+
*
|
24 |
* @var string
|
25 |
*/
|
26 |
protected $description;
|
93 |
|
94 |
/**
|
95 |
* Sets the name, data_type and data_field props
|
96 |
+
*
|
97 |
* @param $name
|
98 |
*/
|
99 |
public function setup( $name ) {
|
lite/includes/workflows/actions/class-es-action-add-to-list.php
CHANGED
@@ -67,8 +67,10 @@ class ES_Action_Add_To_List extends ES_Workflow_Action {
|
|
67 |
if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
|
68 |
continue;
|
69 |
}
|
70 |
-
|
71 |
-
|
|
|
|
|
72 |
|
73 |
// Check if we have WC_Order object.
|
74 |
if ( $data_item instanceof WC_Order && is_callable( array( $data_item, 'get_items' ) ) ) {
|
67 |
if ( ! $data_type || ! $data_type->validate( $data_item ) ) {
|
68 |
continue;
|
69 |
}
|
70 |
+
if ( is_callable( array( $data_item, 'get_data' ) ) ) {
|
71 |
+
$data = $data_type->get_data( $data_item );
|
72 |
+
$this->add_contact( $list_id, $data );
|
73 |
+
}
|
74 |
|
75 |
// Check if we have WC_Order object.
|
76 |
if ( $data_item instanceof WC_Order && is_callable( array( $data_item, 'get_items' ) ) ) {
|
lite/includes/workflows/class-es-workflow-query.php
CHANGED
@@ -77,16 +77,20 @@ class ES_Workflow_Query {
|
|
77 |
/**
|
78 |
* Set trigger name or array of names to query.
|
79 |
*
|
80 |
-
* @param string|ES_Workflow_Trigger $trigger Workflow trigger object|name.
|
81 |
*/
|
82 |
public function set_triggers( $triggers ) {
|
83 |
if ( ! empty( $triggers ) ) {
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
|
|
|
|
89 |
}
|
|
|
|
|
90 |
}
|
91 |
}
|
92 |
}
|
77 |
/**
|
78 |
* Set trigger name or array of names to query.
|
79 |
*
|
80 |
+
* @param string|ES_Workflow_Trigger[] $trigger Workflow trigger object|name.
|
81 |
*/
|
82 |
public function set_triggers( $triggers ) {
|
83 |
if ( ! empty( $triggers ) ) {
|
84 |
+
if ( is_array( $triggers ) ) {
|
85 |
+
foreach ( $triggers as $trigger ) {
|
86 |
+
if ( $trigger instanceof ES_Workflow_Trigger ) {
|
87 |
+
$this->triggers[] = $trigger->get_name();
|
88 |
+
} else {
|
89 |
+
$this->triggers[] = $trigger;
|
90 |
+
}
|
91 |
}
|
92 |
+
} else if ( is_string( $triggers ) ) {
|
93 |
+
$this->triggers[] = $triggers;
|
94 |
}
|
95 |
}
|
96 |
}
|
lite/includes/workflows/class-ig-es-replace-helper.php
CHANGED
@@ -28,6 +28,7 @@ class IG_ES_Replace_Helper {
|
|
28 |
|
29 |
/**
|
30 |
* Pattern string
|
|
|
31 |
* @var string
|
32 |
*/
|
33 |
public $string;
|
@@ -74,6 +75,7 @@ class IG_ES_Replace_Helper {
|
|
74 |
|
75 |
/**
|
76 |
* Pre process match before using the actual callback
|
|
|
77 |
* @param $match
|
78 |
* @return string
|
79 |
*/
|
28 |
|
29 |
/**
|
30 |
* Pattern string
|
31 |
+
*
|
32 |
* @var string
|
33 |
*/
|
34 |
public $string;
|
75 |
|
76 |
/**
|
77 |
* Pre process match before using the actual callback
|
78 |
+
*
|
79 |
* @param $match
|
80 |
* @return string
|
81 |
*/
|
lite/includes/workflows/class-ig-es-variables.php
CHANGED
@@ -108,6 +108,7 @@ class IG_ES_Variables {
|
|
108 |
|
109 |
/**
|
110 |
* Variable class object
|
|
|
111 |
* @var IG_ES_Variable $variable_object
|
112 |
*/
|
113 |
$variable_object = require_once $path;
|
108 |
|
109 |
/**
|
110 |
* Variable class object
|
111 |
+
*
|
112 |
* @var IG_ES_Variable $variable_object
|
113 |
*/
|
114 |
$variable_object = require_once $path;
|
lite/includes/workflows/class-ig-es-workflow-variable-parser.php
CHANGED
@@ -14,8 +14,7 @@ class IG_ES_Workflow_Variable_Parser {
|
|
14 |
/**
|
15 |
* Variable name
|
16 |
* e.g. wc_order.id, cart.link, user.first_name etc
|
17 |
-
*
|
18 |
-
*
|
19 |
* @var string
|
20 |
*/
|
21 |
public $name;
|
@@ -110,6 +109,7 @@ class IG_ES_Workflow_Variable_Parser {
|
|
110 |
|
111 |
/**
|
112 |
* Remove single quotes from start and end of a string
|
|
|
113 |
* @param $string
|
114 |
* @return string
|
115 |
*/
|
14 |
/**
|
15 |
* Variable name
|
16 |
* e.g. wc_order.id, cart.link, user.first_name etc
|
17 |
+
*
|
|
|
18 |
* @var string
|
19 |
*/
|
20 |
public $name;
|
109 |
|
110 |
/**
|
111 |
* Remove single quotes from start and end of a string
|
112 |
+
*
|
113 |
* @param $string
|
114 |
* @return string
|
115 |
*/
|
lite/includes/workflows/workflow-helper-functions.php
CHANGED
@@ -88,7 +88,8 @@ function ig_es_generate_key( $length = 25, $case_sensitive = true, $more_numbers
|
|
88 |
}
|
89 |
|
90 |
/**
|
91 |
-
* str_replace but limited to one replacement
|
|
|
92 |
* @param string$subject
|
93 |
* @param string$find
|
94 |
* @param string $replace
|
88 |
}
|
89 |
|
90 |
/**
|
91 |
+
* Does str_replace but limited to one replacement
|
92 |
+
*
|
93 |
* @param string$subject
|
94 |
* @param string$find
|
95 |
* @param string $replace
|
lite/public/class-email-subscribers-public.php
CHANGED
@@ -324,7 +324,7 @@ class Email_Subscribers_Public {
|
|
324 |
'status' => 'subscribed',
|
325 |
'subscribed_at' => ig_get_current_date_time(),
|
326 |
'optin_type' => $optin_type,
|
327 |
-
'subscribed_ip' =>
|
328 |
);
|
329 |
|
330 |
ES()->lists_contacts_db->remove_contacts_from_lists( $contact_id, $list_id );
|
324 |
'status' => 'subscribed',
|
325 |
'subscribed_at' => ig_get_current_date_time(),
|
326 |
'optin_type' => $optin_type,
|
327 |
+
'subscribed_ip' => '',
|
328 |
);
|
329 |
|
330 |
ES()->lists_contacts_db->remove_contacts_from_lists( $contact_id, $list_id );
|
readme.txt
CHANGED
@@ -4,9 +4,9 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
|
|
4 |
Author URI: https://www.icegram.com/
|
5 |
Tags: email marketing, subscription, autoresponder, post notification, welcome email
|
6 |
Requires at least: 3.9
|
7 |
-
Tested up to: 5.6
|
8 |
Requires PHP: 5.6
|
9 |
-
Stable tag: 4.6.
|
10 |
License: GPLv3
|
11 |
License URI: http://www.gnu.org/licenses
|
12 |
|
@@ -304,6 +304,12 @@ Refer [here](https://www.icegram.com/documentation/es-faq/).
|
|
304 |
|
305 |
== Changelog ==
|
306 |
|
|
|
|
|
|
|
|
|
|
|
|
|
307 |
**4.6.9 (05.02.2021)**
|
308 |
|
309 |
* New: Added placeholder keyword support for WooCommerce [PRO]
|
4 |
Author URI: https://www.icegram.com/
|
5 |
Tags: email marketing, subscription, autoresponder, post notification, welcome email
|
6 |
Requires at least: 3.9
|
7 |
+
Tested up to: 5.6.1
|
8 |
Requires PHP: 5.6
|
9 |
+
Stable tag: 4.6.10
|
10 |
License: GPLv3
|
11 |
License URI: http://www.gnu.org/licenses
|
12 |
|
304 |
|
305 |
== Changelog ==
|
306 |
|
307 |
+
**4.6.10 (15.02.2021)**
|
308 |
+
|
309 |
+
* New: Added additional stats on campaigns reports dashboard
|
310 |
+
* Update: Disable IP tracking in lite version by default to make GDPR compliant
|
311 |
+
* Fix: Database vulnerability
|
312 |
+
|
313 |
**4.6.9 (05.02.2021)**
|
314 |
|
315 |
* New: Added placeholder keyword support for WooCommerce [PRO]
|