'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' ); } }