_x( 'Payment History', 'Post Type General Name', 'advanced-classifieds-and-directory-pro' ),
'singular_name' => _x( 'Payment', 'Post Type Singular Name', 'advanced-classifieds-and-directory-pro' ),
'menu_name' => __( 'Payment History', 'advanced-classifieds-and-directory-pro' ),
'name_admin_bar' => __( 'Payment', 'advanced-classifieds-and-directory-pro' ),
'all_items' => __( 'Payment History', 'advanced-classifieds-and-directory-pro' ),
'add_new_item' => __( 'Add New Payment', 'advanced-classifieds-and-directory-pro' ),
'add_new' => __( 'Add New', 'advanced-classifieds-and-directory-pro' ),
'new_item' => __( 'New Payment', 'advanced-classifieds-and-directory-pro' ),
'edit_item' => __( 'Edit Payment', 'advanced-classifieds-and-directory-pro' ),
'update_item' => __( 'Update Payment', 'advanced-classifieds-and-directory-pro' ),
'view_item' => __( 'View Payment', 'advanced-classifieds-and-directory-pro' ),
'search_items' => __( 'Search Payment', 'advanced-classifieds-and-directory-pro' ),
'not_found' => __( 'No payments found', 'advanced-classifieds-and-directory-pro' ),
'not_found_in_trash' => __( 'No payments found in Trash', 'advanced-classifieds-and-directory-pro' ),
);
$args = array(
'label' => __( 'acadp_payments', 'advanced-classifieds-and-directory-pro' ),
'description' => __( 'Post Type Description', 'advanced-classifieds-and-directory-pro' ),
'labels' => $labels,
'supports' => array( 'title', 'author', ),
'taxonomies' => array( '' ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => 'edit.php?post_type=acadp_listings',
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => true,
'publicly_queryable' => true,
'capability_type' => 'acadp_payment',
'map_meta_cap' => true,
);
register_post_type( 'acadp_payments', $args );
}
/**
* Add/Remove custom bulk actions to the select menus.
*
* @since 1.0.0
* @access public
*/
public function admin_footer_edit() {
global $post_type;
if( 'acadp_payments' == $post_type ) {
?>
';
echo '';
foreach( $statuses as $value => $title ) {
printf( '', $value, ( $value == $current_status ? ' selected="selected"' : '' ), $title );
}
echo '';
}
}
/**
* Parse a query string.
*
* @since 1.0.0
* @access public
*
* @param WP_Query $query WordPress Query object
*/
public function parse_query( $query ) {
global $pagenow, $post_type;
if( 'edit.php' == $pagenow && 'acadp_payments' == $post_type ) {
// Filter by post meta "payment_status"
if( isset( $_GET['payment_status'] ) && $_GET['payment_status'] != '' ) {
$query->query_vars['meta_key'] = 'payment_status';
$query->query_vars['meta_value'] = sanitize_key( $_GET['payment_status'] );
}
}
}
/**
* Retrieve the table columns.
*
* @since 1.0.0
* @access public
*
* @return array $columns Array of all the list table columns.
*/
public function get_columns() {
$columns = array(
'cb' => '', // Render a checkbox instead of text
'ID' => __( 'Order ID', 'advanced-classifieds-and-directory-pro' ),
'details' => __( 'Details', 'advanced-classifieds-and-directory-pro' ),
'amount' => __( 'Amount', 'advanced-classifieds-and-directory-pro' ),
'type' => __( 'Type', 'advanced-classifieds-and-directory-pro' ),
'transaction_id' => __( 'Transaction ID', 'advanced-classifieds-and-directory-pro' ),
'customer' => __( 'Customer', 'advanced-classifieds-and-directory-pro' ),
'date' => __( 'Date', 'advanced-classifieds-and-directory-pro' ),
'status' => __( 'Status', 'advanced-classifieds-and-directory-pro' )
);
return $columns;
}
/**
* This function renders the custom columns in the list table.
*
* @since 1.0.0
* @access public
*
* @param string $column The name of the column.
* @param string $post_id Post ID.
*/
public function custom_column_content( $column, $post_id ) {
global $post;
switch ( $column ) {
case 'ID' :
printf( '%d', acadp_get_payment_receipt_page_link( $post_id ), $post_id );
break;
case 'details' :
$listing_id = get_post_meta( $post_id, 'listing_id', true );
printf( '
%s:%d
', get_edit_post_link( $listing_id ), get_the_title( $listing_id ), $listing_id );
$order_details = apply_filters( 'acadp_order_details', array(), $post_id );
foreach( $order_details as $order_detail ) {
echo '# '.$order_detail['label'].'
';
}
$featured = get_post_meta( $post_id, 'featured', true );
if( $featured ) {
$featured_listing_settings = get_option( 'acadp_featured_listing_settings' );
echo '# '.$featured_listing_settings['label'].'
';
}
break;
case 'amount' :
$amount = get_post_meta( $post_id, 'amount', true );
$amount = acadp_format_payment_amount( $amount );
$value = acadp_payment_currency_filter( $amount );
echo $value;
break;
case 'type' :
$gateway = get_post_meta( $post_id, 'payment_gateway', true );
if( 'free' == $gateway ) {
_e( 'Free Submission', 'advanced-classifieds-and-directory-pro' );
} else {
$gateway_settings = get_option( 'acadp_gateway_'.$gateway.'_settings' );
echo ! empty( $gateway_settings['label'] ) ? $gateway_settings['label'] : $gateway;
}
break;
case 'transaction_id' :
echo get_post_meta( $post_id, 'transaction_id', true );
break;
case 'customer' :
$user_info = get_userdata( $post->post_author );
printf( '%s
', get_edit_user_link( $user_info->ID ), $user_info->display_name );
echo $user_info->user_email;
break;
case 'date' :
$date = strtotime( $post->post_date );
$value = date_i18n( get_option( 'date_format' ), $date );
echo $value;
break;
case 'status' :
$value = get_post_meta( $post_id, 'payment_status', true );
echo acadp_get_payment_status_i18n( $value );
break;
}
}
/**
* Retrieve the table's sortable columns.
*
* @since 1.0.0
* @access public
*
* @return array Array of all the sortable columns
*/
public function get_sortable_columns() {
$columns = array(
'ID' => 'ID',
'amount' => 'amount',
'date' => 'date'
);
return $columns;
}
/**
* Called only in /wp-admin/edit.php* pages.
*
* @since 1.0.0
* @access public
*/
public function load_edit() {
// Handle the custom bulk action
global $typenow;
$post_type = $typenow;
if( 'acadp_payments' == $typenow ) {
// Get the action
$wp_list_table = _get_list_table('WP_Posts_List_Table');
$action = $wp_list_table->current_action();
$allowed_actions = array_keys( acadp_get_payment_bulk_actions() );
if( ! in_array( $action, $allowed_actions ) ) return;
// Security check
check_admin_referer('bulk-posts');
// Make sure ids are submitted
if( isset( $_REQUEST['post'] ) ) {
$post_ids = array_map( 'intval', $_REQUEST['post'] );
}
if( empty( $post_ids ) ) return;
// This is based on wp-admin/edit.php
$sendback = remove_query_arg( array_merge( $allowed_actions, array( 'untrashed', 'deleted', 'ids' ) ), wp_get_referer() );
if( ! $sendback ) $sendback = admin_url( "edit.php?post_type=$post_type" );
$pagenum = $wp_list_table->get_pagenum();
$sendback = add_query_arg( 'paged', $pagenum, $sendback );
$modified = 0;
foreach( $post_ids as $post_id ) {
if( ! $this->update_payment_status( $action, $post_id ) ) wp_die( __( 'Error updating post.', 'advanced-classifieds-and-directory-pro' ) );
$modified++;
}
$sendback = add_query_arg( array( $action => $modified, 'ids' => join( ',', $post_ids ) ), $sendback );
$sendback = remove_query_arg( array( 'action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view' ), $sendback );
}
// Add filter to sort columns
add_filter( 'request', array( $this, 'sort_columns' ) );
}
/**
* Update payment status.
*
* @since 1.0.0
* @access public
*
* @param string $action Action to be performed.
* @param int $post_id Post ID.
* @return boolean If the save was successful or not.
*/
public function update_payment_status( $action, $post_id ) {
$old_status = get_post_meta( $post_id, 'payment_status', true );
$new_status = str_replace( 'set_to_', '', $action );
$new_status = sanitize_key( $new_status );
if( $new_status == $old_status ) return true;
do_action( 'acadp_order_status_changed', $new_status, $old_status, $post_id );
$non_complete_statuses = array( 'created', 'pending', 'failed', 'cancelled', 'refunded' );
// If the order has featured
$featured = get_post_meta( $post_id, 'featured', true );
if( ! empty( $featured ) ) {
$listing_id = get_post_meta( $post_id, 'listing_id', true );
if( 'completed' == $old_status && in_array( $new_status, $non_complete_statuses ) ) {
update_post_meta( $listing_id, 'featured', 0 );
} else if( in_array( $old_status, $non_complete_statuses ) && 'completed' == $new_status ) {
update_post_meta( $listing_id, 'featured', 1 );
}
}
// Update new status
update_post_meta( $post_id, 'payment_status', $new_status );
// Email listing owner when his/her set to completed
if( in_array( $old_status, $non_complete_statuses ) && 'completed' == $new_status ) {
acadp_email_listing_owner_order_completed( $post_id );
}
return true;
}
/**
* Display an admin notice on the payment history page after performing
* a bulk action.
*
* @since 1.0.0
* @access public
*/
public function admin_notices() {
global $pagenow, $post_type;
if( 'edit.php' == $pagenow && 'acadp_payments' == $post_type ) {
$message = '';
$allowed_actions = array_keys( acadp_get_payment_bulk_actions() );
foreach( $allowed_actions as $action ) {
$_action = str_replace( 'set_to_', '', $action );
if( isset( $_REQUEST[ $action ] ) && (int) $_REQUEST[ $action ] ) {
$message = sprintf( _n( "Payment set to $_action.", "%s payments set to $_action.", $_REQUEST[ $action ], 'advanced-classifieds-and-directory-pro' ), number_format_i18n( $_REQUEST[ $action ] ) );
break;
}
}
$class = "updated";
if( ! empty( $message ) ) echo "";
}
}
/**
* Sort custom columns.
*
* @since 1.0.0
* @access public
*
* @param array $vars Array of query variables.
*/
public function sort_columns( $vars ) {
// Check if we're viewing the 'acadp_payments' post type
if( isset( $vars['post_type'] ) && 'acadp_payments' == $vars['post_type'] ) {
// Check if 'orderby' is set to 'amount'
if ( isset( $vars['orderby'] ) && 'amount' == $vars['orderby'] ) {
// Merge the query vars with our custom variables.
$vars = array_merge(
$vars,
array(
'meta_key' => 'amount',
'orderby' => 'meta_value_num'
)
);
}
}
return $vars;
}
}