<?php
/**
* Admin list table for registrations.
*
* @package TonItaliaRegistration
*/
defined( 'ABSPATH' ) || exit;
if ( ! class_exists( 'WP_List_Table' ) ) {
require_once ABSPATH . 'wp-admin/includes/class-wp-list-table.php';
}
/**
* Class TON_Reg_Registration_List_Table
*/
class TON_Reg_Registration_List_Table extends WP_List_Table {
/**
* Constructor.
*/
public function __construct() {
parent::__construct(
array(
'singular' => 'registration',
'plural' => 'registrations',
'ajax' => false,
)
);
}
/**
* @return array<string,string>
*/
public function get_columns() {
return array(
'id' => __( 'ID', 'ton-italia-registration' ),
'cognome' => __( 'Cognome', 'ton-italia-registration' ),
'nome' => __( 'Nome', 'ton-italia-registration' ),
'email' => __( 'Email', 'ton-italia-registration' ),
'status' => __( 'Stato', 'ton-italia-registration' ),
'created_at' => __( 'Data', 'ton-italia-registration' ),
);
}
/**
* @param object $item Item.
* @return string
*/
public function column_id( $item ) {
$view_url = admin_url( 'admin.php?page=ton-registrations&action=view&id=' . (int) $item->id );
$actions = array(
'view' => '<a href="' . esc_url( $view_url ) . '">' . esc_html__( 'Dettaglio', 'ton-italia-registration' ) . '</a>',
);
return (int) $item->id . $this->row_actions( $actions );
}
/**
* @param object $item Item.
* @return string
*/
public function column_status( $item ) {
$labels = array(
'pending' => __( 'In attesa', 'ton-italia-registration' ),
'admitted' => __( 'Ammesso', 'ton-italia-registration' ),
'rejected' => __( 'Non ammesso', 'ton-italia-registration' ),
);
$label = $labels[ $item->status ] ?? $item->status;
if ( $item->anonymized_at ) {
$label .= ' (' . __( 'anonimizzato', 'ton-italia-registration' ) . ')';
}
return esc_html( $label );
}
/**
* @param object $item Item.
* @param string $column_name Column.
* @return string
*/
public function column_default( $item, $column_name ) {
return esc_html( $item->$column_name ?? '' );
}
/**
* @return string
*/
protected function get_primary_column_name() {
return 'cognome';
}
/**
* @return array<string,bool>
*/
protected function get_sortable_columns() {
return array(
'cognome' => array( 'cognome', false ),
'created_at' => array( 'created_at', true ),
'status' => array( 'status', false ),
);
}
/**
* Prepare items.
*/
public function prepare_items() {
$per_page = 20;
$status = isset( $_REQUEST['status'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['status'] ) ) : '';
$search = isset( $_REQUEST['s'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['s'] ) ) : '';
$total = TON_Reg_Database::count(
array(
'status' => $status,
'search' => $search,
)
);
$total_pages = max( 1, (int) ceil( $total / $per_page ) );
$page = max( 1, min( $this->get_pagenum(), $total_pages ) );
$this->items = TON_Reg_Database::query(
array(
'status' => $status,
'search' => $search,
'limit' => $per_page,
'offset' => ( $page - 1 ) * $per_page,
)
);
$this->set_pagination_args(
array(
'total_items' => $total,
'per_page' => $per_page,
'total_pages' => $total_pages,
)
);
$columns = $this->get_columns();
$hidden = array();
$sortable = $this->get_sortable_columns();
$this->_column_headers = array( $columns, $hidden, $sortable );
}
/**
* @return string
*/
public function no_items() {
esc_html_e( 'Nessuna iscrizione trovata.', 'ton-italia-registration' );
}
}