PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 1.4.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v1.4.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 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Controllers / Admin / Abandoned / AbandonedCheckoutListTable.php
surecart / app / src / Controllers / Admin / Abandoned Last commit date
AbandonedCheckoutListTable.php 3 years ago AbandonedCheckoutScriptsController.php 3 years ago AbandonedCheckoutStatsScriptsController.php 3 years ago AbandonedCheckoutViewController.php 3 years ago
AbandonedCheckoutListTable.php
224 lines
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 if ( $abandoned->recovered_checkout ) {
193 return '<sc-tag type="success">' . __( 'Recovered', 'surecart' ) . '</sc-tag>';
194 } else {
195 return '<sc-tag type="warning">' . __( 'Abandoned', 'surecart' ) . '</sc-tag>';
196 }
197 }
198
199 /**
200 * Email of customer
201 *
202 * @param \SureCart\Models\AbandonedCheckout $abandoned Abandoned checkout model.
203 *
204 * @return string
205 */
206 public function column_placed_by( $abandoned ) {
207 ob_start();
208 ?>
209 <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 ) ); ?>">
210 <?php
211 // translators: Customer name.
212 echo sprintf( esc_html__( 'By %s', 'surecart' ), esc_html( $abandoned->customer->name ?? $abandoned->customer->email ) );
213 ?>
214 </a>
215 <br />
216 <a aria-label="<?php echo esc_attr__( 'View Checkout', 'surecart' ); ?>" href="<?php echo esc_url( \SureCart::getUrl()->edit( 'abandoned-checkout', $abandoned->id ) ); ?>">
217 <?php echo esc_attr__( 'View Checkout', 'surecart' ); ?>
218 </a>
219 <?php
220
221 return ob_get_clean();
222 }
223 }
224