'booking',
'plural' => 'bookings',
'ajax' => false,
)
);
}
/**
* Get columns
*
* @return array
*/
public function get_columns() {
return array(
'cb' => '',
'id' => __( 'ID', 'yacht-booking' ),
'yacht' => __( 'Jacht', 'yacht-booking' ),
'customer' => __( 'Klient', 'yacht-booking' ),
'dates' => __( 'Termin', 'yacht-booking' ),
'status' => __( 'Status', 'yacht-booking' ),
'total_price' => __( 'Cena', 'yacht-booking' ),
'date_created' => __( 'Data utworzenia', 'yacht-booking' ),
);
}
/**
* Get sortable columns
*
* @return array
*/
public function get_sortable_columns() {
return array(
'id' => array( 'ID', true ),
'status' => array( 'status', false ),
'total_price' => array( 'total_price', false ),
'date_created' => array( 'date', true ),
);
}
/**
* Get bulk actions
*
* @return array
*/
public function get_bulk_actions() {
return array(
'approve' => __( 'Zatwierdź', 'yacht-booking' ),
'cancel' => __( 'Anuluj', 'yacht-booking' ),
'delete' => __( 'Usuń', 'yacht-booking' ),
);
}
/**
* Prepare items for display
*/
public function prepare_items() {
$per_page = 20;
$current_page = $this->get_pagenum();
$orderby = isset( $_GET['orderby'] ) ? sanitize_text_field( wp_unslash( $_GET['orderby'] ) ) : 'date';
$order = isset( $_GET['order'] ) ? sanitize_text_field( wp_unslash( $_GET['order'] ) ) : 'DESC';
$search = isset( $_GET['s'] ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : '';
$args = array(
'post_type' => 'yacht_booking',
'posts_per_page' => $per_page,
'paged' => $current_page,
'orderby' => $orderby,
'order' => $order,
'post_status' => 'publish',
);
// Search
if ( ! empty( $search ) ) {
$args['s'] = $search;
}
// Filter by status
if ( ! empty( $_GET['status_filter'] ) && 'all' !== $_GET['status_filter'] ) {
$args['meta_query'] = array(
array(
'key' => '_booking_status',
'value' => sanitize_text_field( wp_unslash( $_GET['status_filter'] ) ),
),
);
}
// Filter by yacht
if ( ! empty( $_GET['yacht_filter'] ) && 'all' !== $_GET['yacht_filter'] ) {
if ( ! isset( $args['meta_query'] ) ) {
$args['meta_query'] = array();
}
$args['meta_query'][] = array(
'key' => '_booking_yacht_id',
'value' => (int) $_GET['yacht_filter'],
);
}
$query = new \WP_Query( $args );
$this->items = $query->posts;
$this->set_pagination_args(
array(
'total_items' => $query->found_posts,
'per_page' => $per_page,
'total_pages' => $query->max_num_pages,
)
);
$columns = $this->get_columns();
$hidden = array();
$sortable = $this->get_sortable_columns();
$this->_column_headers = array( $columns, $hidden, $sortable );
}
/**
* Column checkbox
*
* @param object $item Item.
* @return string
*/
public function column_cb( $item ) {
return sprintf(
'',
$item->ID
);
}
/**
* Column ID
*
* @param object $item Item.
* @return string
*/
public function column_id( $item ) {
$actions = array();
$status = Booking::get_status( $item->ID );
// Approve action (for pending only)
if ( 'pending' === $status ) {
$approve_url = wp_nonce_url(
admin_url( 'admin.php?page=yacht-bookings-list&action=approve&booking=' . $item->ID ),
'approve_booking_' . $item->ID
);
$actions['approve-booking'] = sprintf(
'%s',
esc_url( $approve_url ),
__( 'Zatwierdź', 'yacht-booking' )
);
}
// Cancel action (for pending and confirmed)
if ( in_array( $status, array( 'pending', 'confirmed' ), true ) ) {
$cancel_url = wp_nonce_url(
admin_url( 'admin.php?page=yacht-bookings-list&action=cancel&booking=' . $item->ID ),
'cancel_booking_' . $item->ID
);
$actions['cancel'] = sprintf(
'%s',
esc_url( $cancel_url ),
esc_js( __( 'Czy na pewno chcesz anulować tę rezerwację?', 'yacht-booking' ) ),
__( 'Anuluj', 'yacht-booking' )
);
}
// Delete action (always visible)
$delete_url = wp_nonce_url(
admin_url( 'admin.php?page=yacht-bookings-list&action=delete&booking=' . $item->ID ),
'delete_booking_' . $item->ID
);
$actions['delete'] = sprintf(
'%s',
esc_url( $delete_url ),
esc_js( __( 'Czy na pewno chcesz usunąć tę rezerwację? Tej operacji nie można cofnąć.', 'yacht-booking' ) ),
__( 'Usuń', 'yacht-booking' )
);
return sprintf(
'#%d%s',
$item->ID,
$this->row_actions( $actions )
);
}
/**
* Column yacht
*
* @param object $item Item.
* @return string
*/
public function column_yacht( $item ) {
$yacht_id = Booking::get_yacht_id( $item->ID );
$yacht = get_post( $yacht_id );
if ( $yacht ) {
return sprintf(
'%s',
esc_url( admin_url( 'admin.php?page=yacht-bookings-add-yacht&yacht_id=' . $yacht_id ) ),
esc_html( $yacht->post_title )
);
}
return '—';
}
/**
* Column customer
*
* @param object $item Item.
* @return string
*/
public function column_customer( $item ) {
$customer_name = Booking::get_customer_name( $item->ID );
$customer_email = Booking::get_customer_email( $item->ID );
$customer_phone = Booking::get_customer_phone( $item->ID );
return sprintf(
'%s
%s
%s',
esc_html( $customer_name ),
esc_html( $customer_email ),
esc_html( $customer_phone )
);
}
/**
* Column dates
*
* @param object $item Item.
* @return string
*/
public function column_dates( $item ) {
$start_date = Booking::get_start_date( $item->ID );
$end_date = Booking::get_end_date( $item->ID );
$days = Availability::count_days( $start_date, $end_date );
return sprintf(
'%s
do %s (%d %s)',
esc_html( Settings::format_date( $start_date ) ),
esc_html( Settings::format_date( $end_date ) ),
$days,
_n( 'dzień', 'dni', $days, 'yacht-booking' )
);
}
/**
* Column status
*
* @param object $item Item.
* @return string
*/
public function column_status( $item ) {
$status = Booking::get_status( $item->ID );
$status_labels = array(
'pending' => __( 'Oczekująca', 'yacht-booking' ),
'confirmed' => __( 'Potwierdzona', 'yacht-booking' ),
'cancelled' => __( 'Anulowana', 'yacht-booking' ),
);
$status_label = isset( $status_labels[ $status ] ) ? $status_labels[ $status ] : $status;
return sprintf(
'%s',
esc_attr( $status ),
esc_html( $status_label )
);
}
/**
* Column total price
*
* @param object $item Item.
* @return string
*/
public function column_total_price( $item ) {
$total_price = Booking::get_total_price( $item->ID );
if ( $total_price > 0 ) {
return sprintf(
'%s',
esc_html( Settings::format_price( $total_price ) )
);
}
return '—';
}
/**
* Column date created
*
* @param object $item Item.
* @return string
*/
public function column_date_created( $item ) {
$date_format = Settings::get_date_format();
return sprintf(
'%s
%s',
get_the_date( $date_format, $item ),
get_the_time( 'H:i', $item )
);
}
/**
* Default column
*
* @param object $item Item.
* @param string $column_name Column name.
* @return string
*/
public function column_default( $item, $column_name ) {
return '';
}
/**
* Display filters above the table
*/
protected function extra_tablenav( $which ) {
if ( 'top' !== $which ) {
return;
}
$current_status = isset( $_GET['status_filter'] ) ? sanitize_text_field( wp_unslash( $_GET['status_filter'] ) ) : 'all';
$current_yacht = isset( $_GET['yacht_filter'] ) ? (int) $_GET['yacht_filter'] : 'all';
?>