Files
torebki-fabiola.pl/wp-content/plugins/email-subscribers/lite/includes/db/class-es-db-contacts.php
2026-03-05 13:07:40 +01:00

1150 lines
26 KiB
PHP

<?php
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class ES_DB_Contacts extends ES_DB {
/**
* Table name
*
* @since 4.2.4
* @var $table_name
*/
public $table_name;
/**
* Table DB version
*
* @since 4.2.4
* @var $version
*/
public $version;
/**
* Table primary key column name
*
* @since 4.2.4
* @var $primary_key
*/
public $primary_key;
/**
* ES_DB_Contacts constructor.
*
* @since 4.2.4
*/
public function __construct() {
global $wpdb;
parent::__construct();
$this->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;
}
}