table_name = $wpdb->prefix . 'ig_contacts'; $this->primary_key = 'id'; $this->version = '1.0'; } /** * Get columns * * @return array * * @since 4.0.0 */ public function get_columns() { $columns = array( 'id' => '%d', 'wp_user_id' => '%d', 'first_name' => '%s', 'last_name' => '%s', 'email' => '%s', 'source' => '%s', 'ip_address' => '%s', 'country_code' => '%s', 'form_id' => '%d', 'status' => '%s', 'reference_site' => '%s', 'unsubscribed' => '%d', 'hash' => '%s', 'engagement_score' => '%f', 'created_at' => '%s', 'updated_at' => '%s', 'is_verified' => '%d', 'is_disposable' => '%d', 'is_rolebased' => '%d', 'is_webmail' => '%d', 'is_deliverable' => '%d', 'is_sendsafely' => '%d', 'timezone' => '%s', 'meta' => '%s', ); $custom_field_data = ES()->custom_fields_db->get_custom_fields(); $custom_field_cols = array(); if ( count( $custom_field_data ) > 0 ) { foreach ($custom_field_data as $key => $data) { $type = '%s'; if ( isset( $data[ 'type' ] ) && 'number' === $data[ 'type' ] ) { $type = '%d'; } $custom_field_cols[$data['slug']] = $type; } } $columns = array_merge( $columns, $custom_field_cols); return $columns; } /** * Get default column values * * @since 4.0.0 */ public function get_column_defaults() { $default_col_values = array( 'wp_user_id' => 0, 'first_name' => '', 'last_name' => '', 'email' => '', 'source' => '', 'ip_address' => '', 'country_code' => '', 'form_id' => 0, 'status' => 'verified', 'reference_site' => '', 'unsubscribed' => 0, 'hash' => '', 'engagement_score' => 4, 'created_at' => ig_get_current_date_time(), 'updated_at' => '', 'is_verified' => 1, 'is_disposable' => 0, 'is_rolebased' => 0, 'is_webmail' => 0, 'is_deliverable' => 1, 'is_sendsafely' => 1, 'timezone' => '', 'meta' => '', ); $custom_field_data = ES()->custom_fields_db->get_custom_fields(); $custom_field_cols = array(); if ( count( $custom_field_data ) > 0 ) { foreach ($custom_field_data as $key => $data) { $custom_field_cols[$data['slug']] = null; } } $columns = array_merge( $default_col_values, $custom_field_cols); return $columns; } /** * Get by id * * @param $id * * @return array|object|void|null * * @since 4.0.0 */ public function get_by_id( $id ) { return $this->get( $id ); } /** * Retrieve the unsubscribe reason by $contact_id and $list_id. * * @param $contact_id,$list_id * * @return array|object|void|null */ public function get_unsubscriber_reason( $contact_id, $list_id) { global $wpbd; if (empty($contact_id) || empty($list_id)) { return ''; } $table_name = $wpbd->prefix . 'ig_unsubscribe_feedback'; $unsubscriber_reason = $wpbd->get_var( $wpbd->prepare( "SELECT feedback_text FROM $table_name WHERE contact_id = %d AND list_id = %d", $contact_id, $list_id ) ); return $unsubscriber_reason ? $unsubscriber_reason : ''; } /** * Get contact email name map * * @param array $emails * * @return array * * @since 4.2.2 */ public function get_contacts_email_name_map( $emails = array() ) { global $wpbd; $subscriber_email_name_map = array(); if ( count( $emails ) > 0 ) { $emails_str = "'" . implode( "','", $emails ) . "'"; $subscribers = $wpbd->get_results( "SELECT email, first_name, last_name FROM {$wpbd->prefix}ig_contacts WHERE email IN({$emails_str})", ARRAY_A ); if ( count( $subscribers ) > 0 ) { foreach ( $subscribers as $subscriber ) { $name = ES_Common::prepare_name_from_first_name_last_name( $subscriber['first_name'], $subscriber['last_name'] ); $subscriber_email_name_map[ $subscriber['email'] ] = array( 'name' => $name, 'first_name' => $subscriber['first_name'], 'last_name' => $subscriber['last_name'], ); } } } return $subscriber_email_name_map; } /** * Update contact * * @param int $id * * @return void * * @since 4.3.2 */ public function update_contact( $contact_id = 0, $data = array() ) { if ( ! empty( $contact_id ) ) { $email = ! empty( $data['email'] ) ? sanitize_email( $data['email'] ) : ''; if ( ! empty( $email ) ) { $first_name = ! empty( $data['first_name'] ) ? sanitize_text_field( $data['first_name'] ) : ''; $last_name = ! empty( $data['last_name'] ) ? sanitize_text_field( $data['last_name'] ) : ''; $data_to_update = array( 'first_name' => $first_name, 'last_name' => $last_name, 'email' => $email, 'updated_at' => ig_get_current_date_time(), ); foreach ( $data as $key => $value ) { if ( strpos( $key, 'cf_') !== false ) { $data_to_update[$key] = sanitize_text_field( $value ); } } $this->update( $contact_id, $data_to_update ); } } } /** * Get contact hash by contact id * * @param $id * * @return array|string|null * * @since 4.0.0 */ public function get_contact_hash_by_id( $id ) { if ( ! empty( $id ) ) { return $this->get_column( 'hash', $id ); } return ''; } /** * Is contacts exists based on id & email? * * @param string $id * @param string $email * * @return bool * * @since 4.0.0 * * @modify 4.2.4 */ public function is_contact_exists( $id = '', $email = '' ) { global $wpdb; if ( ! empty( $id ) && ! empty( $email ) ) { $where = $wpdb->prepare( 'id = %d AND email = %s', $id, $email ); $count = $this->count( $where ); if ( $count ) { return true; } } return false; } /** * Get active contacts by list_id * * @param $list_id * * @return array|object|null * * @since 4.2.4 */ public function get_active_contacts_by_list_id( $list_id ) { if ( empty( $list_id ) ) { return array(); } global $wpdb; // Check if we have got array of list ids. if ( is_array( $list_id ) ) { $list_ids_str = implode( ',', $list_id ); } else { $list_ids_str = $list_id; } $where = "id IN (SELECT contact_id FROM {$wpdb->prefix}ig_lists_contacts WHERE list_id IN({$list_ids_str}) AND status IN ('subscribed', 'confirmed'))"; return $this->get_by_conditions( $where ); } /** * Get active contacts by list_id and excluding contacts from sending queue having given mailing_queue_id * * @param $list_id * @param $mailing_queue_id * * @return array|object|null * * @since 4.6.3 */ public function get_active_contacts_by_list_and_mailing_queue_id( $list_id, $mailing_queue_id = 0 ) { if ( empty( $list_id ) ) { return array(); } global $wpbd; // Check if we have got array of list ids. if ( is_array( $list_id ) ) { $ids_count = count( $list_id ); $ids_placeholders = array_fill( 0, $ids_count, '%d' ); $query_args = $list_id; $query_args[] = $mailing_queue_id; $where = $wpbd->prepare( "id IN (SELECT contact_id FROM {$wpbd->prefix}ig_lists_contacts WHERE list_id IN( " . implode( ',', $ids_placeholders ) . " ) AND status IN ('subscribed', 'confirmed')) AND id NOT IN(SELECT contact_id FROM {$wpbd->prefix}ig_sending_queue WHERE mailing_queue_id = %d )", $query_args ); } else { $where = $wpbd->prepare( "id IN (SELECT contact_id FROM {$wpbd->prefix}ig_lists_contacts WHERE list_id = %d AND status IN ('subscribed', 'confirmed')) AND id NOT IN(SELECT contact_id FROM {$wpbd->prefix}ig_sending_queue WHERE mailing_queue_id = %d )", $list_id, $mailing_queue_id ); } return $this->get_by_conditions( $where ); } /** * Get contacts by ids * * @param $ids * * @return array|object|null * * @since 4.2.1 * * @modify 4.2.4 */ public function get_contacts_by_ids( $ids ) { if ( ! is_array( $ids ) && ! count( $ids ) > 0 ) { return array(); } $ids_str = $this->prepare_for_in_query( $ids ); $where = "id IN ($ids_str)"; return $this->get_by_conditions( $where ); } /** * Count Active Contacts by list id * * @param string $list_id * * @return string|null * * @since 4.2.4 */ public function count_active_contacts_by_list_id( $list_id = '' ) { global $wpdb; if ( ! empty( $list_id ) ) { $subscribers = $wpdb->get_var( $wpdb->prepare( "SELECT count(distinct(contact_id)) as total_subscribers FROM {$wpdb->prefix}ig_lists_contacts WHERE status = %s AND list_id = %d", 'subscribed', $list_id ) ); } else { $subscribers = $wpdb->get_var( $wpdb->prepare( "SELECT count(distinct(contact_id)) as total_subscribers FROM {$wpdb->prefix}ig_lists_contacts WHERE status = %s", 'subscribed' ) ); } return $subscribers; } // Get all contact ids public function get_all_contact_ids() { global $wpbd; $query = "SELECT id FROM $this->table_name"; return $wpbd->get_results( $query ); } /** * Get Total Contacts * * @since 4.3.2 */ public function get_total_contacts() { return $this->count(); } /** * Delete Contacts by ids * * @param $ids * * @return bool|int * * @since 4.2.4 * * @modify 4.3.12 */ public function delete_contacts_by_ids( $ids = array() ) { $ids = $this->prepare_for_in_query( $ids ); $where = "id IN ($ids)"; $delete = $this->delete_by_condition( $where ); if ( $delete ) { $where = "contact_id IN ($ids)"; return ES()->lists_contacts_db->delete_by_condition( $where ); } return false; } /** * Edit global status of contact * * @param $ids * @param $unsubscribed * * @return bool|int * * @since 4.2.4 * @since 4.3.4 Use prepare_for_in_query instead of array_to_str */ public function edit_contact_global_status( $ids = array(), $unsubscribed = 0 ) { global $wpbd; $ids_str = implode( ',', $ids ); return $wpbd->query( $wpbd->prepare( "UPDATE {$wpbd->prefix}ig_contacts SET unsubscribed = %d WHERE id IN({$ids_str})", $unsubscribed ) ); } /** * Is Contact exists in list? * * @param $email * @param $list_id * * @return array * * @since 4.0.0 * @since 4.3.4 Used prepare_for_in_query instead of array_to_str */ public function is_contact_exist_in_list( $email, $list_id ) { global $wpbd; // Flush cache to ensure we have latest results. ES_Cache::flush(); $contact_id = $this->get_column_by( 'id', 'email', $email ); $data = array(); if ( ! empty( $contact_id ) ) { $data['contact_id'] = $contact_id; if ( ! is_array( $list_id ) ) { $list_id = array( $list_id ); } $list_ids_str = implode( ',', $list_id ); $list_contact_count = $wpbd->get_var( $wpbd->prepare( "SELECT count(*) as count FROM {$wpbd->prefix}ig_lists_contacts WHERE list_id IN ($list_ids_str) AND contact_id = %d", $contact_id ) ); if ( ! empty( $list_contact_count ) ) { $data['list_id'] = true; } return $data; } return $data; } /** * Get Email Details Map * * @return array * * @since 4.0.0 */ public function get_email_details_map() { global $wpdb; $contacts = $wpdb->get_results( "SELECT id, email, hash FROM {$wpdb->prefix}ig_contacts", ARRAY_A ); $details = array(); if ( count( $contacts ) > 0 ) { foreach ( $contacts as $contact ) { $details[ $contact['email'] ]['id'] = $contact['id']; $details[ $contact['email'] ]['hash'] = $contact['hash']; } } return $details; } /** * Get contacts id details map * * @param array $contact_ids * * @return array * * @since 4.2.1 * @since 4.2.4 */ public function get_details_by_ids( $contact_ids = array() ) { $contacts = $this->get_contacts_by_ids( $contact_ids ); $results = array(); if ( ! empty( $contacts ) && count( $contacts ) > 0 ) { foreach ( $contacts as $contact ) { $results[ $contact['id'] ] = $contact; } } return $results; } /** * Get contact ids by emails * * @param array $emails * * @return array * * @since 4.0.0 * @since 4.3.4 Used prepare_for_in_query instead of array_to_str */ public function get_contact_ids_created_at_date_by_emails( $emails = array() ) { global $wpbd; if ( count( $emails ) > 0 ) { $ids_count = count( $emails ); $ids_placeholders = array_fill( 0, $ids_count, '%s' ); $results = $wpbd->get_results( $wpbd->prepare( "SELECT id, created_at FROM {$wpbd->prefix}ig_contacts WHERE email IN( " . implode( ',', $ids_placeholders ) . ' )', $emails ), ARRAY_A ); } else { $results = $wpbd->get_results( "SELECT id , created_at FROM {$wpbd->prefix}ig_contacts" ); } $map = array(); if ( count( $results ) > 0 ) { foreach ( $results as $result ) { $map[ $result['id'] ] = $result['created_at']; } } return $map; } /** * Get contacts Email => id map * * @param array $emails * * @return array * * @since 4.0.0 * @since 4.3.4 Used prepare_for_in_query instead of array_to_str */ public function get_email_id_map( $emails = array() ) { global $wpbd; if ( count( $emails ) > 0 ) { $email_count = count( $emails ); $placeholders = array_fill( 0, $email_count, '%s' ); $results = $wpbd->get_results( $wpbd->prepare( "SELECT id, email FROM {$wpbd->prefix}ig_contacts WHERE email IN( " . implode( ',', $placeholders ) . ' )', $emails ), ARRAY_A ); } else { $results = $wpbd->get_results( "SELECT id, email FROM {$wpbd->prefix}ig_contacts", ARRAY_A ); } $map = array(); if ( count( $results ) > 0 ) { foreach ( $results as $result ) { $map[ $result['email'] ] = $result['id']; } } return $map; } /** * Get contact id by email * * @param $email * * @return string|null */ public function get_contact_id_by_email( $email ) { if ( empty( $email ) ) { return null; } return $this->get_column_by( 'id', 'email', $email ); } /** * Migrate all subscribers from 3.5.x to contacts table * * @since 4.0.0 */ public function migrate_subscribers_from_older_version() { global $wpdb; // Get Total count of subscribers $total = $wpdb->get_var( "SELECT count(*) as total FROM {$wpdb->prefix}es_emaillist" ); // If we have subscribers? if ( $total > 0 ) { // Get all existing Contacts $emails = $this->get_column( 'email' ); if ( ! is_array( $emails ) ) { $emails = array(); } // Import subscribers into batch of 100 $batch_size = IG_DEFAULT_BATCH_SIZE; $total_batches = ( $total > IG_DEFAULT_BATCH_SIZE ) ? ceil( $total / $batch_size ) : 1; $lists_contacts = array(); // $exclude_status = array( 'Unsubscribed', 'Unconfirmed' ); $j = 0; for ( $i = 0; $i < $total_batches; $i ++ ) { $batch_start = $i * $batch_size; $results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}es_emaillist LIMIT %d, %d ", $batch_start, $batch_size ), ARRAY_A ); if ( count( $results ) > 0 ) { $contacts = array(); foreach ( $results as $key => $result ) { $email = $result['es_email_mail']; if ( ! in_array( $email, $emails ) ) { $contacts[ $key ] = $result; $names = array( 'first_name' => '', 'last_name' => '', ); if ( ! empty( $result['es_email_name'] ) ) { $names = ES_Common::prepare_first_name_last_name( $result['es_email_name'] ); } else { $name = ES_Common::get_name_from_email( $email ); $names['first_name'] = $name; } $contacts[ $key ]['first_name'] = $names['first_name']; $contacts[ $key ]['last_name'] = $names['last_name']; $contacts[ $key ]['email'] = $email; $contacts[ $key ]['source'] = 'Migrated'; $contacts[ $key ]['status'] = ( 'spam' === strtolower( $result['es_email_status'] ) ) ? 'spam' : 'verified'; $contacts[ $key ]['unsubscribed'] = ( 'Unsubscribed' === $result['es_email_status'] ) ? 1 : 0; $contacts[ $key ]['hash'] = $result['es_email_guid']; $contacts[ $key ]['created_at'] = $result['es_email_created']; $contacts[ $key ]['updated_at'] = ig_get_current_date_time(); $emails[] = $email; } // Collect all contacts based on Lists // if ( ! in_array( $result['es_email_status'], $exclude_status ) ) { $lists_contacts[ $result['es_email_group'] ][ $j ]['email'] = $email; $lists_contacts[ $result['es_email_group'] ][ $j ]['status'] = $result['es_email_status']; $lists_contacts[ $result['es_email_group'] ][ $j ]['subscribed_at'] = $result['es_email_created']; $lists_contacts[ $result['es_email_group'] ][ $j ]['subscribed_ip'] = null; $j ++; // } } $this->bulk_insert( $contacts ); } } // Do import Lists Contacts if ( count( $lists_contacts ) > 0 ) { $list_name_id_map = ES()->lists_db->get_list_id_name_map( '', true ); foreach ( $lists_contacts as $list_name => $contacts ) { if ( ! empty( $list_name_id_map[ $list_name ] ) ) { ES()->lists_contacts_db->import_contacts_into_lists( $list_name_id_map[ $list_name ], $contacts ); } } } } } /** * Edit List Contact Status * * @param $contact_ids * @param $list_ids * @param $status * * @return bool|int * * @since 4.2.0 * @since 4.3.4 Used prepare_for_in_query instead of array_to_str */ public function edit_list_contact_status( $contact_ids, $list_ids, $status ) { global $wpbd; $contact_ids = implode( ',', $contact_ids ); $list_ids = implode( ',', $list_ids ); $current_date = ig_get_current_date_time(); $query_result = array(); if ( 'subscribed' === $status ) { $query_result = $wpbd->query( $wpbd->prepare( "UPDATE {$wpbd->prefix}ig_lists_contacts SET status = %s, subscribed_at = %s WHERE contact_id IN( {$contact_ids} ) AND list_id IN( {$list_ids} )", array( $status, $current_date, ) ) ); } elseif ( 'unsubscribed' === $status ) { $query_result = $wpbd->query( $wpbd->prepare( "UPDATE {$wpbd->prefix}ig_lists_contacts SET status = %s, unsubscribed_at = %s WHERE contact_id IN( {$contact_ids} ) AND list_id IN( {$list_ids} )", array( $status, $current_date, ) ) ); } elseif ( 'unconfirmed' === $status ) { $query_result = $wpbd->query( $wpbd->prepare( "UPDATE {$wpbd->prefix}ig_lists_contacts SET status = %s, optin_type = %d, subscribed_at = NULL, unsubscribed_at = NULL WHERE contact_id IN( {$contact_ids} ) AND list_id IN( {$list_ids} )", array( $status, IG_DOUBLE_OPTIN, ) ) ); } return $query_result; } /** * Get total contacts by date * * @param string $status * @param int $days * * @return array * * @since 4.4.0 */ public function get_total_contacts_by_date( $status = 'subscribed', $days = 60 ) { if ( 'subscribed' === $status ) { $results = $this->get_total_subscribed_contacts_by_date( $days ); } return $results; } /** * Get contact id by email * * @param $email * * @return string|null * * @since 4.4.1 */ public function get_contact_id_by_wp_user_id( $user_id ) { if ( empty( $user_id ) ) { return null; } return $this->get_column_by( 'id', 'wp_user_id', $user_id ); } /** * Get total subscribed contacts by date * * @param string $status * @param int $days * * @return array * * @since 4.4.2 */ public function get_total_subscribed_contacts_by_date( $days = 60 ) { global $wpbd; $columns = array( 'DATE(created_at) as date', 'count(DISTINCT(id)) as total' ); $where = 'unsubscribed = %d'; $args[] = 0; if ( 0 != $days ) { $days = esc_sql( $days ); $where .= ' AND created_at >= DATE_SUB(NOW(), INTERVAL %d DAY)'; $args[] = $days; } $group_by = ' GROUP BY DATE(created_at)'; $where .= $group_by; $where = $wpbd->prepare( $where, $args ); $results = $this->get_columns_by_condition( $columns, $where ); $contacts = array(); if ( ! empty( $results ) ) { foreach ( $results as $result ) { $contacts[ $result['date'] ] = $result['total']; } } return $contacts; } /** * Get total subscribed contacts before $days * * @param int $days * * @return array * * @since 4.4.2 */ public function get_total_subscribed_contacts_before_days( $days = 60 ) { global $wpbd; $columns = array( 'count(DISTINCT(id)) as total' ); $where = 'unsubscribed = %d'; $args[] = 0; if ( 0 != $days ) { $days = esc_sql( $days ); $where .= ' AND created_at < DATE_SUB(NOW(), INTERVAL %d DAY)'; $args[] = $days; } $where = $wpbd->prepare( $where, $args ); $results = $this->get_columns_by_condition( $columns, $where ); $results = array_shift( $results ); return ! empty( $results['total'] ) ? $results['total'] : 0; } /** * Get total subscribed contacts between $days * * @param int $days * * @return array * * @since 4.4.2 */ public function get_total_subscribed_contacts_between_days( $days = 60 ) { global $wpbd; $columns = array( 'count(DISTINCT(id)) as total' ); $where = 'unsubscribed = %d'; $args[] = 0; if ( 0 != $days ) { $days = esc_sql( $days ); $where .= ' AND created_at > DATE_SUB(NOW(), INTERVAL %d DAY) AND created_at < DATE_SUB(NOW(), INTERVAL %d DAY) '; $args[] = $days * 2; $args[] = $days; } $where = $wpbd->prepare( $where, $args ); $results = $this->get_columns_by_condition( $columns, $where ); $results = array_shift( $results ); return ! empty( $results['total'] ) ? $results['total'] : 0; } /** * Count contacts by Form id * * @param string $form_id * * @return string|null * * @since 4.6.3 */ public function get_total_contacts_by_form_id( $form_id = '', $status = 0 ) { global $wpdb; $total_subscribers = ''; if ( ! empty( $form_id ) ) { $total_subscribers = $wpdb->get_var( $wpdb->prepare( "SELECT count(distinct(id)) as total_active_subscribers FROM {$wpdb->prefix}ig_contacts where form_id = %d AND unsubscribed = %d", $form_id, $status ) ); } return $total_subscribers; } /** * Migrate Ip address of subscribers from lists_contacts to contacts table * * @since 4.6.3 */ public function migrate_ip_from_list_contacts_to_contacts_table() { global $wpdb; // Get Total count of subscribers $total = $wpdb->get_var( "SELECT count(*) as total FROM {$wpdb->prefix}ig_contacts" ); // If we have subscribers? if ( $total > 0 ) { $wpdb->query( "UPDATE {$wpdb->prefix}ig_contacts AS contact_data LEFT JOIN {$wpdb->prefix}ig_lists_contacts AS list_data ON contact_data.id = list_data.contact_id SET contact_data.ip_address = list_data.subscribed_ip WHERE contact_data.id = list_data.contact_id AND list_data.subscribed_ip IS NOT NULL AND list_data.subscribed_ip <> ''" ); } } /** * Add custom fields column * * @param $col_name * @param string $type * * @return array * * @since 4.8.4 * * @modify 5.6.7 */ public function add_custom_field_col_in_contacts_table( $slug_name, $custom_field_type = 'text' ) { global $wpbd; $slug_name = sanitize_title( $slug_name ); $col_added = 0; if ( ! empty( $slug_name ) ) { // To check if column exists or not $custom_field_col = $wpbd->get_results( $wpbd->prepare( "SHOW COLUMNS FROM {$wpbd->prefix}ig_contacts LIKE %s", $slug_name ) , 'ARRAY_A' ); $custom_field_num_rows = $wpbd->num_rows; // If column doesn't exists, then insert it if ( '1' != $custom_field_num_rows ) { $col_data_type = ES_Common::get_custom_field_col_datatype( $custom_field_type ); // Template table $col_added = $wpbd->query( "ALTER TABLE {$wpbd->prefix}ig_contacts ADD COLUMN {$slug_name} {$col_data_type} DEFAULT NULL" ); } } return $col_added; } /** * Delete Custom fields columns * * @param $ids * * @since 4.8.4 */ public function delete_col_by_custom_field_id( $cf_ids ) { global $wpbd; if ( ! is_array( $cf_ids ) ) { $ids = array( $cf_ids ); } $col_deleted = 0; $slug_name_list = ES()->custom_fields_db->get_custom_field_slug_list_by_ids( $cf_ids ); if ( is_array( $slug_name_list ) && count( $slug_name_list ) > 0 ) { foreach ( $slug_name_list as $col_name ) { $col_deleted = $wpbd->query( "ALTER TABLE {$wpbd->prefix}ig_contacts DROP COLUMN {$col_name}" ); } } return $col_deleted; } /** * Insert IP along with subscriber data * * @param $data * @param string $type * * @return int * * @since 4.6.3 */ public function insert( $data, $type = '' ) { $source = array( 'admin', 'import' ); if ( ! ES()->is_pro() ) { $data['ip_address'] = ''; $data['country_code'] = ''; } else { if ( empty( $data['ip_address'] ) && ! in_array( $data['source'], $source, true ) ) { $data = apply_filters( 'ig_es_get_subscriber_ip', $data, 'ip_address' ); } if ( ! empty( $data['ip_address'] ) ) { $data = apply_filters( 'ig_es_get_country_based_on_ip', $data ); } } $contact_id = parent::insert( $data, $type ); do_action( 'ig_es_new_contact_inserted', $contact_id ); return $contact_id; } /** * Get last contact's id * * @since 5.3.14 * * @param @int $last_contact_id */ public function get_last_contact_id() { global $wpdb; $last_contact_id = $wpdb->get_var( "SELECT id FROM {$wpdb->prefix}ig_contacts ORDER BY id DESC LIMIT 0, 1" ); return $last_contact_id; } }