'yacht',
'plural' => 'yachts',
'ajax' => false,
)
);
}
/**
* Get columns
*
* @return array
*/
public function get_columns() {
return array(
'cb' => '',
'title' => __( 'Nazwa jachtu', 'yacht-booking' ),
'bookings' => __( 'Rezerwacje', 'yacht-booking' ),
'date' => __( 'Data utworzenia', 'yacht-booking' ),
);
}
/**
* Get sortable columns
*
* @return array
*/
public function get_sortable_columns() {
return array(
'title' => array( 'title', false ),
'date' => array( 'date', true ),
);
}
/**
* Get bulk actions
*
* @return array
*/
public function get_bulk_actions() {
return array(
'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'] ) ) : 'title';
$order = isset( $_GET['order'] ) ? sanitize_text_field( wp_unslash( $_GET['order'] ) ) : 'ASC';
$search = isset( $_GET['s'] ) ? sanitize_text_field( wp_unslash( $_GET['s'] ) ) : '';
$args = array(
'post_type' => 'yacht',
'posts_per_page' => $per_page,
'paged' => $current_page,
'orderby' => $orderby,
'order' => $order,
'post_status' => 'publish',
);
if ( ! empty( $search ) ) {
$args['s'] = $search;
}
$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 title
*
* @param object $item Item.
* @return string
*/
public function column_title( $item ) {
$edit_url = admin_url( 'admin.php?page=yacht-bookings-add-yacht&yacht_id=' . $item->ID );
$delete_url = wp_nonce_url(
admin_url( 'admin.php?page=yacht-bookings&action=delete&yacht=' . $item->ID ),
'delete_yacht_' . $item->ID
);
$actions = array(
'edit' => sprintf(
'%s',
esc_url( $edit_url ),
__( 'Edytuj', 'yacht-booking' )
),
'delete' => sprintf(
'%s',
esc_url( $delete_url ),
esc_js( __( 'Czy na pewno chcesz usunąć ten jacht? Spowoduje to również usunięcie wszystkich powiązanych rezerwacji.', 'yacht-booking' ) ),
__( 'Usuń', 'yacht-booking' )
),
);
return sprintf(
'%s%s',
esc_url( $edit_url ),
esc_html( $item->post_title ),
$this->row_actions( $actions )
);
}
/**
* Column bookings count
*
* @param object $item Item.
* @return string
*/
public function column_bookings( $item ) {
$count = $this->count_bookings( $item->ID );
if ( $count > 0 ) {
return sprintf(
'%d',
esc_url( admin_url( 'admin.php?page=yacht-bookings-list&yacht_filter=' . $item->ID ) ),
$count
);
}
return '0';
}
/**
* Column date
*
* @param object $item Item.
* @return string
*/
public function column_date( $item ) {
return get_the_date( Settings::get_date_format() . ' 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 '';
}
/**
* Count bookings for yacht
*
* @param int $yacht_id Yacht ID.
* @return int
*/
private function count_bookings( $yacht_id ) {
$query = new \WP_Query(
array(
'post_type' => 'yacht_booking',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_booking_yacht_id',
'value' => $yacht_id,
),
),
'fields' => 'ids',
)
);
return $query->found_posts;
}
/**
* Message when no items
*/
public function no_items() {
esc_html_e( 'Brak jachtów. Dodaj pierwszy jacht!', 'yacht-booking' );
}
}