PluginProbe
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.5.0
4.7.2 4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 All 281 releases
surecart / app / src / Controllers / Admin / Abandoned / AbandonedCheckoutListTable.php
AbandonedCheckoutListTable.php
228 lines 6.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SureCart\Controllers\Admin\Abandoned;
4
5 use SureCart\Controllers\Admin\Tables\ListTable;
6 use SureCart\Models\AbandonedCheckout;
7
8 /**
9 * Create a new table class that will extend the WP_List_Table
10 */
11 class AbandonedCheckoutListTable extends ListTable {
12 /**
13 * Prepare the items for the table to process
14 *
15 * @return Void
16 */
17 public function prepare_items() {
18 $columns = $this->get_columns();
19 $hidden = $this->get_hidden_columns();
20 $sortable = $this->get_sortable_columns();
21
22 $this->_column_headers = array( $columns, $hidden, $sortable );
23
24 $query = $this->table_data();
25 if ( is_wp_error( $query ) ) {
26 $this->items = [];
27 return;
28 }
29
30 $this->set_pagination_args(
31 [
32 'total_items' => $query->pagination->count,
33 'per_page' => $this->get_items_per_page( 'abandoned_checkout' ),
34 ]
35 );
36
37 $this->items = $query->data;
38 }
39
40 protected function get_views() {
41 $stati = [
42 'all' => __( 'All', 'surecart' ),
43 'scheduled' => __( 'Scheduled', 'surecart' ),
44 'sent' => __( 'Sent', 'surecart' ),
45 'not_scheduled' => __( 'Not Scheduled', 'surecart' ),
46 ];
47
48 $link = \SureCart::getUrl()->index( 'abandoned-checkout' );
49
50 foreach ( $stati as $status => $label ) {
51 $current_link_attributes = '';
52
53 if ( ! empty( $_GET['status'] ) ) {
54 if ( sanitize_text_field( wp_unslash( $_GET['status'] ) ) === $status ) {
55 $current_link_attributes = ' class="current" aria-current="page"';
56 }
57 } elseif ( 'all' === $status ) {
58 $current_link_attributes = ' class="current" aria-current="page"';
59 }
60
61 $link = add_query_arg( 'status', $status, $link );
62
63 $status_links[ $status ] = "<a href='$link'$current_link_attributes>" . $label . '</a>';
64 }
65
66 /**
67 * Filters the comment status links.
68 *
69 * @since 2.5.0
70 * @since 5.1.0 The 'Mine' link was added.
71 *
72 * @param string[] $status_links An associative array of fully-formed comment status links. Includes 'All', 'Mine',
73 * 'Pending', 'Approved', 'Spam', and 'Trash'.
74 */
75 return apply_filters( 'abandoned_order_status_links', $status_links );
76 }
77
78 public function search() {
79 ?>
80 <form class="search-form"
81 method="get">
82 <?php $this->search_box( __( 'Search Abanonded Orders', 'surecart' ), 'abandoned_order' ); ?>
83 <input type="hidden"
84 name="id"
85 value="1" />
86 </form>
87 <?php
88 }
89
90 /**
91 * Override the parent columns method. Defines the columns to use in your listing table
92 *
93 * @return Array
94 */
95 public function get_columns() {
96 return [
97 'placed_by' => __( 'Placed By', 'surecart' ),
98 'date' => __( 'Date', 'surecart' ),
99 'notification_status' => __( 'Email Status', 'surecart' ),
100 'recovery_status' => __( 'Recovery Status', 'surecart' ),
101 'total' => __( 'Total', 'surecart' ),
102 ];
103 }
104
105 /**
106 * Get the table data
107 *
108 * @return Array
109 */
110 protected function table_data() {
111 $status = $this->getStatus();
112 $where = [];
113 if ( $status ) {
114 $where['notification_status'] = [ $status ];
115 }
116 return AbandonedCheckout::where( $where )
117 ->with( [ 'recovered_checkout', 'checkout', 'customer' ] )
118 ->paginate(
119 [
120 'per_page' => $this->get_items_per_page( 'abandoned-checkouts' ),
121 'page' => $this->get_pagenum(),
122 ]
123 );
124 }
125
126 /**
127 * Get the archive query status.
128 *
129 * @return boolean|null
130 */
131 public function getStatus() {
132 $status = sanitize_text_field( wp_unslash( $_GET['status'] ?? 'all' ) );
133 if ( 'all' === $status ) {
134 return null;
135 }
136 return $status ? [ esc_html( $status ) ] : [];
137 }
138
139 /**
140 * Handle the total column
141 *
142 * @param \SureCart\Models\AbandonedCheckout $checkout Checkout Session Model.
143 *
144 * @return string
145 */
146 public function column_total( $abandoned ) {
147 return '<sc-format-number type="currency" currency="' . strtoupper( esc_html( $abandoned->checkout->currency ?? 'usd' ) ) . '" value="' . (float) $abandoned->checkout->total_amount . '"></sc-format-number>';
148 }
149
150 /**
151 * Handle the total column
152 *
153 * @param \SureCart\Models\AbandonedCheckout $abandoned Abandoned checkout model.
154 *
155 * @return string
156 */
157 public function column_date( $abandoned ) {
158 return isset( $abandoned->created_at ) ? '<sc-format-date date="' . (int) $abandoned->created_at . '" type="timestamp" month="short" day="numeric" year="numeric" hour="numeric" minute="numeric"></sc-format-date>' : '--';
159 }
160
161 /**
162 * Handle the notification status
163 *
164 * @param \SureCart\Models\AbandonedCheckout $abandoned Abandoned checkout session.
165 *
166 * @return string
167 */
168 public function column_notification_status( $abandoned ) {
169 if ( $abandoned->recovered_checkout ) {
170 return '--';
171 }
172
173 switch ( $abandoned->notification_status ?? '' ) {
174 case 'scheduled':
175 return '<sc-tag type="info">' . __( 'Scheduled', 'surecart' ) . '</sc-tag>';
176 case 'not_scheduled':
177 return '<sc-tag type="warning">' . __( 'Not Scheduled', 'surecart' ) . '</sc-tag>';
178 case 'sent':
179 return '<sc-tag type="success">' . __( 'Email Sent', 'surecart' ) . '</sc-tag>';
180 }
181 return '<sc-tag>' . esc_html( $abandoned->notification_status ?? 'Unknown' ) . '</sc-tag>';
182 }
183
184 /**
185 * Handle the recovery status
186 *
187 * @param \SureCart\Models\AbandonedCheckout $abandoned Abandoned checkout session.
188 *
189 * @return string
190 */
191 public function column_recovery_status( $abandoned ) {
192 switch ( $abandoned->recovery_status ) {
193 case 'abandoned':
194 return '<sc-tag type="warning">' . __( 'Abandoned', 'surecart' ) . '</sc-tag>';
195 case 'assisted_recovered':
196 return '<sc-tag type="success">' . __( 'Recovered', 'surecart' ) . '</sc-tag>';
197 case 'unassisted_recovered':
198 return '<sc-tag type="info">' . __( 'Recovered Before Email Was Sent', 'surecart' ) . '</sc-tag>';
199 }
200 return '<sc-tag type="success">' . $abandoned->recovery_status . '</sc-tag>';
201 }
202
203 /**
204 * Email of customer
205 *
206 * @param \SureCart\Models\AbandonedCheckout $abandoned Abandoned checkout model.
207 *
208 * @return string
209 */
210 public function column_placed_by( $abandoned ) {
211 ob_start();
212 ?>
213 <a class="row-title" aria-label="<?php echo esc_attr__( 'Edit Order', 'surecart' ); ?>" href="<?php echo esc_url( \SureCart::getUrl()->edit( 'abandoned-checkout', $abandoned->id ) ); ?>">
214 <?php
215 // translators: Customer name.
216 echo sprintf( esc_html__( 'By %s', 'surecart' ), esc_html( $abandoned->customer->name ?? $abandoned->customer->email ) );
217 ?>
218 </a>
219 <br />
220 <a aria-label="<?php echo esc_attr__( 'View Checkout', 'surecart' ); ?>" href="<?php echo esc_url( \SureCart::getUrl()->edit( 'abandoned-checkout', $abandoned->id ) ); ?>">
221 <?php echo esc_attr__( 'View Checkout', 'surecart' ); ?>
222 </a>
223 <?php
224
225 return ob_get_clean();
226 }
227 }
228