'py_otkaz', 'plural' => 'py_otkazi', 'ajax' => false, ) ); } /** * Filters from the request (shared with CSV export). * * @return array */ public static function filters_from_request() { // phpcs:disable WordPress.Security.NonceVerification.Recommended $get = static function ( $key ) { return isset( $_GET[ $key ] ) ? sanitize_text_field( wp_unslash( $_GET[ $key ] ) ) : ''; }; $args = array( 'search' => $get( 's' ), 'deadline' => $get( 'deadline' ), 'email_status' => $get( 'email_status' ), 'refund' => $get( 'refund' ), 'date_from' => $get( 'date_from' ), 'date_to' => $get( 'date_to' ), 'orderby' => $get( 'orderby' ) ? $get( 'orderby' ) : 'created_gmt', 'order' => $get( 'order' ) ? $get( 'order' ) : 'DESC', ); // phpcs:enable return $args; } /** * Columns. * * @return array */ public function get_columns() { return array( 'number' => __( 'Number', 'otkazpro' ), 'date' => __( 'Date', 'otkazpro' ), 'order' => __( 'Order', 'otkazpro' ), 'customer' => __( 'Customer', 'otkazpro' ), 'items' => __( 'Products', 'otkazpro' ), 'deadline' => __( 'Deadline', 'otkazpro' ), 'refund' => __( 'Refund', 'otkazpro' ), 'email' => __( 'Confirmation', 'otkazpro' ), ); } /** * Sortable columns. * * @return array */ protected function get_sortable_columns() { return array( 'number' => array( 'number', false ), 'date' => array( 'created_gmt', true ), 'order' => array( 'order_id', false ), 'customer' => array( 'name', false ), ); } /** * Prepare items. */ public function prepare_items() { $per_page = $this->get_items_per_page( 'py_otkaz_per_page', 20 ); $args = self::filters_from_request(); $args['per_page'] = $per_page; $args['page'] = $this->get_pagenum(); $result = Submission::query( $args ); $this->items = $result['items']; $this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns(), 'number' ); $this->set_pagination_args( array( 'total_items' => $result['total'], 'per_page' => $per_page, 'total_pages' => (int) ceil( $result['total'] / max( 1, $per_page ) ), ) ); } /** * Empty state. */ public function no_items() { esc_html_e( 'No withdrawals yet.', 'otkazpro' ); } /** * Filters + export. * * @param string $which top|bottom. */ protected function extra_tablenav( $which ) { if ( 'top' !== $which ) { return; } $f = self::filters_from_request(); ?>
'otkazpro_export' ), array_filter( array( 's' => $f['search'], 'deadline' => $f['deadline'], 'email_status' => $f['email_status'], 'refund' => $f['refund'], 'date_from' => $f['date_from'], 'date_to' => $f['date_to'], ) ) ), admin_url( 'admin-post.php' ) ), 'otkazpro_export' ); ?>
' . esc_html( $s->number ) . ''; if ( $s->has_excluded ) { $out .= '
' . esc_html__( 'Excluded product', 'otkazpro' ) . ''; } return $out; } /** * Date column. * * @param Submission $s Item. * @return string */ protected function column_date( $s ) { return esc_html( Util::format_gmt( $s->created_gmt, 'datetime' ) ); } /** * Order column. * * @param Submission $s Item. * @return string */ protected function column_order( $s ) { $order = Verifier::get_order( $s->order_id ); if ( ! $order ) { return esc_html( '#' . $s->order_number ); } return '#' . esc_html( $s->order_number ) . '
' . esc_html( wc_get_order_status_name( $order->get_status() ) ) . ''; } /** * Customer column. * * @param Submission $s Item. * @return string */ protected function column_customer( $s ) { return esc_html( $s->name ) . '
' . esc_html( $s->email ) . ''; } /** * Items column. * * @param Submission $s Item. * @return string */ protected function column_items( $s ) { return Admin::items_html( $s ); } /** * Deadline column. * * @param Submission $s Item. * @return string */ protected function column_deadline( $s ) { return Admin::deadline_badge( $s ); } /** * Refund column. * * @param Submission $s Item. * @return string */ protected function column_refund( $s ) { return Refunds::badge( $s ) . '
' . ( $s->processed_gmt ? '' : Refunds::prepare_button( $s ) . ' ' ) . Refunds::processed_button( $s ); } /** * Email column. * * @param Submission $s Item. * @return string */ protected function column_email( $s ) { $out = Admin::email_badge( $s ); if ( 'sent' !== $s->email_status ) { $out .= '
' . Admin::resend_button( $s ); } return $out; } }