'transaction', // singular name of the listed records 'plural' => 'transactions', // plural name of the listed records 'ajax' => false, // does this table support ajax? ) ); } function column_default( $item, $column_name ) { $val = $item[ $column_name ]; switch ( $column_name ) { case 'payment_amount': $val = SwpmMiscUtils::format_money( $val ); $val = apply_filters( 'swpm_transactions_page_amount_display', $val, $item ); break; default: break; } return $val; } function column_id( $item ) { // Build row actions $actions = array( /* 'edit' => sprintf('Edit', $item['id']),//TODO - Will be implemented in a future date */ 'delete' => sprintf( 'Delete', $item['id'] ), ); // Return the refid column contents return $item['id'] . $this->row_actions( $actions ); } function column_member_profile( $item ) { global $wpdb; $member_id = $item['member_id']; $subscr_id = $item['subscr_id']; $column_value = ''; if ( empty( $member_id ) ) {// Lets try to get the member id using unique reference if ( ! empty( $subscr_id ) ) { $resultset = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}swpm_members_tbl where subscr_id=%s", $subscr_id ), OBJECT ); if ( $resultset ) { // Found a record $member_id = $resultset->member_id; } } } if ( ! empty( $member_id ) ) { $profile_page = 'admin.php?page=simple_wp_membership&member_action=edit&member_id=' . $member_id; $column_value = '' . SwpmUtils::_( 'View Profile' ) . ''; } else { $column_value = ''; } return $column_value; } function column_cb( $item ) { return sprintf( '', /* $1%s */ $this->_args['singular'], // Let's reuse singular label (affiliate) /* $2%s */ $item['id'] // The value of the checkbox should be the record's key/id ); } function get_columns() { $columns = array( 'cb' => '', // Render a checkbox instead of text 'id' => SwpmUtils::_( 'Row ID' ), 'email' => SwpmUtils::_( 'Email Address' ), 'first_name' => SwpmUtils::_( 'First Name' ), 'last_name' => SwpmUtils::_( 'Last Name' ), 'member_profile' => SwpmUtils::_( 'Member Profile' ), 'txn_date' => SwpmUtils::_( 'Date' ), 'txn_id' => SwpmUtils::_( 'Transaction ID' ), 'subscr_id' => SwpmUtils::_( 'Subscriber ID' ), 'payment_amount' => SwpmUtils::_( 'Amount' ), 'membership_level' => SwpmUtils::_( 'Membership Level' ), 'status' => SwpmUtils::_( 'Status/Note' ), ); return $columns; } function get_sortable_columns() { $sortable_columns = array( 'id' => array( 'id', false ), // true means its already sorted 'membership_level' => array( 'membership_level', false ), 'last_name' => array( 'last_name', false ), 'txn_date' => array( 'txn_date', false ), ); return $sortable_columns; } function get_bulk_actions() { $actions = array( 'delete' => SwpmUtils::_( 'Delete' ), ); return $actions; } function process_bulk_action() { // Detect when a bulk action is being triggered... if ( 'delete' === $this->current_action() ) { $records_to_delete = array_map( 'sanitize_text_field', $_GET['transaction'] ); if ( empty( $records_to_delete ) ) { echo '

Error! You need to select multiple records to perform a bulk action!

'; return; } foreach ( $records_to_delete as $record_id ) { if ( ! is_numeric( $record_id ) ) { wp_die( 'Error! ID must be numeric.' ); } global $wpdb; $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $wpdb->prefix . 'swpm_payments_tbl WHERE id = %d', $record_id ) ); } echo '

Selected records deleted successfully!

'; } } function delete_record( $record_id ) { global $wpdb; $wpdb->query( $wpdb->prepare( 'DELETE FROM ' . $wpdb->prefix . 'swpm_payments_tbl WHERE id = %d', $record_id ) ); // also delete record from swpm_transactions CPT $trans = get_posts( array( 'meta_key' => 'db_row_id', 'meta_value' => $record_id, 'posts_per_page' => 1, 'offset' => 0, 'post_type' => 'swpm_transactions', ) ); wp_reset_postdata(); if ( empty( $trans ) ) { return; } $trans = $trans[0]; wp_delete_post( $trans->ID, true ); } function prepare_items() { global $wpdb; // Lets decide how many records per page to show $per_page = apply_filters( 'swpm_transactions_menu_items_per_page', 50 ); $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); $this->_column_headers = array( $columns, $hidden, $sortable ); $this->process_bulk_action(); // This checks for sorting input. Read and sanitize the inputs $orderby_column = isset( $_GET['orderby'] ) ? sanitize_text_field( $_GET['orderby'] ) : ''; $sort_order = isset( $_GET['order'] ) ? sanitize_text_field( $_GET['order'] ) : ''; if ( empty( $orderby_column ) ) { $orderby_column = 'id'; $sort_order = 'DESC'; } $orderby_column = SwpmUtils::sanitize_value_by_array( $orderby_column, $sortable ); $sort_order = SwpmUtils::sanitize_value_by_array( $sort_order, array( 'DESC' => '1', 'ASC' => '1', ) ); // pagination requirement $current_page = $this->get_pagenum(); $search_term = filter_input( INPUT_POST, 'swpm_txn_search', FILTER_SANITIZE_STRING ); $search_term = trim( $search_term ); if ( $search_term ) {// Only load the searched records. $like = $wpdb->esc_like( $search_term ); $like = '%' . $like . '%'; $prepare_query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}swpm_payments_tbl WHERE `email` LIKE %s OR `txn_id` LIKE %s OR `first_name` LIKE %s OR `last_name` LIKE %s", $like, $like, $like, $like ); $data = $wpdb->get_results( $prepare_query, ARRAY_A ); $total_items = count( $data ); } else { // Load all data in an optimized way (so it is only loading data for the current page) $query = "SELECT COUNT(*) FROM {$wpdb->prefix}swpm_payments_tbl"; $total_items = $wpdb->get_var( $query ); // pagination requirement $query = "SELECT * FROM {$wpdb->prefix}swpm_payments_tbl ORDER BY $orderby_column $sort_order"; $offset = ( $current_page - 1 ) * $per_page; $query .= ' LIMIT ' . (int) $offset . ',' . (int) $per_page; $data = $wpdb->get_results( $query, ARRAY_A ); } // Now we add our *sorted* data to the items property, where it can be used by the rest of the class. $this->items = $data; // pagination requirement $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 'total_pages' => ceil( $total_items / $per_page ), // WE have to calculate the total number of pages ) ); } }