__( 'Campaign', 'email-subscribers' ), // singular name of the listed records 'plural' => __( 'Campaign', 'email-subscribers' ), // plural name of the listed records 'ajax' => false, // does this table support ajax? 'screen' => 'es_campaigns', ) ); $this->db = new ES_DB_Campaigns(); $this->init(); } /** * Get class instance. * * @since 4.7.8 */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Add Screen Option * * @since 4.2.1 */ public static function screen_options() { $option = 'per_page'; $args = array( 'label' => __( 'Number of campaigns per page', 'email-subscribers' ), 'default' => 20, 'option' => self::$option_per_page, ); add_screen_option( $option, $args ); } /** * Render Campaigns table * * @since 4.0 */ public function render() { ?>
' . esc_html__( 'Notification Added Successfully!', 'email-subscribers' ) . '
'; } } /** * Retrieve lists data from the database * * @param int $per_page * @param int $page_number * * @return mixed */ public function get_lists( $per_page = 5, $page_number = 1, $do_count_only = false ) { global $wpdb, $wpbd; $order_by = sanitize_sql_orderby( ig_es_get_request_data( 'orderby' ) ); $order = ig_es_get_request_data( 'order' ); $search = ig_es_get_request_data( 's' ); $filter_by_campaign_type = ig_es_get_request_data( 'filter_by_campaign_type' ); $filter_by_campaign_status = ig_es_get_request_data( 'filter_by_campaign_status' ); if ( $do_count_only ) { $sql = 'SELECT count(*) as total FROM ' . IG_CAMPAIGNS_TABLE; } else { $sql = 'SELECT * FROM ' . IG_CAMPAIGNS_TABLE; } $args = array(); $query = array(); $add_where_clause = true; $query[] = "( deleted_at IS NULL OR deleted_at = '0000-00-00 00:00:00' )"; $query[] = " type != 'workflow_email'"; if ( ! empty( $search ) ) { $query[] = ' name LIKE %s '; $args[] = '%' . $wpdb->esc_like( $search ) . '%'; } $query = apply_filters( 'ig_es_campaign_list_where_caluse', $query ); if ( $add_where_clause ) { $sql .= ' WHERE '; if ( count( $query ) > 0 ) { $sql .= implode( ' AND ', $query ); if ( count( $args ) > 0 ) { $sql = $wpbd->prepare( $sql, $args ); } } } if ( ! empty( $filter_by_campaign_status ) || ( '0' === $filter_by_campaign_status ) ) { if ( $add_where_clause ) { $sql .= $wpdb->prepare( ' AND status = %s', $filter_by_campaign_status ); } else { $sql .= $wpdb->prepare( ' WHERE status = %s', $filter_by_campaign_status ); } } if ( ! empty( $filter_by_campaign_type ) ) { if ( $add_where_clause ) { $sql .= $wpdb->prepare( ' AND type = %s', $filter_by_campaign_type ); } else { $sql .= $wpdb->prepare( ' WHERE type = %s', $filter_by_campaign_type ); } } if ( ! $do_count_only ) { $order = ! empty( $order ) ? strtolower( $order ) : 'desc'; $expected_order_values = array( 'asc', 'desc' ); if ( ! in_array( $order, $expected_order_values ) ) { $order = 'desc'; } $default_order_by = esc_sql( 'created_at' ); $expected_order_by_values = array( 'name', 'type', 'created_at' ); if ( ! in_array( $order_by, $expected_order_by_values ) ) { $order_by_clause = " ORDER BY {$default_order_by} DESC"; } else { $order_by = esc_sql( $order_by ); $order_by_clause = " ORDER BY {$order_by} {$order}, {$default_order_by} DESC"; } $sql .= $order_by_clause; $sql .= " LIMIT $per_page"; $sql .= ' OFFSET ' . ( $page_number - 1 ) * $per_page; $result = $wpbd->get_results( $sql, 'ARRAY_A' ); } else { $result = $wpbd->get_var( $sql ); } return $result; } /** * Text Display when no items available * * @since 4.0 */ public function no_items() { esc_html_e( 'No Campaigns Found.', 'email-subscribers' ); } /** * Get Campaign statuses * * @param string $status * * @return array|mixed * * @since 4.3.6 */ public function get_statuses( $status = '' ) { $statuses = array( IG_ES_CAMPAIGN_STATUS_IN_ACTIVE => __( 'In Active', 'email-subscribers' ), IG_ES_CAMPAIGN_STATUS_ACTIVE => __( 'Active', 'email-subscribers' ), IG_ES_CAMPAIGN_STATUS_SCHEDULED => __( 'Scheduled', 'email-subscribers' ), IG_ES_CAMPAIGN_STATUS_QUEUED => __( 'Queued', 'email-subscribers' ), IG_ES_CAMPAIGN_STATUS_PAUSED => __( 'Paused', 'email-subscribers' ), IG_ES_CAMPAIGN_STATUS_FINISHED => __( 'Finished', 'email-subscribers' ), ); // We are getting $status = 0 for "In Active". // So, we can't check empty() if ( '' != $status ) { return $statuses[ $status ]; } return $statuses; } /** * Render a column when no column specific method exist. * * @param array $item * @param string $column_name * * @return mixed * * @modified 4.4.4 Removed 'status' column switch case. */ public function column_default( $item, $column_name ) { switch ( $column_name ) { case 'list_ids': if ( ! empty( $item[ $column_name ] ) ) { $list_ids = explode( ',', $item[ $column_name ] ); return ES_Common::prepare_list_name_by_ids( $list_ids ); } else { $type = isset( $item['type'] ) ? $item['type'] : ''; $list_ids = array(); if ( ! empty( $item['meta'] ) ) { $list_ids = ES()->campaigns_db->get_list_ids( $item ); } if ( $list_ids ) { return ES_Common::prepare_list_name_by_ids( $list_ids ); } else { return ''; } } break; case 'created_at': case 'updated_at': return ! empty( $item[ $column_name ] ) ? ig_es_format_date_time( $item[ $column_name ] ) : ''; break; case 'categories': if ( ! empty( $item[ $column_name ] ) ) { $campaign_type = $item['type']; if ( IG_CAMPAIGN_TYPE_POST_NOTIFICATION === $campaign_type || IG_CAMPAIGN_TYPE_POST_DIGEST === $campaign_type ) { $campaign_id = $item[ 'id' ]; if ( ES_Campaign_Controller::is_using_new_category_format( $campaign_id ) ) { $categories = $item[ $column_name ]; $categories_str = trim( trim( $categories ), '##' ); $categories_array = explode( '##', $categories_str ); foreach ( $categories_array as $category ) { $cat_cpts = explode( '|', $category ); foreach ( $cat_cpts as $cat_cpt ) { list( $post_type, $cats ) = explode( ':', $cat_cpt ); if ( 'post' === $post_type ) { if ( 'all' === $cats ) { $categories = __( 'All', 'email-subscribers' ); } elseif ( 'none' === $cats ) { $categories = __( 'None', 'email-subscribers' ); } else { $cats = explode( ',', $cats ); $categories = array_map( array( 'ES_Common', 'convert_id_to_name' ), $cats ); $categories = trim( trim( implode( ', ', $categories ) ), ',' ); } } } } } else { $categories = ES_Common::convert_categories_string_to_array( $item[ $column_name ], false ); if ( strpos( $item[ $column_name ], '{a}All{a}' ) ) { $categories = __( 'All', 'email-subscribers' ); } elseif ( strpos( $item[ $column_name ], '{a}None{a}' ) ) { $categories = __( 'None', 'email-subscribers' ); } else { $categories = trim( trim( implode( ', ', $categories ) ), ',' ); } } return $categories; } else { return '-'; } } else { return '-'; } break; default: return $item[ $column_name ]; } } /** * Render the bulk edit checkbox * * @param array $item * * @return string */ public function column_cb( $item ) { return sprintf( '', $item['id'] ); } /** * Method for name column * * @param array $item an array of DB data * * @return string */ public function column_name1( $item ) { global $wpdb; $actions = array(); $type = $item['type']; $nonce = wp_create_nonce( 'es_post_notification' ); $template = get_post( $item['base_template_id'] ); $report = ES_DB_Mailing_Queue::get_notification_by_campaign_id( $item['id'] ); if ( 'newsletter' !== $type ) { /* if ( $template instanceof WP_Post ) { $title = '' . $template->post_title . ''; } else { $title = ! empty( $item['name'] ) ? $item['name'] : ''; } */ $title = ! empty( $item['name'] ) ? $item['name'] : ''; $slug = ( in_array( $item['type'], array( 'post_notification', 'post_digest' ) ) ) ? esc_attr( 'es_notifications' ) : 'es_' . $item['type']; if ( 'workflow' === $type ) { $actions ['edit'] = '' . esc_html__( 'Edit', 'email-subscribers' ) . ''; } else { $actions ['edit'] = '' . esc_html__( 'Edit', 'email-subscribers' ) . ''; } if ( in_array( $type, array( 'post_notification', 'post_digest' ), true ) ) { // Add reports link if there are any reports related to the post notification. if ( ! empty( $report ) ) { $actions['report'] = '' . esc_html__( 'Report', 'email-subscribers' ) . ''; } } elseif ( in_array( $type, array( 'sequence', 'workflow' ), true ) ) { $actions['report'] = '' . esc_html__( 'Report', 'email-subscribers' ) . ''; } } else { $title = $item['name']; $slug = 'es_newsletters'; $status = $item['status']; $broadcast_allowed_edit_statuses = array( IG_ES_CAMPAIGN_STATUS_IN_ACTIVE, // Draft status. IG_ES_CAMPAIGN_STATUS_SCHEDULED, // Scheduled status. IG_ES_CAMPAIGN_STATUS_QUEUED, // Sending status. IG_ES_CAMPAIGN_STATUS_PAUSED, // Paused status. ); if ( in_array( $status, $broadcast_allowed_edit_statuses ) ) { $actions ['edit'] = '' . esc_html__( 'Edit', 'email-subscribers' ) . ''; } $broadcast_allowed_report_statuses = array( IG_ES_CAMPAIGN_STATUS_SCHEDULED, IG_ES_CAMPAIGN_STATUS_QUEUED, IG_ES_CAMPAIGN_STATUS_ACTIVE, IG_ES_CAMPAIGN_STATUS_FINISHED, IG_ES_CAMPAIGN_STATUS_PAUSED, ); if ( in_array( $status, $broadcast_allowed_report_statuses ) && ! empty( $report ) ) { $es_nonce = wp_create_nonce( 'es_notification' ); $actions['report'] = '' . esc_html__( 'Report', 'email-subscribers' ) . ''; } } $campaign_type = array( 'post_notification', 'post_digest' ); if ( ! in_array( $item['type'], $campaign_type ) ) { $actions = apply_filters( 'ig_es_campaign_actions', $actions, $item ); } if ( 'workflow' !== $item['type'] ) { $actions['delete'] = '' . esc_html__( 'Delete', 'email-subscribers' ) . ''; } $title .= $this->row_actions( $actions ); return $title; } /** * Method for campaign status HTML * * @return string $status_html Campaign status HTML. * * @since 4.4.4 */ public function column_status_text( $item ) { $campaign_id = ! empty( $item['id'] ) ? $item['id'] : 0; $campaign_status = ! empty( $item['status'] ) ? (int) $item['status'] : 0; $campaign_statuses = array( IG_ES_CAMPAIGN_STATUS_ACTIVE, IG_ES_CAMPAIGN_STATUS_IN_ACTIVE, ); $campaign_type = ''; if ( ! empty( $campaign_id ) ) { $campaign_type = ES()->campaigns_db->get_campaign_type_by_id( $campaign_id ); } $status_text = '-'; if ( 'newsletter' !== $campaign_type && in_array( $campaign_status, $campaign_statuses, true ) ) { switch ( $campaign_status ) { case IG_ES_CAMPAIGN_STATUS_ACTIVE: $status_text = __( 'Active', 'email-subscribers' ); break; case IG_ES_CAMPAIGN_STATUS_IN_ACTIVE: $status_text = __( 'Draft', 'email-subscribers' ); break; } } else { switch ( $campaign_status ) { case IG_ES_CAMPAIGN_STATUS_ACTIVE: $notification = ES_DB_Mailing_Queue::get_notification_by_campaign_id( $campaign_id ); if ( ! empty( $notification ) ) { $notification_status = $notification['status']; if ( 'In Queue' === $notification_status ) { $status_text = __( 'Scheduled', 'email-subscribers' ); } elseif ( 'Sending' === $notification_status ) { $status_text = __( 'Sending', 'email-subscribers' ); } else { $status_text = __( 'Sent', 'email-subscribers' ); } } break; case IG_ES_CAMPAIGN_STATUS_IN_ACTIVE: $status_text = __( 'Draft', 'email-subscribers' ); break; case IG_ES_CAMPAIGN_STATUS_SCHEDULED: $status_text = __( 'Scheduled', 'email-subscribers' ); break; case IG_ES_CAMPAIGN_STATUS_QUEUED: $status_text = __( 'Sending', 'email-subscribers' ); break; case IG_ES_CAMPAIGN_STATUS_PAUSED: $status_text = __( 'Paused', 'email-subscribers' ); break; default: $status_text = __( 'Sent', 'email-subscribers' ); break; } } ?> '', 'name' => __( 'Name', 'email-subscribers' ), 'type' => __( 'Type', 'email-subscribers' ), 'list_ids' => __( 'List(s)', 'email-subscribers' ), 'categories' => __( 'Categories', 'email-subscribers' ), 'created_at' => __( 'Created', 'email-subscribers' ), 'status' => __( 'Status', 'email-subscribers' ), ); return $columns; } /** * Columns to make sortable. * * @return array */ public function get_sortable_columns() { $sortable_columns = array( // 'base_template_id' => array( 'base_template_id', true ), // 'list_ids' => array( 'list_ids', true ), // 'status' => array( 'status', true ) 'name' => array( 'name', true ), 'type' => array( 'type', true ), 'created_at' => array( 'created_at', true ), ); return $sortable_columns; } /** * Returns an associative array containing the bulk action * * @return array */ public function get_bulk_actions() { $actions = array( 'bulk_delete' => 'Delete', ); return $actions; } /** * Prepare search box * * @param string $text * @param string $input_id * * @since 4.0.0 * @since 4.3.4 Added esc_attr() */ public function search_box( $text = '', $input_id = '' ) { ?>'search-submit' ) ); ?>
_column_headers = $this->get_column_info(); /** Process bulk action */ $this->process_bulk_action(); // Note: Disable Search box for now. $search = ig_es_get_request_data( 's' ); $this->search_box( $search, 'notification-search-input' ); $per_page = $this->get_items_per_page( self::$option_per_page, 25 ); $current_page = $this->get_pagenum(); $total_items = $this->get_lists( 0, 0, true ); $this->set_pagination_args( array( 'total_items' => $total_items, // We have to calculate the total number of items 'per_page' => $per_page, // We have to determine how many items to show on a page ) ); $this->items = $this->get_lists( $per_page, $current_page ); } public function process_bulk_action() { $campaign_id = ig_es_get_request_data( 'list' ); if ( 'delete' === $this->current_action() ) { // In our file that handles the request, verify the nonce. $nonce = ig_es_get_request_data( '_wpnonce' ); if ( ! wp_verify_nonce( $nonce, 'es_post_notification' ) ) { $message = __( 'You are not allowed to delete campaign.', 'email-subscribers' ); $status = 'error'; } else { $this->db->delete_campaigns( $campaign_id ); $message = __( 'Campaign deleted successfully!', 'email-subscribers' ); $status = 'success'; } ES_Common::show_message( $message, $status ); } $campaign_action = $this->current_action(); do_action( 'ig_es_campaign_action', $campaign_id, $campaign_action ); $action = ig_es_get_request_data( 'action' ); $action2 = ig_es_get_request_data( 'action2' ); // If the delete bulk action is triggered if ( ( 'bulk_delete' === $action ) || ( 'bulk_delete' === $action2 ) ) { $ids = ig_es_get_request_data( 'campaigns' ); if ( is_array( $ids ) && count( $ids ) > 0 ) { // Delete multiple Campaigns $this->db->delete_campaigns( $ids ); $message = __( 'Campaign(s) deleted successfully!', 'email-subscribers' ); ES_Common::show_message( $message ); } else { $message = __( 'Please select campaign(s) to delete.', 'email-subscribers' ); ES_Common::show_message( $message, 'error' ); } } } }