'task',
'plural' => 'tasks',
'ajax' => false,
)
);
}
/**
* Columns.
*
* @return array
*/
public function get_columns() {
return array(
'external_reference' => __( 'External ref.', 'equasign' ),
'signer' => __( 'Signer', 'equasign' ),
'state' => __( 'Status', 'equasign' ),
'channel' => __( 'Channel', 'equasign' ),
'created_at' => __( 'Created', 'equasign' ),
'expires_at' => __( 'Expires', 'equasign' ),
);
}
/**
* Sortable columns.
*
* @return array
*/
protected function get_sortable_columns() {
return array(
'external_reference' => array( 'external_reference', false ),
'state' => array( 'state', false ),
'created_at' => array( 'created_at', true ),
'expires_at' => array( 'expires_at', false ),
);
}
/**
* Prepares the items.
*
* @return void
*/
public function prepare_items() {
$per_page = 20;
$page = $this->get_pagenum();
// phpcs:disable WordPress.Security.NonceVerification.Recommended
$state = isset( $_GET['state'] ) ? sanitize_key( wp_unslash( $_GET['state'] ) ) : '';
$search = isset( $_REQUEST['s'] ) ? sanitize_text_field( wp_unslash( $_REQUEST['s'] ) ) : '';
$orderby = isset( $_GET['orderby'] ) ? sanitize_key( wp_unslash( $_GET['orderby'] ) ) : 'created_at';
$order = isset( $_GET['order'] ) ? sanitize_key( wp_unslash( $_GET['order'] ) ) : 'desc';
// phpcs:enable
$res = EquaSign_Repo::list_tasks(
array(
'state' => $state,
'search' => $search,
'orderby' => $orderby,
'order' => $order,
'per_page' => $per_page,
'page' => $page,
)
);
$this->items = $res['items'];
$this->set_pagination_args(
array(
'total_items' => $res['total'],
'per_page' => $per_page,
'total_pages' => (int) ceil( $res['total'] / $per_page ),
)
);
$this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() );
}
/**
* External reference column (link to the detail view).
*
* @param object $item Row.
* @return string
*/
public function column_external_reference( $item ) {
$url = admin_url( 'admin.php?page=equasign&ref=' . rawurlencode( $item->opaque_reference ) );
$text = $item->external_reference ? $item->external_reference : __( '(no reference)', 'equasign' );
return '' . esc_html( $text ) . '';
}
/**
* Signer column.
*
* @param object $item Row.
* @return string
*/
public function column_signer( $item ) {
$contact = $item->signer_email ? $item->signer_email : $item->signer_phone;
return esc_html( $item->signer_name ) . '
' . esc_html( $contact ) . '';
}
/**
* State column (badge).
*
* @param object $item Row.
* @return string
*/
public function column_state( $item ) {
return '' . esc_html( $item->state ) . '';
}
/**
* Simple columns.
*
* @param object $item Row.
* @param string $column Column.
* @return string
*/
public function column_default( $item, $column ) {
switch ( $column ) {
case 'channel':
return esc_html( $item->channel );
case 'created_at':
return esc_html( equasign_display_date( $item->created_at ) );
case 'expires_at':
return esc_html( equasign_display_date( $item->expires_at ) );
default:
return '';
}
}
/**
* Views filtered by state.
*
* @return array
*/
protected function get_views() {
$counts = EquaSign_Repo::count_by_state();
$total = array_sum( $counts );
$base = admin_url( 'admin.php?page=equasign' );
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
$current = isset( $_GET['state'] ) ? sanitize_key( wp_unslash( $_GET['state'] ) ) : '';
$views = array();
$views['all'] = ''
. esc_html__( 'All', 'equasign' ) . ' (' . (int) $total . ')';
foreach ( EquaSign_States::all() as $state ) {
$n = isset( $counts[ $state ] ) ? (int) $counts[ $state ] : 0;
if ( 0 === $n ) {
continue;
}
$url = add_query_arg( 'state', $state, $base );
$views[ $state ] = ''
. esc_html( $state ) . ' (' . $n . ')';
}
return $views;
}
/**
* Empty-list message.
*
* @return void
*/
public function no_items() {
esc_html_e( 'No signing tasks yet.', 'equasign' );
}
}