table_name = $wpdb->prefix . 'ig_campaigns'; $this->primary_key = 'id'; $this->version = '1.0'; } /** * Get columns and formats * * @since 4.0.0 */ public function get_columns() { return array( 'id' => '%d', 'slug' => '%s', 'name' => '%s', 'type' => '%s', 'parent_id' => '%d', 'parent_type' => '%s', 'subject' => '%s', 'body' => '%s', 'from_name' => '%s', 'from_email' => '%s', 'reply_to_name' => '%s', 'reply_to_email' => '%s', 'categories' => '%s', 'list_ids' => '%s', 'base_template_id' => '%d', 'status' => '%d', 'created_at' => '%s', 'updated_at' => '%s', 'deleted_at' => '%s', 'meta' => '%s', ); } /** * Get default column values * * @since 4.0.0 */ public function get_column_defaults() { $from_name = ES_Common::get_ig_option( 'from_name' ); $from_email = ES_Common::get_ig_option( 'from_email' ); return array( 'slug' => null, 'name' => null, 'type' => null, 'parent_id' => null, 'parent_type' => null, 'subject' => null, 'body' => '', 'from_name' => $from_name, 'from_email' => $from_email, 'reply_to_name' => $from_name, 'reply_to_email' => $from_email, 'categories' => '', 'list_ids' => '', 'base_template_id' => 0, 'status' => 0, 'created_at' => ig_get_current_date_time(), 'updated_at' => null, 'deleted_at' => null, 'meta' => null, ); } /** * Get template id by campaign id * * @param $id * * @return array|string|null * * @since 4.2.1 */ public function get_template_id_by_campaign( $id ) { return $this->get_column( 'base_template_id', $id ); } /** * Save Campaign * * @param $data * @param null $id * * @return false|int * * @since 4.0.0 */ public function save_campaign( $data, $id = null ) { $insert = is_null( $id ); if ( ! empty( $data['list_ids'] ) && is_array( $data['list_ids'] ) ) { $data['list_ids'] = array_unique( $data['list_ids'] ); $data['list_ids'] = implode( ',', $data['list_ids'] ); } if ( $insert ) { $result = $this->insert( $data ); } else { // Set updated_at if not set $data['updated_at'] = ! empty( $data['updated_at'] ) ? $data['updated_at'] : ig_get_current_date_time(); $result = $this->update( $id, $data ); } return $result; } /** * Get campaign type by campaign id * * @param $id * * @return string|null * * @since 4.0.0 * * @modify 4.2.1 */ public function get_campaign_type_by_id( $id ) { return $this->get_column( 'type', $id ); } /** * Migrate post notification from ES 3.5.x * * @since 4.0.0 */ public function migrate_post_notifications() { global $wpbd; $campaigns_data = array(); $template_ids = array(); $from_name = ES_Common::get_ig_option( 'from_name' ); $from_email = ES_Common::get_ig_option( 'from_email' ); $list_is_name_map = ES()->lists_db->get_list_id_name_map( '', true ); $es_notification_table = EMAIL_SUBSCRIBERS_NOTIFICATION_TABLE; $total = $wpbd->get_var( $wpbd->prepare( "SELECT count(*) as total FROM {$wpbd->prefix}es_notification WHERE %d", 1 ) ); if ( $total > 0 ) { $batch_size = IG_DEFAULT_BATCH_SIZE; $total_batches = ( $total > IG_DEFAULT_BATCH_SIZE ) ? ceil( $total / $batch_size ) : 1; for ( $i = 0; $i < $total_batches; $i ++ ) { $batch_start = $i * $batch_size; // $query = 'SELECT * FROM ' . EMAIL_SUBSCRIBERS_NOTIFICATION_TABLE . " LIMIT {$batch_start}, {$batch_size}"; // $notifications = $wpbd->get_results( $query, ARRAY_A ); // WPCS: cache ok, DB call ok, unprepared SQL ok. $notifications = $wpbd->get_results( $wpbd->prepare( "SELECT * FROM {$wpbd->prefix}es_notification LIMIT %d, %d", $batch_start, $batch_size ), ARRAY_A ); if ( count( $notifications ) > 0 ) { foreach ( $notifications as $key => $notification ) { $categories = ! empty( $notification['es_note_cat'] ) ? $notification['es_note_cat'] : ''; if ( ! empty( $categories ) ) { $categories = explode( '--', $categories ); $categories = array_map( array( 'ES_Common', 'temp_filter_category' ), $categories ); $categories = ES_Common::convert_categories_array_to_string( $categories ); } $template_id = 0; if ( ! empty( $notification['es_note_templ'] ) ) { $template_id = $notification['es_note_templ']; if ( ! in_array( $template_id, $template_ids ) ) { $template_ids[] = $template_id; } } $campaigns_data[ $key ]['slug'] = $template_id; // We don't have slug at this moment. So, we will fetch template's slug and store it later $campaigns_data[ $key ]['name'] = $template_id; // We don't have name at this moment. So, we will fetch template's name and store it later $campaigns_data[ $key ]['type'] = IG_CAMPAIGN_TYPE_POST_NOTIFICATION; $campaigns_data[ $key ]['from_name'] = $from_name; $campaigns_data[ $key ]['from_email'] = $from_email; $campaigns_data[ $key ]['reply_to_name'] = $from_name; // We don't have this option avaialble. So, setting from_name as reply_to_name $campaigns_data[ $key ]['reply_to_email'] = $from_email; // We don't have this option available. So, setting from_email as reply_to_email $campaigns_data[ $key ]['categories'] = $categories; $campaigns_data[ $key ]['list_ids'] = ( ! empty( $notification['es_note_group'] ) && ! empty( $list_is_name_map[ $notification['es_note_group'] ] ) ) ? $list_is_name_map[ $notification['es_note_group'] ] : 0; $campaigns_data[ $key ]['base_template_id'] = $template_id; $campaigns_data[ $key ]['status'] = ( ! empty( $notification['es_note_status'] ) && ( 'Disable' === $notification['es_note_status'] ) ) ? 0 : 1; $campaigns_data[ $key ]['created_at'] = ig_get_current_date_time(); $campaigns_data[ $key ]['updated_at'] = null; $campaigns_data[ $key ]['deleted_at'] = null; } $templates_data = array(); // Get Template Name & Slug if ( count( $template_ids ) > 0 ) { $template_ids_str = implode( "', '", $template_ids ); $query = "SELECT ID, post_name, post_title FROM {$wpbd->prefix}posts WHERE id IN ({$template_ids_str})"; $templates = $wpbd->get_results( $query, ARRAY_A ); foreach ( $templates as $template ) { $templates_data[ $template['ID'] ] = $template; } } // Do Batach Insert $values = array(); $place_holders = array(); $columns = $this->get_columns(); unset( $columns['id'] ); $fields = array_keys( $columns ); foreach ( $campaigns_data as $campaign_data ) { $campaign_data['slug'] = ! empty( $templates_data[ $campaign_data['slug'] ] ) ? $templates_data[ $campaign_data['slug'] ]['post_name'] : ''; $campaign_data['name'] = ! empty( $templates_data[ $campaign_data['name'] ] ) ? $templates_data[ $campaign_data['name'] ]['post_title'] : ''; $campaign_data = wp_parse_args( $campaign_data, $this->get_column_defaults() ); $formats = array(); foreach ( $columns as $column => $format ) { $values[] = $campaign_data[ $column ]; $formats[] = $format; } $place_holders[] = '( ' . implode( ', ', $formats ) . ' )'; } ES_DB::do_insert( IG_CAMPAIGNS_TABLE, $fields, $place_holders, $values ); } } } } /** * Migrate Newsletters from ES 3.5.x * * @since 4.0.0 */ public function migrate_newsletters() { global $wpdb; // Check if es_sentdetails table exists or not. if ( $this->table_exists( $wpdb->prefix . 'es_sentdetails' ) ) { $from_name = ES_Common::get_ig_option( 'from_name' ); $from_email = ES_Common::get_ig_option( 'from_email' ); $total = $wpdb->get_var( $wpdb->prepare( "SELECT count(*) as total FROM {$wpdb->prefix}es_sentdetails WHERE es_sent_source = %s", 'Newsletter' ) ); if ( $total > 0 ) { $list_is_name_map = ES()->lists_db->get_list_id_name_map( '', true ); $batch_size = IG_DEFAULT_BATCH_SIZE; $total_batches = ceil( $total / $batch_size ); $values = array(); $place_holders = array(); $columns = $this->get_columns(); unset( $columns['id'] ); $fields = array_keys( $columns ); for ( $i = 0; $i <= $total_batches; $i ++ ) { $batch_start = $i * $batch_size; $newsletters = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}es_sentdetails WHERE es_sent_source = %s LIMIT %d, %d", 'Newsletter', $batch_start, $batch_size ), ARRAY_A ); if ( count( $newsletters ) > 0 ) { $campaign_data = array(); $values = array(); $place_holders = array(); foreach ( $newsletters as $key => $newsletter ) { $campaign_data['slug'] = sanitize_title( $newsletter['es_sent_subject'] ); $campaign_data['name'] = $newsletter['es_sent_subject']; $campaign_data['type'] = IG_CAMPAIGN_TYPE_NEWSLETTER; $campaign_data['from_name'] = $from_name; $campaign_data['from_email'] = $from_email; $campaign_data['reply_to_name'] = $from_name; // We don't have this option avaialble. So, setting from_name as reply_to_name $campaign_data['reply_to_email'] = $from_email; // We don't have this option available. So, setting from_email as reply_to_email $campaign_data['list_ids'] = ( ! empty( $newsletter['es_note_group'] ) && ! empty( $list_is_name_map[ $newsletter['es_note_group'] ] ) ) ? $list_is_name_map[ $newsletter['es_note_group'] ] : 0; $campaign_data['status'] = 1; $campaign_data['created_at'] = $newsletter['es_sent_starttime']; $campaign_data = wp_parse_args( $campaign_data, $this->get_column_defaults() ); $formats = array(); foreach ( $columns as $column => $format ) { $values[] = $campaign_data[ $column ]; $formats[] = $format; } $place_holders[] = '( ' . implode( ', ', $formats ) . ' )'; } ES_DB::do_insert( IG_CAMPAIGNS_TABLE, $fields, $place_holders, $values ); } } } } } /** * After migration we are not able to get the campaign_id in mailing queue * table. So, we are fetching it now and set campaign_id based on subject match. * If not match, set as 0. */ public function update_campaign_id_in_mailing_queue() { global $wpdb; $campaigns = $wpdb->get_results( $wpdb->prepare( "SELECT id, name FROM {$wpdb->prefix}ig_campaigns WHERE %d", 1 ), ARRAY_A ); $data_to_update = array(); if ( count( $campaigns ) > 0 ) { $mailing_queue_results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}ig_mailing_queue WHERE %d", 1 ), ARRAY_A ); if ( count( $mailing_queue_results ) > 0 ) { foreach ( $mailing_queue_results as $result ) { $subject = trim( $result['subject'] ); foreach ( $campaigns as $campaign ) { $campaign_name = trim( $campaign['name'] ); if ( $campaign_name == $subject ) { $data_to_update[ $result['id'] ] = $campaign['id']; break; } } } } } if ( ! empty( $data_to_update ) ) { foreach ( $data_to_update as $mailing_queue_id => $campaign_id ) { $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->prefix}ig_mailing_queue SET campaign_id = %d WHERE id = %d", array( $campaign_id, $mailing_queue_id ) ) ); } } } /** * Get total campaigns * * @return string|null * * @since 4.2.1 * @since 4.3.4 Removed deleted_at $where condition */ public function get_total_campaigns( $where = '' ) { return $this->count( $where ); } /** * Get total campaigns by type * * @param string $type * * @return string|null * * @since 4.2.1 */ public function get_total_campaigns_by_type( $type = 'newsletter' ) { global $wpdb; $where = $wpdb->prepare( 'type = %s', array( $type ) ); $campaigns = $this->get_total_campaigns( $where ); return $campaigns; } /** * Get total post notifications * * @return string|null * * @since 4.2.1 */ public function get_total_post_notifications() { return $this->get_total_campaigns_by_type( 'post_notification' ); } /** * Get total newsletters * * @return string|null * * @since 4.2.1 */ public function get_total_newsletters() { return $this->get_total_campaigns_by_type(); } /** * Get total sequence * * @return string|null * * @since 4.6.6 */ public function get_total_sequences() { return $this->get_total_campaigns_by_type( 'sequence' ); } /** * Get campaign meta data * * @param $id * * @return mixed|string|null * * @since 4.2.0 */ public function get_campaign_meta_by_id( $id ) { $meta = $this->get_column( 'meta', $id ); if ( $meta ) { $meta = maybe_unserialize( $meta ); } return $meta; } /** * Get campaign categories string * * @param $id * * @return mixed|string|null * * @since 4.2.0 */ public function get_campaign_categories_str_by_id( $id ) { $categories_str = $this->get_column( 'categories', $id ); return $categories_str; } /** * Get campaigns by id * * @param int $id * * @return array|object|null */ public function get_campaign_by_id( $id = 0, $status = 1 ) { global $wpdb; if ( empty( $id ) ) { return array(); } $where = $wpdb->prepare( 'id = %d', $id ); if ( - 1 !== $status ) { $where .= $wpdb->prepare( ' AND status = %d', $status ); } $campaigns = $this->get_by_conditions( $where ); $campaign = array(); if ( ! empty( $campaigns ) ) { $campaign = array_shift( $campaigns ); } return $campaign; } /** * Get campaigns by parent id * * @param int $id * * @return array|object|null * * @since 4.2.1 * @since 4.3.4 Removed deleted_at condition */ public function get_campaign_by_parent_id( $id = 0 ) { global $wpdb; if ( empty( $id ) ) { return array(); } $where = $wpdb->prepare( "parent_id = %d AND status = %d AND ( deleted_at IS NULL OR deleted_at = '0000-00-00 00:00:00' )", $id, self::STATUS_ACTIVE ); $campaigns = $this->get_by_conditions( $where ); return $campaigns; } /** * Get Active Campaigns * * @return array|object|null * * @since 4.2.0 * @since 4.3.4 Removed deleted_at condition */ public function get_active_campaigns( $type = '' ) { global $wpdb; if ( empty( $type ) ) { $where = $wpdb->prepare( "status = %d AND (deleted_at IS NULL OR deleted_at = '0000-00-00 00:00:00')", self::STATUS_ACTIVE ); } else { $where = $wpdb->prepare( "status = %d AND type = %s AND (deleted_at IS NULL OR deleted_at = '0000-00-00 00:00:00')", self::STATUS_ACTIVE, $type ); } return $this->get_by_conditions( $where ); } /** * Update meta value * * @param int $campaign_id * @param array $meta_data * * @return bool|false|int * * @sine 4.2.0 */ public function update_campaign_meta( $campaign_id = 0, $meta_data = array() ) { $update = false; if ( ! empty( $campaign_id ) && ! empty( $meta_data ) ) { $campaign = $this->get_campaign_by_id( $campaign_id ); if ( ! empty( $campaign ) ) { if ( isset( $campaign['meta'] ) ) { $meta = maybe_unserialize( $campaign['meta'] ); foreach ( $meta_data as $meta_key => $meta_value ) { $meta[ $meta_key ] = $meta_value; } $campaign['meta'] = maybe_serialize( $meta ); $update = $this->save_campaign( $campaign, $campaign_id ); } } } return $update; } /** * Delete Campaigns * * @param $ids * * @since 4.3.4 */ public function delete_campaigns( $ids = array() ) { if ( ! is_array( $ids ) ) { $ids = array( absint( $ids ) ); } if ( is_array( $ids ) && count( $ids ) > 0 ) { foreach ( $ids as $id ) { $this->delete( absint( $id ) ); /** * Take necessary cleanup steps using this hook * * @since 4.3.4 */ do_action( 'ig_es_campaign_deleted', $id ); } return true; } return false; } /** * Get all campaign ids by parent_id * * @param int $parent_campaign_id * * @return array|string|null * * @since 4.3.4 */ public function get_campaigns_by_parent_id( $parent_campaign_id = 0 ) { if ( empty( $parent_campaign_id ) || 0 == absint( $parent_campaign_id ) ) { return array(); } return $this->get_column_by( 'id', 'parent_id', $parent_campaign_id, false ); } /** * Get Post Notifications (Campaigns) based on post_id * * @param int $post_id * * @return array|object|null * * @since 4.3.6 */ public function get_campaigns_by_post_id( $post_id = 0 ) { global $wpdb; $campaigns = array(); if ( $post_id > 0 ) { $post_type = get_post_type( $post_id ); $where = $wpdb->prepare( "status = %d AND type = %s AND (deleted_at IS NULL OR deleted_at = '0000-00-00 00:00:00')", 1, 'post_notification' ); $new_flow_campaign_ids = get_option( 'ig_es_new_category_format_campaign_ids', array() ); // Run old logic for campaign if ( empty( $new_flow_campaign_ids ) ) { if ( 'post' === $post_type ) { $categories = get_the_category( $post_id ); $total_categories = count( $categories ); if ( $total_categories > 0 ) { for ( $i = 0; $i < $total_categories; $i ++ ) { if ( 0 === $i ) { $where .= ' and ('; } else { $where .= ' or'; } $category_str = ES_Common::prepare_category_string( $categories[ $i ]->term_id ); $where .= " categories LIKE '%" . $category_str . "%'"; if ( ( $total_categories - 1 ) === $i ) { $where .= " OR categories LIKE '%all%'"; $where .= ") AND categories NOT LIKE '%none%'"; } } } else { // no categories fround for post return $campaigns; } } else { $post_type = ES_Common::prepare_custom_post_type_string( $post_type ); $where .= " and categories LIKE '%" . wp_specialchars_decode( addslashes( $post_type ) ) . "%'"; } } $campaigns = $this->get_by_conditions( $where, ARRAY_A ); if ( ! empty( $campaigns ) ) { $current_post_type = get_post_type( $post_id ); $current_categories = get_the_category( $post_id ); $current_categories_lists = array(); foreach ( $current_categories as $current_category ) { $current_categories_lists[] = $current_category->term_id; } foreach ( $campaigns as $index => $campaign ) { $campaign_id = $campaign['id']; $categories = $campaign['categories']; $is_categories_matching = false; $categories = explode( '##', trim( trim( $categories, '##' ) ) ); if ( ! empty( $categories ) ) { foreach ( $categories as $category ) { if ( ! empty( $category ) ) { if ( ! empty( $new_flow_campaign_ids ) && in_array( (int) $campaign_id, $new_flow_campaign_ids, true ) ) { $post_categories = explode( '|', $category ); foreach ( $post_categories as $post_category ) { list( $post_type, $categories_list ) = explode( ':', $post_category ); if ( $post_type === $current_post_type ) { if ( 'post' === $current_post_type ) { if ( 'none' !== $categories_list ) { if ( 'all' === $categories_list ) { $is_categories_matching = true; break; } else { $categories_list = array_map( 'absint', explode( ',', $categories_list ) ); $is_categories_matching = count( array_intersect( $categories_list, $current_categories_lists ) ) > 0; if ( $is_categories_matching ) { break; } } } } else { if ( 'all' === $categories_list ) { $is_categories_matching = true; break; } else { $term_ids = array_map( 'absint', explode( ',', $categories_list ) ); $taxonomies = get_object_taxonomies( $post_type, 'objects' ); if ( ! empty( $taxonomies ) ) { $taxonomies_slug = array_keys( $taxonomies ); $post_term_ids = array(); foreach ( $taxonomies_slug as $taxonomy_slug ) { $post_terms = get_the_terms( $post_id, $taxonomy_slug ); if ( ! $post_terms ) { continue; } $taxonomy_term_ids = wp_list_pluck( $post_terms, 'term_id' ); $post_term_ids = array_merge( $post_term_ids, $taxonomy_term_ids ); } $is_categories_matching = count( array_intersect( $term_ids, $post_term_ids ) ) > 0; if ( $is_categories_matching ) { break; } } } } } } } else { if ( 'post' === $current_post_type ) { if ( is_numeric( $category ) && in_array( ( int ) $category, $current_categories_lists, true ) ) { $is_categories_matching = true; break; } elseif ( '{a}All{a}' === $category ) { $is_categories_matching = true; break; } } elseif ( '{T}' . $current_post_type . '{T}' === $category ) { $is_categories_matching = true; break; } } } } } if ( ! $is_categories_matching ) { unset( $campaigns[ $index ] ); } } } $campaigns = apply_filters( 'ig_es_campaigns_for_post', $campaigns, $post_id ); } return $campaigns; } /** * Method to update campaign status * * @param array $campaign_ids Campaign IDs. * @param integer $status New status. * * @return bool $updated Update status * * @since 4.4.4 */ public function update_status( $campaign_ids = array(), $status = 0 ) { global $wpbd; $updated = false; if ( empty( $campaign_ids ) ) { return $updated; } $id_str = ''; $campaign_ids = esc_sql( $campaign_ids ); if ( is_array( $campaign_ids ) && count( $campaign_ids ) > 0 ) { $id_str = implode( ',', $campaign_ids ); } elseif ( is_numeric( $campaign_ids ) ) { $id_str = $campaign_ids; } if ( ! empty( $id_str ) ) { $query = $wpbd->prepare( "UPDATE {$wpbd->prefix}ig_campaigns SET status = %d WHERE id IN({$id_str})", $status ); $updated = $wpbd->query( $wpbd->prepare( "UPDATE {$wpbd->prefix}ig_campaigns SET status = %d WHERE id IN({$id_str})", $status ) ); // Changing status of child campaigns along with its parent campaign id $wpbd->query( $wpbd->prepare( "UPDATE {$wpbd->prefix}ig_campaigns SET status = %d WHERE parent_id IN({$id_str})", $status ) ); } if ( $updated ) { do_action( 'ig_es_after_campaign_status_updated', $campaign_ids, $status ); } return $updated; } /** * Duplicate Campaign * * @param $id * * @since 4.6.3 * * @modify 5.4.9 */ public function duplicate_campaign( $id = null ) { if ( ! empty( $id ) ) { $campaign = $this->get( $id ); $campaign['status'] = IG_ES_CAMPAIGN_STATUS_IN_ACTIVE; $campaign['name'] = __( 'Copy', 'email-subscribers' ) . ' - ' . $campaign['name']; if ( 'newsletter' === $campaign['type'] ) { $campaign['subject'] = __( 'Copy', 'email-subscribers' ) . ' - ' . $campaign['subject']; } $campaign_id = $campaign['id']; unset( $campaign['id'] ); unset( $campaign['created_at'] ); $campaign_meta = maybe_unserialize( $campaign['meta'] ); unset( $campaign_meta['date'], $campaign_meta['es_schedule_date'], $campaign_meta['es_schedule_time'] ); $campaign['meta'] = maybe_serialize( $campaign_meta ); $duplicate_campaign_id = $this->save_campaign( $campaign ); if ( 'sequence' === $campaign['type'] ) { $sequence_campaigns = $this->get_campaign_by_parent_id( $campaign_id ); foreach ( $sequence_campaigns as $index => $child_campaign ) { $child_campaign['parent_id'] = $duplicate_campaign_id; unset( $child_campaign['id'] ); unset( $child_campaign['created_at'] ); $this->save_campaign( $child_campaign ); } } return $duplicate_campaign_id; } return false; } /** * Get all campaigns based on passed arguements * * @param array $args Campaing arguements * * @return array Array of campaigns * * @since 4.6.11 */ public function get_campaigns( $args = array() ) { global $wpbd; $where = ''; $conditions = array( 'include_types' => 'type IN', 'exclude_types' => 'type NOT IN', 'status' => 'status IN', 'campaigns_in' => 'id IN', 'campaigns_not_in' => 'id NOT IN', ); foreach ( $conditions as $arg_key => $sql_operator ) { if ( ! empty( $args[ $arg_key ] ) ) { $count = count( $args[ $arg_key ] ); $placeholders = array_fill( 0, $count, '%s' ); $where .= ( empty( $where ) ? ' ' : ' AND ' ) . $wpbd->prepare( "{$sql_operator} ( " . implode( ',', $placeholders ) . ' )', $args[ $arg_key ] ); } } $output = ! empty( $args['output'] ) ? $args['output'] : ARRAY_A; $use_cache = false; $order_by_column = ! empty( $args['order_by_column'] ) ? $args['order_by_column'] : ''; $order = ! empty( $args['order'] ) ? $args['order'] : ''; if (! empty( $args['is_campaigns_listing'] )) { $order .= ' LIMIT ' . $args['offset'] . ', ' . $args['per_page']; } return $this->get_by_conditions( $where, $output, $use_cache, $order_by_column, $order ); } /** * Get selected lists ids in the campaign * * @param int $campaign_id * * @return array $list_ids * * @since 4.7.6 */ public function get_list_ids( $campaign_id ) { $list_ids = array(); // If $campaign_id is numeric, then fetch the campaign data based on campaign_id else $campaign_id is campaign data. if ( is_numeric( $campaign_id ) ) { $campaign = $this->get( $campaign_id ); } else { $campaign = $campaign_id; } if ( ! empty( $campaign ) ) { // Check list ids column since prior to campaign rules features, list ids were being stored in list_ids column. if ( ! empty( $campaign['list_ids'] ) ) { $list_ids = explode( ',', $campaign['list_ids'] ); } $campaign_meta = maybe_unserialize( $campaign['meta'] ); $conditions = isset( $campaign_meta['list_conditions'] ) ? $campaign_meta['list_conditions'] : array(); if ( ! empty( $conditions ) ) { foreach ( $conditions as $i => $condition_group ) { if ( ! empty( $condition_group ) ) { foreach ( $condition_group as $j => $condition ) { $condition_field = isset( $condition['field'] ) ? $condition['field'] : ''; if ( '_lists__in' === $condition_field ) { if ( ! empty( $condition['value'] ) ) { if ( is_array( $condition['value'] ) ) { $list_ids = array_merge( $list_ids, $condition['value'] ); } else { $list_ids = array( $condition['value'] ); } } } } } } } } return $list_ids; } /** * Get total post_digests count * * @return string|null * * @since */ public function get_total_post_digests() { return $this->get_total_campaigns_by_type( 'post_digest' ); } /** * Get count of editor type used from campaign meta * * @return array editor type count * * @since 5.5.7 */ public function get_count_by_editor_type() { $campaign_editor_count = array( 'classic' => 0, 'dnd' => 0, ); $campaign_types = array( 'include_types' => array( 'newsletter','post_notification','post_digest'), ); $campaigns = self::get_campaigns($campaign_types); if ( count($campaigns) > 0 ) { foreach ($campaigns as $campaign) { $campaign_meta = ( !empty( $campaign['meta'] ) ) ? maybe_unserialize($campaign['meta']) : null; if ( !empty( $campaign_meta ) ) { $editor_type = ! empty( $campaign_meta['editor_type'] ) ? $campaign_meta['editor_type'] : IG_ES_CLASSIC_EDITOR; if ( IG_ES_DRAG_AND_DROP_EDITOR === $editor_type ) { $campaign_editor_count['dnd']++; } else { $campaign_editor_count['classic']++; } } } } return $campaign_editor_count; } }